????JFIF??x?x????'403WebShell
403Webshell
Server IP : 79.136.114.73  /  Your IP : 3.138.119.75
Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f
System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64
User : www-data ( 33)
PHP Version : 5.5.9-1ubuntu4.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/appsrv.astacus.se/shellyctr/js/package/dist/docs/assets/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/appsrv.astacus.se/shellyctr/js/package/dist/docs/assets/js/app.7e0dc8c8.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(e){function n(n){for(var a,o,s=n[0],l=n[1],d=n[2],u=0,h=[];u<s.length;u++)o=s[u],Object.prototype.hasOwnProperty.call(i,o)&&i[o]&&h.push(i[o][0]),i[o]=0;for(a in l)Object.prototype.hasOwnProperty.call(l,a)&&(e[a]=l[a]);for(c&&c(n);h.length;)h.shift()();return r.push.apply(r,d||[]),t()}function t(){for(var e,n=0;n<r.length;n++){for(var t=r[n],a=!0,s=1;s<t.length;s++){var l=t[s];0!==i[l]&&(a=!1)}a&&(r.splice(n--,1),e=o(o.s=t[0]))}return e}var a={},i={1:0},r=[];function o(n){if(a[n])return a[n].exports;var t=a[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=[],t=i[e];if(0!==t)if(t)n.push(t[2]);else{var a=new Promise((function(n,a){t=i[e]=[n,a]}));n.push(t[2]=a);var r,s=document.createElement("script");s.charset="utf-8",s.timeout=120,o.nc&&s.setAttribute("nonce",o.nc),s.src=function(e){return o.p+"assets/js/"+({}[e]||e)+"."+{2:"3e2307f3",3:"947b8d98",4:"ee88d25a",5:"00f814ac",6:"2bc86161",7:"74f2ce90",8:"8928eb8b",9:"63ebb16b",10:"edbecfa9",11:"b98e8151",12:"433f0c7e",13:"b6743084",14:"422fec10",15:"09a69fc3",16:"0414f390",17:"8dfcb176",18:"c331029e",19:"13bdd658",20:"5d11c294",21:"7b54d7d8",22:"c2daedd0",23:"2c668e20",24:"af200d5b",25:"4f97f63f",26:"d1bb645c",27:"2d5c4a6b",28:"72dee0f1",29:"8820be26",30:"343676b8",31:"cff089f1",32:"56d8546e",33:"6b642a06",34:"360a9ea9",35:"205d7fac",36:"f2765bae",37:"6c33435e",38:"a778a6a2",39:"7dda160f",40:"bd778eac",41:"b79220f6",42:"c3157beb",43:"097368d1",44:"2515f16e",45:"d5b4b7c3",46:"bbab8d6e",47:"79aa575e",48:"45785af9",49:"0569a6eb",50:"14bd3ba2",51:"e0968711",52:"fe65ddf8",53:"faa1ff3f",54:"fcfed2c5",55:"7db1d28a",56:"8b0e82b7",57:"9de2d983",58:"b0f8ad0c",59:"f1ff4935",60:"ac08de9a",61:"ea4fad75",62:"5c85853b",63:"5ac99656",64:"c6838e95",65:"4c1b089e",66:"379a6b45",67:"15703e17",68:"ffdefd7d",69:"bdeb7b9b",70:"3dadb5ed",71:"2c97fe38",72:"dc778e17",73:"d88fcb57",74:"bba2165e",75:"15562a81",76:"21f5a94e",77:"0725268e",78:"d6f610d1",79:"60d67faa",80:"99d71ee0",81:"f1500469",82:"69f363a6",83:"f1fbcb2c",84:"b76e3156",85:"efc4bd54",86:"85011b24",87:"6a88d571",88:"0f45cfe0",89:"e67ddb59",90:"96ebfa9b",91:"cdde4d3f",92:"dc3f06d2",93:"aaa04d52",94:"2af5650c",95:"1d44ec16",96:"9545127d",97:"8b18f487",98:"cb259cd0",99:"6251650a",100:"f7a12d8b",101:"15c56dbb",102:"33b746ea",103:"850a4486",104:"8b4f368b",105:"1a3d6c41",106:"d8f8b4c1",107:"38cf9b4f",108:"a30da8c9",109:"6d56b7d1",110:"c44e533c",111:"ccb9a835",112:"2d2a2890",113:"5ac0921f",114:"90ef8814",115:"12a72d27",116:"6b780970",117:"79604442",118:"7752bc89",119:"d8e76ef0",120:"ed76595e",121:"cc3d56f2",122:"c8651871",123:"f7d5f223",124:"88ce07a4",125:"a9572036",126:"879447b3",127:"3b8478f3",128:"87d67ad7",129:"f6241700",130:"a9cb856a",131:"45e904c9",132:"abd9e4c2",133:"d5aa1db6",134:"4bfa3b5a",135:"8c7630ad",136:"f813e062",137:"6cab2863",138:"03ec5265",139:"924812c0",140:"a7967a5d",141:"34a018bb",142:"c5bfcdd4",143:"05e388ba",144:"a98bdbcc",145:"826b73e0",146:"001afadf",147:"fcadaef3",148:"604863a4",149:"6509ed9f",150:"fd8575ca",151:"67ecd4a3",152:"481a7bd4",153:"dbf3f3aa",154:"2aa9c67d",155:"e3367ebc",156:"a5bb942d",157:"09caef4e",158:"1f82587f",159:"4cebd9d3",160:"47df8215",161:"fac79692",162:"9f2f870f",163:"4f1604f9",164:"7f8d8643",165:"fe2baa69",166:"c82b3c76",167:"3c3f2ff1",168:"8d2e8e83",169:"b10c84bd",170:"b9db8312",171:"2480fc36",172:"81c5206a",173:"477dcbae",174:"05398ca3",175:"84ab69d0",176:"f48183c3",177:"d0d35403",178:"55d433fd",179:"9442c138",180:"5c15d5d4",181:"911f367b",182:"72f663e8",183:"22b2258c",184:"15b21065",185:"894ea40b",186:"f6394459",187:"7bd9b3fe",188:"3baa9bcd",189:"18e63b11",190:"b7ffb54a",191:"13061aba",192:"1bf9bd61",193:"8fa44455",194:"49c9a3c0",195:"eb1e8802",196:"9b925823",197:"adca6c8c",198:"2ae0961a",199:"cd9dca80",200:"2eb9437f",201:"6dba10c3",202:"9c5057c6",203:"98a3c2b8",204:"50d5cf2e",205:"e56e820b",206:"6ce5c41e",207:"8aa83d91",208:"296ee160",209:"13279349",210:"63e30420",211:"0b325f23",212:"be671e2e",213:"81d2e607",214:"ba403b5c",215:"2efcec5f",216:"e01d3100",217:"906c8d54",218:"94e33827",219:"21c5e01f",220:"3ba160e4",221:"5c17138c",222:"aea004ce",223:"cbb7b883",224:"b130b37f",225:"32f90319",226:"8c102c21",227:"b3d60339",228:"72f0ad18",229:"3daa3b7e",230:"7e5a85b1",231:"b83d12f1",232:"e902f42d",233:"b4f254c0",234:"d975df48",235:"71a7be7d",236:"05d87a5e",237:"d518e28b",238:"eb60e397",239:"81fecfed",240:"c0869bc2",241:"59dc896f",242:"6d423d39",243:"a355eaa8",244:"ad729cf8",245:"c3cd6bbe",246:"d0708528",247:"13d65d78",248:"1d222543",249:"2d7a9bf1",250:"09ef38e2",251:"0cb90e8a",252:"2ff0def4",253:"61c7c505",254:"20137eeb",255:"49c937e9",256:"8d709dae",257:"b3ebdce7",258:"792f66d1",259:"98c809e9",260:"54ff10d2",261:"928afea4"}[e]+".js"}(e);var l=new Error;r=function(n){s.onerror=s.onload=null,clearTimeout(d);var t=i[e];if(0!==t){if(t){var a=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;l.message="Loading chunk "+e+" failed.\n("+a+": "+r+")",l.name="ChunkLoadError",l.type=a,l.request=r,t[1](l)}i[e]=void 0}};var d=setTimeout((function(){r({type:"timeout",target:s})}),12e4);s.onerror=s.onload=r,document.head.appendChild(s)}return Promise.all(n)},o.m=e,o.c=a,o.d=function(e,n,t){o.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,n){if(1&n&&(e=o(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(o.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)o.d(t,a,function(n){return e[n]}.bind(null,a));return t},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="/docs/3.9.1/",o.oe=function(e){throw console.error(e),e};var s=window.webpackJsonp=window.webpackJsonp||[],l=s.push.bind(s);s.push=n,s=s.slice();for(var d=0;d<s.length;d++)n(s[d]);var c=l;r.push([123,0]),t()}([function(e,n,t){"use strict";
/*!
 * Chart.js v3.9.1
 * https://www.chartjs.org
 * (c) 2022 Chart.js Contributors
 * Released under the MIT License
 */
function a(){}t.d(n,"a",(function(){return bn})),t.d(n,"b",(function(){return F})),t.d(n,"c",(function(){return d})),t.d(n,"d",(function(){return p})),t.d(n,"e",(function(){return En})),t.d(n,"f",(function(){return Q})),t.d(n,"g",(function(){return $})),t.d(n,"h",(function(){return un})),t.d(n,"i",(function(){return E})),t.d(n,"j",(function(){return ee})),t.d(n,"k",(function(){return pn})),t.d(n,"l",(function(){return In})),t.d(n,"m",(function(){return vn})),t.d(n,"n",(function(){return Tn})),t.d(n,"o",(function(){return yn})),t.d(n,"p",(function(){return _n})),t.d(n,"q",(function(){return A})),t.d(n,"r",(function(){return f})),t.d(n,"s",(function(){return pe})),t.d(n,"t",(function(){return fe})),t.d(n,"u",(function(){return R})),t.d(n,"v",(function(){return on})),t.d(n,"w",(function(){return y})),t.d(n,"x",(function(){return w})),t.d(n,"y",(function(){return dt})),t.d(n,"z",(function(){return ie})),t.d(n,"A",(function(){return ae})),t.d(n,"B",(function(){return de})),t.d(n,"C",(function(){return Ln})),t.d(n,"D",(function(){return q})),t.d(n,"E",(function(){return ut})),t.d(n,"F",(function(){return it})),t.d(n,"G",(function(){return ft})),t.d(n,"H",(function(){return ue})),t.d(n,"I",(function(){return pt})),t.d(n,"J",(function(){return at})),t.d(n,"K",(function(){return sn})),t.d(n,"L",(function(){return k})),t.d(n,"M",(function(){return Un})),t.d(n,"N",(function(){return xt})),t.d(n,"O",(function(){return Ct})),t.d(n,"P",(function(){return me})),t.d(n,"Q",(function(){return Tt})),t.d(n,"R",(function(){return gn})),t.d(n,"S",(function(){return a})),t.d(n,"T",(function(){return X})),t.d(n,"U",(function(){return W})),t.d(n,"V",(function(){return B})),t.d(n,"W",(function(){return V})),t.d(n,"X",(function(){return H})),t.d(n,"Y",(function(){return G})),t.d(n,"Z",(function(){return hn})),t.d(n,"ab",(function(){return re})),t.d(n,"bb",(function(){return te})),t.d(n,"cb",(function(){return rn})),t.d(n,"db",(function(){return jn})),t.d(n,"eb",(function(){return Nn})),t.d(n,"fb",(function(){return x})),t.d(n,"gb",(function(){return i})),t.d(n,"hb",(function(){return he})),t.d(n,"ib",(function(){return ht})),t.d(n,"jb",(function(){return fn})),t.d(n,"kb",(function(){return S})),t.d(n,"lb",(function(){return m})),t.d(n,"mb",(function(){return P})),t.d(n,"nb",(function(){return ne})),t.d(n,"ob",(function(){return Pn})),t.d(n,"pb",(function(){return tt})),t.d(n,"qb",(function(){return St})),t.d(n,"rb",(function(){return kt})),t.d(n,"sb",(function(){return gt})),t.d(n,"tb",(function(){return bt})),t.d(n,"ub",(function(){return mt})),t.d(n,"vb",(function(){return xn})),t.d(n,"wb",(function(){return Cn})),t.d(n,"xb",(function(){return mn})),t.d(n,"yb",(function(){return wn})),t.d(n,"zb",(function(){return An})),t.d(n,"Ab",(function(){return Rn})),t.d(n,"Bb",(function(){return Ot})),t.d(n,"Cb",(function(){return Z})),t.d(n,"Db",(function(){return o})),t.d(n,"Eb",(function(){return an})),t.d(n,"Fb",(function(){return cn})),t.d(n,"Gb",(function(){return Ce})),t.d(n,"Hb",(function(){return D})),t.d(n,"Ib",(function(){return l})),t.d(n,"Jb",(function(){return Mn})),t.d(n,"Kb",(function(){return s})),t.d(n,"Lb",(function(){return O})),t.d(n,"Mb",(function(){return r})),t.d(n,"Nb",(function(){return se})),t.d(n,"Ob",(function(){return u})),t.d(n,"Pb",(function(){return h})),t.d(n,"Qb",(function(){return yt})),t.d(n,"Rb",(function(){return K})),t.d(n,"Sb",(function(){return ge})),t.d(n,"Tb",(function(){return ce})),t.d(n,"Ub",(function(){return N})),t.d(n,"Vb",(function(){return Y})),t.d(n,"Wb",(function(){return le})),t.d(n,"Xb",(function(){return c})),t.d(n,"Yb",(function(){return be})),t.d(n,"Zb",(function(){return z})),t.d(n,"ac",(function(){return Xn})),t.d(n,"bc",(function(){return U}));const i=function(){let e=0;return function(){return e++}}();function r(e){return null==e}function o(e){if(Array.isArray&&Array.isArray(e))return!0;const n=Object.prototype.toString.call(e);return"[object"===n.slice(0,7)&&"Array]"===n.slice(-6)}function s(e){return null!==e&&"[object Object]"===Object.prototype.toString.call(e)}const l=e=>("number"==typeof e||e instanceof Number)&&isFinite(+e);function d(e,n){return l(e)?e:n}function c(e,n){return void 0===e?n:e}const u=(e,n)=>"string"==typeof e&&e.endsWith("%")?parseFloat(e)/100:e/n,h=(e,n)=>"string"==typeof e&&e.endsWith("%")?parseFloat(e)/100*n:+e;function p(e,n,t){if(e&&"function"==typeof e.call)return e.apply(t,n)}function f(e,n,t,a){let i,r,l;if(o(e))if(r=e.length,a)for(i=r-1;i>=0;i--)n.call(t,e[i],i);else for(i=0;i<r;i++)n.call(t,e[i],i);else if(s(e))for(l=Object.keys(e),r=l.length,i=0;i<r;i++)n.call(t,e[l[i]],l[i])}function m(e,n){let t,a,i,r;if(!e||!n||e.length!==n.length)return!1;for(t=0,a=e.length;t<a;++t)if(i=e[t],r=n[t],i.datasetIndex!==r.datasetIndex||i.index!==r.index)return!1;return!0}function g(e){if(o(e))return e.map(g);if(s(e)){const n=Object.create(null),t=Object.keys(e),a=t.length;let i=0;for(;i<a;++i)n[t[i]]=g(e[t[i]]);return n}return e}function b(e){return-1===["__proto__","prototype","constructor"].indexOf(e)}function v(e,n,t,a){if(!b(e))return;const i=n[e],r=t[e];s(i)&&s(r)?y(i,r,a):n[e]=g(r)}function y(e,n,t){const a=o(n)?n:[n],i=a.length;if(!s(e))return e;const r=(t=t||{}).merger||v;for(let o=0;o<i;++o){if(!s(n=a[o]))continue;const i=Object.keys(n);for(let a=0,o=i.length;a<o;++a)r(i[a],e,n,t)}return e}function x(e,n){return y(e,n,{merger:C})}function C(e,n,t){if(!b(e))return;const a=n[e],i=t[e];s(a)&&s(i)?x(a,i):Object.prototype.hasOwnProperty.call(n,e)||(n[e]=g(i))}const T={"":e=>e,x:e=>e.x,y:e=>e.y};function D(e,n){return(T[n]||(T[n]=function(e){const n=function(e){const n=e.split("."),t=[];let a="";for(const e of n)a+=e,a.endsWith("\\")?a=a.slice(0,-1)+".":(t.push(a),a="");return t}(e);return e=>{for(const t of n){if(""===t)break;e=e&&e[t]}return e}}(n)))(e)}function w(e){return e.charAt(0).toUpperCase()+e.slice(1)}const O=e=>void 0!==e,k=e=>"function"==typeof e,S=(e,n)=>{if(e.size!==n.size)return!1;for(const t of e)if(!n.has(t))return!1;return!0};function P(e){return"mouseup"===e.type||"click"===e.type||"contextmenu"===e.type}const A=Math.PI,R=2*A,I=R+A,_=Number.POSITIVE_INFINITY,L=A/180,E=A/2,M=A/4,j=2*A/3,U=Math.log10,N=Math.sign;function B(e){const n=Math.round(e);e=H(e,n,e/1e3)?n:e;const t=Math.pow(10,Math.floor(U(e))),a=e/t;return(a<=1?1:a<=2?2:a<=5?5:10)*t}function F(e){const n=[],t=Math.sqrt(e);let a;for(a=1;a<t;a++)e%a==0&&(n.push(a),n.push(e/a));return t===(0|t)&&n.push(t),n.sort((e,n)=>e-n).pop(),n}function z(e){return!isNaN(parseFloat(e))&&isFinite(e)}function H(e,n,t){return Math.abs(e-n)<t}function V(e,n){const t=Math.round(e);return t-n<=e&&t+n>=e}function W(e,n,t){let a,i,r;for(a=0,i=e.length;a<i;a++)r=e[a][t],isNaN(r)||(n.min=Math.min(n.min,r),n.max=Math.max(n.max,r))}function Y(e){return e*(A/180)}function $(e){return e*(180/A)}function G(e){if(!l(e))return;let n=1,t=0;for(;Math.round(e*n)/n!==e;)n*=10,t++;return t}function q(e,n){const t=n.x-e.x,a=n.y-e.y,i=Math.sqrt(t*t+a*a);let r=Math.atan2(a,t);return r<-.5*A&&(r+=R),{angle:r,distance:i}}function X(e,n){return Math.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2))}function J(e,n){return(e-n+I)%R-A}function Z(e){return(e%R+R)%R}function K(e,n,t,a){const i=Z(e),r=Z(n),o=Z(t),s=Z(r-i),l=Z(o-i),d=Z(i-r),c=Z(i-o);return i===r||i===o||a&&r===o||s>l&&d<c}function Q(e,n,t){return Math.max(n,Math.min(t,e))}function ee(e){return Q(e,-32768,32767)}function ne(e,n,t,a=1e-6){return e>=Math.min(n,t)-a&&e<=Math.max(n,t)+a}function te(e,n,t){t=t||(t=>e[t]<n);let a,i=e.length-1,r=0;for(;i-r>1;)a=r+i>>1,t(a)?r=a:i=a;return{lo:r,hi:i}}const ae=(e,n,t,a)=>te(e,t,a?a=>e[a][n]<=t:a=>e[a][n]<t),ie=(e,n,t)=>te(e,t,a=>e[a][n]>=t);function re(e,n,t){let a=0,i=e.length;for(;a<i&&e[a]<n;)a++;for(;i>a&&e[i-1]>t;)i--;return a>0||i<e.length?e.slice(a,i):e}const oe=["push","pop","shift","splice","unshift"];function se(e,n){e._chartjs?e._chartjs.listeners.push(n):(Object.defineProperty(e,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[n]}}),oe.forEach(n=>{const t="_onData"+w(n),a=e[n];Object.defineProperty(e,n,{configurable:!0,enumerable:!1,value(...n){const i=a.apply(this,n);return e._chartjs.listeners.forEach(e=>{"function"==typeof e[t]&&e[t](...n)}),i}})}))}function le(e,n){const t=e._chartjs;if(!t)return;const a=t.listeners,i=a.indexOf(n);-1!==i&&a.splice(i,1),a.length>0||(oe.forEach(n=>{delete e[n]}),delete e._chartjs)}function de(e){const n=new Set;let t,a;for(t=0,a=e.length;t<a;++t)n.add(e[t]);return n.size===a?e:Array.from(n)}const ce="undefined"==typeof window?function(e){return e()}:window.requestAnimationFrame;function ue(e,n,t){const a=t||(e=>Array.prototype.slice.call(e));let i=!1,r=[];return function(...t){r=a(t),i||(i=!0,ce.call(window,()=>{i=!1,e.apply(n,r)}))}}function he(e,n){let t;return function(...a){return n?(clearTimeout(t),t=setTimeout(e,n,a)):e.apply(this,a),n}}const pe=e=>"start"===e?"left":"end"===e?"right":"center",fe=(e,n,t)=>"start"===e?n:"end"===e?t:(n+t)/2,me=(e,n,t,a)=>e===(a?"left":"right")?t:"center"===e?(n+t)/2:n;function ge(e,n,t){const a=n.length;let i=0,r=a;if(e._sorted){const{iScale:o,_parsed:s}=e,l=o.axis,{min:d,max:c,minDefined:u,maxDefined:h}=o.getUserBounds();u&&(i=Q(Math.min(ae(s,o.axis,d).lo,t?a:ae(n,l,o.getPixelForValue(d)).lo),0,a-1)),r=h?Q(Math.max(ae(s,o.axis,c,!0).hi+1,t?0:ae(n,l,o.getPixelForValue(c),!0).hi+1),i,a)-i:a-i}return{start:i,count:r}}function be(e){const{xScale:n,yScale:t,_scaleRanges:a}=e,i={xmin:n.min,xmax:n.max,ymin:t.min,ymax:t.max};if(!a)return e._scaleRanges=i,!0;const r=a.xmin!==n.min||a.xmax!==n.max||a.ymin!==t.min||a.ymax!==t.max;return Object.assign(a,i),r}const ve=e=>0===e||1===e,ye=(e,n,t)=>-Math.pow(2,10*(e-=1))*Math.sin((e-n)*R/t),xe=(e,n,t)=>Math.pow(2,-10*e)*Math.sin((e-n)*R/t)+1,Ce={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>-e*(e-2),easeInOutQuad:e=>(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1),easeInCubic:e=>e*e*e,easeOutCubic:e=>(e-=1)*e*e+1,easeInOutCubic:e=>(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2),easeInQuart:e=>e*e*e*e,easeOutQuart:e=>-((e-=1)*e*e*e-1),easeInOutQuart:e=>(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2),easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>(e-=1)*e*e*e*e+1,easeInOutQuint:e=>(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2),easeInSine:e=>1-Math.cos(e*E),easeOutSine:e=>Math.sin(e*E),easeInOutSine:e=>-.5*(Math.cos(A*e)-1),easeInExpo:e=>0===e?0:Math.pow(2,10*(e-1)),easeOutExpo:e=>1===e?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>ve(e)?e:e<.5?.5*Math.pow(2,10*(2*e-1)):.5*(2-Math.pow(2,-10*(2*e-1))),easeInCirc:e=>e>=1?e:-(Math.sqrt(1-e*e)-1),easeOutCirc:e=>Math.sqrt(1-(e-=1)*e),easeInOutCirc:e=>(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1),easeInElastic:e=>ve(e)?e:ye(e,.075,.3),easeOutElastic:e=>ve(e)?e:xe(e,.075,.3),easeInOutElastic(e){const n=.1125;return ve(e)?e:e<.5?.5*ye(2*e,n,.45):.5+.5*xe(2*e-1,n,.45)},easeInBack(e){const n=1.70158;return e*e*((n+1)*e-n)},easeOutBack(e){const n=1.70158;return(e-=1)*e*((n+1)*e+n)+1},easeInOutBack(e){let n=1.70158;return(e/=.5)<1?e*e*((1+(n*=1.525))*e-n)*.5:.5*((e-=2)*e*((1+(n*=1.525))*e+n)+2)},easeInBounce:e=>1-Ce.easeOutBounce(1-e),easeOutBounce(e){const n=7.5625,t=2.75;return e<1/t?n*e*e:e<2/t?n*(e-=1.5/t)*e+.75:e<2.5/t?n*(e-=2.25/t)*e+.9375:n*(e-=2.625/t)*e+.984375},easeInOutBounce:e=>e<.5?.5*Ce.easeInBounce(2*e):.5*Ce.easeOutBounce(2*e-1)+.5};
/*!
 * @kurkle/color v0.2.1
 * https://github.com/kurkle/color#readme
 * (c) 2022 Jukka Kurkela
 * Released under the MIT License
 */
function Te(e){return e+.5|0}const De=(e,n,t)=>Math.max(Math.min(e,t),n);function we(e){return De(Te(2.55*e),0,255)}function Oe(e){return De(Te(255*e),0,255)}function ke(e){return De(Te(e/2.55)/100,0,1)}function Se(e){return De(Te(100*e),0,100)}const Pe={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Ae=[..."0123456789ABCDEF"],Re=e=>Ae[15&e],Ie=e=>Ae[(240&e)>>4]+Ae[15&e],_e=e=>(240&e)>>4==(15&e);function Le(e){var n=(e=>_e(e.r)&&_e(e.g)&&_e(e.b)&&_e(e.a))(e)?Re:Ie;return e?"#"+n(e.r)+n(e.g)+n(e.b)+((e,n)=>e<255?n(e):"")(e.a,n):void 0}const Ee=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Me(e,n,t){const a=n*Math.min(t,1-t),i=(n,i=(n+e/30)%12)=>t-a*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function je(e,n,t){const a=(a,i=(a+e/60)%6)=>t-t*n*Math.max(Math.min(i,4-i,1),0);return[a(5),a(3),a(1)]}function Ue(e,n,t){const a=Me(e,1,.5);let i;for(n+t>1&&(i=1/(n+t),n*=i,t*=i),i=0;i<3;i++)a[i]*=1-n-t,a[i]+=n;return a}function Ne(e){const n=e.r/255,t=e.g/255,a=e.b/255,i=Math.max(n,t,a),r=Math.min(n,t,a),o=(i+r)/2;let s,l,d;return i!==r&&(d=i-r,l=o>.5?d/(2-i-r):d/(i+r),s=function(e,n,t,a,i){return e===i?(n-t)/a+(n<t?6:0):n===i?(t-e)/a+2:(e-n)/a+4}(n,t,a,d,i),s=60*s+.5),[0|s,l||0,o]}function Be(e,n,t,a){return(Array.isArray(n)?e(n[0],n[1],n[2]):e(n,t,a)).map(Oe)}function Fe(e,n,t){return Be(Me,e,n,t)}function ze(e){return(e%360+360)%360}function He(e){const n=Ee.exec(e);let t,a=255;if(!n)return;n[5]!==t&&(a=n[6]?we(+n[5]):Oe(+n[5]));const i=ze(+n[2]),r=+n[3]/100,o=+n[4]/100;return t="hwb"===n[1]?function(e,n,t){return Be(Ue,e,n,t)}(i,r,o):"hsv"===n[1]?function(e,n,t){return Be(je,e,n,t)}(i,r,o):Fe(i,r,o),{r:t[0],g:t[1],b:t[2],a:a}}const Ve={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},We={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Ye;function $e(e){Ye||(Ye=function(){const e={},n=Object.keys(We),t=Object.keys(Ve);let a,i,r,o,s;for(a=0;a<n.length;a++){for(o=s=n[a],i=0;i<t.length;i++)r=t[i],s=s.replace(r,Ve[r]);r=parseInt(We[o],16),e[s]=[r>>16&255,r>>8&255,255&r]}return e}(),Ye.transparent=[0,0,0,0]);const n=Ye[e.toLowerCase()];return n&&{r:n[0],g:n[1],b:n[2],a:4===n.length?n[3]:255}}const Ge=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const qe=e=>e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,Xe=e=>e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4);function Je(e,n,t){if(e){let a=Ne(e);a[n]=Math.max(0,Math.min(a[n]+a[n]*t,0===n?360:1)),a=Fe(a),e.r=a[0],e.g=a[1],e.b=a[2]}}function Ze(e,n){return e?Object.assign(n||{},e):e}function Ke(e){var n={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(n={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(n.a=Oe(e[3]))):(n=Ze(e,{r:0,g:0,b:0,a:1})).a=Oe(n.a),n}function Qe(e){return"r"===e.charAt(0)?function(e){const n=Ge.exec(e);let t,a,i,r=255;if(n){if(n[7]!==t){const e=+n[7];r=n[8]?we(e):De(255*e,0,255)}return t=+n[1],a=+n[3],i=+n[5],t=255&(n[2]?we(t):De(t,0,255)),a=255&(n[4]?we(a):De(a,0,255)),i=255&(n[6]?we(i):De(i,0,255)),{r:t,g:a,b:i,a:r}}}(e):He(e)}class en{constructor(e){if(e instanceof en)return e;const n=typeof e;let t;var a,i,r;"object"===n?t=Ke(e):"string"===n&&(r=(a=e).length,"#"===a[0]&&(4===r||5===r?i={r:255&17*Pe[a[1]],g:255&17*Pe[a[2]],b:255&17*Pe[a[3]],a:5===r?17*Pe[a[4]]:255}:7!==r&&9!==r||(i={r:Pe[a[1]]<<4|Pe[a[2]],g:Pe[a[3]]<<4|Pe[a[4]],b:Pe[a[5]]<<4|Pe[a[6]],a:9===r?Pe[a[7]]<<4|Pe[a[8]]:255})),t=i||$e(e)||Qe(e)),this._rgb=t,this._valid=!!t}get valid(){return this._valid}get rgb(){var e=Ze(this._rgb);return e&&(e.a=ke(e.a)),e}set rgb(e){this._rgb=Ke(e)}rgbString(){return this._valid?(e=this._rgb)&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${ke(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`):void 0;var e}hexString(){return this._valid?Le(this._rgb):void 0}hslString(){return this._valid?function(e){if(!e)return;const n=Ne(e),t=n[0],a=Se(n[1]),i=Se(n[2]);return e.a<255?`hsla(${t}, ${a}%, ${i}%, ${ke(e.a)})`:`hsl(${t}, ${a}%, ${i}%)`}(this._rgb):void 0}mix(e,n){if(e){const t=this.rgb,a=e.rgb;let i;const r=n===i?.5:n,o=2*r-1,s=t.a-a.a,l=((o*s==-1?o:(o+s)/(1+o*s))+1)/2;i=1-l,t.r=255&l*t.r+i*a.r+.5,t.g=255&l*t.g+i*a.g+.5,t.b=255&l*t.b+i*a.b+.5,t.a=r*t.a+(1-r)*a.a,this.rgb=t}return this}interpolate(e,n){return e&&(this._rgb=function(e,n,t){const a=Xe(ke(e.r)),i=Xe(ke(e.g)),r=Xe(ke(e.b));return{r:Oe(qe(a+t*(Xe(ke(n.r))-a))),g:Oe(qe(i+t*(Xe(ke(n.g))-i))),b:Oe(qe(r+t*(Xe(ke(n.b))-r))),a:e.a+t*(n.a-e.a)}}(this._rgb,e._rgb,n)),this}clone(){return new en(this.rgb)}alpha(e){return this._rgb.a=Oe(e),this}clearer(e){return this._rgb.a*=1-e,this}greyscale(){const e=this._rgb,n=Te(.3*e.r+.59*e.g+.11*e.b);return e.r=e.g=e.b=n,this}opaquer(e){return this._rgb.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Je(this._rgb,2,e),this}darken(e){return Je(this._rgb,2,-e),this}saturate(e){return Je(this._rgb,1,e),this}desaturate(e){return Je(this._rgb,1,-e),this}rotate(e){return function(e,n){var t=Ne(e);t[0]=ze(t[0]+n),t=Fe(t),e.r=t[0],e.g=t[1],e.b=t[2]}(this._rgb,e),this}}function nn(e){return new en(e)}function tn(e){if(e&&"object"==typeof e){const n=e.toString();return"[object CanvasPattern]"===n||"[object CanvasGradient]"===n}return!1}function an(e){return tn(e)?e:nn(e)}function rn(e){return tn(e)?e:nn(e).saturate(.5).darken(.1).hexString()}const on=Object.create(null),sn=Object.create(null);function ln(e,n){if(!n)return e;const t=n.split(".");for(let n=0,a=t.length;n<a;++n){const a=t[n];e=e[a]||(e[a]=Object.create(null))}return e}function dn(e,n,t){return"string"==typeof n?y(ln(e,n),t):y(ln(e,""),n)}var cn=new class{constructor(e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=e=>e.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(e,n)=>rn(n.backgroundColor),this.hoverBorderColor=(e,n)=>rn(n.borderColor),this.hoverColor=(e,n)=>rn(n.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(e)}set(e,n){return dn(this,e,n)}get(e){return ln(this,e)}describe(e,n){return dn(sn,e,n)}override(e,n){return dn(on,e,n)}route(e,n,t,a){const i=ln(this,e),r=ln(this,t),o="_"+n;Object.defineProperties(i,{[o]:{value:i[n],writable:!0},[n]:{enumerable:!0,get(){const e=this[o],n=r[a];return s(e)?Object.assign({},n,e):c(e,n)},set(e){this[o]=e}}})}}({_scriptable:e=>!e.startsWith("on"),_indexable:e=>"events"!==e,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function un(e,n,t,a,i){let r=n[i];return r||(r=n[i]=e.measureText(i).width,t.push(i)),r>a&&(a=r),a}function hn(e,n,t,a){let i=(a=a||{}).data=a.data||{},r=a.garbageCollect=a.garbageCollect||[];a.font!==n&&(i=a.data={},r=a.garbageCollect=[],a.font=n),e.save(),e.font=n;let s=0;const l=t.length;let d,c,u,h,p;for(d=0;d<l;d++)if(h=t[d],null!=h&&!0!==o(h))s=un(e,i,r,s,h);else if(o(h))for(c=0,u=h.length;c<u;c++)p=h[c],null==p||o(p)||(s=un(e,i,r,s,p));e.restore();const f=r.length/2;if(f>t.length){for(d=0;d<f;d++)delete i[r[d]];r.splice(0,f)}return s}function pn(e,n,t){const a=e.currentDevicePixelRatio,i=0!==t?Math.max(t/2,.5):0;return Math.round((n-i)*a)/a+i}function fn(e,n){(n=n||e.getContext("2d")).save(),n.resetTransform(),n.clearRect(0,0,e.width,e.height),n.restore()}function mn(e,n,t,a){gn(e,n,t,a,null)}function gn(e,n,t,a,i){let r,o,s,l,d,c;const u=n.pointStyle,h=n.rotation,p=n.radius;let f=(h||0)*L;if(u&&"object"==typeof u&&(r=u.toString(),"[object HTMLImageElement]"===r||"[object HTMLCanvasElement]"===r))return e.save(),e.translate(t,a),e.rotate(f),e.drawImage(u,-u.width/2,-u.height/2,u.width,u.height),void e.restore();if(!(isNaN(p)||p<=0)){switch(e.beginPath(),u){default:i?e.ellipse(t,a,i/2,p,0,0,R):e.arc(t,a,p,0,R),e.closePath();break;case"triangle":e.moveTo(t+Math.sin(f)*p,a-Math.cos(f)*p),f+=j,e.lineTo(t+Math.sin(f)*p,a-Math.cos(f)*p),f+=j,e.lineTo(t+Math.sin(f)*p,a-Math.cos(f)*p),e.closePath();break;case"rectRounded":d=.516*p,l=p-d,o=Math.cos(f+M)*l,s=Math.sin(f+M)*l,e.arc(t-o,a-s,d,f-A,f-E),e.arc(t+s,a-o,d,f-E,f),e.arc(t+o,a+s,d,f,f+E),e.arc(t-s,a+o,d,f+E,f+A),e.closePath();break;case"rect":if(!h){l=Math.SQRT1_2*p,c=i?i/2:l,e.rect(t-c,a-l,2*c,2*l);break}f+=M;case"rectRot":o=Math.cos(f)*p,s=Math.sin(f)*p,e.moveTo(t-o,a-s),e.lineTo(t+s,a-o),e.lineTo(t+o,a+s),e.lineTo(t-s,a+o),e.closePath();break;case"crossRot":f+=M;case"cross":o=Math.cos(f)*p,s=Math.sin(f)*p,e.moveTo(t-o,a-s),e.lineTo(t+o,a+s),e.moveTo(t+s,a-o),e.lineTo(t-s,a+o);break;case"star":o=Math.cos(f)*p,s=Math.sin(f)*p,e.moveTo(t-o,a-s),e.lineTo(t+o,a+s),e.moveTo(t+s,a-o),e.lineTo(t-s,a+o),f+=M,o=Math.cos(f)*p,s=Math.sin(f)*p,e.moveTo(t-o,a-s),e.lineTo(t+o,a+s),e.moveTo(t+s,a-o),e.lineTo(t-s,a+o);break;case"line":o=i?i/2:Math.cos(f)*p,s=Math.sin(f)*p,e.moveTo(t-o,a-s),e.lineTo(t+o,a+s);break;case"dash":e.moveTo(t,a),e.lineTo(t+Math.cos(f)*p,a+Math.sin(f)*p)}e.fill(),n.borderWidth>0&&e.stroke()}}function bn(e,n,t){return t=t||.5,!n||e&&e.x>n.left-t&&e.x<n.right+t&&e.y>n.top-t&&e.y<n.bottom+t}function vn(e,n){e.save(),e.beginPath(),e.rect(n.left,n.top,n.right-n.left,n.bottom-n.top),e.clip()}function yn(e){e.restore()}function xn(e,n,t,a,i){if(!n)return e.lineTo(t.x,t.y);if("middle"===i){const a=(n.x+t.x)/2;e.lineTo(a,n.y),e.lineTo(a,t.y)}else"after"===i!=!!a?e.lineTo(n.x,t.y):e.lineTo(t.x,n.y);e.lineTo(t.x,t.y)}function Cn(e,n,t,a){if(!n)return e.lineTo(t.x,t.y);e.bezierCurveTo(a?n.cp1x:n.cp2x,a?n.cp1y:n.cp2y,a?t.cp2x:t.cp1x,a?t.cp2y:t.cp1y,t.x,t.y)}function Tn(e,n,t,a,i,s={}){const l=o(n)?n:[n],d=s.strokeWidth>0&&""!==s.strokeColor;let c,u;for(e.save(),e.font=i.string,function(e,n){n.translation&&e.translate(n.translation[0],n.translation[1]);r(n.rotation)||e.rotate(n.rotation);n.color&&(e.fillStyle=n.color);n.textAlign&&(e.textAlign=n.textAlign);n.textBaseline&&(e.textBaseline=n.textBaseline)}(e,s),c=0;c<l.length;++c)u=l[c],d&&(s.strokeColor&&(e.strokeStyle=s.strokeColor),r(s.strokeWidth)||(e.lineWidth=s.strokeWidth),e.strokeText(u,t,a,s.maxWidth)),e.fillText(u,t,a,s.maxWidth),Dn(e,t,a,u,s),a+=i.lineHeight;e.restore()}function Dn(e,n,t,a,i){if(i.strikethrough||i.underline){const r=e.measureText(a),o=n-r.actualBoundingBoxLeft,s=n+r.actualBoundingBoxRight,l=t-r.actualBoundingBoxAscent,d=t+r.actualBoundingBoxDescent,c=i.strikethrough?(l+d)/2:d;e.strokeStyle=e.fillStyle,e.beginPath(),e.lineWidth=i.decorationWidth||2,e.moveTo(o,c),e.lineTo(s,c),e.stroke()}}function wn(e,n){const{x:t,y:a,w:i,h:r,radius:o}=n;e.arc(t+o.topLeft,a+o.topLeft,o.topLeft,-E,A,!0),e.lineTo(t,a+r-o.bottomLeft),e.arc(t+o.bottomLeft,a+r-o.bottomLeft,o.bottomLeft,A,E,!0),e.lineTo(t+i-o.bottomRight,a+r),e.arc(t+i-o.bottomRight,a+r-o.bottomRight,o.bottomRight,E,0,!0),e.lineTo(t+i,a+o.topRight),e.arc(t+i-o.topRight,a+o.topRight,o.topRight,0,-E,!0),e.lineTo(t+o.topLeft,a)}const On=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),kn=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function Sn(e,n){const t=(""+e).match(On);if(!t||"normal"===t[1])return 1.2*n;switch(e=+t[2],t[3]){case"px":return e;case"%":e/=100}return n*e}function Pn(e,n){const t={},a=s(n),i=a?Object.keys(n):n,r=s(e)?a?t=>c(e[t],e[n[t]]):n=>e[n]:()=>e;for(const e of i)t[e]=+r(e)||0;return t}function An(e){return Pn(e,{top:"y",right:"x",bottom:"y",left:"x"})}function Rn(e){return Pn(e,["topLeft","topRight","bottomLeft","bottomRight"])}function In(e){const n=An(e);return n.width=n.left+n.right,n.height=n.top+n.bottom,n}function _n(e,n){e=e||{},n=n||cn.font;let t=c(e.size,n.size);"string"==typeof t&&(t=parseInt(t,10));let a=c(e.style,n.style);a&&!(""+a).match(kn)&&(console.warn('Invalid font style specified: "'+a+'"'),a="");const i={family:c(e.family,n.family),lineHeight:Sn(c(e.lineHeight,n.lineHeight),t),size:t,style:a,weight:c(e.weight,n.weight),string:""};return i.string=function(e){return!e||r(e.size)||r(e.family)?null:(e.style?e.style+" ":"")+(e.weight?e.weight+" ":"")+e.size+"px "+e.family}(i),i}function Ln(e,n,t,a){let i,r,s,l=!0;for(i=0,r=e.length;i<r;++i)if(s=e[i],void 0!==s&&(void 0!==n&&"function"==typeof s&&(s=s(n),l=!1),void 0!==t&&o(s)&&(s=s[t%s.length],l=!1),void 0!==s))return a&&!l&&(a.cacheable=!1),s}function En(e,n,t){const{min:a,max:i}=e,r=h(n,(i-a)/2),o=(e,n)=>t&&0===e?0:e+n;return{min:o(a,-Math.abs(r)),max:o(i,r)}}function Mn(e,n){return Object.assign(Object.create(e),n)}function jn(e,n=[""],t=e,a,i=(()=>e[0])){O(a)||(a=Gn("_fallback",e));const r={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:e,_rootScopes:t,_fallback:a,_getTarget:i,override:i=>jn([i,...e],n,t,a)};return new Proxy(r,{deleteProperty:(n,t)=>(delete n[t],delete n._keys,delete e[0][t],!0),get:(t,a)=>zn(t,a,()=>function(e,n,t,a){let i;for(const r of n)if(i=Gn(Bn(r,e),t),O(i))return Fn(e,i)?Yn(t,a,e,i):i}(a,n,e,t)),getOwnPropertyDescriptor:(e,n)=>Reflect.getOwnPropertyDescriptor(e._scopes[0],n),getPrototypeOf:()=>Reflect.getPrototypeOf(e[0]),has:(e,n)=>qn(e).includes(n),ownKeys:e=>qn(e),set(e,n,t){const a=e._storage||(e._storage=i());return e[n]=a[n]=t,delete e._keys,!0}})}function Un(e,n,t,a){const i={_cacheable:!1,_proxy:e,_context:n,_subProxy:t,_stack:new Set,_descriptors:Nn(e,a),setContext:n=>Un(e,n,t,a),override:i=>Un(e.override(i),n,t,a)};return new Proxy(i,{deleteProperty:(n,t)=>(delete n[t],delete e[t],!0),get:(e,n,t)=>zn(e,n,()=>function(e,n,t){const{_proxy:a,_context:i,_subProxy:r,_descriptors:l}=e;let d=a[n];k(d)&&l.isScriptable(n)&&(d=function(e,n,t,a){const{_proxy:i,_context:r,_subProxy:o,_stack:s}=t;if(s.has(e))throw new Error("Recursion detected: "+Array.from(s).join("->")+"->"+e);s.add(e),n=n(r,o||a),s.delete(e),Fn(e,n)&&(n=Yn(i._scopes,i,e,n));return n}(n,d,e,t));o(d)&&d.length&&(d=function(e,n,t,a){const{_proxy:i,_context:r,_subProxy:o,_descriptors:l}=t;if(O(r.index)&&a(e))n=n[r.index%n.length];else if(s(n[0])){const t=n,a=i._scopes.filter(e=>e!==t);n=[];for(const s of t){const t=Yn(a,i,e,s);n.push(Un(t,r,o&&o[e],l))}}return n}(n,d,e,l.isIndexable));Fn(n,d)&&(d=Un(d,i,r&&r[n],l));return d}(e,n,t)),getOwnPropertyDescriptor:(n,t)=>n._descriptors.allKeys?Reflect.has(e,t)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,t),getPrototypeOf:()=>Reflect.getPrototypeOf(e),has:(n,t)=>Reflect.has(e,t),ownKeys:()=>Reflect.ownKeys(e),set:(n,t,a)=>(e[t]=a,delete n[t],!0)})}function Nn(e,n={scriptable:!0,indexable:!0}){const{_scriptable:t=n.scriptable,_indexable:a=n.indexable,_allKeys:i=n.allKeys}=e;return{allKeys:i,scriptable:t,indexable:a,isScriptable:k(t)?t:()=>t,isIndexable:k(a)?a:()=>a}}const Bn=(e,n)=>e?e+w(n):n,Fn=(e,n)=>s(n)&&"adapters"!==e&&(null===Object.getPrototypeOf(n)||n.constructor===Object);function zn(e,n,t){if(Object.prototype.hasOwnProperty.call(e,n))return e[n];const a=t();return e[n]=a,a}function Hn(e,n,t){return k(e)?e(n,t):e}const Vn=(e,n)=>!0===e?n:"string"==typeof e?D(n,e):void 0;function Wn(e,n,t,a,i){for(const r of n){const n=Vn(t,r);if(n){e.add(n);const r=Hn(n._fallback,t,i);if(O(r)&&r!==t&&r!==a)return r}else if(!1===n&&O(a)&&t!==a)return null}return!1}function Yn(e,n,t,a){const i=n._rootScopes,r=Hn(n._fallback,t,a),l=[...e,...i],d=new Set;d.add(a);let c=$n(d,l,t,r||t,a);return null!==c&&((!O(r)||r===t||(c=$n(d,l,r,c,a),null!==c))&&jn(Array.from(d),[""],i,r,()=>function(e,n,t){const a=e._getTarget();n in a||(a[n]={});const i=a[n];if(o(i)&&s(t))return t;return i}(n,t,a)))}function $n(e,n,t,a,i){for(;t;)t=Wn(e,n,t,a,i);return t}function Gn(e,n){for(const t of n){if(!t)continue;const n=t[e];if(O(n))return n}}function qn(e){let n=e._keys;return n||(n=e._keys=function(e){const n=new Set;for(const t of e)for(const e of Object.keys(t).filter(e=>!e.startsWith("_")))n.add(e);return Array.from(n)}(e._scopes)),n}function Xn(e,n,t,a){const{iScale:i}=e,{key:r="r"}=this._parsing,o=new Array(a);let s,l,d,c;for(s=0,l=a;s<l;++s)d=s+t,c=n[d],o[s]={r:i.parse(D(c,r),d)};return o}const Jn=Number.EPSILON||1e-14,Zn=(e,n)=>n<e.length&&!e[n].skip&&e[n],Kn=e=>"x"===e?"y":"x";function Qn(e,n,t,a){const i=e.skip?n:e,r=n,o=t.skip?n:t,s=X(r,i),l=X(o,r);let d=s/(s+l),c=l/(s+l);d=isNaN(d)?0:d,c=isNaN(c)?0:c;const u=a*d,h=a*c;return{previous:{x:r.x-u*(o.x-i.x),y:r.y-u*(o.y-i.y)},next:{x:r.x+h*(o.x-i.x),y:r.y+h*(o.y-i.y)}}}function et(e,n="x"){const t=Kn(n),a=e.length,i=Array(a).fill(0),r=Array(a);let o,s,l,d=Zn(e,0);for(o=0;o<a;++o)if(s=l,l=d,d=Zn(e,o+1),l){if(d){const e=d[n]-l[n];i[o]=0!==e?(d[t]-l[t])/e:0}r[o]=s?d?N(i[o-1])!==N(i[o])?0:(i[o-1]+i[o])/2:i[o-1]:i[o]}!function(e,n,t){const a=e.length;let i,r,o,s,l,d=Zn(e,0);for(let c=0;c<a-1;++c)l=d,d=Zn(e,c+1),l&&d&&(H(n[c],0,Jn)?t[c]=t[c+1]=0:(i=t[c]/n[c],r=t[c+1]/n[c],s=Math.pow(i,2)+Math.pow(r,2),s<=9||(o=3/Math.sqrt(s),t[c]=i*o*n[c],t[c+1]=r*o*n[c])))}(e,i,r),function(e,n,t="x"){const a=Kn(t),i=e.length;let r,o,s,l=Zn(e,0);for(let d=0;d<i;++d){if(o=s,s=l,l=Zn(e,d+1),!s)continue;const i=s[t],c=s[a];o&&(r=(i-o[t])/3,s["cp1"+t]=i-r,s["cp1"+a]=c-r*n[d]),l&&(r=(l[t]-i)/3,s["cp2"+t]=i+r,s["cp2"+a]=c+r*n[d])}}(e,r,n)}function nt(e,n,t){return Math.max(Math.min(e,t),n)}function tt(e,n,t,a,i){let r,o,s,l;if(n.spanGaps&&(e=e.filter(e=>!e.skip)),"monotone"===n.cubicInterpolationMode)et(e,i);else{let t=a?e[e.length-1]:e[0];for(r=0,o=e.length;r<o;++r)s=e[r],l=Qn(t,s,e[Math.min(r+1,o-(a?0:1))%o],n.tension),s.cp1x=l.previous.x,s.cp1y=l.previous.y,s.cp2x=l.next.x,s.cp2y=l.next.y,t=s}n.capBezierPoints&&function(e,n){let t,a,i,r,o,s=bn(e[0],n);for(t=0,a=e.length;t<a;++t)o=r,r=s,s=t<a-1&&bn(e[t+1],n),r&&(i=e[t],o&&(i.cp1x=nt(i.cp1x,n.left,n.right),i.cp1y=nt(i.cp1y,n.top,n.bottom)),s&&(i.cp2x=nt(i.cp2x,n.left,n.right),i.cp2y=nt(i.cp2y,n.top,n.bottom)))}(e,t)}function at(){return"undefined"!=typeof window&&"undefined"!=typeof document}function it(e){let n=e.parentNode;return n&&"[object ShadowRoot]"===n.toString()&&(n=n.host),n}function rt(e,n,t){let a;return"string"==typeof e?(a=parseInt(e,10),-1!==e.indexOf("%")&&(a=a/100*n.parentNode[t])):a=e,a}const ot=e=>window.getComputedStyle(e,null);const st=["top","right","bottom","left"];function lt(e,n,t){const a={};t=t?"-"+t:"";for(let i=0;i<4;i++){const r=st[i];a[r]=parseFloat(e[n+"-"+r+t])||0}return a.width=a.left+a.right,a.height=a.top+a.bottom,a}function dt(e,n){if("native"in e)return e;const{canvas:t,currentDevicePixelRatio:a}=n,i=ot(t),r="border-box"===i.boxSizing,o=lt(i,"padding"),s=lt(i,"border","width"),{x:l,y:d,box:c}=function(e,n){const t=e.touches,a=t&&t.length?t[0]:e,{offsetX:i,offsetY:r}=a;let o,s,l=!1;if(((e,n,t)=>(e>0||n>0)&&(!t||!t.shadowRoot))(i,r,e.target))o=i,s=r;else{const e=n.getBoundingClientRect();o=a.clientX-e.left,s=a.clientY-e.top,l=!0}return{x:o,y:s,box:l}}(e,t),u=o.left+(c&&s.left),h=o.top+(c&&s.top);let{width:p,height:f}=n;return r&&(p-=o.width+s.width,f-=o.height+s.height),{x:Math.round((l-u)/p*t.width/a),y:Math.round((d-h)/f*t.height/a)}}const ct=e=>Math.round(10*e)/10;function ut(e,n,t,a){const i=ot(e),r=lt(i,"margin"),o=rt(i.maxWidth,e,"clientWidth")||_,s=rt(i.maxHeight,e,"clientHeight")||_,l=function(e,n,t){let a,i;if(void 0===n||void 0===t){const r=it(e);if(r){const e=r.getBoundingClientRect(),o=ot(r),s=lt(o,"border","width"),l=lt(o,"padding");n=e.width-l.width-s.width,t=e.height-l.height-s.height,a=rt(o.maxWidth,r,"clientWidth"),i=rt(o.maxHeight,r,"clientHeight")}else n=e.clientWidth,t=e.clientHeight}return{width:n,height:t,maxWidth:a||_,maxHeight:i||_}}(e,n,t);let{width:d,height:c}=l;if("content-box"===i.boxSizing){const e=lt(i,"border","width"),n=lt(i,"padding");d-=n.width+e.width,c-=n.height+e.height}return d=Math.max(0,d-r.width),c=Math.max(0,a?Math.floor(d/a):c-r.height),d=ct(Math.min(d,o,l.maxWidth)),c=ct(Math.min(c,s,l.maxHeight)),d&&!c&&(c=ct(d/2)),{width:d,height:c}}function ht(e,n,t){const a=n||1,i=Math.floor(e.height*a),r=Math.floor(e.width*a);e.height=i/a,e.width=r/a;const o=e.canvas;return o.style&&(t||!o.style.height&&!o.style.width)&&(o.style.height=e.height+"px",o.style.width=e.width+"px"),(e.currentDevicePixelRatio!==a||o.height!==i||o.width!==r)&&(e.currentDevicePixelRatio=a,o.height=i,o.width=r,e.ctx.setTransform(a,0,0,a,0,0),!0)}const pt=function(){let e=!1;try{const n={get passive(){return e=!0,!1}};window.addEventListener("test",null,n),window.removeEventListener("test",null,n)}catch(e){}return e}();function ft(e,n){const t=function(e,n){return ot(e).getPropertyValue(n)}(e,n),a=t&&t.match(/^(\d+)(\.\d+)?px$/);return a?+a[1]:void 0}function mt(e,n,t,a){return{x:e.x+t*(n.x-e.x),y:e.y+t*(n.y-e.y)}}function gt(e,n,t,a){return{x:e.x+t*(n.x-e.x),y:"middle"===a?t<.5?e.y:n.y:"after"===a?t<1?e.y:n.y:t>0?n.y:e.y}}function bt(e,n,t,a){const i={x:e.cp2x,y:e.cp2y},r={x:n.cp1x,y:n.cp1y},o=mt(e,i,t),s=mt(i,r,t),l=mt(r,n,t),d=mt(o,s,t),c=mt(s,l,t);return mt(d,c,t)}const vt=new Map;function yt(e,n,t){return function(e,n){n=n||{};const t=e+JSON.stringify(n);let a=vt.get(t);return a||(a=new Intl.NumberFormat(e,n),vt.set(t,a)),a}(n,t).format(e)}function xt(e,n,t){return e?function(e,n){return{x:t=>e+e+n-t,setWidth(e){n=e},textAlign:e=>"center"===e?e:"right"===e?"left":"right",xPlus:(e,n)=>e-n,leftForLtr:(e,n)=>e-n}}(n,t):{x:e=>e,setWidth(e){},textAlign:e=>e,xPlus:(e,n)=>e+n,leftForLtr:(e,n)=>e}}function Ct(e,n){let t,a;"ltr"!==n&&"rtl"!==n||(t=e.canvas.style,a=[t.getPropertyValue("direction"),t.getPropertyPriority("direction")],t.setProperty("direction",n,"important"),e.prevTextDirection=a)}function Tt(e,n){void 0!==n&&(delete e.prevTextDirection,e.canvas.style.setProperty("direction",n[0],n[1]))}function Dt(e){return"angle"===e?{between:K,compare:J,normalize:Z}:{between:ne,compare:(e,n)=>e-n,normalize:e=>e}}function wt({start:e,end:n,count:t,loop:a,style:i}){return{start:e%t,end:n%t,loop:a&&(n-e+1)%t==0,style:i}}function Ot(e,n,t){if(!t)return[e];const{property:a,start:i,end:r}=t,o=n.length,{compare:s,between:l,normalize:d}=Dt(a),{start:c,end:u,loop:h,style:p}=function(e,n,t){const{property:a,start:i,end:r}=t,{between:o,normalize:s}=Dt(a),l=n.length;let d,c,{start:u,end:h,loop:p}=e;if(p){for(u+=l,h+=l,d=0,c=l;d<c&&o(s(n[u%l][a]),i,r);++d)u--,h--;u%=l,h%=l}return h<u&&(h+=l),{start:u,end:h,loop:p,style:e.style}}(e,n,t),f=[];let m,g,b,v=!1,y=null;const x=()=>v||l(i,b,m)&&0!==s(i,b),C=()=>!v||0===s(r,m)||l(r,b,m);for(let e=c,t=c;e<=u;++e)g=n[e%o],g.skip||(m=d(g[a]),m!==b&&(v=l(m,i,r),null===y&&x()&&(y=0===s(m,i)?e:t),null!==y&&C()&&(f.push(wt({start:y,end:e,loop:h,count:o,style:p})),y=null),t=e,b=m));return null!==y&&f.push(wt({start:y,end:u,loop:h,count:o,style:p})),f}function kt(e,n){const t=[],a=e.segments;for(let i=0;i<a.length;i++){const r=Ot(a[i],e.points,n);r.length&&t.push(...r)}return t}function St(e,n){const t=e.points,a=e.options.spanGaps,i=t.length;if(!i)return[];const r=!!e._loop,{start:o,end:s}=function(e,n,t,a){let i=0,r=n-1;if(t&&!a)for(;i<n&&!e[i].skip;)i++;for(;i<n&&e[i].skip;)i++;for(i%=n,t&&(r+=i);r>i&&e[r%n].skip;)r--;return r%=n,{start:i,end:r}}(t,i,r,a);if(!0===a)return Pt(e,[{start:o,end:s,loop:r}],t,n);return Pt(e,function(e,n,t,a){const i=e.length,r=[];let o,s=n,l=e[n];for(o=n+1;o<=t;++o){const t=e[o%i];t.skip||t.stop?l.skip||(a=!1,r.push({start:n%i,end:(o-1)%i,loop:a}),n=s=t.stop?o:null):(s=o,l.skip&&(n=o)),l=t}return null!==s&&r.push({start:n%i,end:s%i,loop:a}),r}(t,o,s<o?s+i:s,!!e._fullLoop&&0===o&&s===i-1),t,n)}function Pt(e,n,t,a){return a&&a.setContext&&t?function(e,n,t,a){const i=e._chart.getContext(),r=At(e.options),{_datasetIndex:o,options:{spanGaps:s}}=e,l=t.length,d=[];let c=r,u=n[0].start,h=u;function p(e,n,a,i){const r=s?-1:1;if(e!==n){for(e+=l;t[e%l].skip;)e-=r;for(;t[n%l].skip;)n+=r;e%l!=n%l&&(d.push({start:e%l,end:n%l,loop:a,style:i}),c=i,u=n%l)}}for(const e of n){u=s?u:e.start;let n,r=t[u%l];for(h=u+1;h<=e.end;h++){const s=t[h%l];n=At(a.setContext(Mn(i,{type:"segment",p0:r,p1:s,p0DataIndex:(h-1)%l,p1DataIndex:h%l,datasetIndex:o}))),Rt(n,c)&&p(u,h-1,e.loop,c),r=s,c=n}u<h-1&&p(u,h-1,e.loop,c)}return d}(e,n,t,a):n}function At(e){return{backgroundColor:e.backgroundColor,borderCapStyle:e.borderCapStyle,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderJoinStyle:e.borderJoinStyle,borderWidth:e.borderWidth,borderColor:e.borderColor}}function Rt(e,n){return n&&JSON.stringify(e)!==JSON.stringify(n)}},function(e,n,t){"use strict";
/*!
 * Vue.js v2.6.14
 * (c) 2014-2021 Evan You
 * Released under the MIT License.
 */var a=Object.freeze({});function i(e){return null==e}function r(e){return null!=e}function o(e){return!0===e}function s(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function l(e){return null!==e&&"object"==typeof e}var d=Object.prototype.toString;function c(e){return"[object Object]"===d.call(e)}function u(e){return"[object RegExp]"===d.call(e)}function h(e){var n=parseFloat(String(e));return n>=0&&Math.floor(n)===n&&isFinite(e)}function p(e){return r(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function f(e){return null==e?"":Array.isArray(e)||c(e)&&e.toString===d?JSON.stringify(e,null,2):String(e)}function m(e){var n=parseFloat(e);return isNaN(n)?e:n}function g(e,n){for(var t=Object.create(null),a=e.split(","),i=0;i<a.length;i++)t[a[i]]=!0;return n?function(e){return t[e.toLowerCase()]}:function(e){return t[e]}}g("slot,component",!0);var b=g("key,ref,slot,slot-scope,is");function v(e,n){if(e.length){var t=e.indexOf(n);if(t>-1)return e.splice(t,1)}}var y=Object.prototype.hasOwnProperty;function x(e,n){return y.call(e,n)}function C(e){var n=Object.create(null);return function(t){return n[t]||(n[t]=e(t))}}var T=/-(\w)/g,D=C((function(e){return e.replace(T,(function(e,n){return n?n.toUpperCase():""}))})),w=C((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),O=/\B([A-Z])/g,k=C((function(e){return e.replace(O,"-$1").toLowerCase()}));var S=Function.prototype.bind?function(e,n){return e.bind(n)}:function(e,n){function t(t){var a=arguments.length;return a?a>1?e.apply(n,arguments):e.call(n,t):e.call(n)}return t._length=e.length,t};function P(e,n){n=n||0;for(var t=e.length-n,a=new Array(t);t--;)a[t]=e[t+n];return a}function A(e,n){for(var t in n)e[t]=n[t];return e}function R(e){for(var n={},t=0;t<e.length;t++)e[t]&&A(n,e[t]);return n}function I(e,n,t){}var _=function(e,n,t){return!1},L=function(e){return e};function E(e,n){if(e===n)return!0;var t=l(e),a=l(n);if(!t||!a)return!t&&!a&&String(e)===String(n);try{var i=Array.isArray(e),r=Array.isArray(n);if(i&&r)return e.length===n.length&&e.every((function(e,t){return E(e,n[t])}));if(e instanceof Date&&n instanceof Date)return e.getTime()===n.getTime();if(i||r)return!1;var o=Object.keys(e),s=Object.keys(n);return o.length===s.length&&o.every((function(t){return E(e[t],n[t])}))}catch(e){return!1}}function M(e,n){for(var t=0;t<e.length;t++)if(E(e[t],n))return t;return-1}function j(e){var n=!1;return function(){n||(n=!0,e.apply(this,arguments))}}var U=["component","directive","filter"],N=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],B={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:_,isReservedAttr:_,isUnknownElement:_,getTagNamespace:I,parsePlatformTagName:L,mustUseProp:_,async:!0,_lifecycleHooks:N},F=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function z(e,n,t,a){Object.defineProperty(e,n,{value:t,enumerable:!!a,writable:!0,configurable:!0})}var H=new RegExp("[^"+F.source+".$_\\d]");var V,W="__proto__"in{},Y="undefined"!=typeof window,$="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,G=$&&WXEnvironment.platform.toLowerCase(),q=Y&&window.navigator.userAgent.toLowerCase(),X=q&&/msie|trident/.test(q),J=q&&q.indexOf("msie 9.0")>0,Z=q&&q.indexOf("edge/")>0,K=(q&&q.indexOf("android"),q&&/iphone|ipad|ipod|ios/.test(q)||"ios"===G),Q=(q&&/chrome\/\d+/.test(q),q&&/phantomjs/.test(q),q&&q.match(/firefox\/(\d+)/)),ee={}.watch,ne=!1;if(Y)try{var te={};Object.defineProperty(te,"passive",{get:function(){ne=!0}}),window.addEventListener("test-passive",null,te)}catch(e){}var ae=function(){return void 0===V&&(V=!Y&&!$&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),V},ie=Y&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var oe,se="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);oe="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var le=I,de=0,ce=function(){this.id=de++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){v(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){var e=this.subs.slice();for(var n=0,t=e.length;n<t;n++)e[n].update()},ce.target=null;var ue=[];function he(e){ue.push(e),ce.target=e}function pe(){ue.pop(),ce.target=ue[ue.length-1]}var fe=function(e,n,t,a,i,r,o,s){this.tag=e,this.data=n,this.children=t,this.text=a,this.elm=i,this.ns=void 0,this.context=r,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=o,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},me={child:{configurable:!0}};me.child.get=function(){return this.componentInstance},Object.defineProperties(fe.prototype,me);var ge=function(e){void 0===e&&(e="");var n=new fe;return n.text=e,n.isComment=!0,n};function be(e){return new fe(void 0,void 0,void 0,String(e))}function ve(e){var n=new fe(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return n.ns=e.ns,n.isStatic=e.isStatic,n.key=e.key,n.isComment=e.isComment,n.fnContext=e.fnContext,n.fnOptions=e.fnOptions,n.fnScopeId=e.fnScopeId,n.asyncMeta=e.asyncMeta,n.isCloned=!0,n}var ye=Array.prototype,xe=Object.create(ye);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var n=ye[e];z(xe,e,(function(){for(var t=[],a=arguments.length;a--;)t[a]=arguments[a];var i,r=n.apply(this,t),o=this.__ob__;switch(e){case"push":case"unshift":i=t;break;case"splice":i=t.slice(2)}return i&&o.observeArray(i),o.dep.notify(),r}))}));var Ce=Object.getOwnPropertyNames(xe),Te=!0;function De(e){Te=e}var we=function(e){this.value=e,this.dep=new ce,this.vmCount=0,z(e,"__ob__",this),Array.isArray(e)?(W?function(e,n){e.__proto__=n}(e,xe):function(e,n,t){for(var a=0,i=t.length;a<i;a++){var r=t[a];z(e,r,n[r])}}(e,xe,Ce),this.observeArray(e)):this.walk(e)};function Oe(e,n){var t;if(l(e)&&!(e instanceof fe))return x(e,"__ob__")&&e.__ob__ instanceof we?t=e.__ob__:Te&&!ae()&&(Array.isArray(e)||c(e))&&Object.isExtensible(e)&&!e._isVue&&(t=new we(e)),n&&t&&t.vmCount++,t}function ke(e,n,t,a,i){var r=new ce,o=Object.getOwnPropertyDescriptor(e,n);if(!o||!1!==o.configurable){var s=o&&o.get,l=o&&o.set;s&&!l||2!==arguments.length||(t=e[n]);var d=!i&&Oe(t);Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var n=s?s.call(e):t;return ce.target&&(r.depend(),d&&(d.dep.depend(),Array.isArray(n)&&Ae(n))),n},set:function(n){var a=s?s.call(e):t;n===a||n!=n&&a!=a||s&&!l||(l?l.call(e,n):t=n,d=!i&&Oe(n),r.notify())}})}}function Se(e,n,t){if(Array.isArray(e)&&h(n))return e.length=Math.max(e.length,n),e.splice(n,1,t),t;if(n in e&&!(n in Object.prototype))return e[n]=t,t;var a=e.__ob__;return e._isVue||a&&a.vmCount?t:a?(ke(a.value,n,t),a.dep.notify(),t):(e[n]=t,t)}function Pe(e,n){if(Array.isArray(e)&&h(n))e.splice(n,1);else{var t=e.__ob__;e._isVue||t&&t.vmCount||x(e,n)&&(delete e[n],t&&t.dep.notify())}}function Ae(e){for(var n=void 0,t=0,a=e.length;t<a;t++)(n=e[t])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&Ae(n)}we.prototype.walk=function(e){for(var n=Object.keys(e),t=0;t<n.length;t++)ke(e,n[t])},we.prototype.observeArray=function(e){for(var n=0,t=e.length;n<t;n++)Oe(e[n])};var Re=B.optionMergeStrategies;function Ie(e,n){if(!n)return e;for(var t,a,i,r=se?Reflect.ownKeys(n):Object.keys(n),o=0;o<r.length;o++)"__ob__"!==(t=r[o])&&(a=e[t],i=n[t],x(e,t)?a!==i&&c(a)&&c(i)&&Ie(a,i):Se(e,t,i));return e}function _e(e,n,t){return t?function(){var a="function"==typeof n?n.call(t,t):n,i="function"==typeof e?e.call(t,t):e;return a?Ie(a,i):i}:n?e?function(){return Ie("function"==typeof n?n.call(this,this):n,"function"==typeof e?e.call(this,this):e)}:n:e}function Le(e,n){var t=n?e?e.concat(n):Array.isArray(n)?n:[n]:e;return t?function(e){for(var n=[],t=0;t<e.length;t++)-1===n.indexOf(e[t])&&n.push(e[t]);return n}(t):t}function Ee(e,n,t,a){var i=Object.create(e||null);return n?A(i,n):i}Re.data=function(e,n,t){return t?_e(e,n,t):n&&"function"!=typeof n?e:_e(e,n)},N.forEach((function(e){Re[e]=Le})),U.forEach((function(e){Re[e+"s"]=Ee})),Re.watch=function(e,n,t,a){if(e===ee&&(e=void 0),n===ee&&(n=void 0),!n)return Object.create(e||null);if(!e)return n;var i={};for(var r in A(i,e),n){var o=i[r],s=n[r];o&&!Array.isArray(o)&&(o=[o]),i[r]=o?o.concat(s):Array.isArray(s)?s:[s]}return i},Re.props=Re.methods=Re.inject=Re.computed=function(e,n,t,a){if(!e)return n;var i=Object.create(null);return A(i,e),n&&A(i,n),i},Re.provide=_e;var Me=function(e,n){return void 0===n?e:n};function je(e,n,t){if("function"==typeof n&&(n=n.options),function(e,n){var t=e.props;if(t){var a,i,r={};if(Array.isArray(t))for(a=t.length;a--;)"string"==typeof(i=t[a])&&(r[D(i)]={type:null});else if(c(t))for(var o in t)i=t[o],r[D(o)]=c(i)?i:{type:i};else 0;e.props=r}}(n),function(e,n){var t=e.inject;if(t){var a=e.inject={};if(Array.isArray(t))for(var i=0;i<t.length;i++)a[t[i]]={from:t[i]};else if(c(t))for(var r in t){var o=t[r];a[r]=c(o)?A({from:r},o):{from:o}}else 0}}(n),function(e){var n=e.directives;if(n)for(var t in n){var a=n[t];"function"==typeof a&&(n[t]={bind:a,update:a})}}(n),!n._base&&(n.extends&&(e=je(e,n.extends,t)),n.mixins))for(var a=0,i=n.mixins.length;a<i;a++)e=je(e,n.mixins[a],t);var r,o={};for(r in e)s(r);for(r in n)x(e,r)||s(r);function s(a){var i=Re[a]||Me;o[a]=i(e[a],n[a],t,a)}return o}function Ue(e,n,t,a){if("string"==typeof t){var i=e[n];if(x(i,t))return i[t];var r=D(t);if(x(i,r))return i[r];var o=w(r);return x(i,o)?i[o]:i[t]||i[r]||i[o]}}function Ne(e,n,t,a){var i=n[e],r=!x(t,e),o=t[e],s=He(Boolean,i.type);if(s>-1)if(r&&!x(i,"default"))o=!1;else if(""===o||o===k(e)){var l=He(String,i.type);(l<0||s<l)&&(o=!0)}if(void 0===o){o=function(e,n,t){if(!x(n,"default"))return;var a=n.default;0;if(e&&e.$options.propsData&&void 0===e.$options.propsData[t]&&void 0!==e._props[t])return e._props[t];return"function"==typeof a&&"Function"!==Fe(n.type)?a.call(e):a}(a,i,e);var d=Te;De(!0),Oe(o),De(d)}return o}var Be=/^\s*function (\w+)/;function Fe(e){var n=e&&e.toString().match(Be);return n?n[1]:""}function ze(e,n){return Fe(e)===Fe(n)}function He(e,n){if(!Array.isArray(n))return ze(n,e)?0:-1;for(var t=0,a=n.length;t<a;t++)if(ze(n[t],e))return t;return-1}function Ve(e,n,t){he();try{if(n)for(var a=n;a=a.$parent;){var i=a.$options.errorCaptured;if(i)for(var r=0;r<i.length;r++)try{if(!1===i[r].call(a,e,n,t))return}catch(e){Ye(e,a,"errorCaptured hook")}}Ye(e,n,t)}finally{pe()}}function We(e,n,t,a,i){var r;try{(r=t?e.apply(n,t):e.call(n))&&!r._isVue&&p(r)&&!r._handled&&(r.catch((function(e){return Ve(e,a,i+" (Promise/async)")})),r._handled=!0)}catch(e){Ve(e,a,i)}return r}function Ye(e,n,t){if(B.errorHandler)try{return B.errorHandler.call(null,e,n,t)}catch(n){n!==e&&$e(n,null,"config.errorHandler")}$e(e,n,t)}function $e(e,n,t){if(!Y&&!$||"undefined"==typeof console)throw e;console.error(e)}var Ge,qe=!1,Xe=[],Je=!1;function Ze(){Je=!1;var e=Xe.slice(0);Xe.length=0;for(var n=0;n<e.length;n++)e[n]()}if("undefined"!=typeof Promise&&re(Promise)){var Ke=Promise.resolve();Ge=function(){Ke.then(Ze),K&&setTimeout(I)},qe=!0}else if(X||"undefined"==typeof MutationObserver||!re(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Ge="undefined"!=typeof setImmediate&&re(setImmediate)?function(){setImmediate(Ze)}:function(){setTimeout(Ze,0)};else{var Qe=1,en=new MutationObserver(Ze),nn=document.createTextNode(String(Qe));en.observe(nn,{characterData:!0}),Ge=function(){Qe=(Qe+1)%2,nn.data=String(Qe)},qe=!0}function tn(e,n){var t;if(Xe.push((function(){if(e)try{e.call(n)}catch(e){Ve(e,n,"nextTick")}else t&&t(n)})),Je||(Je=!0,Ge()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){t=e}))}var an=new oe;function rn(e){!function e(n,t){var a,i,r=Array.isArray(n);if(!r&&!l(n)||Object.isFrozen(n)||n instanceof fe)return;if(n.__ob__){var o=n.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(r)for(a=n.length;a--;)e(n[a],t);else for(i=Object.keys(n),a=i.length;a--;)e(n[i[a]],t)}(e,an),an.clear()}var on=C((function(e){var n="&"===e.charAt(0),t="~"===(e=n?e.slice(1):e).charAt(0),a="!"===(e=t?e.slice(1):e).charAt(0);return{name:e=a?e.slice(1):e,once:t,capture:a,passive:n}}));function sn(e,n){function t(){var e=arguments,a=t.fns;if(!Array.isArray(a))return We(a,null,arguments,n,"v-on handler");for(var i=a.slice(),r=0;r<i.length;r++)We(i[r],null,e,n,"v-on handler")}return t.fns=e,t}function ln(e,n,t,a,r,s){var l,d,c,u;for(l in e)d=e[l],c=n[l],u=on(l),i(d)||(i(c)?(i(d.fns)&&(d=e[l]=sn(d,s)),o(u.once)&&(d=e[l]=r(u.name,d,u.capture)),t(u.name,d,u.capture,u.passive,u.params)):d!==c&&(c.fns=d,e[l]=c));for(l in n)i(e[l])&&a((u=on(l)).name,n[l],u.capture)}function dn(e,n,t){var a;e instanceof fe&&(e=e.data.hook||(e.data.hook={}));var s=e[n];function l(){t.apply(this,arguments),v(a.fns,l)}i(s)?a=sn([l]):r(s.fns)&&o(s.merged)?(a=s).fns.push(l):a=sn([s,l]),a.merged=!0,e[n]=a}function cn(e,n,t,a,i){if(r(n)){if(x(n,t))return e[t]=n[t],i||delete n[t],!0;if(x(n,a))return e[t]=n[a],i||delete n[a],!0}return!1}function un(e){return s(e)?[be(e)]:Array.isArray(e)?function e(n,t){var a,l,d,c,u=[];for(a=0;a<n.length;a++)i(l=n[a])||"boolean"==typeof l||(d=u.length-1,c=u[d],Array.isArray(l)?l.length>0&&(hn((l=e(l,(t||"")+"_"+a))[0])&&hn(c)&&(u[d]=be(c.text+l[0].text),l.shift()),u.push.apply(u,l)):s(l)?hn(c)?u[d]=be(c.text+l):""!==l&&u.push(be(l)):hn(l)&&hn(c)?u[d]=be(c.text+l.text):(o(n._isVList)&&r(l.tag)&&i(l.key)&&r(t)&&(l.key="__vlist"+t+"_"+a+"__"),u.push(l)));return u}(e):void 0}function hn(e){return r(e)&&r(e.text)&&!1===e.isComment}function pn(e,n){if(e){for(var t=Object.create(null),a=se?Reflect.ownKeys(e):Object.keys(e),i=0;i<a.length;i++){var r=a[i];if("__ob__"!==r){for(var o=e[r].from,s=n;s;){if(s._provided&&x(s._provided,o)){t[r]=s._provided[o];break}s=s.$parent}if(!s)if("default"in e[r]){var l=e[r].default;t[r]="function"==typeof l?l.call(n):l}else 0}}return t}}function fn(e,n){if(!e||!e.length)return{};for(var t={},a=0,i=e.length;a<i;a++){var r=e[a],o=r.data;if(o&&o.attrs&&o.attrs.slot&&delete o.attrs.slot,r.context!==n&&r.fnContext!==n||!o||null==o.slot)(t.default||(t.default=[])).push(r);else{var s=o.slot,l=t[s]||(t[s]=[]);"template"===r.tag?l.push.apply(l,r.children||[]):l.push(r)}}for(var d in t)t[d].every(mn)&&delete t[d];return t}function mn(e){return e.isComment&&!e.asyncFactory||" "===e.text}function gn(e){return e.isComment&&e.asyncFactory}function bn(e,n,t){var i,r=Object.keys(n).length>0,o=e?!!e.$stable:!r,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(o&&t&&t!==a&&s===t.$key&&!r&&!t.$hasNormal)return t;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=vn(n,l,e[l]))}else i={};for(var d in n)d in i||(i[d]=yn(n,d));return e&&Object.isExtensible(e)&&(e._normalized=i),z(i,"$stable",o),z(i,"$key",s),z(i,"$hasNormal",r),i}function vn(e,n,t){var a=function(){var e=arguments.length?t.apply(null,arguments):t({}),n=(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:un(e))&&e[0];return e&&(!n||1===e.length&&n.isComment&&!gn(n))?void 0:e};return t.proxy&&Object.defineProperty(e,n,{get:a,enumerable:!0,configurable:!0}),a}function yn(e,n){return function(){return e[n]}}function xn(e,n){var t,a,i,o,s;if(Array.isArray(e)||"string"==typeof e)for(t=new Array(e.length),a=0,i=e.length;a<i;a++)t[a]=n(e[a],a);else if("number"==typeof e)for(t=new Array(e),a=0;a<e;a++)t[a]=n(a+1,a);else if(l(e))if(se&&e[Symbol.iterator]){t=[];for(var d=e[Symbol.iterator](),c=d.next();!c.done;)t.push(n(c.value,t.length)),c=d.next()}else for(o=Object.keys(e),t=new Array(o.length),a=0,i=o.length;a<i;a++)s=o[a],t[a]=n(e[s],s,a);return r(t)||(t=[]),t._isVList=!0,t}function Cn(e,n,t,a){var i,r=this.$scopedSlots[e];r?(t=t||{},a&&(t=A(A({},a),t)),i=r(t)||("function"==typeof n?n():n)):i=this.$slots[e]||("function"==typeof n?n():n);var o=t&&t.slot;return o?this.$createElement("template",{slot:o},i):i}function Tn(e){return Ue(this.$options,"filters",e)||L}function Dn(e,n){return Array.isArray(e)?-1===e.indexOf(n):e!==n}function wn(e,n,t,a,i){var r=B.keyCodes[n]||t;return i&&a&&!B.keyCodes[n]?Dn(i,a):r?Dn(r,e):a?k(a)!==n:void 0===e}function On(e,n,t,a,i){if(t)if(l(t)){var r;Array.isArray(t)&&(t=R(t));var o=function(o){if("class"===o||"style"===o||b(o))r=e;else{var s=e.attrs&&e.attrs.type;r=a||B.mustUseProp(n,s,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var l=D(o),d=k(o);l in r||d in r||(r[o]=t[o],i&&((e.on||(e.on={}))["update:"+o]=function(e){t[o]=e}))};for(var s in t)o(s)}else;return e}function kn(e,n){var t=this._staticTrees||(this._staticTrees=[]),a=t[e];return a&&!n||Pn(a=t[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),"__static__"+e,!1),a}function Sn(e,n,t){return Pn(e,"__once__"+n+(t?"_"+t:""),!0),e}function Pn(e,n,t){if(Array.isArray(e))for(var a=0;a<e.length;a++)e[a]&&"string"!=typeof e[a]&&An(e[a],n+"_"+a,t);else An(e,n,t)}function An(e,n,t){e.isStatic=!0,e.key=n,e.isOnce=t}function Rn(e,n){if(n)if(c(n)){var t=e.on=e.on?A({},e.on):{};for(var a in n){var i=t[a],r=n[a];t[a]=i?[].concat(i,r):r}}else;return e}function In(e,n,t,a){n=n||{$stable:!t};for(var i=0;i<e.length;i++){var r=e[i];Array.isArray(r)?In(r,n,t):r&&(r.proxy&&(r.fn.proxy=!0),n[r.key]=r.fn)}return a&&(n.$key=a),n}function _n(e,n){for(var t=0;t<n.length;t+=2){var a=n[t];"string"==typeof a&&a&&(e[n[t]]=n[t+1])}return e}function Ln(e,n){return"string"==typeof e?n+e:e}function En(e){e._o=Sn,e._n=m,e._s=f,e._l=xn,e._t=Cn,e._q=E,e._i=M,e._m=kn,e._f=Tn,e._k=wn,e._b=On,e._v=be,e._e=ge,e._u=In,e._g=Rn,e._d=_n,e._p=Ln}function Mn(e,n,t,i,r){var s,l=this,d=r.options;x(i,"_uid")?(s=Object.create(i))._original=i:(s=i,i=i._original);var c=o(d._compiled),u=!c;this.data=e,this.props=n,this.children=t,this.parent=i,this.listeners=e.on||a,this.injections=pn(d.inject,i),this.slots=function(){return l.$slots||bn(e.scopedSlots,l.$slots=fn(t,i)),l.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return bn(e.scopedSlots,this.slots())}}),c&&(this.$options=d,this.$slots=this.slots(),this.$scopedSlots=bn(e.scopedSlots,this.$slots)),d._scopeId?this._c=function(e,n,t,a){var r=Hn(s,e,n,t,a,u);return r&&!Array.isArray(r)&&(r.fnScopeId=d._scopeId,r.fnContext=i),r}:this._c=function(e,n,t,a){return Hn(s,e,n,t,a,u)}}function jn(e,n,t,a,i){var r=ve(e);return r.fnContext=t,r.fnOptions=a,n.slot&&((r.data||(r.data={})).slot=n.slot),r}function Un(e,n){for(var t in n)e[D(t)]=n[t]}En(Mn.prototype);var Nn={init:function(e,n){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var t=e;Nn.prepatch(t,t)}else{(e.componentInstance=function(e,n){var t={_isComponent:!0,_parentVnode:e,parent:n},a=e.data.inlineTemplate;r(a)&&(t.render=a.render,t.staticRenderFns=a.staticRenderFns);return new e.componentOptions.Ctor(t)}(e,Zn)).$mount(n?e.elm:void 0,n)}},prepatch:function(e,n){var t=n.componentOptions;!function(e,n,t,i,r){0;var o=i.data.scopedSlots,s=e.$scopedSlots,l=!!(o&&!o.$stable||s!==a&&!s.$stable||o&&e.$scopedSlots.$key!==o.$key||!o&&e.$scopedSlots.$key),d=!!(r||e.$options._renderChildren||l);e.$options._parentVnode=i,e.$vnode=i,e._vnode&&(e._vnode.parent=i);if(e.$options._renderChildren=r,e.$attrs=i.data.attrs||a,e.$listeners=t||a,n&&e.$options.props){De(!1);for(var c=e._props,u=e.$options._propKeys||[],h=0;h<u.length;h++){var p=u[h],f=e.$options.props;c[p]=Ne(p,f,n,e)}De(!0),e.$options.propsData=n}t=t||a;var m=e.$options._parentListeners;e.$options._parentListeners=t,Jn(e,t,m),d&&(e.$slots=fn(r,i.context),e.$forceUpdate());0}(n.componentInstance=e.componentInstance,t.propsData,t.listeners,n,t.children)},insert:function(e){var n,t=e.context,a=e.componentInstance;a._isMounted||(a._isMounted=!0,nt(a,"mounted")),e.data.keepAlive&&(t._isMounted?((n=a)._inactive=!1,at.push(n)):et(a,!0))},destroy:function(e){var n=e.componentInstance;n._isDestroyed||(e.data.keepAlive?function e(n,t){if(t&&(n._directInactive=!0,Qn(n)))return;if(!n._inactive){n._inactive=!0;for(var a=0;a<n.$children.length;a++)e(n.$children[a]);nt(n,"deactivated")}}(n,!0):n.$destroy())}},Bn=Object.keys(Nn);function Fn(e,n,t,s,d){if(!i(e)){var c=t.$options._base;if(l(e)&&(e=c.extend(e)),"function"==typeof e){var u;if(i(e.cid)&&void 0===(e=function(e,n){if(o(e.error)&&r(e.errorComp))return e.errorComp;if(r(e.resolved))return e.resolved;var t=Wn;t&&r(e.owners)&&-1===e.owners.indexOf(t)&&e.owners.push(t);if(o(e.loading)&&r(e.loadingComp))return e.loadingComp;if(t&&!r(e.owners)){var a=e.owners=[t],s=!0,d=null,c=null;t.$on("hook:destroyed",(function(){return v(a,t)}));var u=function(e){for(var n=0,t=a.length;n<t;n++)a[n].$forceUpdate();e&&(a.length=0,null!==d&&(clearTimeout(d),d=null),null!==c&&(clearTimeout(c),c=null))},h=j((function(t){e.resolved=Yn(t,n),s?a.length=0:u(!0)})),f=j((function(n){r(e.errorComp)&&(e.error=!0,u(!0))})),m=e(h,f);return l(m)&&(p(m)?i(e.resolved)&&m.then(h,f):p(m.component)&&(m.component.then(h,f),r(m.error)&&(e.errorComp=Yn(m.error,n)),r(m.loading)&&(e.loadingComp=Yn(m.loading,n),0===m.delay?e.loading=!0:d=setTimeout((function(){d=null,i(e.resolved)&&i(e.error)&&(e.loading=!0,u(!1))}),m.delay||200)),r(m.timeout)&&(c=setTimeout((function(){c=null,i(e.resolved)&&f(null)}),m.timeout)))),s=!1,e.loading?e.loadingComp:e.resolved}}(u=e,c)))return function(e,n,t,a,i){var r=ge();return r.asyncFactory=e,r.asyncMeta={data:n,context:t,children:a,tag:i},r}(u,n,t,s,d);n=n||{},Dt(e),r(n.model)&&function(e,n){var t=e.model&&e.model.prop||"value",a=e.model&&e.model.event||"input";(n.attrs||(n.attrs={}))[t]=n.model.value;var i=n.on||(n.on={}),o=i[a],s=n.model.callback;r(o)?(Array.isArray(o)?-1===o.indexOf(s):o!==s)&&(i[a]=[s].concat(o)):i[a]=s}(e.options,n);var h=function(e,n,t){var a=n.options.props;if(!i(a)){var o={},s=e.attrs,l=e.props;if(r(s)||r(l))for(var d in a){var c=k(d);cn(o,l,d,c,!0)||cn(o,s,d,c,!1)}return o}}(n,e);if(o(e.options.functional))return function(e,n,t,i,o){var s=e.options,l={},d=s.props;if(r(d))for(var c in d)l[c]=Ne(c,d,n||a);else r(t.attrs)&&Un(l,t.attrs),r(t.props)&&Un(l,t.props);var u=new Mn(t,l,o,i,e),h=s.render.call(null,u._c,u);if(h instanceof fe)return jn(h,t,u.parent,s,u);if(Array.isArray(h)){for(var p=un(h)||[],f=new Array(p.length),m=0;m<p.length;m++)f[m]=jn(p[m],t,u.parent,s,u);return f}}(e,h,n,t,s);var f=n.on;if(n.on=n.nativeOn,o(e.options.abstract)){var m=n.slot;n={},m&&(n.slot=m)}!function(e){for(var n=e.hook||(e.hook={}),t=0;t<Bn.length;t++){var a=Bn[t],i=n[a],r=Nn[a];i===r||i&&i._merged||(n[a]=i?zn(r,i):r)}}(n);var g=e.options.name||d;return new fe("vue-component-"+e.cid+(g?"-"+g:""),n,void 0,void 0,void 0,t,{Ctor:e,propsData:h,listeners:f,tag:d,children:s},u)}}}function zn(e,n){var t=function(t,a){e(t,a),n(t,a)};return t._merged=!0,t}function Hn(e,n,t,a,d,c){return(Array.isArray(t)||s(t))&&(d=a,a=t,t=void 0),o(c)&&(d=2),function(e,n,t,a,s){if(r(t)&&r(t.__ob__))return ge();r(t)&&r(t.is)&&(n=t.is);if(!n)return ge();0;Array.isArray(a)&&"function"==typeof a[0]&&((t=t||{}).scopedSlots={default:a[0]},a.length=0);2===s?a=un(a):1===s&&(a=function(e){for(var n=0;n<e.length;n++)if(Array.isArray(e[n]))return Array.prototype.concat.apply([],e);return e}(a));var d,c;if("string"==typeof n){var u;c=e.$vnode&&e.$vnode.ns||B.getTagNamespace(n),d=B.isReservedTag(n)?new fe(B.parsePlatformTagName(n),t,a,void 0,void 0,e):t&&t.pre||!r(u=Ue(e.$options,"components",n))?new fe(n,t,a,void 0,void 0,e):Fn(u,t,e,a,n)}else d=Fn(n,t,e,a);return Array.isArray(d)?d:r(d)?(r(c)&&function e(n,t,a){n.ns=t,"foreignObject"===n.tag&&(t=void 0,a=!0);if(r(n.children))for(var s=0,l=n.children.length;s<l;s++){var d=n.children[s];r(d.tag)&&(i(d.ns)||o(a)&&"svg"!==d.tag)&&e(d,t,a)}}(d,c),r(t)&&function(e){l(e.style)&&rn(e.style);l(e.class)&&rn(e.class)}(t),d):ge()}(e,n,t,a,d)}var Vn,Wn=null;function Yn(e,n){return(e.__esModule||se&&"Module"===e[Symbol.toStringTag])&&(e=e.default),l(e)?n.extend(e):e}function $n(e){if(Array.isArray(e))for(var n=0;n<e.length;n++){var t=e[n];if(r(t)&&(r(t.componentOptions)||gn(t)))return t}}function Gn(e,n){Vn.$on(e,n)}function qn(e,n){Vn.$off(e,n)}function Xn(e,n){var t=Vn;return function a(){var i=n.apply(null,arguments);null!==i&&t.$off(e,a)}}function Jn(e,n,t){Vn=e,ln(n,t||{},Gn,qn,Xn,e),Vn=void 0}var Zn=null;function Kn(e){var n=Zn;return Zn=e,function(){Zn=n}}function Qn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function et(e,n){if(n){if(e._directInactive=!1,Qn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var t=0;t<e.$children.length;t++)et(e.$children[t]);nt(e,"activated")}}function nt(e,n){he();var t=e.$options[n],a=n+" hook";if(t)for(var i=0,r=t.length;i<r;i++)We(t[i],e,null,e,a);e._hasHookEvent&&e.$emit("hook:"+n),pe()}var tt=[],at=[],it={},rt=!1,ot=!1,st=0;var lt=0,dt=Date.now;if(Y&&!X){var ct=window.performance;ct&&"function"==typeof ct.now&&dt()>document.createEvent("Event").timeStamp&&(dt=function(){return ct.now()})}function ut(){var e,n;for(lt=dt(),ot=!0,tt.sort((function(e,n){return e.id-n.id})),st=0;st<tt.length;st++)(e=tt[st]).before&&e.before(),n=e.id,it[n]=null,e.run();var t=at.slice(),a=tt.slice();st=tt.length=at.length=0,it={},rt=ot=!1,function(e){for(var n=0;n<e.length;n++)e[n]._inactive=!0,et(e[n],!0)}(t),function(e){var n=e.length;for(;n--;){var t=e[n],a=t.vm;a._watcher===t&&a._isMounted&&!a._isDestroyed&&nt(a,"updated")}}(a),ie&&B.devtools&&ie.emit("flush")}var ht=0,pt=function(e,n,t,a,i){this.vm=e,i&&(e._watcher=this),e._watchers.push(this),a?(this.deep=!!a.deep,this.user=!!a.user,this.lazy=!!a.lazy,this.sync=!!a.sync,this.before=a.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=t,this.id=++ht,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new oe,this.newDepIds=new oe,this.expression="","function"==typeof n?this.getter=n:(this.getter=function(e){if(!H.test(e)){var n=e.split(".");return function(e){for(var t=0;t<n.length;t++){if(!e)return;e=e[n[t]]}return e}}}(n),this.getter||(this.getter=I)),this.value=this.lazy?void 0:this.get()};pt.prototype.get=function(){var e;he(this);var n=this.vm;try{e=this.getter.call(n,n)}catch(e){if(!this.user)throw e;Ve(e,n,'getter for watcher "'+this.expression+'"')}finally{this.deep&&rn(e),pe(),this.cleanupDeps()}return e},pt.prototype.addDep=function(e){var n=e.id;this.newDepIds.has(n)||(this.newDepIds.add(n),this.newDeps.push(e),this.depIds.has(n)||e.addSub(this))},pt.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var n=this.deps[e];this.newDepIds.has(n.id)||n.removeSub(this)}var t=this.depIds;this.depIds=this.newDepIds,this.newDepIds=t,this.newDepIds.clear(),t=this.deps,this.deps=this.newDeps,this.newDeps=t,this.newDeps.length=0},pt.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var n=e.id;if(null==it[n]){if(it[n]=!0,ot){for(var t=tt.length-1;t>st&&tt[t].id>e.id;)t--;tt.splice(t+1,0,e)}else tt.push(e);rt||(rt=!0,tn(ut))}}(this)},pt.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var n=this.value;if(this.value=e,this.user){var t='callback for watcher "'+this.expression+'"';We(this.cb,this.vm,[e,n],this.vm,t)}else this.cb.call(this.vm,e,n)}}},pt.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pt.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},pt.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||v(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var ft={enumerable:!0,configurable:!0,get:I,set:I};function mt(e,n,t){ft.get=function(){return this[n][t]},ft.set=function(e){this[n][t]=e},Object.defineProperty(e,t,ft)}function gt(e){e._watchers=[];var n=e.$options;n.props&&function(e,n){var t=e.$options.propsData||{},a=e._props={},i=e.$options._propKeys=[];e.$parent&&De(!1);var r=function(r){i.push(r);var o=Ne(r,n,t,e);ke(a,r,o),r in e||mt(e,"_props",r)};for(var o in n)r(o);De(!0)}(e,n.props),n.methods&&function(e,n){e.$options.props;for(var t in n)e[t]="function"!=typeof n[t]?I:S(n[t],e)}(e,n.methods),n.data?function(e){var n=e.$options.data;c(n=e._data="function"==typeof n?function(e,n){he();try{return e.call(n,n)}catch(e){return Ve(e,n,"data()"),{}}finally{pe()}}(n,e):n||{})||(n={});var t=Object.keys(n),a=e.$options.props,i=(e.$options.methods,t.length);for(;i--;){var r=t[i];0,a&&x(a,r)||(o=void 0,36!==(o=(r+"").charCodeAt(0))&&95!==o&&mt(e,"_data",r))}var o;Oe(n,!0)}(e):Oe(e._data={},!0),n.computed&&function(e,n){var t=e._computedWatchers=Object.create(null),a=ae();for(var i in n){var r=n[i],o="function"==typeof r?r:r.get;0,a||(t[i]=new pt(e,o||I,I,bt)),i in e||vt(e,i,r)}}(e,n.computed),n.watch&&n.watch!==ee&&function(e,n){for(var t in n){var a=n[t];if(Array.isArray(a))for(var i=0;i<a.length;i++)Ct(e,t,a[i]);else Ct(e,t,a)}}(e,n.watch)}var bt={lazy:!0};function vt(e,n,t){var a=!ae();"function"==typeof t?(ft.get=a?yt(n):xt(t),ft.set=I):(ft.get=t.get?a&&!1!==t.cache?yt(n):xt(t.get):I,ft.set=t.set||I),Object.defineProperty(e,n,ft)}function yt(e){return function(){var n=this._computedWatchers&&this._computedWatchers[e];if(n)return n.dirty&&n.evaluate(),ce.target&&n.depend(),n.value}}function xt(e){return function(){return e.call(this,this)}}function Ct(e,n,t,a){return c(t)&&(a=t,t=t.handler),"string"==typeof t&&(t=e[t]),e.$watch(n,t,a)}var Tt=0;function Dt(e){var n=e.options;if(e.super){var t=Dt(e.super);if(t!==e.superOptions){e.superOptions=t;var a=function(e){var n,t=e.options,a=e.sealedOptions;for(var i in t)t[i]!==a[i]&&(n||(n={}),n[i]=t[i]);return n}(e);a&&A(e.extendOptions,a),(n=e.options=je(t,e.extendOptions)).name&&(n.components[n.name]=e)}}return n}function wt(e){this._init(e)}function Ot(e){e.cid=0;var n=1;e.extend=function(e){e=e||{};var t=this,a=t.cid,i=e._Ctor||(e._Ctor={});if(i[a])return i[a];var r=e.name||t.options.name;var o=function(e){this._init(e)};return(o.prototype=Object.create(t.prototype)).constructor=o,o.cid=n++,o.options=je(t.options,e),o.super=t,o.options.props&&function(e){var n=e.options.props;for(var t in n)mt(e.prototype,"_props",t)}(o),o.options.computed&&function(e){var n=e.options.computed;for(var t in n)vt(e.prototype,t,n[t])}(o),o.extend=t.extend,o.mixin=t.mixin,o.use=t.use,U.forEach((function(e){o[e]=t[e]})),r&&(o.options.components[r]=o),o.superOptions=t.options,o.extendOptions=e,o.sealedOptions=A({},o.options),i[a]=o,o}}function kt(e){return e&&(e.Ctor.options.name||e.tag)}function St(e,n){return Array.isArray(e)?e.indexOf(n)>-1:"string"==typeof e?e.split(",").indexOf(n)>-1:!!u(e)&&e.test(n)}function Pt(e,n){var t=e.cache,a=e.keys,i=e._vnode;for(var r in t){var o=t[r];if(o){var s=o.name;s&&!n(s)&&At(t,r,a,i)}}}function At(e,n,t,a){var i=e[n];!i||a&&i.tag===a.tag||i.componentInstance.$destroy(),e[n]=null,v(t,n)}!function(e){e.prototype._init=function(e){var n=this;n._uid=Tt++,n._isVue=!0,e&&e._isComponent?function(e,n){var t=e.$options=Object.create(e.constructor.options),a=n._parentVnode;t.parent=n.parent,t._parentVnode=a;var i=a.componentOptions;t.propsData=i.propsData,t._parentListeners=i.listeners,t._renderChildren=i.children,t._componentTag=i.tag,n.render&&(t.render=n.render,t.staticRenderFns=n.staticRenderFns)}(n,e):n.$options=je(Dt(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(e){var n=e.$options,t=n.parent;if(t&&!n.abstract){for(;t.$options.abstract&&t.$parent;)t=t.$parent;t.$children.push(e)}e.$parent=t,e.$root=t?t.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var n=e.$options._parentListeners;n&&Jn(e,n)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,t=e.$vnode=n._parentVnode,i=t&&t.context;e.$slots=fn(n._renderChildren,i),e.$scopedSlots=a,e._c=function(n,t,a,i){return Hn(e,n,t,a,i,!1)},e.$createElement=function(n,t,a,i){return Hn(e,n,t,a,i,!0)};var r=t&&t.data;ke(e,"$attrs",r&&r.attrs||a,null,!0),ke(e,"$listeners",n._parentListeners||a,null,!0)}(n),nt(n,"beforeCreate"),function(e){var n=pn(e.$options.inject,e);n&&(De(!1),Object.keys(n).forEach((function(t){ke(e,t,n[t])})),De(!0))}(n),gt(n),function(e){var n=e.$options.provide;n&&(e._provided="function"==typeof n?n.call(e):n)}(n),nt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wt),function(e){var n={get:function(){return this._data}},t={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",n),Object.defineProperty(e.prototype,"$props",t),e.prototype.$set=Se,e.prototype.$delete=Pe,e.prototype.$watch=function(e,n,t){if(c(n))return Ct(this,e,n,t);(t=t||{}).user=!0;var a=new pt(this,e,n,t);if(t.immediate){var i='callback for immediate watcher "'+a.expression+'"';he(),We(n,this,[a.value],this,i),pe()}return function(){a.teardown()}}}(wt),function(e){var n=/^hook:/;e.prototype.$on=function(e,t){var a=this;if(Array.isArray(e))for(var i=0,r=e.length;i<r;i++)a.$on(e[i],t);else(a._events[e]||(a._events[e]=[])).push(t),n.test(e)&&(a._hasHookEvent=!0);return a},e.prototype.$once=function(e,n){var t=this;function a(){t.$off(e,a),n.apply(t,arguments)}return a.fn=n,t.$on(e,a),t},e.prototype.$off=function(e,n){var t=this;if(!arguments.length)return t._events=Object.create(null),t;if(Array.isArray(e)){for(var a=0,i=e.length;a<i;a++)t.$off(e[a],n);return t}var r,o=t._events[e];if(!o)return t;if(!n)return t._events[e]=null,t;for(var s=o.length;s--;)if((r=o[s])===n||r.fn===n){o.splice(s,1);break}return t},e.prototype.$emit=function(e){var n=this,t=n._events[e];if(t){t=t.length>1?P(t):t;for(var a=P(arguments,1),i='event handler for "'+e+'"',r=0,o=t.length;r<o;r++)We(t[r],n,a,n,i)}return n}}(wt),function(e){e.prototype._update=function(e,n){var t=this,a=t.$el,i=t._vnode,r=Kn(t);t._vnode=e,t.$el=i?t.__patch__(i,e):t.__patch__(t.$el,e,n,!1),r(),a&&(a.__vue__=null),t.$el&&(t.$el.__vue__=t),t.$vnode&&t.$parent&&t.$vnode===t.$parent._vnode&&(t.$parent.$el=t.$el)},e.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){nt(e,"beforeDestroy"),e._isBeingDestroyed=!0;var n=e.$parent;!n||n._isBeingDestroyed||e.$options.abstract||v(n.$children,e),e._watcher&&e._watcher.teardown();for(var t=e._watchers.length;t--;)e._watchers[t].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),nt(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}(wt),function(e){En(e.prototype),e.prototype.$nextTick=function(e){return tn(e,this)},e.prototype._render=function(){var e,n=this,t=n.$options,a=t.render,i=t._parentVnode;i&&(n.$scopedSlots=bn(i.data.scopedSlots,n.$slots,n.$scopedSlots)),n.$vnode=i;try{Wn=n,e=a.call(n._renderProxy,n.$createElement)}catch(t){Ve(t,n,"render"),e=n._vnode}finally{Wn=null}return Array.isArray(e)&&1===e.length&&(e=e[0]),e instanceof fe||(e=ge()),e.parent=i,e}}(wt);var Rt=[String,RegExp,Array],It={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Rt,exclude:Rt,max:[String,Number]},methods:{cacheVNode:function(){var e=this.cache,n=this.keys,t=this.vnodeToCache,a=this.keyToCache;if(t){var i=t.tag,r=t.componentInstance,o=t.componentOptions;e[a]={name:kt(o),tag:i,componentInstance:r},n.push(a),this.max&&n.length>parseInt(this.max)&&At(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)At(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(n){Pt(e,(function(e){return St(n,e)}))})),this.$watch("exclude",(function(n){Pt(e,(function(e){return!St(n,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,n=$n(e),t=n&&n.componentOptions;if(t){var a=kt(t),i=this.include,r=this.exclude;if(i&&(!a||!St(i,a))||r&&a&&St(r,a))return n;var o=this.cache,s=this.keys,l=null==n.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):n.key;o[l]?(n.componentInstance=o[l].componentInstance,v(s,l),s.push(l)):(this.vnodeToCache=n,this.keyToCache=l),n.data.keepAlive=!0}return n||e&&e[0]}}};!function(e){var n={get:function(){return B}};Object.defineProperty(e,"config",n),e.util={warn:le,extend:A,mergeOptions:je,defineReactive:ke},e.set=Se,e.delete=Pe,e.nextTick=tn,e.observable=function(e){return Oe(e),e},e.options=Object.create(null),U.forEach((function(n){e.options[n+"s"]=Object.create(null)})),e.options._base=e,A(e.options.components,It),function(e){e.use=function(e){var n=this._installedPlugins||(this._installedPlugins=[]);if(n.indexOf(e)>-1)return this;var t=P(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):"function"==typeof e&&e.apply(null,t),n.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=je(this.options,e),this}}(e),Ot(e),function(e){U.forEach((function(n){e[n]=function(e,t){return t?("component"===n&&c(t)&&(t.name=t.name||e,t=this.options._base.extend(t)),"directive"===n&&"function"==typeof t&&(t={bind:t,update:t}),this.options[n+"s"][e]=t,t):this.options[n+"s"][e]}}))}(e)}(wt),Object.defineProperty(wt.prototype,"$isServer",{get:ae}),Object.defineProperty(wt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wt,"FunctionalRenderContext",{value:Mn}),wt.version="2.6.14";var _t=g("style,class"),Lt=g("input,textarea,option,select,progress"),Et=g("contenteditable,draggable,spellcheck"),Mt=g("events,caret,typing,plaintext-only"),jt=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Ut="http://www.w3.org/1999/xlink",Nt=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Bt=function(e){return Nt(e)?e.slice(6,e.length):""},Ft=function(e){return null==e||!1===e};function zt(e){for(var n=e.data,t=e,a=e;r(a.componentInstance);)(a=a.componentInstance._vnode)&&a.data&&(n=Ht(a.data,n));for(;r(t=t.parent);)t&&t.data&&(n=Ht(n,t.data));return function(e,n){if(r(e)||r(n))return Vt(e,Wt(n));return""}(n.staticClass,n.class)}function Ht(e,n){return{staticClass:Vt(e.staticClass,n.staticClass),class:r(e.class)?[e.class,n.class]:n.class}}function Vt(e,n){return e?n?e+" "+n:e:n||""}function Wt(e){return Array.isArray(e)?function(e){for(var n,t="",a=0,i=e.length;a<i;a++)r(n=Wt(e[a]))&&""!==n&&(t&&(t+=" "),t+=n);return t}(e):l(e)?function(e){var n="";for(var t in e)e[t]&&(n&&(n+=" "),n+=t);return n}(e):"string"==typeof e?e:""}var Yt={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},$t=g("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Gt=g("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),qt=function(e){return $t(e)||Gt(e)};var Xt=Object.create(null);var Jt=g("text,number,password,search,email,tel,url");var Zt=Object.freeze({createElement:function(e,n){var t=document.createElement(e);return"select"!==e||n.data&&n.data.attrs&&void 0!==n.data.attrs.multiple&&t.setAttribute("multiple","multiple"),t},createElementNS:function(e,n){return document.createElementNS(Yt[e],n)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,n,t){e.insertBefore(n,t)},removeChild:function(e,n){e.removeChild(n)},appendChild:function(e,n){e.appendChild(n)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,n){e.textContent=n},setStyleScope:function(e,n){e.setAttribute(n,"")}}),Kt={create:function(e,n){Qt(n)},update:function(e,n){e.data.ref!==n.data.ref&&(Qt(e,!0),Qt(n))},destroy:function(e){Qt(e,!0)}};function Qt(e,n){var t=e.data.ref;if(r(t)){var a=e.context,i=e.componentInstance||e.elm,o=a.$refs;n?Array.isArray(o[t])?v(o[t],i):o[t]===i&&(o[t]=void 0):e.data.refInFor?Array.isArray(o[t])?o[t].indexOf(i)<0&&o[t].push(i):o[t]=[i]:o[t]=i}}var ea=new fe("",{},[]),na=["create","activate","update","remove","destroy"];function ta(e,n){return e.key===n.key&&e.asyncFactory===n.asyncFactory&&(e.tag===n.tag&&e.isComment===n.isComment&&r(e.data)===r(n.data)&&function(e,n){if("input"!==e.tag)return!0;var t,a=r(t=e.data)&&r(t=t.attrs)&&t.type,i=r(t=n.data)&&r(t=t.attrs)&&t.type;return a===i||Jt(a)&&Jt(i)}(e,n)||o(e.isAsyncPlaceholder)&&i(n.asyncFactory.error))}function aa(e,n,t){var a,i,o={};for(a=n;a<=t;++a)r(i=e[a].key)&&(o[i]=a);return o}var ia={create:ra,update:ra,destroy:function(e){ra(e,ea)}};function ra(e,n){(e.data.directives||n.data.directives)&&function(e,n){var t,a,i,r=e===ea,o=n===ea,s=sa(e.data.directives,e.context),l=sa(n.data.directives,n.context),d=[],c=[];for(t in l)a=s[t],i=l[t],a?(i.oldValue=a.value,i.oldArg=a.arg,da(i,"update",n,e),i.def&&i.def.componentUpdated&&c.push(i)):(da(i,"bind",n,e),i.def&&i.def.inserted&&d.push(i));if(d.length){var u=function(){for(var t=0;t<d.length;t++)da(d[t],"inserted",n,e)};r?dn(n,"insert",u):u()}c.length&&dn(n,"postpatch",(function(){for(var t=0;t<c.length;t++)da(c[t],"componentUpdated",n,e)}));if(!r)for(t in s)l[t]||da(s[t],"unbind",e,e,o)}(e,n)}var oa=Object.create(null);function sa(e,n){var t,a,i=Object.create(null);if(!e)return i;for(t=0;t<e.length;t++)(a=e[t]).modifiers||(a.modifiers=oa),i[la(a)]=a,a.def=Ue(n.$options,"directives",a.name);return i}function la(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function da(e,n,t,a,i){var r=e.def&&e.def[n];if(r)try{r(t.elm,e,t,a,i)}catch(a){Ve(a,t.context,"directive "+e.name+" "+n+" hook")}}var ca=[Kt,ia];function ua(e,n){var t=n.componentOptions;if(!(r(t)&&!1===t.Ctor.options.inheritAttrs||i(e.data.attrs)&&i(n.data.attrs))){var a,o,s=n.elm,l=e.data.attrs||{},d=n.data.attrs||{};for(a in r(d.__ob__)&&(d=n.data.attrs=A({},d)),d)o=d[a],l[a]!==o&&ha(s,a,o,n.data.pre);for(a in(X||Z)&&d.value!==l.value&&ha(s,"value",d.value),l)i(d[a])&&(Nt(a)?s.removeAttributeNS(Ut,Bt(a)):Et(a)||s.removeAttribute(a))}}function ha(e,n,t,a){a||e.tagName.indexOf("-")>-1?pa(e,n,t):jt(n)?Ft(t)?e.removeAttribute(n):(t="allowfullscreen"===n&&"EMBED"===e.tagName?"true":n,e.setAttribute(n,t)):Et(n)?e.setAttribute(n,function(e,n){return Ft(n)||"false"===n?"false":"contenteditable"===e&&Mt(n)?n:"true"}(n,t)):Nt(n)?Ft(t)?e.removeAttributeNS(Ut,Bt(n)):e.setAttributeNS(Ut,n,t):pa(e,n,t)}function pa(e,n,t){if(Ft(t))e.removeAttribute(n);else{if(X&&!J&&"TEXTAREA"===e.tagName&&"placeholder"===n&&""!==t&&!e.__ieph){var a=function(n){n.stopImmediatePropagation(),e.removeEventListener("input",a)};e.addEventListener("input",a),e.__ieph=!0}e.setAttribute(n,t)}}var fa={create:ua,update:ua};function ma(e,n){var t=n.elm,a=n.data,o=e.data;if(!(i(a.staticClass)&&i(a.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=zt(n),l=t._transitionClasses;r(l)&&(s=Vt(s,Wt(l))),s!==t._prevClass&&(t.setAttribute("class",s),t._prevClass=s)}}var ga,ba={create:ma,update:ma};function va(e,n,t){var a=ga;return function i(){var r=n.apply(null,arguments);null!==r&&Ca(e,i,t,a)}}var ya=qe&&!(Q&&Number(Q[1])<=53);function xa(e,n,t,a){if(ya){var i=lt,r=n;n=r._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return r.apply(this,arguments)}}ga.addEventListener(e,n,ne?{capture:t,passive:a}:t)}function Ca(e,n,t,a){(a||ga).removeEventListener(e,n._wrapper||n,t)}function Ta(e,n){if(!i(e.data.on)||!i(n.data.on)){var t=n.data.on||{},a=e.data.on||{};ga=n.elm,function(e){if(r(e.__r)){var n=X?"change":"input";e[n]=[].concat(e.__r,e[n]||[]),delete e.__r}r(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(t),ln(t,a,xa,Ca,va,n.context),ga=void 0}}var Da,wa={create:Ta,update:Ta};function Oa(e,n){if(!i(e.data.domProps)||!i(n.data.domProps)){var t,a,o=n.elm,s=e.data.domProps||{},l=n.data.domProps||{};for(t in r(l.__ob__)&&(l=n.data.domProps=A({},l)),s)t in l||(o[t]="");for(t in l){if(a=l[t],"textContent"===t||"innerHTML"===t){if(n.children&&(n.children.length=0),a===s[t])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===t&&"PROGRESS"!==o.tagName){o._value=a;var d=i(a)?"":String(a);ka(o,d)&&(o.value=d)}else if("innerHTML"===t&&Gt(o.tagName)&&i(o.innerHTML)){(Da=Da||document.createElement("div")).innerHTML="<svg>"+a+"</svg>";for(var c=Da.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;c.firstChild;)o.appendChild(c.firstChild)}else if(a!==s[t])try{o[t]=a}catch(e){}}}}function ka(e,n){return!e.composing&&("OPTION"===e.tagName||function(e,n){var t=!0;try{t=document.activeElement!==e}catch(e){}return t&&e.value!==n}(e,n)||function(e,n){var t=e.value,a=e._vModifiers;if(r(a)){if(a.number)return m(t)!==m(n);if(a.trim)return t.trim()!==n.trim()}return t!==n}(e,n))}var Sa={create:Oa,update:Oa},Pa=C((function(e){var n={},t=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var a=e.split(t);a.length>1&&(n[a[0].trim()]=a[1].trim())}})),n}));function Aa(e){var n=Ra(e.style);return e.staticStyle?A(e.staticStyle,n):n}function Ra(e){return Array.isArray(e)?R(e):"string"==typeof e?Pa(e):e}var Ia,_a=/^--/,La=/\s*!important$/,Ea=function(e,n,t){if(_a.test(n))e.style.setProperty(n,t);else if(La.test(t))e.style.setProperty(k(n),t.replace(La,""),"important");else{var a=ja(n);if(Array.isArray(t))for(var i=0,r=t.length;i<r;i++)e.style[a]=t[i];else e.style[a]=t}},Ma=["Webkit","Moz","ms"],ja=C((function(e){if(Ia=Ia||document.createElement("div").style,"filter"!==(e=D(e))&&e in Ia)return e;for(var n=e.charAt(0).toUpperCase()+e.slice(1),t=0;t<Ma.length;t++){var a=Ma[t]+n;if(a in Ia)return a}}));function Ua(e,n){var t=n.data,a=e.data;if(!(i(t.staticStyle)&&i(t.style)&&i(a.staticStyle)&&i(a.style))){var o,s,l=n.elm,d=a.staticStyle,c=a.normalizedStyle||a.style||{},u=d||c,h=Ra(n.data.style)||{};n.data.normalizedStyle=r(h.__ob__)?A({},h):h;var p=function(e,n){var t,a={};if(n)for(var i=e;i.componentInstance;)(i=i.componentInstance._vnode)&&i.data&&(t=Aa(i.data))&&A(a,t);(t=Aa(e.data))&&A(a,t);for(var r=e;r=r.parent;)r.data&&(t=Aa(r.data))&&A(a,t);return a}(n,!0);for(s in u)i(p[s])&&Ea(l,s,"");for(s in p)(o=p[s])!==u[s]&&Ea(l,s,null==o?"":o)}}var Na={create:Ua,update:Ua},Ba=/\s+/;function Fa(e,n){if(n&&(n=n.trim()))if(e.classList)n.indexOf(" ")>-1?n.split(Ba).forEach((function(n){return e.classList.add(n)})):e.classList.add(n);else{var t=" "+(e.getAttribute("class")||"")+" ";t.indexOf(" "+n+" ")<0&&e.setAttribute("class",(t+n).trim())}}function za(e,n){if(n&&(n=n.trim()))if(e.classList)n.indexOf(" ")>-1?n.split(Ba).forEach((function(n){return e.classList.remove(n)})):e.classList.remove(n),e.classList.length||e.removeAttribute("class");else{for(var t=" "+(e.getAttribute("class")||"")+" ",a=" "+n+" ";t.indexOf(a)>=0;)t=t.replace(a," ");(t=t.trim())?e.setAttribute("class",t):e.removeAttribute("class")}}function Ha(e){if(e){if("object"==typeof e){var n={};return!1!==e.css&&A(n,Va(e.name||"v")),A(n,e),n}return"string"==typeof e?Va(e):void 0}}var Va=C((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),Wa=Y&&!J,Ya="transition",$a="transitionend",Ga="animation",qa="animationend";Wa&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ya="WebkitTransition",$a="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ga="WebkitAnimation",qa="webkitAnimationEnd"));var Xa=Y?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ja(e){Xa((function(){Xa(e)}))}function Za(e,n){var t=e._transitionClasses||(e._transitionClasses=[]);t.indexOf(n)<0&&(t.push(n),Fa(e,n))}function Ka(e,n){e._transitionClasses&&v(e._transitionClasses,n),za(e,n)}function Qa(e,n,t){var a=ni(e,n),i=a.type,r=a.timeout,o=a.propCount;if(!i)return t();var s="transition"===i?$a:qa,l=0,d=function(){e.removeEventListener(s,c),t()},c=function(n){n.target===e&&++l>=o&&d()};setTimeout((function(){l<o&&d()}),r+1),e.addEventListener(s,c)}var ei=/\b(transform|all)(,|$)/;function ni(e,n){var t,a=window.getComputedStyle(e),i=(a[Ya+"Delay"]||"").split(", "),r=(a[Ya+"Duration"]||"").split(", "),o=ti(i,r),s=(a[Ga+"Delay"]||"").split(", "),l=(a[Ga+"Duration"]||"").split(", "),d=ti(s,l),c=0,u=0;return"transition"===n?o>0&&(t="transition",c=o,u=r.length):"animation"===n?d>0&&(t="animation",c=d,u=l.length):u=(t=(c=Math.max(o,d))>0?o>d?"transition":"animation":null)?"transition"===t?r.length:l.length:0,{type:t,timeout:c,propCount:u,hasTransform:"transition"===t&&ei.test(a[Ya+"Property"])}}function ti(e,n){for(;e.length<n.length;)e=e.concat(e);return Math.max.apply(null,n.map((function(n,t){return ai(n)+ai(e[t])})))}function ai(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function ii(e,n){var t=e.elm;r(t._leaveCb)&&(t._leaveCb.cancelled=!0,t._leaveCb());var a=Ha(e.data.transition);if(!i(a)&&!r(t._enterCb)&&1===t.nodeType){for(var o=a.css,s=a.type,d=a.enterClass,c=a.enterToClass,u=a.enterActiveClass,h=a.appearClass,p=a.appearToClass,f=a.appearActiveClass,g=a.beforeEnter,b=a.enter,v=a.afterEnter,y=a.enterCancelled,x=a.beforeAppear,C=a.appear,T=a.afterAppear,D=a.appearCancelled,w=a.duration,O=Zn,k=Zn.$vnode;k&&k.parent;)O=k.context,k=k.parent;var S=!O._isMounted||!e.isRootInsert;if(!S||C||""===C){var P=S&&h?h:d,A=S&&f?f:u,R=S&&p?p:c,I=S&&x||g,_=S&&"function"==typeof C?C:b,L=S&&T||v,E=S&&D||y,M=m(l(w)?w.enter:w);0;var U=!1!==o&&!J,N=si(_),B=t._enterCb=j((function(){U&&(Ka(t,R),Ka(t,A)),B.cancelled?(U&&Ka(t,P),E&&E(t)):L&&L(t),t._enterCb=null}));e.data.show||dn(e,"insert",(function(){var n=t.parentNode,a=n&&n._pending&&n._pending[e.key];a&&a.tag===e.tag&&a.elm._leaveCb&&a.elm._leaveCb(),_&&_(t,B)})),I&&I(t),U&&(Za(t,P),Za(t,A),Ja((function(){Ka(t,P),B.cancelled||(Za(t,R),N||(oi(M)?setTimeout(B,M):Qa(t,s,B)))}))),e.data.show&&(n&&n(),_&&_(t,B)),U||N||B()}}}function ri(e,n){var t=e.elm;r(t._enterCb)&&(t._enterCb.cancelled=!0,t._enterCb());var a=Ha(e.data.transition);if(i(a)||1!==t.nodeType)return n();if(!r(t._leaveCb)){var o=a.css,s=a.type,d=a.leaveClass,c=a.leaveToClass,u=a.leaveActiveClass,h=a.beforeLeave,p=a.leave,f=a.afterLeave,g=a.leaveCancelled,b=a.delayLeave,v=a.duration,y=!1!==o&&!J,x=si(p),C=m(l(v)?v.leave:v);0;var T=t._leaveCb=j((function(){t.parentNode&&t.parentNode._pending&&(t.parentNode._pending[e.key]=null),y&&(Ka(t,c),Ka(t,u)),T.cancelled?(y&&Ka(t,d),g&&g(t)):(n(),f&&f(t)),t._leaveCb=null}));b?b(D):D()}function D(){T.cancelled||(!e.data.show&&t.parentNode&&((t.parentNode._pending||(t.parentNode._pending={}))[e.key]=e),h&&h(t),y&&(Za(t,d),Za(t,u),Ja((function(){Ka(t,d),T.cancelled||(Za(t,c),x||(oi(C)?setTimeout(T,C):Qa(t,s,T)))}))),p&&p(t,T),y||x||T())}}function oi(e){return"number"==typeof e&&!isNaN(e)}function si(e){if(i(e))return!1;var n=e.fns;return r(n)?si(Array.isArray(n)?n[0]:n):(e._length||e.length)>1}function li(e,n){!0!==n.data.show&&ii(n)}var di=function(e){var n,t,a={},l=e.modules,d=e.nodeOps;for(n=0;n<na.length;++n)for(a[na[n]]=[],t=0;t<l.length;++t)r(l[t][na[n]])&&a[na[n]].push(l[t][na[n]]);function c(e){var n=d.parentNode(e);r(n)&&d.removeChild(n,e)}function u(e,n,t,i,s,l,c){if(r(e.elm)&&r(l)&&(e=l[c]=ve(e)),e.isRootInsert=!s,!function(e,n,t,i){var s=e.data;if(r(s)){var l=r(e.componentInstance)&&s.keepAlive;if(r(s=s.hook)&&r(s=s.init)&&s(e,!1),r(e.componentInstance))return h(e,n),p(t,e.elm,i),o(l)&&function(e,n,t,i){var o,s=e;for(;s.componentInstance;)if(s=s.componentInstance._vnode,r(o=s.data)&&r(o=o.transition)){for(o=0;o<a.activate.length;++o)a.activate[o](ea,s);n.push(s);break}p(t,e.elm,i)}(e,n,t,i),!0}}(e,n,t,i)){var u=e.data,m=e.children,g=e.tag;r(g)?(e.elm=e.ns?d.createElementNS(e.ns,g):d.createElement(g,e),v(e),f(e,m,n),r(u)&&b(e,n),p(t,e.elm,i)):o(e.isComment)?(e.elm=d.createComment(e.text),p(t,e.elm,i)):(e.elm=d.createTextNode(e.text),p(t,e.elm,i))}}function h(e,n){r(e.data.pendingInsert)&&(n.push.apply(n,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,m(e)?(b(e,n),v(e)):(Qt(e),n.push(e))}function p(e,n,t){r(e)&&(r(t)?d.parentNode(t)===e&&d.insertBefore(e,n,t):d.appendChild(e,n))}function f(e,n,t){if(Array.isArray(n)){0;for(var a=0;a<n.length;++a)u(n[a],t,e.elm,null,!0,n,a)}else s(e.text)&&d.appendChild(e.elm,d.createTextNode(String(e.text)))}function m(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return r(e.tag)}function b(e,t){for(var i=0;i<a.create.length;++i)a.create[i](ea,e);r(n=e.data.hook)&&(r(n.create)&&n.create(ea,e),r(n.insert)&&t.push(e))}function v(e){var n;if(r(n=e.fnScopeId))d.setStyleScope(e.elm,n);else for(var t=e;t;)r(n=t.context)&&r(n=n.$options._scopeId)&&d.setStyleScope(e.elm,n),t=t.parent;r(n=Zn)&&n!==e.context&&n!==e.fnContext&&r(n=n.$options._scopeId)&&d.setStyleScope(e.elm,n)}function y(e,n,t,a,i,r){for(;a<=i;++a)u(t[a],r,e,n,!1,t,a)}function x(e){var n,t,i=e.data;if(r(i))for(r(n=i.hook)&&r(n=n.destroy)&&n(e),n=0;n<a.destroy.length;++n)a.destroy[n](e);if(r(n=e.children))for(t=0;t<e.children.length;++t)x(e.children[t])}function C(e,n,t){for(;n<=t;++n){var a=e[n];r(a)&&(r(a.tag)?(T(a),x(a)):c(a.elm))}}function T(e,n){if(r(n)||r(e.data)){var t,i=a.remove.length+1;for(r(n)?n.listeners+=i:n=function(e,n){function t(){0==--t.listeners&&c(e)}return t.listeners=n,t}(e.elm,i),r(t=e.componentInstance)&&r(t=t._vnode)&&r(t.data)&&T(t,n),t=0;t<a.remove.length;++t)a.remove[t](e,n);r(t=e.data.hook)&&r(t=t.remove)?t(e,n):n()}else c(e.elm)}function D(e,n,t,a){for(var i=t;i<a;i++){var o=n[i];if(r(o)&&ta(e,o))return i}}function w(e,n,t,s,l,c){if(e!==n){r(n.elm)&&r(s)&&(n=s[l]=ve(n));var h=n.elm=e.elm;if(o(e.isAsyncPlaceholder))r(n.asyncFactory.resolved)?S(e.elm,n,t):n.isAsyncPlaceholder=!0;else if(o(n.isStatic)&&o(e.isStatic)&&n.key===e.key&&(o(n.isCloned)||o(n.isOnce)))n.componentInstance=e.componentInstance;else{var p,f=n.data;r(f)&&r(p=f.hook)&&r(p=p.prepatch)&&p(e,n);var g=e.children,b=n.children;if(r(f)&&m(n)){for(p=0;p<a.update.length;++p)a.update[p](e,n);r(p=f.hook)&&r(p=p.update)&&p(e,n)}i(n.text)?r(g)&&r(b)?g!==b&&function(e,n,t,a,o){var s,l,c,h=0,p=0,f=n.length-1,m=n[0],g=n[f],b=t.length-1,v=t[0],x=t[b],T=!o;for(0;h<=f&&p<=b;)i(m)?m=n[++h]:i(g)?g=n[--f]:ta(m,v)?(w(m,v,a,t,p),m=n[++h],v=t[++p]):ta(g,x)?(w(g,x,a,t,b),g=n[--f],x=t[--b]):ta(m,x)?(w(m,x,a,t,b),T&&d.insertBefore(e,m.elm,d.nextSibling(g.elm)),m=n[++h],x=t[--b]):ta(g,v)?(w(g,v,a,t,p),T&&d.insertBefore(e,g.elm,m.elm),g=n[--f],v=t[++p]):(i(s)&&(s=aa(n,h,f)),i(l=r(v.key)?s[v.key]:D(v,n,h,f))?u(v,a,e,m.elm,!1,t,p):ta(c=n[l],v)?(w(c,v,a,t,p),n[l]=void 0,T&&d.insertBefore(e,c.elm,m.elm)):u(v,a,e,m.elm,!1,t,p),v=t[++p]);h>f?y(e,i(t[b+1])?null:t[b+1].elm,t,p,b,a):p>b&&C(n,h,f)}(h,g,b,t,c):r(b)?(r(e.text)&&d.setTextContent(h,""),y(h,null,b,0,b.length-1,t)):r(g)?C(g,0,g.length-1):r(e.text)&&d.setTextContent(h,""):e.text!==n.text&&d.setTextContent(h,n.text),r(f)&&r(p=f.hook)&&r(p=p.postpatch)&&p(e,n)}}}function O(e,n,t){if(o(t)&&r(e.parent))e.parent.data.pendingInsert=n;else for(var a=0;a<n.length;++a)n[a].data.hook.insert(n[a])}var k=g("attrs,class,staticClass,staticStyle,key");function S(e,n,t,a){var i,s=n.tag,l=n.data,d=n.children;if(a=a||l&&l.pre,n.elm=e,o(n.isComment)&&r(n.asyncFactory))return n.isAsyncPlaceholder=!0,!0;if(r(l)&&(r(i=l.hook)&&r(i=i.init)&&i(n,!0),r(i=n.componentInstance)))return h(n,t),!0;if(r(s)){if(r(d))if(e.hasChildNodes())if(r(i=l)&&r(i=i.domProps)&&r(i=i.innerHTML)){if(i!==e.innerHTML)return!1}else{for(var c=!0,u=e.firstChild,p=0;p<d.length;p++){if(!u||!S(u,d[p],t,a)){c=!1;break}u=u.nextSibling}if(!c||u)return!1}else f(n,d,t);if(r(l)){var m=!1;for(var g in l)if(!k(g)){m=!0,b(n,t);break}!m&&l.class&&rn(l.class)}}else e.data!==n.text&&(e.data=n.text);return!0}return function(e,n,t,s){if(!i(n)){var l,c=!1,h=[];if(i(e))c=!0,u(n,h);else{var p=r(e.nodeType);if(!p&&ta(e,n))w(e,n,h,null,null,s);else{if(p){if(1===e.nodeType&&e.hasAttribute("data-server-rendered")&&(e.removeAttribute("data-server-rendered"),t=!0),o(t)&&S(e,n,h))return O(n,h,!0),e;l=e,e=new fe(d.tagName(l).toLowerCase(),{},[],void 0,l)}var f=e.elm,g=d.parentNode(f);if(u(n,h,f._leaveCb?null:g,d.nextSibling(f)),r(n.parent))for(var b=n.parent,v=m(n);b;){for(var y=0;y<a.destroy.length;++y)a.destroy[y](b);if(b.elm=n.elm,v){for(var T=0;T<a.create.length;++T)a.create[T](ea,b);var D=b.data.hook.insert;if(D.merged)for(var k=1;k<D.fns.length;k++)D.fns[k]()}else Qt(b);b=b.parent}r(g)?C([e],0,0):r(e.tag)&&x(e)}}return O(n,h,c),n.elm}r(e)&&x(e)}}({nodeOps:Zt,modules:[fa,ba,wa,Sa,Na,Y?{create:li,activate:li,remove:function(e,n){!0!==e.data.show?ri(e,n):n()}}:{}].concat(ca)});J&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&bi(e,"input")}));var ci={inserted:function(e,n,t,a){"select"===t.tag?(a.elm&&!a.elm._vOptions?dn(t,"postpatch",(function(){ci.componentUpdated(e,n,t)})):ui(e,n,t.context),e._vOptions=[].map.call(e.options,fi)):("textarea"===t.tag||Jt(e.type))&&(e._vModifiers=n.modifiers,n.modifiers.lazy||(e.addEventListener("compositionstart",mi),e.addEventListener("compositionend",gi),e.addEventListener("change",gi),J&&(e.vmodel=!0)))},componentUpdated:function(e,n,t){if("select"===t.tag){ui(e,n,t.context);var a=e._vOptions,i=e._vOptions=[].map.call(e.options,fi);if(i.some((function(e,n){return!E(e,a[n])})))(e.multiple?n.value.some((function(e){return pi(e,i)})):n.value!==n.oldValue&&pi(n.value,i))&&bi(e,"change")}}};function ui(e,n,t){hi(e,n,t),(X||Z)&&setTimeout((function(){hi(e,n,t)}),0)}function hi(e,n,t){var a=n.value,i=e.multiple;if(!i||Array.isArray(a)){for(var r,o,s=0,l=e.options.length;s<l;s++)if(o=e.options[s],i)r=M(a,fi(o))>-1,o.selected!==r&&(o.selected=r);else if(E(fi(o),a))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function pi(e,n){return n.every((function(n){return!E(n,e)}))}function fi(e){return"_value"in e?e._value:e.value}function mi(e){e.target.composing=!0}function gi(e){e.target.composing&&(e.target.composing=!1,bi(e.target,"input"))}function bi(e,n){var t=document.createEvent("HTMLEvents");t.initEvent(n,!0,!0),e.dispatchEvent(t)}function vi(e){return!e.componentInstance||e.data&&e.data.transition?e:vi(e.componentInstance._vnode)}var yi={model:ci,show:{bind:function(e,n,t){var a=n.value,i=(t=vi(t)).data&&t.data.transition,r=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;a&&i?(t.data.show=!0,ii(t,(function(){e.style.display=r}))):e.style.display=a?r:"none"},update:function(e,n,t){var a=n.value;!a!=!n.oldValue&&((t=vi(t)).data&&t.data.transition?(t.data.show=!0,a?ii(t,(function(){e.style.display=e.__vOriginalDisplay})):ri(t,(function(){e.style.display="none"}))):e.style.display=a?e.__vOriginalDisplay:"none")},unbind:function(e,n,t,a,i){i||(e.style.display=e.__vOriginalDisplay)}}},xi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ci(e){var n=e&&e.componentOptions;return n&&n.Ctor.options.abstract?Ci($n(n.children)):e}function Ti(e){var n={},t=e.$options;for(var a in t.propsData)n[a]=e[a];var i=t._parentListeners;for(var r in i)n[D(r)]=i[r];return n}function Di(e,n){if(/\d-keep-alive$/.test(n.tag))return e("keep-alive",{props:n.componentOptions.propsData})}var wi=function(e){return e.tag||gn(e)},Oi=function(e){return"show"===e.name},ki={name:"transition",props:xi,abstract:!0,render:function(e){var n=this,t=this.$slots.default;if(t&&(t=t.filter(wi)).length){0;var a=this.mode;0;var i=t[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return i;var r=Ci(i);if(!r)return i;if(this._leaving)return Di(e,i);var o="__transition-"+this._uid+"-";r.key=null==r.key?r.isComment?o+"comment":o+r.tag:s(r.key)?0===String(r.key).indexOf(o)?r.key:o+r.key:r.key;var l=(r.data||(r.data={})).transition=Ti(this),d=this._vnode,c=Ci(d);if(r.data.directives&&r.data.directives.some(Oi)&&(r.data.show=!0),c&&c.data&&!function(e,n){return n.key===e.key&&n.tag===e.tag}(r,c)&&!gn(c)&&(!c.componentInstance||!c.componentInstance._vnode.isComment)){var u=c.data.transition=A({},l);if("out-in"===a)return this._leaving=!0,dn(u,"afterLeave",(function(){n._leaving=!1,n.$forceUpdate()})),Di(e,i);if("in-out"===a){if(gn(r))return d;var h,p=function(){h()};dn(l,"afterEnter",p),dn(l,"enterCancelled",p),dn(u,"delayLeave",(function(e){h=e}))}}return i}}},Si=A({tag:String,moveClass:String},xi);function Pi(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ai(e){e.data.newPos=e.elm.getBoundingClientRect()}function Ri(e){var n=e.data.pos,t=e.data.newPos,a=n.left-t.left,i=n.top-t.top;if(a||i){e.data.moved=!0;var r=e.elm.style;r.transform=r.WebkitTransform="translate("+a+"px,"+i+"px)",r.transitionDuration="0s"}}delete Si.mode;var Ii={Transition:ki,TransitionGroup:{props:Si,beforeMount:function(){var e=this,n=this._update;this._update=function(t,a){var i=Kn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),n.call(e,t,a)}},render:function(e){for(var n=this.tag||this.$vnode.data.tag||"span",t=Object.create(null),a=this.prevChildren=this.children,i=this.$slots.default||[],r=this.children=[],o=Ti(this),s=0;s<i.length;s++){var l=i[s];if(l.tag)if(null!=l.key&&0!==String(l.key).indexOf("__vlist"))r.push(l),t[l.key]=l,(l.data||(l.data={})).transition=o;else;}if(a){for(var d=[],c=[],u=0;u<a.length;u++){var h=a[u];h.data.transition=o,h.data.pos=h.elm.getBoundingClientRect(),t[h.key]?d.push(h):c.push(h)}this.kept=e(n,null,d),this.removed=c}return e(n,null,r)},updated:function(){var e=this.prevChildren,n=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,n)&&(e.forEach(Pi),e.forEach(Ai),e.forEach(Ri),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var t=e.elm,a=t.style;Za(t,n),a.transform=a.WebkitTransform=a.transitionDuration="",t.addEventListener($a,t._moveCb=function e(a){a&&a.target!==t||a&&!/transform$/.test(a.propertyName)||(t.removeEventListener($a,e),t._moveCb=null,Ka(t,n))})}})))},methods:{hasMove:function(e,n){if(!Wa)return!1;if(this._hasMove)return this._hasMove;var t=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){za(t,e)})),Fa(t,n),t.style.display="none",this.$el.appendChild(t);var a=ni(t);return this.$el.removeChild(t),this._hasMove=a.hasTransform}}}};wt.config.mustUseProp=function(e,n,t){return"value"===t&&Lt(e)&&"button"!==n||"selected"===t&&"option"===e||"checked"===t&&"input"===e||"muted"===t&&"video"===e},wt.config.isReservedTag=qt,wt.config.isReservedAttr=_t,wt.config.getTagNamespace=function(e){return Gt(e)?"svg":"math"===e?"math":void 0},wt.config.isUnknownElement=function(e){if(!Y)return!0;if(qt(e))return!1;if(e=e.toLowerCase(),null!=Xt[e])return Xt[e];var n=document.createElement(e);return e.indexOf("-")>-1?Xt[e]=n.constructor===window.HTMLUnknownElement||n.constructor===window.HTMLElement:Xt[e]=/HTMLUnknownElement/.test(n.toString())},A(wt.options.directives,yi),A(wt.options.components,Ii),wt.prototype.__patch__=Y?di:I,wt.prototype.$mount=function(e,n){return function(e,n,t){var a;return e.$el=n,e.$options.render||(e.$options.render=ge),nt(e,"beforeMount"),a=function(){e._update(e._render(),t)},new pt(e,a,I,{before:function(){e._isMounted&&!e._isDestroyed&&nt(e,"beforeUpdate")}},!0),t=!1,null==e.$vnode&&(e._isMounted=!0,nt(e,"mounted")),e}(this,e=e&&Y?function(e){if("string"==typeof e){var n=document.querySelector(e);return n||document.createElement("div")}return e}(e):void 0,n)},Y&&setTimeout((function(){B.devtools&&ie&&ie.emit("init",wt)}),0),n.a=wt},function(e,n){var t=function(e){return e&&e.Math==Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof global&&global)||function(){return this}()||Function("return this")()},function(e,n){e.exports=function(e){return"function"==typeof e}},function(e,n){var t=Function.prototype,a=t.bind,i=t.call,r=a&&a.bind(i);e.exports=a?function(e){return e&&r(i,e)}:function(e){return e&&function(){return i.apply(e,arguments)}}},function(e,n,t){"use strict";t.d(n,"a",(function(){return R})),t.d(n,"b",(function(){return sn})),t.d(n,"c",(function(){return Ot})),t.d(n,"d",(function(){return G})),t.d(n,"e",(function(){return yt})),t.d(n,"f",(function(){return ee})),t.d(n,"g",(function(){return Gt}));var a=t(0);
/*!
 * Chart.js v3.9.1
 * https://www.chartjs.org
 * (c) 2022 Chart.js Contributors
 * Released under the MIT License
 */var i=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(e,n,t,a){const i=n.listeners[a],r=n.duration;i.forEach(a=>a({chart:e,initial:n.initial,numSteps:r,currentStep:Math.min(t-n.start,r)}))}_refresh(){this._request||(this._running=!0,this._request=a.Tb.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(e=Date.now()){let n=0;this._charts.forEach((t,a)=>{if(!t.running||!t.items.length)return;const i=t.items;let r,o=i.length-1,s=!1;for(;o>=0;--o)r=i[o],r._active?(r._total>t.duration&&(t.duration=r._total),r.tick(e),s=!0):(i[o]=i[i.length-1],i.pop());s&&(a.draw(),this._notify(a,t,e,"progress")),i.length||(t.running=!1,this._notify(a,t,e,"complete"),t.initial=!1),n+=i.length}),this._lastDate=e,0===n&&(this._running=!1)}_getAnims(e){const n=this._charts;let t=n.get(e);return t||(t={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},n.set(e,t)),t}listen(e,n,t){this._getAnims(e).listeners[n].push(t)}add(e,n){n&&n.length&&this._getAnims(e).items.push(...n)}has(e){return this._getAnims(e).items.length>0}start(e){const n=this._charts.get(e);n&&(n.running=!0,n.start=Date.now(),n.duration=n.items.reduce((e,n)=>Math.max(e,n._duration),0),this._refresh())}running(e){if(!this._running)return!1;const n=this._charts.get(e);return!!(n&&n.running&&n.items.length)}stop(e){const n=this._charts.get(e);if(!n||!n.items.length)return;const t=n.items;let a=t.length-1;for(;a>=0;--a)t[a].cancel();n.items=[],this._notify(e,n,Date.now(),"complete")}remove(e){return this._charts.delete(e)}};const r={boolean:(e,n,t)=>t>.5?n:e,color(e,n,t){const i=Object(a.Eb)(e||"transparent"),r=i.valid&&Object(a.Eb)(n||"transparent");return r&&r.valid?r.mix(i,t).hexString():n},number:(e,n,t)=>e+(n-e)*t};class o{constructor(e,n,t,i){const o=n[t];i=Object(a.C)([e.to,i,o,e.from]);const s=Object(a.C)([e.from,o,i]);this._active=!0,this._fn=e.fn||r[e.type||typeof s],this._easing=a.Gb[e.easing]||a.Gb.linear,this._start=Math.floor(Date.now()+(e.delay||0)),this._duration=this._total=Math.floor(e.duration),this._loop=!!e.loop,this._target=n,this._prop=t,this._from=s,this._to=i,this._promises=void 0}active(){return this._active}update(e,n,t){if(this._active){this._notify(!1);const i=this._target[this._prop],r=t-this._start,o=this._duration-r;this._start=t,this._duration=Math.floor(Math.max(o,e.duration)),this._total+=r,this._loop=!!e.loop,this._to=Object(a.C)([e.to,n,i,e.from]),this._from=Object(a.C)([e.from,i,n])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(e){const n=e-this._start,t=this._duration,a=this._prop,i=this._from,r=this._loop,o=this._to;let s;if(this._active=i!==o&&(r||n<t),!this._active)return this._target[a]=o,void this._notify(!0);n<0?this._target[a]=i:(s=n/t%2,s=r&&s>1?2-s:s,s=this._easing(Math.min(1,Math.max(0,s))),this._target[a]=this._fn(i,o,s))}wait(){const e=this._promises||(this._promises=[]);return new Promise((n,t)=>{e.push({res:n,rej:t})})}_notify(e){const n=e?"res":"rej",t=this._promises||[];for(let e=0;e<t.length;e++)t[e][n]()}}a.Fb.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const s=Object.keys(a.Fb.animation);a.Fb.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:e=>"onProgress"!==e&&"onComplete"!==e&&"fn"!==e}),a.Fb.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),a.Fb.describe("animations",{_fallback:"animation"}),a.Fb.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:e=>0|e}}}});class l{constructor(e,n){this._chart=e,this._properties=new Map,this.configure(n)}configure(e){if(!Object(a.Kb)(e))return;const n=this._properties;Object.getOwnPropertyNames(e).forEach(t=>{const i=e[t];if(!Object(a.Kb)(i))return;const r={};for(const e of s)r[e]=i[e];(Object(a.Db)(i.properties)&&i.properties||[t]).forEach(e=>{e!==t&&n.has(e)||n.set(e,r)})})}_animateOptions(e,n){const t=n.options,a=function(e,n){if(!n)return;let t=e.options;if(!t)return void(e.options=n);t.$shared&&(e.options=t=Object.assign({},t,{$shared:!1,$animations:{}}));return t}(e,t);if(!a)return[];const i=this._createAnimations(a,t);return t.$shared&&function(e,n){const t=[],a=Object.keys(n);for(let n=0;n<a.length;n++){const i=e[a[n]];i&&i.active()&&t.push(i.wait())}return Promise.all(t)}(e.options.$animations,t).then(()=>{e.options=t},()=>{}),i}_createAnimations(e,n){const t=this._properties,a=[],i=e.$animations||(e.$animations={}),r=Object.keys(n),s=Date.now();let l;for(l=r.length-1;l>=0;--l){const d=r[l];if("$"===d.charAt(0))continue;if("options"===d){a.push(...this._animateOptions(e,n));continue}const c=n[d];let u=i[d];const h=t.get(d);if(u){if(h&&u.active()){u.update(h,c,s);continue}u.cancel()}h&&h.duration?(i[d]=u=new o(h,e,d,c),a.push(u)):e[d]=c}return a}update(e,n){if(0===this._properties.size)return void Object.assign(e,n);const t=this._createAnimations(e,n);return t.length?(i.add(this._chart,t),!0):void 0}}function d(e,n){const t=e&&e.options||{},a=t.reverse,i=void 0===t.min?n:0,r=void 0===t.max?n:0;return{start:a?r:i,end:a?i:r}}function c(e,n){const t=[],a=e._getSortedDatasetMetas(n);let i,r;for(i=0,r=a.length;i<r;++i)t.push(a[i].index);return t}function u(e,n,t,i={}){const r=e.keys,o="single"===i.mode;let s,l,d,c;if(null!==n){for(s=0,l=r.length;s<l;++s){if(d=+r[s],d===t){if(i.all)continue;break}c=e.values[d],Object(a.Ib)(c)&&(o||0===n||Object(a.Ub)(n)===Object(a.Ub)(c))&&(n+=c)}return n}}function h(e,n){const t=e&&e.options.stacked;return t||void 0===t&&void 0!==n.stack}function p(e,n,t){const a=e[n]||(e[n]={});return a[t]||(a[t]={})}function f(e,n,t,a){for(const i of n.getMatchingVisibleMetas(a).reverse()){const n=e[i.index];if(t&&n>0||!t&&n<0)return i.index}return null}function m(e,n){const{chart:t,_cachedMeta:a}=e,i=t._stacks||(t._stacks={}),{iScale:r,vScale:o,index:s}=a,l=r.axis,d=o.axis,c=function(e,n,t){return`${e.id}.${n.id}.${t.stack||t.type}`}(r,o,a),u=n.length;let h;for(let e=0;e<u;++e){const t=n[e],{[l]:r,[d]:u}=t;h=(t._stacks||(t._stacks={}))[d]=p(i,c,r),h[s]=u,h._top=f(h,o,!0,a.type),h._bottom=f(h,o,!1,a.type)}}function g(e,n){const t=e.scales;return Object.keys(t).filter(e=>t[e].axis===n).shift()}function b(e,n){const t=e.controller.index,a=e.vScale&&e.vScale.axis;if(a){n=n||e._parsed;for(const e of n){const n=e._stacks;if(!n||void 0===n[a]||void 0===n[a][t])return;delete n[a][t]}}}const v=e=>"reset"===e||"none"===e,y=(e,n)=>n?e:Object.assign({},e);class x{constructor(e,n){this.chart=e,this._ctx=e.ctx,this.index=n,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=h(e.vScale,e),this.addElements()}updateIndex(e){this.index!==e&&b(this._cachedMeta),this.index=e}linkScales(){const e=this.chart,n=this._cachedMeta,t=this.getDataset(),i=(e,n,t,a)=>"x"===e?n:"r"===e?a:t,r=n.xAxisID=Object(a.Xb)(t.xAxisID,g(e,"x")),o=n.yAxisID=Object(a.Xb)(t.yAxisID,g(e,"y")),s=n.rAxisID=Object(a.Xb)(t.rAxisID,g(e,"r")),l=n.indexAxis,d=n.iAxisID=i(l,r,o,s),c=n.vAxisID=i(l,o,r,s);n.xScale=this.getScaleForId(r),n.yScale=this.getScaleForId(o),n.rScale=this.getScaleForId(s),n.iScale=this.getScaleForId(d),n.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){const n=this._cachedMeta;return e===n.iScale?n.vScale:n.iScale}reset(){this._update("reset")}_destroy(){const e=this._cachedMeta;this._data&&Object(a.Wb)(this._data,this),e._stacked&&b(e)}_dataCheck(){const e=this.getDataset(),n=e.data||(e.data=[]),t=this._data;if(Object(a.Kb)(n))this._data=function(e){const n=Object.keys(e),t=new Array(n.length);let a,i,r;for(a=0,i=n.length;a<i;++a)r=n[a],t[a]={x:r,y:e[r]};return t}(n);else if(t!==n){if(t){Object(a.Wb)(t,this);const e=this._cachedMeta;b(e),e._parsed=[]}n&&Object.isExtensible(n)&&Object(a.Nb)(n,this),this._syncList=[],this._data=n}}addElements(){const e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){const n=this._cachedMeta,t=this.getDataset();let a=!1;this._dataCheck();const i=n._stacked;n._stacked=h(n.vScale,n),n.stack!==t.stack&&(a=!0,b(n),n.stack=t.stack),this._resyncElements(e),(a||i!==n._stacked)&&m(this,n._parsed)}configure(){const e=this.chart.config,n=e.datasetScopeKeys(this._type),t=e.getOptionScopes(this.getDataset(),n,!0);this.options=e.createResolver(t,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,n){const{_cachedMeta:t,_data:i}=this,{iScale:r,_stacked:o}=t,s=r.axis;let l,d,c,u=0===e&&n===i.length||t._sorted,h=e>0&&t._parsed[e-1];if(!1===this._parsing)t._parsed=i,t._sorted=!0,c=i;else{c=Object(a.Db)(i[e])?this.parseArrayData(t,i,e,n):Object(a.Kb)(i[e])?this.parseObjectData(t,i,e,n):this.parsePrimitiveData(t,i,e,n);const r=()=>null===d[s]||h&&d[s]<h[s];for(l=0;l<n;++l)t._parsed[l+e]=d=c[l],u&&(r()&&(u=!1),h=d);t._sorted=u}o&&m(this,c)}parsePrimitiveData(e,n,t,a){const{iScale:i,vScale:r}=e,o=i.axis,s=r.axis,l=i.getLabels(),d=i===r,c=new Array(a);let u,h,p;for(u=0,h=a;u<h;++u)p=u+t,c[u]={[o]:d||i.parse(l[p],p),[s]:r.parse(n[p],p)};return c}parseArrayData(e,n,t,a){const{xScale:i,yScale:r}=e,o=new Array(a);let s,l,d,c;for(s=0,l=a;s<l;++s)d=s+t,c=n[d],o[s]={x:i.parse(c[0],d),y:r.parse(c[1],d)};return o}parseObjectData(e,n,t,i){const{xScale:r,yScale:o}=e,{xAxisKey:s="x",yAxisKey:l="y"}=this._parsing,d=new Array(i);let c,u,h,p;for(c=0,u=i;c<u;++c)h=c+t,p=n[h],d[c]={x:r.parse(Object(a.Hb)(p,s),h),y:o.parse(Object(a.Hb)(p,l),h)};return d}getParsed(e){return this._cachedMeta._parsed[e]}getDataElement(e){return this._cachedMeta.data[e]}applyStack(e,n,t){const a=this.chart,i=this._cachedMeta,r=n[e.axis];return u({keys:c(a,!0),values:n._stacks[e.axis]},r,i.index,{mode:t})}updateRangeFromParsed(e,n,t,a){const i=t[n.axis];let r=null===i?NaN:i;const o=a&&t._stacks[n.axis];a&&o&&(a.values=o,r=u(a,i,this._cachedMeta.index)),e.min=Math.min(e.min,r),e.max=Math.max(e.max,r)}getMinMax(e,n){const t=this._cachedMeta,i=t._parsed,r=t._sorted&&e===t.iScale,o=i.length,s=this._getOtherScale(e),l=((e,n,t)=>e&&!n.hidden&&n._stacked&&{keys:c(t,!0),values:null})(n,t,this.chart),d={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:u,max:h}=function(e){const{min:n,max:t,minDefined:a,maxDefined:i}=e.getUserBounds();return{min:a?n:Number.NEGATIVE_INFINITY,max:i?t:Number.POSITIVE_INFINITY}}(s);let p,f;function m(){f=i[p];const n=f[s.axis];return!Object(a.Ib)(f[e.axis])||u>n||h<n}for(p=0;p<o&&(m()||(this.updateRangeFromParsed(d,e,f,l),!r));++p);if(r)for(p=o-1;p>=0;--p)if(!m()){this.updateRangeFromParsed(d,e,f,l);break}return d}getAllParsedValues(e){const n=this._cachedMeta._parsed,t=[];let i,r,o;for(i=0,r=n.length;i<r;++i)o=n[i][e.axis],Object(a.Ib)(o)&&t.push(o);return t}getMaxOverflow(){return!1}getLabelAndValue(e){const n=this._cachedMeta,t=n.iScale,a=n.vScale,i=this.getParsed(e);return{label:t?""+t.getLabelForValue(i[t.axis]):"",value:a?""+a.getLabelForValue(i[a.axis]):""}}_update(e){const n=this._cachedMeta;this.update(e||"default"),n._clip=function(e){let n,t,i,r;return Object(a.Kb)(e)?(n=e.top,t=e.right,i=e.bottom,r=e.left):n=t=i=r=e,{top:n,right:t,bottom:i,left:r,disabled:!1===e}}(Object(a.Xb)(this.options.clip,function(e,n,t){if(!1===t)return!1;const a=d(e,t),i=d(n,t);return{top:i.end,right:a.end,bottom:i.start,left:a.start}}(n.xScale,n.yScale,this.getMaxOverflow())))}update(e){}draw(){const e=this._ctx,n=this.chart,t=this._cachedMeta,a=t.data||[],i=n.chartArea,r=[],o=this._drawStart||0,s=this._drawCount||a.length-o,l=this.options.drawActiveElementsOnTop;let d;for(t.dataset&&t.dataset.draw(e,i,o,s),d=o;d<o+s;++d){const n=a[d];n.hidden||(n.active&&l?r.push(n):n.draw(e,i))}for(d=0;d<r.length;++d)r[d].draw(e,i)}getStyle(e,n){const t=n?"active":"default";return void 0===e&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(t):this.resolveDataElementOptions(e||0,t)}getContext(e,n,t){const i=this.getDataset();let r;if(e>=0&&e<this._cachedMeta.data.length){const n=this._cachedMeta.data[e];r=n.$context||(n.$context=function(e,n,t){return Object(a.Jb)(e,{active:!1,dataIndex:n,parsed:void 0,raw:void 0,element:t,index:n,mode:"default",type:"data"})}(this.getContext(),e,n)),r.parsed=this.getParsed(e),r.raw=i.data[e],r.index=r.dataIndex=e}else r=this.$context||(this.$context=function(e,n){return Object(a.Jb)(e,{active:!1,dataset:void 0,datasetIndex:n,index:n,mode:"default",type:"dataset"})}(this.chart.getContext(),this.index)),r.dataset=i,r.index=r.datasetIndex=this.index;return r.active=!!n,r.mode=t,r}resolveDatasetElementOptions(e){return this._resolveElementOptions(this.datasetElementType.id,e)}resolveDataElementOptions(e,n){return this._resolveElementOptions(this.dataElementType.id,n,e)}_resolveElementOptions(e,n="default",t){const i="active"===n,r=this._cachedDataOpts,o=e+"-"+n,s=r[o],l=this.enableOptionSharing&&Object(a.Lb)(t);if(s)return y(s,l);const d=this.chart.config,c=d.datasetElementScopeKeys(this._type,e),u=i?[e+"Hover","hover",e,""]:[e,""],h=d.getOptionScopes(this.getDataset(),c),p=Object.keys(a.Fb.elements[e]),f=d.resolveNamedOptions(h,p,()=>this.getContext(t,i),u);return f.$shared&&(f.$shared=l,r[o]=Object.freeze(y(f,l))),f}_resolveAnimations(e,n,t){const a=this.chart,i=this._cachedDataOpts,r="animation-"+n,o=i[r];if(o)return o;let s;if(!1!==a.options.animation){const a=this.chart.config,i=a.datasetAnimationScopeKeys(this._type,n),r=a.getOptionScopes(this.getDataset(),i);s=a.createResolver(r,this.getContext(e,t,n))}const d=new l(a,s&&s.animations);return s&&s._cacheable&&(i[r]=Object.freeze(d)),d}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,n){return!n||v(e)||this.chart._animationsDisabled}_getSharedOptions(e,n){const t=this.resolveDataElementOptions(e,n),a=this._sharedOptions,i=this.getSharedOptions(t),r=this.includeOptions(n,i)||i!==a;return this.updateSharedOptions(i,n,t),{sharedOptions:i,includeOptions:r}}updateElement(e,n,t,a){v(a)?Object.assign(e,t):this._resolveAnimations(n,a).update(e,t)}updateSharedOptions(e,n,t){e&&!v(n)&&this._resolveAnimations(void 0,n).update(e,t)}_setStyle(e,n,t,a){e.active=a;const i=this.getStyle(n,a);this._resolveAnimations(n,t,a).update(e,{options:!a&&this.getSharedOptions(i)||i})}removeHoverStyle(e,n,t){this._setStyle(e,t,"active",!1)}setHoverStyle(e,n,t){this._setStyle(e,t,"active",!0)}_removeDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){const e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){const n=this._data,t=this._cachedMeta.data;for(const[e,n,t]of this._syncList)this[e](n,t);this._syncList=[];const a=t.length,i=n.length,r=Math.min(i,a);r&&this.parse(0,r),i>a?this._insertElements(a,i-a,e):i<a&&this._removeElements(i,a-i)}_insertElements(e,n,t=!0){const a=this._cachedMeta,i=a.data,r=e+n;let o;const s=e=>{for(e.length+=n,o=e.length-1;o>=r;o--)e[o]=e[o-n]};for(s(i),o=e;o<r;++o)i[o]=new this.dataElementType;this._parsing&&s(a._parsed),this.parse(e,n),t&&this.updateElements(i,e,n,"reset")}updateElements(e,n,t,a){}_removeElements(e,n){const t=this._cachedMeta;if(this._parsing){const a=t._parsed.splice(e,n);t._stacked&&b(t,a)}t.data.splice(e,n)}_sync(e){if(this._parsing)this._syncList.push(e);else{const[n,t,a]=e;this[n](t,a)}this.chart._dataChanges.push([this.index,...e])}_onDataPush(){const e=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-e,e])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(e,n){n&&this._sync(["_removeElements",e,n]);const t=arguments.length-2;t&&this._sync(["_insertElements",e,t])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}function C(e){const n=e.iScale,t=function(e,n){if(!e._cache.$bar){const t=e.getMatchingVisibleMetas(n);let i=[];for(let n=0,a=t.length;n<a;n++)i=i.concat(t[n].controller.getAllParsedValues(e));e._cache.$bar=Object(a.B)(i.sort((e,n)=>e-n))}return e._cache.$bar}(n,e.type);let i,r,o,s,l=n._length;const d=()=>{32767!==o&&-32768!==o&&(Object(a.Lb)(s)&&(l=Math.min(l,Math.abs(o-s)||l)),s=o)};for(i=0,r=t.length;i<r;++i)o=n.getPixelForValue(t[i]),d();for(s=void 0,i=0,r=n.ticks.length;i<r;++i)o=n.getPixelForTick(i),d();return l}function T(e,n,t,i){return Object(a.Db)(e)?function(e,n,t,a){const i=t.parse(e[0],a),r=t.parse(e[1],a),o=Math.min(i,r),s=Math.max(i,r);let l=o,d=s;Math.abs(o)>Math.abs(s)&&(l=s,d=o),n[t.axis]=d,n._custom={barStart:l,barEnd:d,start:i,end:r,min:o,max:s}}(e,n,t,i):n[t.axis]=t.parse(e,i),n}function D(e,n,t,a){const i=e.iScale,r=e.vScale,o=i.getLabels(),s=i===r,l=[];let d,c,u,h;for(d=t,c=t+a;d<c;++d)h=n[d],u={},u[i.axis]=s||i.parse(o[d],d),l.push(T(h,u,r,d));return l}function w(e){return e&&void 0!==e.barStart&&void 0!==e.barEnd}function O(e,n,t,a){let i=n.borderSkipped;const r={};if(!i)return void(e.borderSkipped=r);if(!0===i)return void(e.borderSkipped={top:!0,right:!0,bottom:!0,left:!0});const{start:o,end:s,reverse:l,top:d,bottom:c}=function(e){let n,t,a,i,r;return e.horizontal?(n=e.base>e.x,t="left",a="right"):(n=e.base<e.y,t="bottom",a="top"),n?(i="end",r="start"):(i="start",r="end"),{start:t,end:a,reverse:n,top:i,bottom:r}}(e);"middle"===i&&t&&(e.enableBorderRadius=!0,(t._top||0)===a?i=d:(t._bottom||0)===a?i=c:(r[k(c,o,s,l)]=!0,i=d)),r[k(i,o,s,l)]=!0,e.borderSkipped=r}function k(e,n,t,a){var i,r,o;return a?(o=t,e=S(e=(i=e)===(r=n)?o:i===o?r:i,t,n)):e=S(e,n,t),e}function S(e,n,t){return"start"===e?n:"end"===e?t:e}function P(e,{inflateAmount:n},t){e.inflateAmount="auto"===n?1===t?.33:0:n}x.defaults={},x.prototype.datasetElementType=null,x.prototype.dataElementType=null;class A extends x{parsePrimitiveData(e,n,t,a){return D(e,n,t,a)}parseArrayData(e,n,t,a){return D(e,n,t,a)}parseObjectData(e,n,t,i){const{iScale:r,vScale:o}=e,{xAxisKey:s="x",yAxisKey:l="y"}=this._parsing,d="x"===r.axis?s:l,c="x"===o.axis?s:l,u=[];let h,p,f,m;for(h=t,p=t+i;h<p;++h)m=n[h],f={},f[r.axis]=r.parse(Object(a.Hb)(m,d),h),u.push(T(Object(a.Hb)(m,c),f,o,h));return u}updateRangeFromParsed(e,n,t,a){super.updateRangeFromParsed(e,n,t,a);const i=t._custom;i&&n===this._cachedMeta.vScale&&(e.min=Math.min(e.min,i.min),e.max=Math.max(e.max,i.max))}getMaxOverflow(){return 0}getLabelAndValue(e){const n=this._cachedMeta,{iScale:t,vScale:a}=n,i=this.getParsed(e),r=i._custom,o=w(r)?"["+r.start+", "+r.end+"]":""+a.getLabelForValue(i[a.axis]);return{label:""+t.getLabelForValue(i[t.axis]),value:o}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(e){const n=this._cachedMeta;this.updateElements(n.data,0,n.data.length,e)}updateElements(e,n,t,i){const r="reset"===i,{index:o,_cachedMeta:{vScale:s}}=this,l=s.getBasePixel(),d=s.isHorizontal(),c=this._getRuler(),{sharedOptions:u,includeOptions:h}=this._getSharedOptions(n,i);for(let p=n;p<n+t;p++){const n=this.getParsed(p),t=r||Object(a.Mb)(n[s.axis])?{base:l,head:l}:this._calculateBarValuePixels(p),f=this._calculateBarIndexPixels(p,c),m=(n._stacks||{})[s.axis],g={horizontal:d,base:t.base,enableBorderRadius:!m||w(n._custom)||o===m._top||o===m._bottom,x:d?t.head:f.center,y:d?f.center:t.head,height:d?f.size:Math.abs(t.size),width:d?Math.abs(t.size):f.size};h&&(g.options=u||this.resolveDataElementOptions(p,e[p].active?"active":i));const b=g.options||e[p].options;O(g,b,m,o),P(g,b,c.ratio),this.updateElement(e[p],p,g,i)}}_getStacks(e,n){const{iScale:t}=this._cachedMeta,i=t.getMatchingVisibleMetas(this._type).filter(e=>e.controller.options.grouped),r=t.options.stacked,o=[],s=e=>{const t=e.controller.getParsed(n),i=t&&t[e.vScale.axis];if(Object(a.Mb)(i)||isNaN(i))return!0};for(const t of i)if((void 0===n||!s(t))&&((!1===r||-1===o.indexOf(t.stack)||void 0===r&&void 0===t.stack)&&o.push(t.stack),t.index===e))break;return o.length||o.push(void 0),o}_getStackCount(e){return this._getStacks(void 0,e).length}_getStackIndex(e,n,t){const a=this._getStacks(e,t),i=void 0!==n?a.indexOf(n):-1;return-1===i?a.length-1:i}_getRuler(){const e=this.options,n=this._cachedMeta,t=n.iScale,a=[];let i,r;for(i=0,r=n.data.length;i<r;++i)a.push(t.getPixelForValue(this.getParsed(i)[t.axis],i));const o=e.barThickness;return{min:o||C(n),pixels:a,start:t._startPixel,end:t._endPixel,stackCount:this._getStackCount(),scale:t,grouped:e.grouped,ratio:o?1:e.categoryPercentage*e.barPercentage}}_calculateBarValuePixels(e){const{_cachedMeta:{vScale:n,_stacked:t},options:{base:i,minBarLength:r}}=this,o=i||0,s=this.getParsed(e),l=s._custom,d=w(l);let c,u,h=s[n.axis],p=0,f=t?this.applyStack(n,s,t):h;f!==h&&(p=f-h,f=h),d&&(h=l.barStart,f=l.barEnd-l.barStart,0!==h&&Object(a.Ub)(h)!==Object(a.Ub)(l.barEnd)&&(p=0),p+=h);const m=Object(a.Mb)(i)||d?p:i;let g=n.getPixelForValue(m);if(c=this.chart.getDataVisibility(e)?n.getPixelForValue(p+f):g,u=c-g,Math.abs(u)<r){u=function(e,n,t){return 0!==e?Object(a.Ub)(e):(n.isHorizontal()?1:-1)*(n.min>=t?1:-1)}(u,n,o)*r,h===o&&(g-=u/2);const e=n.getPixelForDecimal(0),t=n.getPixelForDecimal(1),i=Math.min(e,t),s=Math.max(e,t);g=Math.max(Math.min(g,s),i),c=g+u}if(g===n.getPixelForValue(o)){const e=Object(a.Ub)(u)*n.getLineWidthForValue(o)/2;g+=e,u-=e}return{size:u,base:g,head:c,center:c+u/2}}_calculateBarIndexPixels(e,n){const t=n.scale,i=this.options,r=i.skipNull,o=Object(a.Xb)(i.maxBarThickness,1/0);let s,l;if(n.grouped){const t=r?this._getStackCount(e):n.stackCount,d="flex"===i.barThickness?function(e,n,t,a){const i=n.pixels,r=i[e];let o=e>0?i[e-1]:null,s=e<i.length-1?i[e+1]:null;const l=t.categoryPercentage;null===o&&(o=r-(null===s?n.end-n.start:s-r)),null===s&&(s=r+r-o);const d=r-(r-Math.min(o,s))/2*l;return{chunk:Math.abs(s-o)/2*l/a,ratio:t.barPercentage,start:d}}(e,n,i,t):function(e,n,t,i){const r=t.barThickness;let o,s;return Object(a.Mb)(r)?(o=n.min*t.categoryPercentage,s=t.barPercentage):(o=r*i,s=1),{chunk:o/i,ratio:s,start:n.pixels[e]-o/2}}(e,n,i,t),c=this._getStackIndex(this.index,this._cachedMeta.stack,r?e:void 0);s=d.start+d.chunk*c+d.chunk/2,l=Math.min(o,d.chunk*d.ratio)}else s=t.getPixelForValue(this.getParsed(e)[t.axis],e),l=Math.min(o,n.min*n.ratio);return{base:s-l/2,head:s+l/2,center:s,size:l}}draw(){const e=this._cachedMeta,n=e.vScale,t=e.data,a=t.length;let i=0;for(;i<a;++i)null!==this.getParsed(i)[n.axis]&&t[i].draw(this._ctx)}}A.id="bar",A.defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}},A.overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};class R extends x{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(e,n,t,a){const i=super.parsePrimitiveData(e,n,t,a);for(let e=0;e<i.length;e++)i[e]._custom=this.resolveDataElementOptions(e+t).radius;return i}parseArrayData(e,n,t,i){const r=super.parseArrayData(e,n,t,i);for(let e=0;e<r.length;e++){const i=n[t+e];r[e]._custom=Object(a.Xb)(i[2],this.resolveDataElementOptions(e+t).radius)}return r}parseObjectData(e,n,t,i){const r=super.parseObjectData(e,n,t,i);for(let e=0;e<r.length;e++){const i=n[t+e];r[e]._custom=Object(a.Xb)(i&&i.r&&+i.r,this.resolveDataElementOptions(e+t).radius)}return r}getMaxOverflow(){const e=this._cachedMeta.data;let n=0;for(let t=e.length-1;t>=0;--t)n=Math.max(n,e[t].size(this.resolveDataElementOptions(t))/2);return n>0&&n}getLabelAndValue(e){const n=this._cachedMeta,{xScale:t,yScale:a}=n,i=this.getParsed(e),r=t.getLabelForValue(i.x),o=a.getLabelForValue(i.y),s=i._custom;return{label:n.label,value:"("+r+", "+o+(s?", "+s:"")+")"}}update(e){const n=this._cachedMeta.data;this.updateElements(n,0,n.length,e)}updateElements(e,n,t,a){const i="reset"===a,{iScale:r,vScale:o}=this._cachedMeta,{sharedOptions:s,includeOptions:l}=this._getSharedOptions(n,a),d=r.axis,c=o.axis;for(let u=n;u<n+t;u++){const n=e[u],t=!i&&this.getParsed(u),h={},p=h[d]=i?r.getPixelForDecimal(.5):r.getPixelForValue(t[d]),f=h[c]=i?o.getBasePixel():o.getPixelForValue(t[c]);h.skip=isNaN(p)||isNaN(f),l&&(h.options=s||this.resolveDataElementOptions(u,n.active?"active":a),i&&(h.options.radius=0)),this.updateElement(n,u,h,a)}}resolveDataElementOptions(e,n){const t=this.getParsed(e);let i=super.resolveDataElementOptions(e,n);i.$shared&&(i=Object.assign({},i,{$shared:!1}));const r=i.radius;return"active"!==n&&(i.radius=0),i.radius+=Object(a.Xb)(t&&t._custom,r),i}}R.id="bubble",R.defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}},R.overrides={scales:{x:{type:"linear"},y:{type:"linear"}},plugins:{tooltip:{callbacks:{title:()=>""}}}};class I extends x{constructor(e,n){super(e,n),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,n){const t=this.getDataset().data,i=this._cachedMeta;if(!1===this._parsing)i._parsed=t;else{let r,o,s=e=>+t[e];if(Object(a.Kb)(t[e])){const{key:e="value"}=this._parsing;s=n=>+Object(a.Hb)(t[n],e)}for(r=e,o=e+n;r<o;++r)i._parsed[r]=s(r)}}_getRotation(){return Object(a.Vb)(this.options.rotation-90)}_getCircumference(){return Object(a.Vb)(this.options.circumference)}_getRotationExtents(){let e=a.u,n=-a.u;for(let t=0;t<this.chart.data.datasets.length;++t)if(this.chart.isDatasetVisible(t)){const a=this.chart.getDatasetMeta(t).controller,i=a._getRotation(),r=a._getCircumference();e=Math.min(e,i),n=Math.max(n,i+r)}return{rotation:e,circumference:n-e}}update(e){const n=this.chart,{chartArea:t}=n,i=this._cachedMeta,r=i.data,o=this.getMaxBorderWidth()+this.getMaxOffset(r)+this.options.spacing,s=Math.max((Math.min(t.width,t.height)-o)/2,0),l=Math.min(Object(a.Ob)(this.options.cutout,s),1),d=this._getRingWeight(this.index),{circumference:c,rotation:u}=this._getRotationExtents(),{ratioX:h,ratioY:p,offsetX:f,offsetY:m}=function(e,n,t){let i=1,r=1,o=0,s=0;if(n<a.u){const l=e,d=l+n,c=Math.cos(l),u=Math.sin(l),h=Math.cos(d),p=Math.sin(d),f=(e,n,i)=>Object(a.Rb)(e,l,d,!0)?1:Math.max(n,n*t,i,i*t),m=(e,n,i)=>Object(a.Rb)(e,l,d,!0)?-1:Math.min(n,n*t,i,i*t),g=f(0,c,h),b=f(a.i,u,p),v=m(a.q,c,h),y=m(a.q+a.i,u,p);i=(g-v)/2,r=(b-y)/2,o=-(g+v)/2,s=-(b+y)/2}return{ratioX:i,ratioY:r,offsetX:o,offsetY:s}}(u,c,l),g=(t.width-o)/h,b=(t.height-o)/p,v=Math.max(Math.min(g,b)/2,0),y=Object(a.Pb)(this.options.radius,v),x=(y-Math.max(y*l,0))/this._getVisibleDatasetWeightTotal();this.offsetX=f*y,this.offsetY=m*y,i.total=this.calculateTotal(),this.outerRadius=y-x*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-x*d,0),this.updateElements(r,0,r.length,e)}_circumference(e,n){const t=this.options,i=this._cachedMeta,r=this._getCircumference();return n&&t.animation.animateRotate||!this.chart.getDataVisibility(e)||null===i._parsed[e]||i.data[e].hidden?0:this.calculateCircumference(i._parsed[e]*r/a.u)}updateElements(e,n,t,a){const i="reset"===a,r=this.chart,o=r.chartArea,s=r.options.animation,l=(o.left+o.right)/2,d=(o.top+o.bottom)/2,c=i&&s.animateScale,u=c?0:this.innerRadius,h=c?0:this.outerRadius,{sharedOptions:p,includeOptions:f}=this._getSharedOptions(n,a);let m,g=this._getRotation();for(m=0;m<n;++m)g+=this._circumference(m,i);for(m=n;m<n+t;++m){const n=this._circumference(m,i),t=e[m],r={x:l+this.offsetX,y:d+this.offsetY,startAngle:g,endAngle:g+n,circumference:n,outerRadius:h,innerRadius:u};f&&(r.options=p||this.resolveDataElementOptions(m,t.active?"active":a)),g+=n,this.updateElement(t,m,r,a)}}calculateTotal(){const e=this._cachedMeta,n=e.data;let t,a=0;for(t=0;t<n.length;t++){const i=e._parsed[t];null===i||isNaN(i)||!this.chart.getDataVisibility(t)||n[t].hidden||(a+=Math.abs(i))}return a}calculateCircumference(e){const n=this._cachedMeta.total;return n>0&&!isNaN(e)?a.u*(Math.abs(e)/n):0}getLabelAndValue(e){const n=this._cachedMeta,t=this.chart,i=t.data.labels||[],r=Object(a.Qb)(n._parsed[e],t.options.locale);return{label:i[e]||"",value:r}}getMaxBorderWidth(e){let n=0;const t=this.chart;let a,i,r,o,s;if(!e)for(a=0,i=t.data.datasets.length;a<i;++a)if(t.isDatasetVisible(a)){r=t.getDatasetMeta(a),e=r.data,o=r.controller;break}if(!e)return 0;for(a=0,i=e.length;a<i;++a)s=o.resolveDataElementOptions(a),"inner"!==s.borderAlign&&(n=Math.max(n,s.borderWidth||0,s.hoverBorderWidth||0));return n}getMaxOffset(e){let n=0;for(let t=0,a=e.length;t<a;++t){const e=this.resolveDataElementOptions(t);n=Math.max(n,e.offset||0,e.hoverOffset||0)}return n}_getRingWeightOffset(e){let n=0;for(let t=0;t<e;++t)this.chart.isDatasetVisible(t)&&(n+=this._getRingWeight(t));return n}_getRingWeight(e){return Math.max(Object(a.Xb)(this.chart.data.datasets[e].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}I.id="doughnut",I.defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"},I.descriptors={_scriptable:e=>"spacing"!==e,_indexable:e=>"spacing"!==e},I.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const n=e.data;if(n.labels.length&&n.datasets.length){const{labels:{pointStyle:t}}=e.legend.options;return n.labels.map((n,a)=>{const i=e.getDatasetMeta(0).controller.getStyle(a);return{text:n,fillStyle:i.backgroundColor,strokeStyle:i.borderColor,lineWidth:i.borderWidth,pointStyle:t,hidden:!e.getDataVisibility(a),index:a}})}return[]}},onClick(e,n,t){t.chart.toggleDataVisibility(n.index),t.chart.update()}},tooltip:{callbacks:{title:()=>"",label(e){let n=e.label;const t=": "+e.formattedValue;return Object(a.Db)(n)?(n=n.slice(),n[0]+=t):n+=t,n}}}}};class _ extends x{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){const n=this._cachedMeta,{dataset:t,data:i=[],_dataset:r}=n,o=this.chart._animationsDisabled;let{start:s,count:l}=Object(a.Sb)(n,i,o);this._drawStart=s,this._drawCount=l,Object(a.Yb)(n)&&(s=0,l=i.length),t._chart=this.chart,t._datasetIndex=this.index,t._decimated=!!r._decimated,t.points=i;const d=this.resolveDatasetElementOptions(e);this.options.showLine||(d.borderWidth=0),d.segment=this.options.segment,this.updateElement(t,void 0,{animated:!o,options:d},e),this.updateElements(i,s,l,e)}updateElements(e,n,t,i){const r="reset"===i,{iScale:o,vScale:s,_stacked:l,_dataset:d}=this._cachedMeta,{sharedOptions:c,includeOptions:u}=this._getSharedOptions(n,i),h=o.axis,p=s.axis,{spanGaps:f,segment:m}=this.options,g=Object(a.Zb)(f)?f:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||r||"none"===i;let v=n>0&&this.getParsed(n-1);for(let f=n;f<n+t;++f){const n=e[f],t=this.getParsed(f),y=b?n:{},x=Object(a.Mb)(t[p]),C=y[h]=o.getPixelForValue(t[h],f),T=y[p]=r||x?s.getBasePixel():s.getPixelForValue(l?this.applyStack(s,t,l):t[p],f);y.skip=isNaN(C)||isNaN(T)||x,y.stop=f>0&&Math.abs(t[h]-v[h])>g,m&&(y.parsed=t,y.raw=d.data[f]),u&&(y.options=c||this.resolveDataElementOptions(f,n.active?"active":i)),b||this.updateElement(n,f,y,i),v=t}}getMaxOverflow(){const e=this._cachedMeta,n=e.dataset,t=n.options&&n.options.borderWidth||0,a=e.data||[];if(!a.length)return t;const i=a[0].size(this.resolveDataElementOptions(0)),r=a[a.length-1].size(this.resolveDataElementOptions(a.length-1));return Math.max(t,i,r)/2}draw(){const e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}_.id="line",_.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},_.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class L extends x{constructor(e,n){super(e,n),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){const n=this._cachedMeta,t=this.chart,i=t.data.labels||[],r=Object(a.Qb)(n._parsed[e].r,t.options.locale);return{label:i[e]||"",value:r}}parseObjectData(e,n,t,i){return a.ac.bind(this)(e,n,t,i)}update(e){const n=this._cachedMeta.data;this._updateRadius(),this.updateElements(n,0,n.length,e)}getMinMax(){const e=this._cachedMeta,n={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((e,t)=>{const a=this.getParsed(t).r;!isNaN(a)&&this.chart.getDataVisibility(t)&&(a<n.min&&(n.min=a),a>n.max&&(n.max=a))}),n}_updateRadius(){const e=this.chart,n=e.chartArea,t=e.options,a=Math.min(n.right-n.left,n.bottom-n.top),i=Math.max(a/2,0),r=(i-Math.max(t.cutoutPercentage?i/100*t.cutoutPercentage:1,0))/e.getVisibleDatasetCount();this.outerRadius=i-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(e,n,t,i){const r="reset"===i,o=this.chart,s=o.options.animation,l=this._cachedMeta.rScale,d=l.xCenter,c=l.yCenter,u=l.getIndexAngle(0)-.5*a.q;let h,p=u;const f=360/this.countVisibleElements();for(h=0;h<n;++h)p+=this._computeAngle(h,i,f);for(h=n;h<n+t;h++){const n=e[h];let t=p,a=p+this._computeAngle(h,i,f),m=o.getDataVisibility(h)?l.getDistanceFromCenterForValue(this.getParsed(h).r):0;p=a,r&&(s.animateScale&&(m=0),s.animateRotate&&(t=a=u));const g={x:d,y:c,innerRadius:0,outerRadius:m,startAngle:t,endAngle:a,options:this.resolveDataElementOptions(h,n.active?"active":i)};this.updateElement(n,h,g,i)}}countVisibleElements(){const e=this._cachedMeta;let n=0;return e.data.forEach((e,t)=>{!isNaN(this.getParsed(t).r)&&this.chart.getDataVisibility(t)&&n++}),n}_computeAngle(e,n,t){return this.chart.getDataVisibility(e)?Object(a.Vb)(this.resolveDataElementOptions(e,n).angle||t):0}}L.id="polarArea",L.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},L.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){const n=e.data;if(n.labels.length&&n.datasets.length){const{labels:{pointStyle:t}}=e.legend.options;return n.labels.map((n,a)=>{const i=e.getDatasetMeta(0).controller.getStyle(a);return{text:n,fillStyle:i.backgroundColor,strokeStyle:i.borderColor,lineWidth:i.borderWidth,pointStyle:t,hidden:!e.getDataVisibility(a),index:a}})}return[]}},onClick(e,n,t){t.chart.toggleDataVisibility(n.index),t.chart.update()}},tooltip:{callbacks:{title:()=>"",label:e=>e.chart.data.labels[e.dataIndex]+": "+e.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class E extends I{}E.id="pie",E.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class M extends x{getLabelAndValue(e){const n=this._cachedMeta.vScale,t=this.getParsed(e);return{label:n.getLabels()[e],value:""+n.getLabelForValue(t[n.axis])}}parseObjectData(e,n,t,i){return a.ac.bind(this)(e,n,t,i)}update(e){const n=this._cachedMeta,t=n.dataset,a=n.data||[],i=n.iScale.getLabels();if(t.points=a,"resize"!==e){const n=this.resolveDatasetElementOptions(e);this.options.showLine||(n.borderWidth=0);const r={_loop:!0,_fullLoop:i.length===a.length,options:n};this.updateElement(t,void 0,r,e)}this.updateElements(a,0,a.length,e)}updateElements(e,n,t,a){const i=this._cachedMeta.rScale,r="reset"===a;for(let o=n;o<n+t;o++){const n=e[o],t=this.resolveDataElementOptions(o,n.active?"active":a),s=i.getPointPositionForValue(o,this.getParsed(o).r),l=r?i.xCenter:s.x,d=r?i.yCenter:s.y,c={x:l,y:d,angle:s.angle,skip:isNaN(l)||isNaN(d),options:t};this.updateElement(n,o,c,a)}}}M.id="radar",M.defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}},M.overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};class j{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(e){const{x:n,y:t}=this.getProps(["x","y"],e);return{x:n,y:t}}hasValue(){return Object(a.Zb)(this.x)&&Object(a.Zb)(this.y)}getProps(e,n){const t=this.$animations;if(!n||!t)return this;const a={};return e.forEach(e=>{a[e]=t[e]&&t[e].active()?t[e]._to:this[e]}),a}}j.defaults={},j.defaultRoutes=void 0;const U={values:e=>Object(a.Db)(e)?e:""+e,numeric(e,n,t){if(0===e)return"0";const i=this.chart.options.locale;let r,o=e;if(t.length>1){const n=Math.max(Math.abs(t[0].value),Math.abs(t[t.length-1].value));(n<1e-4||n>1e15)&&(r="scientific"),o=function(e,n){let t=n.length>3?n[2].value-n[1].value:n[1].value-n[0].value;Math.abs(t)>=1&&e!==Math.floor(e)&&(t=e-Math.floor(e));return t}(e,t)}const s=Object(a.bc)(Math.abs(o)),l=Math.max(Math.min(-1*Math.floor(s),20),0),d={notation:r,minimumFractionDigits:l,maximumFractionDigits:l};return Object.assign(d,this.options.ticks.format),Object(a.Qb)(e,i,d)},logarithmic(e,n,t){if(0===e)return"0";const i=e/Math.pow(10,Math.floor(Object(a.bc)(e)));return 1===i||2===i||5===i?U.numeric.call(this,e,n,t):""}};var N={formatters:U};function B(e,n){const t=e.options.ticks,i=t.maxTicksLimit||function(e){const n=e.options.offset,t=e._tickSize(),a=e._length/t+(n?0:1),i=e._maxLength/t;return Math.floor(Math.min(a,i))}(e),r=t.major.enabled?function(e){const n=[];let t,a;for(t=0,a=e.length;t<a;t++)e[t].major&&n.push(t);return n}(n):[],o=r.length,s=r[0],l=r[o-1],d=[];if(o>i)return function(e,n,t,a){let i,r=0,o=t[0];for(a=Math.ceil(a),i=0;i<e.length;i++)i===o&&(n.push(e[i]),r++,o=t[r*a])}(n,d,r,o/i),d;const c=function(e,n,t){const i=function(e){const n=e.length;let t,a;if(n<2)return!1;for(a=e[0],t=1;t<n;++t)if(e[t]-e[t-1]!==a)return!1;return a}(e),r=n.length/t;if(!i)return Math.max(r,1);const o=Object(a.b)(i);for(let e=0,n=o.length-1;e<n;e++){const n=o[e];if(n>r)return n}return Math.max(r,1)}(r,n,i);if(o>0){let e,t;const i=o>1?Math.round((l-s)/(o-1)):null;for(F(n,d,c,Object(a.Mb)(i)?0:s-i,s),e=0,t=o-1;e<t;e++)F(n,d,c,r[e],r[e+1]);return F(n,d,c,l,Object(a.Mb)(i)?n.length:l+i),d}return F(n,d,c),d}function F(e,n,t,i,r){const o=Object(a.Xb)(i,0),s=Math.min(Object(a.Xb)(r,e.length),e.length);let l,d,c,u=0;for(t=Math.ceil(t),r&&(l=r-i,t=l/Math.floor(l/t)),c=o;c<0;)u++,c=Math.round(o+u*t);for(d=Math.max(o,0);d<s;d++)d===c&&(n.push(e[d]),u++,c=Math.round(o+u*t))}a.Fb.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(e,n)=>n.lineWidth,tickColor:(e,n)=>n.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:N.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),a.Fb.route("scale.ticks","color","","color"),a.Fb.route("scale.grid","color","","borderColor"),a.Fb.route("scale.grid","borderColor","","borderColor"),a.Fb.route("scale.title","color","","color"),a.Fb.describe("scale",{_fallback:!1,_scriptable:e=>!e.startsWith("before")&&!e.startsWith("after")&&"callback"!==e&&"parser"!==e,_indexable:e=>"borderDash"!==e&&"tickBorderDash"!==e}),a.Fb.describe("scales",{_fallback:"scale"}),a.Fb.describe("scale.ticks",{_scriptable:e=>"backdropPadding"!==e&&"callback"!==e,_indexable:e=>"backdropPadding"!==e});const z=(e,n,t)=>"top"===n||"left"===n?e[n]+t:e[n]-t;function H(e,n){const t=[],a=e.length/n,i=e.length;let r=0;for(;r<i;r+=a)t.push(e[Math.floor(r)]);return t}function V(e,n,t){const a=e.ticks.length,i=Math.min(n,a-1),r=e._startPixel,o=e._endPixel;let s,l=e.getPixelForTick(i);if(!(t&&(s=1===a?Math.max(l-r,o-l):0===n?(e.getPixelForTick(1)-l)/2:(l-e.getPixelForTick(i-1))/2,l+=i<n?s:-s,l<r-1e-6||l>o+1e-6)))return l}function W(e){return e.drawTicks?e.tickLength:0}function Y(e,n){if(!e.display)return 0;const t=Object(a.p)(e.font,n),i=Object(a.l)(e.padding);return(Object(a.Db)(e.text)?e.text.length:1)*t.lineHeight+i.height}function $(e,n,t){let i=Object(a.s)(e);return(t&&"right"!==n||!t&&"right"===n)&&(i=(e=>"left"===e?"right":"right"===e?"left":e)(i)),i}class G extends j{constructor(e){super(),this.id=e.id,this.type=e.type,this.options=void 0,this.ctx=e.ctx,this.chart=e.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(e){this.options=e.setContext(this.getContext()),this.axis=e.axis,this._userMin=this.parse(e.min),this._userMax=this.parse(e.max),this._suggestedMin=this.parse(e.suggestedMin),this._suggestedMax=this.parse(e.suggestedMax)}parse(e,n){return e}getUserBounds(){let{_userMin:e,_userMax:n,_suggestedMin:t,_suggestedMax:i}=this;return e=Object(a.c)(e,Number.POSITIVE_INFINITY),n=Object(a.c)(n,Number.NEGATIVE_INFINITY),t=Object(a.c)(t,Number.POSITIVE_INFINITY),i=Object(a.c)(i,Number.NEGATIVE_INFINITY),{min:Object(a.c)(e,t),max:Object(a.c)(n,i),minDefined:Object(a.Ib)(e),maxDefined:Object(a.Ib)(n)}}getMinMax(e){let n,{min:t,max:i,minDefined:r,maxDefined:o}=this.getUserBounds();if(r&&o)return{min:t,max:i};const s=this.getMatchingVisibleMetas();for(let a=0,l=s.length;a<l;++a)n=s[a].controller.getMinMax(this,e),r||(t=Math.min(t,n.min)),o||(i=Math.max(i,n.max));return t=o&&t>i?i:t,i=r&&t>i?t:i,{min:Object(a.c)(t,Object(a.c)(i,t)),max:Object(a.c)(i,Object(a.c)(t,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Object(a.d)(this.options.beforeUpdate,[this])}update(e,n,t){const{beginAtZero:i,grace:r,ticks:o}=this.options,s=o.sampleSize;this.beforeUpdate(),this.maxWidth=e,this.maxHeight=n,this._margins=t=Object.assign({left:0,right:0,top:0,bottom:0},t),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+t.left+t.right:this.height+t.top+t.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Object(a.e)(this,r,i),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=s<this.ticks.length;this._convertTicksToLabels(l?H(this.ticks,s):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||"auto"===o.source)&&(this.ticks=B(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),l&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let e,n,t=this.options.reverse;this.isHorizontal()?(e=this.left,n=this.right):(e=this.top,n=this.bottom,t=!t),this._startPixel=e,this._endPixel=n,this._reversePixels=t,this._length=n-e,this._alignToPixels=this.options.alignToPixels}afterUpdate(){Object(a.d)(this.options.afterUpdate,[this])}beforeSetDimensions(){Object(a.d)(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){Object(a.d)(this.options.afterSetDimensions,[this])}_callHooks(e){this.chart.notifyPlugins(e,this.getContext()),Object(a.d)(this.options[e],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){Object(a.d)(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(e){const n=this.options.ticks;let t,i,r;for(t=0,i=e.length;t<i;t++)r=e[t],r.label=Object(a.d)(n.callback,[r.value,t,e],this)}afterTickToLabelConversion(){Object(a.d)(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){Object(a.d)(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const e=this.options,n=e.ticks,t=this.ticks.length,i=n.minRotation||0,r=n.maxRotation;let o,s,l,d=i;if(!this._isVisible()||!n.display||i>=r||t<=1||!this.isHorizontal())return void(this.labelRotation=i);const c=this._getLabelSizes(),u=c.widest.width,h=c.highest.height,p=Object(a.f)(this.chart.width-u,0,this.maxWidth);o=e.offset?this.maxWidth/t:p/(t-1),u+6>o&&(o=p/(t-(e.offset?.5:1)),s=this.maxHeight-W(e.grid)-n.padding-Y(e.title,this.chart.options.font),l=Math.sqrt(u*u+h*h),d=Object(a.g)(Math.min(Math.asin(Object(a.f)((c.highest.height+6)/o,-1,1)),Math.asin(Object(a.f)(s/l,-1,1))-Math.asin(Object(a.f)(h/l,-1,1)))),d=Math.max(i,Math.min(r,d))),this.labelRotation=d}afterCalculateLabelRotation(){Object(a.d)(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Object(a.d)(this.options.beforeFit,[this])}fit(){const e={width:0,height:0},{chart:n,options:{ticks:t,title:i,grid:r}}=this,o=this._isVisible(),s=this.isHorizontal();if(o){const o=Y(i,n.options.font);if(s?(e.width=this.maxWidth,e.height=W(r)+o):(e.height=this.maxHeight,e.width=W(r)+o),t.display&&this.ticks.length){const{first:n,last:i,widest:r,highest:o}=this._getLabelSizes(),l=2*t.padding,d=Object(a.Vb)(this.labelRotation),c=Math.cos(d),u=Math.sin(d);if(s){const n=t.mirror?0:u*r.width+c*o.height;e.height=Math.min(this.maxHeight,e.height+n+l)}else{const n=t.mirror?0:c*r.width+u*o.height;e.width=Math.min(this.maxWidth,e.width+n+l)}this._calculatePadding(n,i,u,c)}}this._handleMargins(),s?(this.width=this._length=n.width-this._margins.left-this._margins.right,this.height=e.height):(this.width=e.width,this.height=this._length=n.height-this._margins.top-this._margins.bottom)}_calculatePadding(e,n,t,a){const{ticks:{align:i,padding:r},position:o}=this.options,s=0!==this.labelRotation,l="top"!==o&&"x"===this.axis;if(this.isHorizontal()){const o=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,u=0;s?l?(c=a*e.width,u=t*n.height):(c=t*e.height,u=a*n.width):"start"===i?u=n.width:"end"===i?c=e.width:"inner"!==i&&(c=e.width/2,u=n.width/2),this.paddingLeft=Math.max((c-o+r)*this.width/(this.width-o),0),this.paddingRight=Math.max((u-d+r)*this.width/(this.width-d),0)}else{let t=n.height/2,a=e.height/2;"start"===i?(t=0,a=e.height):"end"===i&&(t=n.height,a=0),this.paddingTop=t+r,this.paddingBottom=a+r}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Object(a.d)(this.options.afterFit,[this])}isHorizontal(){const{axis:e,position:n}=this.options;return"top"===n||"bottom"===n||"x"===e}isFullSize(){return this.options.fullSize}_convertTicksToLabels(e){let n,t;for(this.beforeTickToLabelConversion(),this.generateTickLabels(e),n=0,t=e.length;n<t;n++)Object(a.Mb)(e[n].label)&&(e.splice(n,1),t--,n--);this.afterTickToLabelConversion()}_getLabelSizes(){let e=this._labelSizes;if(!e){const n=this.options.ticks.sampleSize;let t=this.ticks;n<t.length&&(t=H(t,n)),this._labelSizes=e=this._computeLabelSizes(t,t.length)}return e}_computeLabelSizes(e,n){const{ctx:t,_longestTextCache:i}=this,r=[],o=[];let s,l,d,c,u,h,p,f,m,g,b,v=0,y=0;for(s=0;s<n;++s){if(c=e[s].label,u=this._resolveTickFontOptions(s),t.font=h=u.string,p=i[h]=i[h]||{data:{},gc:[]},f=u.lineHeight,m=g=0,Object(a.Mb)(c)||Object(a.Db)(c)){if(Object(a.Db)(c))for(l=0,d=c.length;l<d;++l)b=c[l],Object(a.Mb)(b)||Object(a.Db)(b)||(m=Object(a.h)(t,p.data,p.gc,m,b),g+=f)}else m=Object(a.h)(t,p.data,p.gc,m,c),g=f;r.push(m),o.push(g),v=Math.max(m,v),y=Math.max(g,y)}!function(e,n){Object(a.r)(e,e=>{const t=e.gc,a=t.length/2;let i;if(a>n){for(i=0;i<a;++i)delete e.data[t[i]];t.splice(0,a)}})}(i,n);const x=r.indexOf(v),C=o.indexOf(y),T=e=>({width:r[e]||0,height:o[e]||0});return{first:T(0),last:T(n-1),widest:T(x),highest:T(C),widths:r,heights:o}}getLabelForValue(e){return e}getPixelForValue(e,n){return NaN}getValueForPixel(e){}getPixelForTick(e){const n=this.ticks;return e<0||e>n.length-1?null:this.getPixelForValue(n[e].value)}getPixelForDecimal(e){this._reversePixels&&(e=1-e);const n=this._startPixel+e*this._length;return Object(a.j)(this._alignToPixels?Object(a.k)(this.chart,n,0):n)}getDecimalForPixel(e){const n=(e-this._startPixel)/this._length;return this._reversePixels?1-n:n}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:e,max:n}=this;return e<0&&n<0?n:e>0&&n>0?e:0}getContext(e){const n=this.ticks||[];if(e>=0&&e<n.length){const t=n[e];return t.$context||(t.$context=function(e,n,t){return Object(a.Jb)(e,{tick:t,index:n,type:"tick"})}(this.getContext(),e,t))}return this.$context||(this.$context=(t=this.chart.getContext(),i=this,Object(a.Jb)(t,{scale:i,type:"scale"})));var t,i}_tickSize(){const e=this.options.ticks,n=Object(a.Vb)(this.labelRotation),t=Math.abs(Math.cos(n)),i=Math.abs(Math.sin(n)),r=this._getLabelSizes(),o=e.autoSkipPadding||0,s=r?r.widest.width+o:0,l=r?r.highest.height+o:0;return this.isHorizontal()?l*t>s*i?s/t:l/i:l*i<s*t?l/t:s/i}_isVisible(){const e=this.options.display;return"auto"!==e?!!e:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(e){const n=this.axis,t=this.chart,i=this.options,{grid:r,position:o}=i,s=r.offset,l=this.isHorizontal(),d=this.ticks.length+(s?1:0),c=W(r),u=[],h=r.setContext(this.getContext()),p=h.drawBorder?h.borderWidth:0,f=p/2,m=function(e){return Object(a.k)(t,e,p)};let g,b,v,y,x,C,T,D,w,O,k,S;if("top"===o)g=m(this.bottom),C=this.bottom-c,D=g-f,O=m(e.top)+f,S=e.bottom;else if("bottom"===o)g=m(this.top),O=e.top,S=m(e.bottom)-f,C=g+f,D=this.top+c;else if("left"===o)g=m(this.right),x=this.right-c,T=g-f,w=m(e.left)+f,k=e.right;else if("right"===o)g=m(this.left),w=e.left,k=m(e.right)-f,x=g+f,T=this.left+c;else if("x"===n){if("center"===o)g=m((e.top+e.bottom)/2+.5);else if(Object(a.Kb)(o)){const e=Object.keys(o)[0],n=o[e];g=m(this.chart.scales[e].getPixelForValue(n))}O=e.top,S=e.bottom,C=g+f,D=C+c}else if("y"===n){if("center"===o)g=m((e.left+e.right)/2);else if(Object(a.Kb)(o)){const e=Object.keys(o)[0],n=o[e];g=m(this.chart.scales[e].getPixelForValue(n))}x=g-f,T=x-c,w=e.left,k=e.right}const P=Object(a.Xb)(i.ticks.maxTicksLimit,d),A=Math.max(1,Math.ceil(d/P));for(b=0;b<d;b+=A){const e=r.setContext(this.getContext(b)),n=e.lineWidth,i=e.color,o=e.borderDash||[],d=e.borderDashOffset,c=e.tickWidth,h=e.tickColor,p=e.tickBorderDash||[],f=e.tickBorderDashOffset;v=V(this,b,s),void 0!==v&&(y=Object(a.k)(t,v,n),l?x=T=w=k=y:C=D=O=S=y,u.push({tx1:x,ty1:C,tx2:T,ty2:D,x1:w,y1:O,x2:k,y2:S,width:n,color:i,borderDash:o,borderDashOffset:d,tickWidth:c,tickColor:h,tickBorderDash:p,tickBorderDashOffset:f}))}return this._ticksLength=d,this._borderValue=g,u}_computeLabelItems(e){const n=this.axis,t=this.options,{position:i,ticks:r}=t,o=this.isHorizontal(),s=this.ticks,{align:l,crossAlign:d,padding:c,mirror:u}=r,h=W(t.grid),p=h+c,f=u?-c:p,m=-Object(a.Vb)(this.labelRotation),g=[];let b,v,y,x,C,T,D,w,O,k,S,P,A="middle";if("top"===i)T=this.bottom-f,D=this._getXAxisLabelAlignment();else if("bottom"===i)T=this.top+f,D=this._getXAxisLabelAlignment();else if("left"===i){const e=this._getYAxisLabelAlignment(h);D=e.textAlign,C=e.x}else if("right"===i){const e=this._getYAxisLabelAlignment(h);D=e.textAlign,C=e.x}else if("x"===n){if("center"===i)T=(e.top+e.bottom)/2+p;else if(Object(a.Kb)(i)){const e=Object.keys(i)[0],n=i[e];T=this.chart.scales[e].getPixelForValue(n)+p}D=this._getXAxisLabelAlignment()}else if("y"===n){if("center"===i)C=(e.left+e.right)/2-p;else if(Object(a.Kb)(i)){const e=Object.keys(i)[0],n=i[e];C=this.chart.scales[e].getPixelForValue(n)}D=this._getYAxisLabelAlignment(h).textAlign}"y"===n&&("start"===l?A="top":"end"===l&&(A="bottom"));const R=this._getLabelSizes();for(b=0,v=s.length;b<v;++b){y=s[b],x=y.label;const e=r.setContext(this.getContext(b));w=this.getPixelForTick(b)+r.labelOffset,O=this._resolveTickFontOptions(b),k=O.lineHeight,S=Object(a.Db)(x)?x.length:1;const n=S/2,t=e.color,l=e.textStrokeColor,c=e.textStrokeWidth;let h,p=D;if(o?(C=w,"inner"===D&&(p=b===v-1?this.options.reverse?"left":"right":0===b?this.options.reverse?"right":"left":"center"),P="top"===i?"near"===d||0!==m?-S*k+k/2:"center"===d?-R.highest.height/2-n*k+k:-R.highest.height+k/2:"near"===d||0!==m?k/2:"center"===d?R.highest.height/2-n*k:R.highest.height-S*k,u&&(P*=-1)):(T=w,P=(1-S)*k/2),e.showLabelBackdrop){const n=Object(a.l)(e.backdropPadding),t=R.heights[b],i=R.widths[b];let r=T+P-n.top,o=C-n.left;switch(A){case"middle":r-=t/2;break;case"bottom":r-=t}switch(D){case"center":o-=i/2;break;case"right":o-=i}h={left:o,top:r,width:i+n.width,height:t+n.height,color:e.backdropColor}}g.push({rotation:m,label:x,font:O,color:t,strokeColor:l,strokeWidth:c,textOffset:P,textAlign:p,textBaseline:A,translation:[C,T],backdrop:h})}return g}_getXAxisLabelAlignment(){const{position:e,ticks:n}=this.options;if(-Object(a.Vb)(this.labelRotation))return"top"===e?"left":"right";let t="center";return"start"===n.align?t="left":"end"===n.align?t="right":"inner"===n.align&&(t="inner"),t}_getYAxisLabelAlignment(e){const{position:n,ticks:{crossAlign:t,mirror:a,padding:i}}=this.options,r=e+i,o=this._getLabelSizes().widest.width;let s,l;return"left"===n?a?(l=this.right+i,"near"===t?s="left":"center"===t?(s="center",l+=o/2):(s="right",l+=o)):(l=this.right-r,"near"===t?s="right":"center"===t?(s="center",l-=o/2):(s="left",l=this.left)):"right"===n?a?(l=this.left+i,"near"===t?s="right":"center"===t?(s="center",l-=o/2):(s="left",l-=o)):(l=this.left+r,"near"===t?s="left":"center"===t?(s="center",l+=o/2):(s="right",l=this.right)):s="right",{textAlign:s,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const e=this.chart,n=this.options.position;return"left"===n||"right"===n?{top:0,left:this.left,bottom:e.height,right:this.right}:"top"===n||"bottom"===n?{top:this.top,left:0,bottom:this.bottom,right:e.width}:void 0}drawBackground(){const{ctx:e,options:{backgroundColor:n},left:t,top:a,width:i,height:r}=this;n&&(e.save(),e.fillStyle=n,e.fillRect(t,a,i,r),e.restore())}getLineWidthForValue(e){const n=this.options.grid;if(!this._isVisible()||!n.display)return 0;const t=this.ticks.findIndex(n=>n.value===e);if(t>=0){return n.setContext(this.getContext(t)).lineWidth}return 0}drawGrid(e){const n=this.options.grid,t=this.ctx,a=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(e));let i,r;const o=(e,n,a)=>{a.width&&a.color&&(t.save(),t.lineWidth=a.width,t.strokeStyle=a.color,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset,t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(n.x,n.y),t.stroke(),t.restore())};if(n.display)for(i=0,r=a.length;i<r;++i){const e=a[i];n.drawOnChartArea&&o({x:e.x1,y:e.y1},{x:e.x2,y:e.y2},e),n.drawTicks&&o({x:e.tx1,y:e.ty1},{x:e.tx2,y:e.ty2},{color:e.tickColor,width:e.tickWidth,borderDash:e.tickBorderDash,borderDashOffset:e.tickBorderDashOffset})}}drawBorder(){const{chart:e,ctx:n,options:{grid:t}}=this,i=t.setContext(this.getContext()),r=t.drawBorder?i.borderWidth:0;if(!r)return;const o=t.setContext(this.getContext(0)).lineWidth,s=this._borderValue;let l,d,c,u;this.isHorizontal()?(l=Object(a.k)(e,this.left,r)-r/2,d=Object(a.k)(e,this.right,o)+o/2,c=u=s):(c=Object(a.k)(e,this.top,r)-r/2,u=Object(a.k)(e,this.bottom,o)+o/2,l=d=s),n.save(),n.lineWidth=i.borderWidth,n.strokeStyle=i.borderColor,n.beginPath(),n.moveTo(l,c),n.lineTo(d,u),n.stroke(),n.restore()}drawLabels(e){if(!this.options.ticks.display)return;const n=this.ctx,t=this._computeLabelArea();t&&Object(a.m)(n,t);const i=this._labelItems||(this._labelItems=this._computeLabelItems(e));let r,o;for(r=0,o=i.length;r<o;++r){const e=i[r],t=e.font,o=e.label;e.backdrop&&(n.fillStyle=e.backdrop.color,n.fillRect(e.backdrop.left,e.backdrop.top,e.backdrop.width,e.backdrop.height));let s=e.textOffset;Object(a.n)(n,o,0,s,t,e)}t&&Object(a.o)(n)}drawTitle(){const{ctx:e,options:{position:n,title:t,reverse:i}}=this;if(!t.display)return;const r=Object(a.p)(t.font),o=Object(a.l)(t.padding),s=t.align;let l=r.lineHeight/2;"bottom"===n||"center"===n||Object(a.Kb)(n)?(l+=o.bottom,Object(a.Db)(t.text)&&(l+=r.lineHeight*(t.text.length-1))):l+=o.top;const{titleX:d,titleY:c,maxWidth:u,rotation:h}=function(e,n,t,i){const{top:r,left:o,bottom:s,right:l,chart:d}=e,{chartArea:c,scales:u}=d;let h,p,f,m=0;const g=s-r,b=l-o;if(e.isHorizontal()){if(p=Object(a.t)(i,o,l),Object(a.Kb)(t)){const e=Object.keys(t)[0],a=t[e];f=u[e].getPixelForValue(a)+g-n}else f="center"===t?(c.bottom+c.top)/2+g-n:z(e,t,n);h=l-o}else{if(Object(a.Kb)(t)){const e=Object.keys(t)[0],a=t[e];p=u[e].getPixelForValue(a)-b+n}else p="center"===t?(c.left+c.right)/2-b+n:z(e,t,n);f=Object(a.t)(i,s,r),m="left"===t?-a.i:a.i}return{titleX:p,titleY:f,maxWidth:h,rotation:m}}(this,l,n,s);Object(a.n)(e,t.text,0,0,r,{color:t.color,maxWidth:u,rotation:h,textAlign:$(s,n,i),textBaseline:"middle",translation:[d,c]})}draw(e){this._isVisible()&&(this.drawBackground(),this.drawGrid(e),this.drawBorder(),this.drawTitle(),this.drawLabels(e))}_layers(){const e=this.options,n=e.ticks&&e.ticks.z||0,t=Object(a.Xb)(e.grid&&e.grid.z,-1);return this._isVisible()&&this.draw===G.prototype.draw?[{z:t,draw:e=>{this.drawBackground(),this.drawGrid(e),this.drawTitle()}},{z:t+1,draw:()=>{this.drawBorder()}},{z:n,draw:e=>{this.drawLabels(e)}}]:[{z:n,draw:e=>{this.draw(e)}}]}getMatchingVisibleMetas(e){const n=this.chart.getSortedVisibleDatasetMetas(),t=this.axis+"AxisID",a=[];let i,r;for(i=0,r=n.length;i<r;++i){const r=n[i];r[t]!==this.id||e&&r.type!==e||a.push(r)}return a}_resolveTickFontOptions(e){const n=this.options.ticks.setContext(this.getContext(e));return Object(a.p)(n.font)}_maxDigits(){const e=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/e}}class q{constructor(e,n,t){this.type=e,this.scope=n,this.override=t,this.items=Object.create(null)}isForType(e){return Object.prototype.isPrototypeOf.call(this.type.prototype,e.prototype)}register(e){const n=Object.getPrototypeOf(e);let t;(function(e){return"id"in e&&"defaults"in e})(n)&&(t=this.register(n));const i=this.items,r=e.id,o=this.scope+"."+r;if(!r)throw new Error("class does not have id: "+e);return r in i||(i[r]=e,function(e,n,t){const i=Object(a.w)(Object.create(null),[t?a.Fb.get(t):{},a.Fb.get(n),e.defaults]);a.Fb.set(n,i),e.defaultRoutes&&function(e,n){Object.keys(n).forEach(t=>{const i=t.split("."),r=i.pop(),o=[e].concat(i).join("."),s=n[t].split("."),l=s.pop(),d=s.join(".");a.Fb.route(o,r,d,l)})}(n,e.defaultRoutes);e.descriptors&&a.Fb.describe(n,e.descriptors)}(e,o,t),this.override&&a.Fb.override(e.id,e.overrides)),o}get(e){return this.items[e]}unregister(e){const n=this.items,t=e.id,i=this.scope;t in n&&delete n[t],i&&t in a.Fb[i]&&(delete a.Fb[i][t],this.override&&delete a.v[t])}}var X=new class{constructor(){this.controllers=new q(x,"datasets",!0),this.elements=new q(j,"elements"),this.plugins=new q(Object,"plugins"),this.scales=new q(G,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...e){this._each("register",e)}remove(...e){this._each("unregister",e)}addControllers(...e){this._each("register",e,this.controllers)}addElements(...e){this._each("register",e,this.elements)}addPlugins(...e){this._each("register",e,this.plugins)}addScales(...e){this._each("register",e,this.scales)}getController(e){return this._get(e,this.controllers,"controller")}getElement(e){return this._get(e,this.elements,"element")}getPlugin(e){return this._get(e,this.plugins,"plugin")}getScale(e){return this._get(e,this.scales,"scale")}removeControllers(...e){this._each("unregister",e,this.controllers)}removeElements(...e){this._each("unregister",e,this.elements)}removePlugins(...e){this._each("unregister",e,this.plugins)}removeScales(...e){this._each("unregister",e,this.scales)}_each(e,n,t){[...n].forEach(n=>{const i=t||this._getRegistryForType(n);t||i.isForType(n)||i===this.plugins&&n.id?this._exec(e,i,n):Object(a.r)(n,n=>{const a=t||this._getRegistryForType(n);this._exec(e,a,n)})})}_exec(e,n,t){const i=Object(a.x)(e);Object(a.d)(t["before"+i],[],t),n[e](t),Object(a.d)(t["after"+i],[],t)}_getRegistryForType(e){for(let n=0;n<this._typedRegistries.length;n++){const t=this._typedRegistries[n];if(t.isForType(e))return t}return this.plugins}_get(e,n,t){const a=n.get(e);if(void 0===a)throw new Error('"'+e+'" is not a registered '+t+".");return a}};class J extends x{update(e){const n=this._cachedMeta,{data:t=[]}=n,i=this.chart._animationsDisabled;let{start:r,count:o}=Object(a.Sb)(n,t,i);if(this._drawStart=r,this._drawCount=o,Object(a.Yb)(n)&&(r=0,o=t.length),this.options.showLine){const{dataset:a,_dataset:r}=n;a._chart=this.chart,a._datasetIndex=this.index,a._decimated=!!r._decimated,a.points=t;const o=this.resolveDatasetElementOptions(e);o.segment=this.options.segment,this.updateElement(a,void 0,{animated:!i,options:o},e)}this.updateElements(t,r,o,e)}addElements(){const{showLine:e}=this.options;!this.datasetElementType&&e&&(this.datasetElementType=X.getElement("line")),super.addElements()}updateElements(e,n,t,i){const r="reset"===i,{iScale:o,vScale:s,_stacked:l,_dataset:d}=this._cachedMeta,c=this.resolveDataElementOptions(n,i),u=this.getSharedOptions(c),h=this.includeOptions(i,u),p=o.axis,f=s.axis,{spanGaps:m,segment:g}=this.options,b=Object(a.Zb)(m)?m:Number.POSITIVE_INFINITY,v=this.chart._animationsDisabled||r||"none"===i;let y=n>0&&this.getParsed(n-1);for(let c=n;c<n+t;++c){const n=e[c],t=this.getParsed(c),m=v?n:{},x=Object(a.Mb)(t[f]),C=m[p]=o.getPixelForValue(t[p],c),T=m[f]=r||x?s.getBasePixel():s.getPixelForValue(l?this.applyStack(s,t,l):t[f],c);m.skip=isNaN(C)||isNaN(T)||x,m.stop=c>0&&Math.abs(t[p]-y[p])>b,g&&(m.parsed=t,m.raw=d.data[c]),h&&(m.options=u||this.resolveDataElementOptions(c,n.active?"active":i)),v||this.updateElement(n,c,m,i),y=t}this.updateSharedOptions(u,i,c)}getMaxOverflow(){const e=this._cachedMeta,n=e.data||[];if(!this.options.showLine){let e=0;for(let t=n.length-1;t>=0;--t)e=Math.max(e,n[t].size(this.resolveDataElementOptions(t))/2);return e>0&&e}const t=e.dataset,a=t.options&&t.options.borderWidth||0;if(!n.length)return a;const i=n[0].size(this.resolveDataElementOptions(0)),r=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(a,i,r)/2}}J.id="scatter",J.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1},J.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title:()=>"",label:e=>"("+e.label+", "+e.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Z=Object.freeze({__proto__:null,BarController:A,BubbleController:R,DoughnutController:I,LineController:_,PolarAreaController:L,PieController:E,RadarController:M,ScatterController:J});function K(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Q{constructor(e){this.options=e||{}}init(e){}formats(){return K()}parse(e,n){return K()}format(e,n){return K()}add(e,n,t){return K()}diff(e,n,t){return K()}startOf(e,n,t){return K()}endOf(e,n){return K()}}Q.override=function(e){Object.assign(Q.prototype,e)};var ee={_date:Q};function ne(e,n,t,i){const{controller:r,data:o,_sorted:s}=e,l=r._cachedMeta.iScale;if(l&&n===l.axis&&"r"!==n&&s&&o.length){const e=l._reversePixels?a.z:a.A;if(!i)return e(o,n,t);if(r._sharedOptions){const a=o[0],i="function"==typeof a.getRange&&a.getRange(n);if(i){const a=e(o,n,t-i),r=e(o,n,t+i);return{lo:a.lo,hi:r.hi}}}}return{lo:0,hi:o.length-1}}function te(e,n,t,a,i){const r=e.getSortedVisibleDatasetMetas(),o=t[n];for(let e=0,t=r.length;e<t;++e){const{index:t,data:s}=r[e],{lo:l,hi:d}=ne(r[e],n,o,i);for(let e=l;e<=d;++e){const n=s[e];n.skip||a(n,t,e)}}}function ae(e,n,t,i,r){const o=[];if(!r&&!e.isPointInArea(n))return o;return te(e,t,n,(function(t,s,l){(r||Object(a.a)(t,e.chartArea,0))&&t.inRange(n.x,n.y,i)&&o.push({element:t,datasetIndex:s,index:l})}),!0),o}function ie(e,n,t,a,i,r){let o=[];const s=function(e){const n=-1!==e.indexOf("x"),t=-1!==e.indexOf("y");return function(e,a){const i=n?Math.abs(e.x-a.x):0,r=t?Math.abs(e.y-a.y):0;return Math.sqrt(Math.pow(i,2)+Math.pow(r,2))}}(t);let l=Number.POSITIVE_INFINITY;return te(e,t,n,(function(t,d,c){const u=t.inRange(n.x,n.y,i);if(a&&!u)return;const h=t.getCenterPoint(i);if(!(!!r||e.isPointInArea(h))&&!u)return;const p=s(n,h);p<l?(o=[{element:t,datasetIndex:d,index:c}],l=p):p===l&&o.push({element:t,datasetIndex:d,index:c})})),o}function re(e,n,t,i,r,o){return o||e.isPointInArea(n)?"r"!==t||i?ie(e,n,t,i,r,o):function(e,n,t,i){let r=[];return te(e,t,n,(function(e,t,o){const{startAngle:s,endAngle:l}=e.getProps(["startAngle","endAngle"],i),{angle:d}=Object(a.D)(e,{x:n.x,y:n.y});Object(a.Rb)(d,s,l)&&r.push({element:e,datasetIndex:t,index:o})})),r}(e,n,t,r):[]}function oe(e,n,t,a,i){const r=[],o="x"===t?"inXRange":"inYRange";let s=!1;return te(e,t,n,(e,a,l)=>{e[o](n[t],i)&&(r.push({element:e,datasetIndex:a,index:l}),s=s||e.inRange(n.x,n.y,i))}),a&&!s?[]:r}var se={evaluateInteractionItems:te,modes:{index(e,n,t,i){const r=Object(a.y)(n,e),o=t.axis||"x",s=t.includeInvisible||!1,l=t.intersect?ae(e,r,o,i,s):re(e,r,o,!1,i,s),d=[];return l.length?(e.getSortedVisibleDatasetMetas().forEach(e=>{const n=l[0].index,t=e.data[n];t&&!t.skip&&d.push({element:t,datasetIndex:e.index,index:n})}),d):[]},dataset(e,n,t,i){const r=Object(a.y)(n,e),o=t.axis||"xy",s=t.includeInvisible||!1;let l=t.intersect?ae(e,r,o,i,s):re(e,r,o,!1,i,s);if(l.length>0){const n=l[0].datasetIndex,t=e.getDatasetMeta(n).data;l=[];for(let e=0;e<t.length;++e)l.push({element:t[e],datasetIndex:n,index:e})}return l},point:(e,n,t,i)=>ae(e,Object(a.y)(n,e),t.axis||"xy",i,t.includeInvisible||!1),nearest(e,n,t,i){const r=Object(a.y)(n,e),o=t.axis||"xy",s=t.includeInvisible||!1;return re(e,r,o,t.intersect,i,s)},x:(e,n,t,i)=>oe(e,Object(a.y)(n,e),"x",t.intersect,i),y:(e,n,t,i)=>oe(e,Object(a.y)(n,e),"y",t.intersect,i)}};const le=["left","top","right","bottom"];function de(e,n){return e.filter(e=>e.pos===n)}function ce(e,n){return e.filter(e=>-1===le.indexOf(e.pos)&&e.box.axis===n)}function ue(e,n){return e.sort((e,t)=>{const a=n?t:e,i=n?e:t;return a.weight===i.weight?a.index-i.index:a.weight-i.weight})}function he(e,n){const t=function(e){const n={};for(const t of e){const{stack:e,pos:a,stackWeight:i}=t;if(!e||!le.includes(a))continue;const r=n[e]||(n[e]={count:0,placed:0,weight:0,size:0});r.count++,r.weight+=i}return n}(e),{vBoxMaxWidth:a,hBoxMaxHeight:i}=n;let r,o,s;for(r=0,o=e.length;r<o;++r){s=e[r];const{fullSize:o}=s.box,l=t[s.stack],d=l&&s.stackWeight/l.weight;s.horizontal?(s.width=d?d*a:o&&n.availableWidth,s.height=i):(s.width=a,s.height=d?d*i:o&&n.availableHeight)}return t}function pe(e,n,t,a){return Math.max(e[t],n[t])+Math.max(e[a],n[a])}function fe(e,n){e.top=Math.max(e.top,n.top),e.left=Math.max(e.left,n.left),e.bottom=Math.max(e.bottom,n.bottom),e.right=Math.max(e.right,n.right)}function me(e,n,t,i){const{pos:r,box:o}=t,s=e.maxPadding;if(!Object(a.Kb)(r)){t.size&&(e[r]-=t.size);const n=i[t.stack]||{size:0,count:1};n.size=Math.max(n.size,t.horizontal?o.height:o.width),t.size=n.size/n.count,e[r]+=t.size}o.getPadding&&fe(s,o.getPadding());const l=Math.max(0,n.outerWidth-pe(s,e,"left","right")),d=Math.max(0,n.outerHeight-pe(s,e,"top","bottom")),c=l!==e.w,u=d!==e.h;return e.w=l,e.h=d,t.horizontal?{same:c,other:u}:{same:u,other:c}}function ge(e,n){const t=n.maxPadding;function a(e){const a={left:0,top:0,right:0,bottom:0};return e.forEach(e=>{a[e]=Math.max(n[e],t[e])}),a}return a(e?["left","right"]:["top","bottom"])}function be(e,n,t,a){const i=[];let r,o,s,l,d,c;for(r=0,o=e.length,d=0;r<o;++r){s=e[r],l=s.box,l.update(s.width||n.w,s.height||n.h,ge(s.horizontal,n));const{same:o,other:u}=me(n,t,s,a);d|=o&&i.length,c=c||u,l.fullSize||i.push(s)}return d&&be(i,n,t,a)||c}function ve(e,n,t,a,i){e.top=t,e.left=n,e.right=n+a,e.bottom=t+i,e.width=a,e.height=i}function ye(e,n,t,i){const r=t.padding;let{x:o,y:s}=n;for(const l of e){const e=l.box,d=i[l.stack]||{count:1,placed:0,weight:1},c=l.stackWeight/d.weight||1;if(l.horizontal){const i=n.w*c,o=d.size||e.height;Object(a.Lb)(d.start)&&(s=d.start),e.fullSize?ve(e,r.left,s,t.outerWidth-r.right-r.left,o):ve(e,n.left+d.placed,s,i,o),d.start=s,d.placed+=i,s=e.bottom}else{const i=n.h*c,s=d.size||e.width;Object(a.Lb)(d.start)&&(o=d.start),e.fullSize?ve(e,o,r.top,s,t.outerHeight-r.bottom-r.top):ve(e,o,n.top+d.placed,s,i),d.start=o,d.placed+=i,o=e.right}}n.x=o,n.y=s}a.Fb.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});var xe={addBox(e,n){e.boxes||(e.boxes=[]),n.fullSize=n.fullSize||!1,n.position=n.position||"top",n.weight=n.weight||0,n._layers=n._layers||function(){return[{z:0,draw(e){n.draw(e)}}]},e.boxes.push(n)},removeBox(e,n){const t=e.boxes?e.boxes.indexOf(n):-1;-1!==t&&e.boxes.splice(t,1)},configure(e,n,t){n.fullSize=t.fullSize,n.position=t.position,n.weight=t.weight},update(e,n,t,i){if(!e)return;const r=Object(a.l)(e.options.layout.padding),o=Math.max(n-r.width,0),s=Math.max(t-r.height,0),l=function(e){const n=function(e){const n=[];let t,a,i,r,o,s;for(t=0,a=(e||[]).length;t<a;++t)i=e[t],({position:r,options:{stack:o,stackWeight:s=1}}=i),n.push({index:t,box:i,pos:r,horizontal:i.isHorizontal(),weight:i.weight,stack:o&&r+o,stackWeight:s});return n}(e),t=ue(n.filter(e=>e.box.fullSize),!0),a=ue(de(n,"left"),!0),i=ue(de(n,"right")),r=ue(de(n,"top"),!0),o=ue(de(n,"bottom")),s=ce(n,"x"),l=ce(n,"y");return{fullSize:t,leftAndTop:a.concat(r),rightAndBottom:i.concat(l).concat(o).concat(s),chartArea:de(n,"chartArea"),vertical:a.concat(i).concat(l),horizontal:r.concat(o).concat(s)}}(e.boxes),d=l.vertical,c=l.horizontal;Object(a.r)(e.boxes,e=>{"function"==typeof e.beforeLayout&&e.beforeLayout()});const u=d.reduce((e,n)=>n.box.options&&!1===n.box.options.display?e:e+1,0)||1,h=Object.freeze({outerWidth:n,outerHeight:t,padding:r,availableWidth:o,availableHeight:s,vBoxMaxWidth:o/2/u,hBoxMaxHeight:s/2}),p=Object.assign({},r);fe(p,Object(a.l)(i));const f=Object.assign({maxPadding:p,w:o,h:s,x:r.left,y:r.top},r),m=he(d.concat(c),h);be(l.fullSize,f,h,m),be(d,f,h,m),be(c,f,h,m)&&be(d,f,h,m),function(e){const n=e.maxPadding;function t(t){const a=Math.max(n[t]-e[t],0);return e[t]+=a,a}e.y+=t("top"),e.x+=t("left"),t("right"),t("bottom")}(f),ye(l.leftAndTop,f,h,m),f.x+=f.w,f.y+=f.h,ye(l.rightAndBottom,f,h,m),e.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},Object(a.r)(l.chartArea,n=>{const t=n.box;Object.assign(t,e.chartArea),t.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class Ce{acquireContext(e,n){}releaseContext(e){return!1}addEventListener(e,n,t){}removeEventListener(e,n,t){}getDevicePixelRatio(){return 1}getMaximumSize(e,n,t,a){return n=Math.max(0,n||e.width),t=t||e.height,{width:n,height:Math.max(0,a?Math.floor(n/a):t)}}isAttached(e){return!0}updateConfig(e){}}class Te extends Ce{acquireContext(e){return e&&e.getContext&&e.getContext("2d")||null}updateConfig(e){e.options.animation=!1}}const De={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},we=e=>null===e||""===e;const Oe=!!a.I&&{passive:!0};function ke(e,n,t){e.canvas.removeEventListener(n,t,Oe)}function Se(e,n){for(const t of e)if(t===n||t.contains(n))return!0}function Pe(e,n,t){const a=e.canvas,i=new MutationObserver(e=>{let n=!1;for(const t of e)n=n||Se(t.addedNodes,a),n=n&&!Se(t.removedNodes,a);n&&t()});return i.observe(document,{childList:!0,subtree:!0}),i}function Ae(e,n,t){const a=e.canvas,i=new MutationObserver(e=>{let n=!1;for(const t of e)n=n||Se(t.removedNodes,a),n=n&&!Se(t.addedNodes,a);n&&t()});return i.observe(document,{childList:!0,subtree:!0}),i}const Re=new Map;let Ie=0;function _e(){const e=window.devicePixelRatio;e!==Ie&&(Ie=e,Re.forEach((n,t)=>{t.currentDevicePixelRatio!==e&&n()}))}function Le(e,n,t){const i=e.canvas,r=i&&Object(a.F)(i);if(!r)return;const o=Object(a.H)((e,n)=>{const a=r.clientWidth;t(e,n),a<r.clientWidth&&t()},window),s=new ResizeObserver(e=>{const n=e[0],t=n.contentRect.width,a=n.contentRect.height;0===t&&0===a||o(t,a)});return s.observe(r),function(e,n){Re.size||window.addEventListener("resize",_e),Re.set(e,n)}(e,o),s}function Ee(e,n,t){t&&t.disconnect(),"resize"===n&&function(e){Re.delete(e),Re.size||window.removeEventListener("resize",_e)}(e)}function Me(e,n,t){const i=e.canvas,r=Object(a.H)(n=>{null!==e.ctx&&t(function(e,n){const t=De[e.type]||e.type,{x:i,y:r}=Object(a.y)(e,n);return{type:t,chart:n,native:e,x:void 0!==i?i:null,y:void 0!==r?r:null}}(n,e))},e,e=>{const n=e[0];return[n,n.offsetX,n.offsetY]});return function(e,n,t){e.addEventListener(n,t,Oe)}(i,n,r),r}class je extends Ce{acquireContext(e,n){const t=e&&e.getContext&&e.getContext("2d");return t&&t.canvas===e?(function(e,n){const t=e.style,i=e.getAttribute("height"),r=e.getAttribute("width");if(e.$chartjs={initial:{height:i,width:r,style:{display:t.display,height:t.height,width:t.width}}},t.display=t.display||"block",t.boxSizing=t.boxSizing||"border-box",we(r)){const n=Object(a.G)(e,"width");void 0!==n&&(e.width=n)}if(we(i))if(""===e.style.height)e.height=e.width/(n||2);else{const n=Object(a.G)(e,"height");void 0!==n&&(e.height=n)}}(e,n),t):null}releaseContext(e){const n=e.canvas;if(!n.$chartjs)return!1;const t=n.$chartjs.initial;["height","width"].forEach(e=>{const i=t[e];Object(a.Mb)(i)?n.removeAttribute(e):n.setAttribute(e,i)});const i=t.style||{};return Object.keys(i).forEach(e=>{n.style[e]=i[e]}),n.width=n.width,delete n.$chartjs,!0}addEventListener(e,n,t){this.removeEventListener(e,n);const a=e.$proxies||(e.$proxies={}),i={attach:Pe,detach:Ae,resize:Le}[n]||Me;a[n]=i(e,n,t)}removeEventListener(e,n){const t=e.$proxies||(e.$proxies={}),a=t[n];if(!a)return;({attach:Ee,detach:Ee,resize:Ee}[n]||ke)(e,n,a),t[n]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,n,t,i){return Object(a.E)(e,n,t,i)}isAttached(e){const n=Object(a.F)(e);return!(!n||!n.isConnected)}}class Ue{constructor(){this._init=[]}notify(e,n,t,a){"beforeInit"===n&&(this._init=this._createDescriptors(e,!0),this._notify(this._init,e,"install"));const i=a?this._descriptors(e).filter(a):this._descriptors(e),r=this._notify(i,e,n,t);return"afterDestroy"===n&&(this._notify(i,e,"stop"),this._notify(this._init,e,"uninstall")),r}_notify(e,n,t,i){i=i||{};for(const r of e){const e=r.plugin,o=e[t],s=[n,i,r.options];if(!1===Object(a.d)(o,s,e)&&i.cancelable)return!1}return!0}invalidate(){Object(a.Mb)(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(e){if(this._cache)return this._cache;const n=this._cache=this._createDescriptors(e);return this._notifyStateChanges(e),n}_createDescriptors(e,n){const t=e&&e.config,i=Object(a.Xb)(t.options&&t.options.plugins,{}),r=function(e){const n={},t=[],a=Object.keys(X.plugins.items);for(let e=0;e<a.length;e++)t.push(X.getPlugin(a[e]));const i=e.plugins||[];for(let e=0;e<i.length;e++){const a=i[e];-1===t.indexOf(a)&&(t.push(a),n[a.id]=!0)}return{plugins:t,localIds:n}}(t);return!1!==i||n?function(e,{plugins:n,localIds:t},a,i){const r=[],o=e.getContext();for(const s of n){const n=s.id,l=Ne(a[n],i);null!==l&&r.push({plugin:s,options:Be(e.config,{plugin:s,local:t[n]},l,o)})}return r}(e,r,i,n):[]}_notifyStateChanges(e){const n=this._oldCache||[],t=this._cache,a=(e,n)=>e.filter(e=>!n.some(n=>e.plugin.id===n.plugin.id));this._notify(a(n,t),e,"stop"),this._notify(a(t,n),e,"start")}}function Ne(e,n){return n||!1!==e?!0===e?{}:e:null}function Be(e,{plugin:n,local:t},a,i){const r=e.pluginScopeKeys(n),o=e.getOptionScopes(a,r);return t&&n.defaults&&o.push(n.defaults),e.createResolver(o,i,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function Fe(e,n){const t=a.Fb.datasets[e]||{};return((n.datasets||{})[e]||{}).indexAxis||n.indexAxis||t.indexAxis||"x"}function ze(e,n){return"x"===e||"y"===e?e:n.axis||("top"===(t=n.position)||"bottom"===t?"x":"left"===t||"right"===t?"y":void 0)||e.charAt(0).toLowerCase();var t}function He(e){const n=e.options||(e.options={});n.plugins=Object(a.Xb)(n.plugins,{}),n.scales=function(e,n){const t=a.v[e.type]||{scales:{}},i=n.scales||{},r=Fe(e.type,n),o=Object.create(null),s=Object.create(null);return Object.keys(i).forEach(e=>{const n=i[e];if(!Object(a.Kb)(n))return console.error("Invalid scale configuration for scale: "+e);if(n._proxy)return console.warn("Ignoring resolver passed as options for scale: "+e);const l=ze(e,n),d=function(e,n){return e===n?"_index_":"_value_"}(l,r),c=t.scales||{};o[l]=o[l]||e,s[e]=Object(a.fb)(Object.create(null),[{axis:l},n,c[l],c[d]])}),e.data.datasets.forEach(t=>{const r=t.type||e.type,l=t.indexAxis||Fe(r,n),d=(a.v[r]||{}).scales||{};Object.keys(d).forEach(e=>{const n=function(e,n){let t=e;return"_index_"===e?t=n:"_value_"===e&&(t="x"===n?"y":"x"),t}(e,l),r=t[n+"AxisID"]||o[n]||n;s[r]=s[r]||Object.create(null),Object(a.fb)(s[r],[{axis:n},i[r],d[e]])})}),Object.keys(s).forEach(e=>{const n=s[e];Object(a.fb)(n,[a.Fb.scales[n.type],a.Fb.scale])}),s}(e,n)}function Ve(e){return(e=e||{}).datasets=e.datasets||[],e.labels=e.labels||[],e}const We=new Map,Ye=new Set;function $e(e,n){let t=We.get(e);return t||(t=n(),We.set(e,t),Ye.add(t)),t}const Ge=(e,n,t)=>{const i=Object(a.Hb)(n,t);void 0!==i&&e.add(i)};class qe{constructor(e){this._config=function(e){return(e=e||{}).data=Ve(e.data),He(e),e}(e),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(e){this._config.type=e}get data(){return this._config.data}set data(e){this._config.data=Ve(e)}get options(){return this._config.options}set options(e){this._config.options=e}get plugins(){return this._config.plugins}update(){const e=this._config;this.clearCache(),He(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return $e(e,()=>[["datasets."+e,""]])}datasetAnimationScopeKeys(e,n){return $e(`${e}.transition.${n}`,()=>[[`datasets.${e}.transitions.${n}`,"transitions."+n],["datasets."+e,""]])}datasetElementScopeKeys(e,n){return $e(`${e}-${n}`,()=>[[`datasets.${e}.elements.${n}`,"datasets."+e,"elements."+n,""]])}pluginScopeKeys(e){const n=e.id;return $e(`${this.type}-plugin-${n}`,()=>[["plugins."+n,...e.additionalOptionScopes||[]]])}_cachedScopes(e,n){const t=this._scopeCache;let a=t.get(e);return a&&!n||(a=new Map,t.set(e,a)),a}getOptionScopes(e,n,t){const{options:i,type:r}=this,o=this._cachedScopes(e,t),s=o.get(n);if(s)return s;const l=new Set;n.forEach(n=>{e&&(l.add(e),n.forEach(n=>Ge(l,e,n))),n.forEach(e=>Ge(l,i,e)),n.forEach(e=>Ge(l,a.v[r]||{},e)),n.forEach(e=>Ge(l,a.Fb,e)),n.forEach(e=>Ge(l,a.K,e))});const d=Array.from(l);return 0===d.length&&d.push(Object.create(null)),Ye.has(n)&&o.set(n,d),d}chartOptionScopes(){const{options:e,type:n}=this;return[e,a.v[n]||{},a.Fb.datasets[n]||{},{type:n},a.Fb,a.K]}resolveNamedOptions(e,n,t,i=[""]){const r={$shared:!0},{resolver:o,subPrefixes:s}=Xe(this._resolverCache,e,i);let l=o;if(function(e,n){const{isScriptable:t,isIndexable:i}=Object(a.eb)(e);for(const r of n){const n=t(r),o=i(r),s=(o||n)&&e[r];if(n&&(Object(a.L)(s)||Je(s))||o&&Object(a.Db)(s))return!0}return!1}(o,n)){r.$shared=!1,t=Object(a.L)(t)?t():t;const n=this.createResolver(e,t,s);l=Object(a.M)(o,t,n)}for(const e of n)r[e]=l[e];return r}createResolver(e,n,t=[""],i){const{resolver:r}=Xe(this._resolverCache,e,t);return Object(a.Kb)(n)?Object(a.M)(r,n,void 0,i):r}}function Xe(e,n,t){let i=e.get(n);i||(i=new Map,e.set(n,i));const r=t.join();let o=i.get(r);if(!o){o={resolver:Object(a.db)(n,t),subPrefixes:t.filter(e=>!e.toLowerCase().includes("hover"))},i.set(r,o)}return o}const Je=e=>Object(a.Kb)(e)&&Object.getOwnPropertyNames(e).reduce((n,t)=>n||Object(a.L)(e[t]),!1);const Ze=["top","bottom","left","right","chartArea"];function Ke(e,n){return"top"===e||"bottom"===e||-1===Ze.indexOf(e)&&"x"===n}function Qe(e,n){return function(t,a){return t[e]===a[e]?t[n]-a[n]:t[e]-a[e]}}function en(e){const n=e.chart,t=n.options.animation;n.notifyPlugins("afterRender"),Object(a.d)(t&&t.onComplete,[e],n)}function nn(e){const n=e.chart,t=n.options.animation;Object(a.d)(t&&t.onProgress,[e],n)}function tn(e){return Object(a.J)()&&"string"==typeof e?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}const an={},rn=e=>{const n=tn(e);return Object.values(an).filter(e=>e.canvas===n).pop()};function on(e,n,t){const a=Object.keys(e);for(const i of a){const a=+i;if(a>=n){const r=e[i];delete e[i],(t>0||a>n)&&(e[a+t]=r)}}}class sn{constructor(e,n){const t=this.config=new qe(n),r=tn(e),o=rn(r);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const s=t.createResolver(t.chartOptionScopes(),this.getContext());this.platform=new(t.platform||function(e){return!Object(a.J)()||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas?Te:je}(r)),this.platform.updateConfig(t);const l=this.platform.acquireContext(r,s.aspectRatio),d=l&&l.canvas,c=d&&d.height,u=d&&d.width;this.id=Object(a.gb)(),this.ctx=l,this.canvas=d,this.width=u,this.height=c,this._options=s,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ue,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Object(a.hb)(e=>this.update(e),s.resizeDelay||0),this._dataChanges=[],an[this.id]=this,l&&d?(i.listen(this,"complete",en),i.listen(this,"progress",nn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:e,maintainAspectRatio:n},width:t,height:i,_aspectRatio:r}=this;return Object(a.Mb)(e)?n&&r?r:i?t/i:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Object(a.ib)(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Object(a.jb)(this.canvas,this.ctx),this}stop(){return i.stop(this),this}resize(e,n){i.running(this)?this._resizeBeforeDraw={width:e,height:n}:this._resize(e,n)}_resize(e,n){const t=this.options,i=this.canvas,r=t.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(i,e,n,r),s=t.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,Object(a.ib)(this,s,!0)&&(this.notifyPlugins("resize",{size:o}),Object(a.d)(t.onResize,[this,o],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};Object(a.r)(e,(e,n)=>{e.id=n})}buildOrUpdateScales(){const e=this.options,n=e.scales,t=this.scales,i=Object.keys(t).reduce((e,n)=>(e[n]=!1,e),{});let r=[];n&&(r=r.concat(Object.keys(n).map(e=>{const t=n[e],a=ze(e,t),i="r"===a,r="x"===a;return{options:t,dposition:i?"chartArea":r?"bottom":"left",dtype:i?"radialLinear":r?"category":"linear"}}))),Object(a.r)(r,n=>{const r=n.options,o=r.id,s=ze(o,r),l=Object(a.Xb)(r.type,n.dtype);void 0!==r.position&&Ke(r.position,s)===Ke(n.dposition)||(r.position=n.dposition),i[o]=!0;let d=null;if(o in t&&t[o].type===l)d=t[o];else{d=new(X.getScale(l))({id:o,type:l,ctx:this.ctx,chart:this}),t[d.id]=d}d.init(r,e)}),Object(a.r)(i,(e,n)=>{e||delete t[n]}),Object(a.r)(t,e=>{xe.configure(this,e,e.options),xe.addBox(this,e)})}_updateMetasets(){const e=this._metasets,n=this.data.datasets.length,t=e.length;if(e.sort((e,n)=>e.index-n.index),t>n){for(let e=n;e<t;++e)this._destroyDatasetMeta(e);e.splice(n,t-n)}this._sortedMetasets=e.slice(0).sort(Qe("order","index"))}_removeUnreferencedMetasets(){const{_metasets:e,data:{datasets:n}}=this;e.length>n.length&&delete this._stacks,e.forEach((e,t)=>{0===n.filter(n=>n===e._dataset).length&&this._destroyDatasetMeta(t)})}buildOrUpdateControllers(){const e=[],n=this.data.datasets;let t,i;for(this._removeUnreferencedMetasets(),t=0,i=n.length;t<i;t++){const i=n[t];let r=this.getDatasetMeta(t);const o=i.type||this.config.type;if(r.type&&r.type!==o&&(this._destroyDatasetMeta(t),r=this.getDatasetMeta(t)),r.type=o,r.indexAxis=i.indexAxis||Fe(o,this.options),r.order=i.order||0,r.index=t,r.label=""+i.label,r.visible=this.isDatasetVisible(t),r.controller)r.controller.updateIndex(t),r.controller.linkScales();else{const n=X.getController(o),{datasetElementType:i,dataElementType:s}=a.Fb.datasets[o];Object.assign(n.prototype,{dataElementType:X.getElement(s),datasetElementType:i&&X.getElement(i)}),r.controller=new n(this,t),e.push(r.controller)}}return this._updateMetasets(),e}_resetElements(){Object(a.r)(this.data.datasets,(e,n)=>{this.getDatasetMeta(n).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){const n=this.config;n.update();const t=this._options=n.createResolver(n.chartOptionScopes(),this.getContext()),i=this._animationsDisabled=!t.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0}))return;const r=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let e=0,n=this.data.datasets.length;e<n;e++){const{controller:n}=this.getDatasetMeta(e),t=!i&&-1===r.indexOf(n);n.buildOrUpdateElements(t),o=Math.max(+n.getMaxOverflow(),o)}o=this._minPadding=t.layout.autoPadding?o:0,this._updateLayout(o),i||Object(a.r)(r,e=>{e.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(Qe("z","_idx"));const{_active:s,_lastEvent:l}=this;l?this._eventHandler(l,!0):s.length&&this._updateHoverStyles(s,s,!0),this.render()}_updateScales(){Object(a.r)(this.scales,e=>{xe.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const e=this.options,n=new Set(Object.keys(this._listeners)),t=new Set(e.events);Object(a.kb)(n,t)&&!!this._responsiveListeners===e.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:e}=this,n=this._getUniformDataChanges()||[];for(const{method:t,start:a,count:i}of n){on(e,a,"_removeElements"===t?-i:i)}}_getUniformDataChanges(){const e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];const n=this.data.datasets.length,t=n=>new Set(e.filter(e=>e[0]===n).map((e,n)=>n+","+e.splice(1).join(","))),i=t(0);for(let e=1;e<n;e++)if(!Object(a.kb)(i,t(e)))return;return Array.from(i).map(e=>e.split(",")).map(e=>({method:e[1],start:+e[2],count:+e[3]}))}_updateLayout(e){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;xe.update(this,this.width,this.height,e);const n=this.chartArea,t=n.width<=0||n.height<=0;this._layers=[],Object(a.r)(this.boxes,e=>{t&&"chartArea"===e.position||(e.configure&&e.configure(),this._layers.push(...e._layers()))},this),this._layers.forEach((e,n)=>{e._idx=n}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})){for(let e=0,n=this.data.datasets.length;e<n;++e)this.getDatasetMeta(e).controller.configure();for(let n=0,t=this.data.datasets.length;n<t;++n)this._updateDataset(n,Object(a.L)(e)?e({datasetIndex:n}):e);this.notifyPlugins("afterDatasetsUpdate",{mode:e})}}_updateDataset(e,n){const t=this.getDatasetMeta(e),a={meta:t,index:e,mode:n,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetUpdate",a)&&(t.controller._update(n),a.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",a))}render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(i.has(this)?this.attached&&!i.running(this)&&i.start(this):(this.draw(),en({chart:this})))}draw(){let e;if(this._resizeBeforeDraw){const{width:e,height:n}=this._resizeBeforeDraw;this._resize(e,n),this._resizeBeforeDraw=null}if(this.clear(),this.width<=0||this.height<=0)return;if(!1===this.notifyPlugins("beforeDraw",{cancelable:!0}))return;const n=this._layers;for(e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(this.chartArea);for(this._drawDatasets();e<n.length;++e)n[e].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(e){const n=this._sortedMetasets,t=[];let a,i;for(a=0,i=n.length;a<i;++a){const i=n[a];e&&!i.visible||t.push(i)}return t}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0}))return;const e=this.getSortedVisibleDatasetMetas();for(let n=e.length-1;n>=0;--n)this._drawDataset(e[n]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){const n=this.ctx,t=e._clip,i=!t.disabled,r=this.chartArea,o={meta:e,index:e.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(i&&Object(a.m)(n,{left:!1===t.left?0:r.left-t.left,right:!1===t.right?this.width:r.right+t.right,top:!1===t.top?0:r.top-t.top,bottom:!1===t.bottom?this.height:r.bottom+t.bottom}),e.controller.draw(),i&&Object(a.o)(n),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(e){return Object(a.a)(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,n,t,a){const i=se.modes[n];return"function"==typeof i?i(this,e,t,a):[]}getDatasetMeta(e){const n=this.data.datasets[e],t=this._metasets;let a=t.filter(e=>e&&e._dataset===n).pop();return a||(a={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:n&&n.order||0,index:e,_dataset:n,_parsed:[],_sorted:!1},t.push(a)),a}getContext(){return this.$context||(this.$context=Object(a.Jb)(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){const n=this.data.datasets[e];if(!n)return!1;const t=this.getDatasetMeta(e);return"boolean"==typeof t.hidden?!t.hidden:!n.hidden}setDatasetVisibility(e,n){this.getDatasetMeta(e).hidden=!n}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,n,t){const i=t?"show":"hide",r=this.getDatasetMeta(e),o=r.controller._resolveAnimations(void 0,i);Object(a.Lb)(n)?(r.data[n].hidden=!t,this.update()):(this.setDatasetVisibility(e,t),o.update(r,{visible:t}),this.update(n=>n.datasetIndex===e?i:void 0))}hide(e,n){this._updateVisibility(e,n,!1)}show(e,n){this._updateVisibility(e,n,!0)}_destroyDatasetMeta(e){const n=this._metasets[e];n&&n.controller&&n.controller._destroy(),delete this._metasets[e]}_stop(){let e,n;for(this.stop(),i.remove(this),e=0,n=this.data.datasets.length;e<n;++e)this._destroyDatasetMeta(e)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:e,ctx:n}=this;this._stop(),this.config.clearCache(),e&&(this.unbindEvents(),Object(a.jb)(e,n),this.platform.releaseContext(n),this.canvas=null,this.ctx=null),this.notifyPlugins("destroy"),delete an[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...e){return this.canvas.toDataURL(...e)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const e=this._listeners,n=this.platform,t=(t,a)=>{n.addEventListener(this,t,a),e[t]=a},i=(e,n,t)=>{e.offsetX=n,e.offsetY=t,this._eventHandler(e)};Object(a.r)(this.options.events,e=>t(e,i))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const e=this._responsiveListeners,n=this.platform,t=(t,a)=>{n.addEventListener(this,t,a),e[t]=a},a=(t,a)=>{e[t]&&(n.removeEventListener(this,t,a),delete e[t])},i=(e,n)=>{this.canvas&&this.resize(e,n)};let r;const o=()=>{a("attach",o),this.attached=!0,this.resize(),t("resize",i),t("detach",r)};r=()=>{this.attached=!1,a("resize",i),this._stop(),this._resize(0,0),t("attach",o)},n.isAttached(this.canvas)?o():r()}unbindEvents(){Object(a.r)(this._listeners,(e,n)=>{this.platform.removeEventListener(this,n,e)}),this._listeners={},Object(a.r)(this._responsiveListeners,(e,n)=>{this.platform.removeEventListener(this,n,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,n,t){const a=t?"set":"remove";let i,r,o,s;for("dataset"===n&&(i=this.getDatasetMeta(e[0].datasetIndex),i.controller["_"+a+"DatasetHoverStyle"]()),o=0,s=e.length;o<s;++o){r=e[o];const n=r&&this.getDatasetMeta(r.datasetIndex).controller;n&&n[a+"HoverStyle"](r.element,r.datasetIndex,r.index)}}getActiveElements(){return this._active||[]}setActiveElements(e){const n=this._active||[],t=e.map(({datasetIndex:e,index:n})=>{const t=this.getDatasetMeta(e);if(!t)throw new Error("No dataset found at index "+e);return{datasetIndex:e,element:t.data[n],index:n}});!Object(a.lb)(t,n)&&(this._active=t,this._lastEvent=null,this._updateHoverStyles(t,n))}notifyPlugins(e,n,t){return this._plugins.notify(this,e,n,t)}_updateHoverStyles(e,n,t){const a=this.options.hover,i=(e,n)=>e.filter(e=>!n.some(n=>e.datasetIndex===n.datasetIndex&&e.index===n.index)),r=i(n,e),o=t?e:i(e,n);r.length&&this.updateHoverStyle(r,a.mode,!1),o.length&&a.mode&&this.updateHoverStyle(o,a.mode,!0)}_eventHandler(e,n){const t={event:e,replay:n,cancelable:!0,inChartArea:this.isPointInArea(e)},a=n=>(n.options.events||this.options.events).includes(e.native.type);if(!1===this.notifyPlugins("beforeEvent",t,a))return;const i=this._handleEvent(e,n,t.inChartArea);return t.cancelable=!1,this.notifyPlugins("afterEvent",t,a),(i||t.changed)&&this.render(),this}_handleEvent(e,n,t){const{_active:i=[],options:r}=this,o=n,s=this._getActiveElements(e,i,t,o),l=Object(a.mb)(e),d=function(e,n,t,a){return t&&"mouseout"!==e.type?a?n:e:null}(e,this._lastEvent,t,l);t&&(this._lastEvent=null,Object(a.d)(r.onHover,[e,s,this],this),l&&Object(a.d)(r.onClick,[e,s,this],this));const c=!Object(a.lb)(s,i);return(c||n)&&(this._active=s,this._updateHoverStyles(s,i,n)),this._lastEvent=d,c}_getActiveElements(e,n,t,a){if("mouseout"===e.type)return[];if(!t)return n;const i=this.options.hover;return this.getElementsAtEventForMode(e,i.mode,i,a)}}const ln=()=>Object(a.r)(sn.instances,e=>e._plugins.invalidate());function dn(e,n,t){const{startAngle:i,pixelMargin:r,x:o,y:s,outerRadius:l,innerRadius:d}=n;let c=r/l;e.beginPath(),e.arc(o,s,l,i-c,t+c),d>r?(c=r/d,e.arc(o,s,d,t+c,i-c,!0)):e.arc(o,s,r,t+a.i,i-a.i),e.closePath(),e.clip()}function cn(e,n,t,i){const r=(o=e.options.borderRadius,Object(a.ob)(o,["outerStart","outerEnd","innerStart","innerEnd"]));var o;const s=(t-n)/2,l=Math.min(s,i*n/2),d=e=>{const n=(t-Math.min(s,e))*i/2;return Object(a.f)(e,0,Math.min(s,n))};return{outerStart:d(r.outerStart),outerEnd:d(r.outerEnd),innerStart:Object(a.f)(r.innerStart,0,l),innerEnd:Object(a.f)(r.innerEnd,0,l)}}function un(e,n,t,a){return{x:t+e*Math.cos(n),y:a+e*Math.sin(n)}}function hn(e,n,t,i,r,o){const{x:s,y:l,startAngle:d,pixelMargin:c,innerRadius:u}=n,h=Math.max(n.outerRadius+i+t-c,0),p=u>0?u+i+t+c:0;let f=0;const m=r-d;if(i){const e=((u>0?u-i:0)+(h>0?h-i:0))/2;f=(m-(0!==e?m*e/(e+i):m))/2}const g=(m-Math.max(.001,m*h-t/a.q)/h)/2,b=d+g+f,v=r-g-f,{outerStart:y,outerEnd:x,innerStart:C,innerEnd:T}=cn(n,p,h,v-b),D=h-y,w=h-x,O=b+y/D,k=v-x/w,S=p+C,P=p+T,A=b+C/S,R=v-T/P;if(e.beginPath(),o){if(e.arc(s,l,h,O,k),x>0){const n=un(w,k,s,l);e.arc(n.x,n.y,x,k,v+a.i)}const n=un(P,v,s,l);if(e.lineTo(n.x,n.y),T>0){const n=un(P,R,s,l);e.arc(n.x,n.y,T,v+a.i,R+Math.PI)}if(e.arc(s,l,p,v-T/p,b+C/p,!0),C>0){const n=un(S,A,s,l);e.arc(n.x,n.y,C,A+Math.PI,b-a.i)}const t=un(D,b,s,l);if(e.lineTo(t.x,t.y),y>0){const n=un(D,O,s,l);e.arc(n.x,n.y,y,b-a.i,O)}}else{e.moveTo(s,l);const n=Math.cos(O)*h+s,t=Math.sin(O)*h+l;e.lineTo(n,t);const a=Math.cos(k)*h+s,i=Math.sin(k)*h+l;e.lineTo(a,i)}e.closePath()}function pn(e,n,t,i,r,o){const{options:s}=n,{borderWidth:l,borderJoinStyle:d}=s,c="inner"===s.borderAlign;l&&(c?(e.lineWidth=2*l,e.lineJoin=d||"round"):(e.lineWidth=l,e.lineJoin=d||"bevel"),n.fullCircles&&function(e,n,t){const{x:i,y:r,startAngle:o,pixelMargin:s,fullCircles:l}=n,d=Math.max(n.outerRadius-s,0),c=n.innerRadius+s;let u;for(t&&dn(e,n,o+a.u),e.beginPath(),e.arc(i,r,c,o+a.u,o,!0),u=0;u<l;++u)e.stroke();for(e.beginPath(),e.arc(i,r,d,o,o+a.u),u=0;u<l;++u)e.stroke()}(e,n,c),c&&dn(e,n,r),hn(e,n,t,i,r,o),e.stroke())}Object.defineProperties(sn,{defaults:{enumerable:!0,value:a.Fb},instances:{enumerable:!0,value:an},overrides:{enumerable:!0,value:a.v},registry:{enumerable:!0,value:X},version:{enumerable:!0,value:"3.9.1"},getChart:{enumerable:!0,value:rn},register:{enumerable:!0,value:(...e)=>{X.add(...e),ln()}},unregister:{enumerable:!0,value:(...e)=>{X.remove(...e),ln()}}});class fn extends j{constructor(e){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,n,t){const i=this.getProps(["x","y"],t),{angle:r,distance:o}=Object(a.D)(i,{x:e,y:n}),{startAngle:s,endAngle:l,innerRadius:d,outerRadius:c,circumference:u}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],t),h=this.options.spacing/2,p=Object(a.Xb)(u,l-s)>=a.u||Object(a.Rb)(r,s,l),f=Object(a.nb)(o,d+h,c+h);return p&&f}getCenterPoint(e){const{x:n,y:t,startAngle:a,endAngle:i,innerRadius:r,outerRadius:o}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],e),{offset:s,spacing:l}=this.options,d=(a+i)/2,c=(r+o+l+s)/2;return{x:n+Math.cos(d)*c,y:t+Math.sin(d)*c}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:n,circumference:t}=this,i=(n.offset||0)/2,r=(n.spacing||0)/2,o=n.circular;if(this.pixelMargin="inner"===n.borderAlign?.33:0,this.fullCircles=t>a.u?Math.floor(t/a.u):0,0===t||this.innerRadius<0||this.outerRadius<0)return;e.save();let s=0;if(i){s=i/2;const n=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(n)*s,Math.sin(n)*s),this.circumference>=a.q&&(s=i)}e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor;const l=function(e,n,t,i,r){const{fullCircles:o,startAngle:s,circumference:l}=n;let d=n.endAngle;if(o){hn(e,n,t,i,s+a.u,r);for(let n=0;n<o;++n)e.fill();isNaN(l)||(d=s+l%a.u,l%a.u==0&&(d+=a.u))}return hn(e,n,t,i,d,r),e.fill(),d}(e,this,s,r,o);pn(e,this,s,r,l,o),e.restore()}}function mn(e,n,t=n){e.lineCap=Object(a.Xb)(t.borderCapStyle,n.borderCapStyle),e.setLineDash(Object(a.Xb)(t.borderDash,n.borderDash)),e.lineDashOffset=Object(a.Xb)(t.borderDashOffset,n.borderDashOffset),e.lineJoin=Object(a.Xb)(t.borderJoinStyle,n.borderJoinStyle),e.lineWidth=Object(a.Xb)(t.borderWidth,n.borderWidth),e.strokeStyle=Object(a.Xb)(t.borderColor,n.borderColor)}function gn(e,n,t){e.lineTo(t.x,t.y)}function bn(e,n,t={}){const a=e.length,{start:i=0,end:r=a-1}=t,{start:o,end:s}=n,l=Math.max(i,o),d=Math.min(r,s),c=i<o&&r<o||i>s&&r>s;return{count:a,start:l,loop:n.loop,ilen:d<l&&!c?a+d-l:d-l}}function vn(e,n,t,i){const{points:r,options:o}=n,{count:s,start:l,loop:d,ilen:c}=bn(r,t,i),u=function(e){return e.stepped?a.vb:e.tension||"monotone"===e.cubicInterpolationMode?a.wb:gn}(o);let h,p,f,{move:m=!0,reverse:g}=i||{};for(h=0;h<=c;++h)p=r[(l+(g?c-h:h))%s],p.skip||(m?(e.moveTo(p.x,p.y),m=!1):u(e,f,p,g,o.stepped),f=p);return d&&(p=r[(l+(g?c:0))%s],u(e,f,p,g,o.stepped)),!!d}function yn(e,n,t,a){const i=n.points,{count:r,start:o,ilen:s}=bn(i,t,a),{move:l=!0,reverse:d}=a||{};let c,u,h,p,f,m,g=0,b=0;const v=e=>(o+(d?s-e:e))%r,y=()=>{p!==f&&(e.lineTo(g,f),e.lineTo(g,p),e.lineTo(g,m))};for(l&&(u=i[v(0)],e.moveTo(u.x,u.y)),c=0;c<=s;++c){if(u=i[v(c)],u.skip)continue;const n=u.x,t=u.y,a=0|n;a===h?(t<p?p=t:t>f&&(f=t),g=(b*g+n)/++b):(y(),e.lineTo(n,t),h=a,b=0,p=f=t),m=t}y()}function xn(e){const n=e.options,t=n.borderDash&&n.borderDash.length;return!(e._decimated||e._loop||n.tension||"monotone"===n.cubicInterpolationMode||n.stepped||t)?yn:vn}fn.id="arc",fn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0},fn.defaultRoutes={backgroundColor:"backgroundColor"};const Cn="function"==typeof Path2D;function Tn(e,n,t,a){Cn&&!n.options.segment?function(e,n,t,a){let i=n._path;i||(i=n._path=new Path2D,n.path(i,t,a)&&i.closePath()),mn(e,n.options),e.stroke(i)}(e,n,t,a):function(e,n,t,a){const{segments:i,options:r}=n,o=xn(n);for(const s of i)mn(e,r,s.style),e.beginPath(),o(e,n,s,{start:t,end:t+a-1})&&e.closePath(),e.stroke()}(e,n,t,a)}class Dn extends j{constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,n){const t=this.options;if((t.tension||"monotone"===t.cubicInterpolationMode)&&!t.stepped&&!this._pointsUpdated){const i=t.spanGaps?this._loop:this._fullLoop;Object(a.pb)(this._points,t,e,i,n),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Object(a.qb)(this,this.options.segment))}first(){const e=this.segments,n=this.points;return e.length&&n[e[0].start]}last(){const e=this.segments,n=this.points,t=e.length;return t&&n[e[t-1].end]}interpolate(e,n){const t=this.options,i=e[n],r=this.points,o=Object(a.rb)(this,{property:n,start:i,end:i});if(!o.length)return;const s=[],l=function(e){return e.stepped?a.sb:e.tension||"monotone"===e.cubicInterpolationMode?a.tb:a.ub}(t);let d,c;for(d=0,c=o.length;d<c;++d){const{start:a,end:c}=o[d],u=r[a],h=r[c];if(u===h){s.push(u);continue}const p=l(u,h,Math.abs((i-u[n])/(h[n]-u[n])),t.stepped);p[n]=e[n],s.push(p)}return 1===s.length?s[0]:s}pathSegment(e,n,t){return xn(this)(e,this,n,t)}path(e,n,t){const a=this.segments,i=xn(this);let r=this._loop;n=n||0,t=t||this.points.length-n;for(const o of a)r&=i(e,this,o,{start:n,end:n+t-1});return!!r}draw(e,n,t,a){const i=this.options||{};(this.points||[]).length&&i.borderWidth&&(e.save(),Tn(e,this,t,a),e.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function wn(e,n,t,a){const i=e.options,{[t]:r}=e.getProps([t],a);return Math.abs(n-r)<i.radius+i.hitRadius}Dn.id="line",Dn.defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0},Dn.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"},Dn.descriptors={_scriptable:!0,_indexable:e=>"borderDash"!==e&&"fill"!==e};class On extends j{constructor(e){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,n,t){const a=this.options,{x:i,y:r}=this.getProps(["x","y"],t);return Math.pow(e-i,2)+Math.pow(n-r,2)<Math.pow(a.hitRadius+a.radius,2)}inXRange(e,n){return wn(this,e,"x",n)}inYRange(e,n){return wn(this,e,"y",n)}getCenterPoint(e){const{x:n,y:t}=this.getProps(["x","y"],e);return{x:n,y:t}}size(e){let n=(e=e||this.options||{}).radius||0;n=Math.max(n,n&&e.hoverRadius||0);return 2*(n+(n&&e.borderWidth||0))}draw(e,n){const t=this.options;this.skip||t.radius<.1||!Object(a.a)(this,n,this.size(t)/2)||(e.strokeStyle=t.borderColor,e.lineWidth=t.borderWidth,e.fillStyle=t.backgroundColor,Object(a.xb)(e,t,this.x,this.y))}getRange(){const e=this.options||{};return e.radius+e.hitRadius}}function kn(e,n){const{x:t,y:a,base:i,width:r,height:o}=e.getProps(["x","y","base","width","height"],n);let s,l,d,c,u;return e.horizontal?(u=o/2,s=Math.min(t,i),l=Math.max(t,i),d=a-u,c=a+u):(u=r/2,s=t-u,l=t+u,d=Math.min(a,i),c=Math.max(a,i)),{left:s,top:d,right:l,bottom:c}}function Sn(e,n,t,i){return e?0:Object(a.f)(n,t,i)}function Pn(e){const n=kn(e),t=n.right-n.left,i=n.bottom-n.top,r=function(e,n,t){const i=e.options.borderWidth,r=e.borderSkipped,o=Object(a.zb)(i);return{t:Sn(r.top,o.top,0,t),r:Sn(r.right,o.right,0,n),b:Sn(r.bottom,o.bottom,0,t),l:Sn(r.left,o.left,0,n)}}(e,t/2,i/2),o=function(e,n,t){const{enableBorderRadius:i}=e.getProps(["enableBorderRadius"]),r=e.options.borderRadius,o=Object(a.Ab)(r),s=Math.min(n,t),l=e.borderSkipped,d=i||Object(a.Kb)(r);return{topLeft:Sn(!d||l.top||l.left,o.topLeft,0,s),topRight:Sn(!d||l.top||l.right,o.topRight,0,s),bottomLeft:Sn(!d||l.bottom||l.left,o.bottomLeft,0,s),bottomRight:Sn(!d||l.bottom||l.right,o.bottomRight,0,s)}}(e,t/2,i/2);return{outer:{x:n.left,y:n.top,w:t,h:i,radius:o},inner:{x:n.left+r.l,y:n.top+r.t,w:t-r.l-r.r,h:i-r.t-r.b,radius:{topLeft:Math.max(0,o.topLeft-Math.max(r.t,r.l)),topRight:Math.max(0,o.topRight-Math.max(r.t,r.r)),bottomLeft:Math.max(0,o.bottomLeft-Math.max(r.b,r.l)),bottomRight:Math.max(0,o.bottomRight-Math.max(r.b,r.r))}}}}function An(e,n,t,i){const r=null===n,o=null===t,s=e&&!(r&&o)&&kn(e,i);return s&&(r||Object(a.nb)(n,s.left,s.right))&&(o||Object(a.nb)(t,s.top,s.bottom))}function Rn(e,n){e.rect(n.x,n.y,n.w,n.h)}function In(e,n,t={}){const a=e.x!==t.x?-n:0,i=e.y!==t.y?-n:0,r=(e.x+e.w!==t.x+t.w?n:0)-a,o=(e.y+e.h!==t.y+t.h?n:0)-i;return{x:e.x+a,y:e.y+i,w:e.w+r,h:e.h+o,radius:e.radius}}On.id="point",On.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0},On.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};class _n extends j{constructor(e){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,e&&Object.assign(this,e)}draw(e){const{inflateAmount:n,options:{borderColor:t,backgroundColor:i}}=this,{inner:r,outer:o}=Pn(this),s=(l=o.radius).topLeft||l.topRight||l.bottomLeft||l.bottomRight?a.yb:Rn;var l;e.save(),o.w===r.w&&o.h===r.h||(e.beginPath(),s(e,In(o,n,r)),e.clip(),s(e,In(r,-n,o)),e.fillStyle=t,e.fill("evenodd")),e.beginPath(),s(e,In(r,n)),e.fillStyle=i,e.fill(),e.restore()}inRange(e,n,t){return An(this,e,n,t)}inXRange(e,n){return An(this,e,null,n)}inYRange(e,n){return An(this,null,e,n)}getCenterPoint(e){const{x:n,y:t,base:a,horizontal:i}=this.getProps(["x","y","base","horizontal"],e);return{x:i?(n+a)/2:n,y:i?t:(t+a)/2}}getRange(e){return"x"===e?this.width/2:this.height/2}}_n.id="bar",_n.defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0},_n.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};var Ln=Object.freeze({__proto__:null,ArcElement:fn,LineElement:Dn,PointElement:On,BarElement:_n});function En(e){if(e._decimated){const n=e._data;delete e._decimated,delete e._data,Object.defineProperty(e,"data",{value:n})}}function Mn(e){e.data.datasets.forEach(e=>{En(e)})}var jn={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(e,n,t)=>{if(!t.enabled)return void Mn(e);const i=e.width;e.data.datasets.forEach((n,r)=>{const{_data:o,indexAxis:s}=n,l=e.getDatasetMeta(r),d=o||n.data;if("y"===Object(a.C)([s,e.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=e.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(e.options.parsing)return;let{start:u,count:h}=function(e,n){const t=n.length;let i,r=0;const{iScale:o}=e,{min:s,max:l,minDefined:d,maxDefined:c}=o.getUserBounds();return d&&(r=Object(a.f)(Object(a.A)(n,o.axis,s).lo,0,t-1)),i=c?Object(a.f)(Object(a.A)(n,o.axis,l).hi+1,r,t)-r:t-r,{start:r,count:i}}(l,d);if(h<=(t.threshold||4*i))return void En(n);let p;switch(Object(a.Mb)(o)&&(n._data=d,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(e){this._data=e}})),t.algorithm){case"lttb":p=function(e,n,t,a,i){const r=i.samples||a;if(r>=t)return e.slice(n,n+t);const o=[],s=(t-2)/(r-2);let l=0;const d=n+t-1;let c,u,h,p,f,m=n;for(o[l++]=e[m],c=0;c<r-2;c++){let a,i=0,r=0;const d=Math.floor((c+1)*s)+1+n,g=Math.min(Math.floor((c+2)*s)+1,t)+n,b=g-d;for(a=d;a<g;a++)i+=e[a].x,r+=e[a].y;i/=b,r/=b;const v=Math.floor(c*s)+1+n,y=Math.min(Math.floor((c+1)*s)+1,t)+n,{x:x,y:C}=e[m];for(h=p=-1,a=v;a<y;a++)p=.5*Math.abs((x-i)*(e[a].y-C)-(x-e[a].x)*(r-C)),p>h&&(h=p,u=e[a],f=a);o[l++]=u,m=f}return o[l++]=e[d],o}(d,u,h,i,t);break;case"min-max":p=function(e,n,t,i){let r,o,s,l,d,c,u,h,p,f,m=0,g=0;const b=[],v=n+t-1,y=e[n].x,x=e[v].x-y;for(r=n;r<n+t;++r){o=e[r],s=(o.x-y)/x*i,l=o.y;const n=0|s;if(n===d)l<p?(p=l,c=r):l>f&&(f=l,u=r),m=(g*m+o.x)/++g;else{const t=r-1;if(!Object(a.Mb)(c)&&!Object(a.Mb)(u)){const n=Math.min(c,u),a=Math.max(c,u);n!==h&&n!==t&&b.push({...e[n],x:m}),a!==h&&a!==t&&b.push({...e[a],x:m})}r>0&&t!==h&&b.push(e[t]),b.push(o),d=n,g=0,p=f=l,c=u=h=r}}return b}(d,u,h,i);break;default:throw new Error(`Unsupported decimation algorithm '${t.algorithm}'`)}n._decimated=p})},destroy(e){Mn(e)}};function Un(e,n,t,i){if(i)return;let r=n[e],o=t[e];return"angle"===e&&(r=Object(a.Cb)(r),o=Object(a.Cb)(o)),{property:e,start:r,end:o}}function Nn(e,n,t){for(;n>e;n--){const e=t[n];if(!isNaN(e.x)&&!isNaN(e.y))break}return n}function Bn(e,n,t,a){return e&&n?a(e[t],n[t]):e?e[t]:n?n[t]:0}function Fn(e,n){let t=[],i=!1;return Object(a.Db)(e)?(i=!0,t=e):t=function(e,n){const{x:t=null,y:a=null}=e||{},i=n.points,r=[];return n.segments.forEach(({start:e,end:n})=>{n=Nn(e,n,i);const o=i[e],s=i[n];null!==a?(r.push({x:o.x,y:a}),r.push({x:s.x,y:a})):null!==t&&(r.push({x:t,y:o.y}),r.push({x:t,y:s.y}))}),r}(e,n),t.length?new Dn({points:t,options:{tension:0},_loop:i,_fullLoop:i}):null}function zn(e){return e&&!1!==e.fill}function Hn(e,n,t){let i=e[n].fill;const r=[n];let o;if(!t)return i;for(;!1!==i&&-1===r.indexOf(i);){if(!Object(a.Ib)(i))return i;if(o=e[i],!o)return!1;if(o.visible)return i;r.push(i),i=o.fill}return!1}function Vn(e,n,t){const i=function(e){const n=e.options,t=n.fill;let i=Object(a.Xb)(t&&t.target,t);void 0===i&&(i=!!n.backgroundColor);if(!1===i||null===i)return!1;if(!0===i)return"origin";return i}(e);if(Object(a.Kb)(i))return!isNaN(i.value)&&i;let r=parseFloat(i);return Object(a.Ib)(r)&&Math.floor(r)===r?function(e,n,t,a){"-"!==e&&"+"!==e||(t=n+t);if(t===n||t<0||t>=a)return!1;return t}(i[0],n,r,t):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function Wn(e,n,t){const a=[];for(let i=0;i<t.length;i++){const r=t[i],{first:o,last:s,point:l}=Yn(r,n,"x");if(!(!l||o&&s))if(o)a.unshift(l);else if(e.push(l),!s)break}e.push(...a)}function Yn(e,n,t){const i=e.interpolate(n,t);if(!i)return{};const r=i[t],o=e.segments,s=e.points;let l=!1,d=!1;for(let e=0;e<o.length;e++){const n=o[e],i=s[n.start][t],c=s[n.end][t];if(Object(a.nb)(r,i,c)){l=r===i,d=r===c;break}}return{first:l,last:d,point:i}}class $n{constructor(e){this.x=e.x,this.y=e.y,this.radius=e.radius}pathSegment(e,n,t){const{x:i,y:r,radius:o}=this;return n=n||{start:0,end:a.u},e.arc(i,r,o,n.end,n.start,!0),!t.bounds}interpolate(e){const{x:n,y:t,radius:a}=this,i=e.angle;return{x:n+Math.cos(i)*a,y:t+Math.sin(i)*a,angle:i}}}function Gn(e){const{chart:n,fill:t,line:i}=e;if(Object(a.Ib)(t))return function(e,n){const t=e.getDatasetMeta(n);return t&&e.isDatasetVisible(n)?t.dataset:null}(n,t);if("stack"===t)return function(e){const{scale:n,index:t,line:a}=e,i=[],r=a.segments,o=a.points,s=function(e,n){const t=[],a=e.getMatchingVisibleMetas("line");for(let e=0;e<a.length;e++){const i=a[e];if(i.index===n)break;i.hidden||t.unshift(i.dataset)}return t}(n,t);s.push(Fn({x:null,y:n.bottom},a));for(let e=0;e<r.length;e++){const n=r[e];for(let e=n.start;e<=n.end;e++)Wn(i,o[e],s)}return new Dn({points:i,options:{}})}(e);if("shape"===t)return!0;const r=function(e){if((e.scale||{}).getPointPositionForValue)return function(e){const{scale:n,fill:t}=e,i=n.options,r=n.getLabels().length,o=i.reverse?n.max:n.min,s=function(e,n,t){let i;return i="start"===e?t:"end"===e?n.options.reverse?n.min:n.max:Object(a.Kb)(e)?e.value:n.getBaseValue(),i}(t,n,o),l=[];if(i.grid.circular){const e=n.getPointPositionForValue(0,o);return new $n({x:e.x,y:e.y,radius:n.getDistanceFromCenterForValue(s)})}for(let e=0;e<r;++e)l.push(n.getPointPositionForValue(e,s));return l}(e);return function(e){const{scale:n={},fill:t}=e,i=function(e,n){let t=null;return"start"===e?t=n.bottom:"end"===e?t=n.top:Object(a.Kb)(e)?t=n.getPixelForValue(e.value):n.getBasePixel&&(t=n.getBasePixel()),t}(t,n);if(Object(a.Ib)(i)){const e=n.isHorizontal();return{x:e?i:null,y:e?null:i}}return null}(e)}(e);return r instanceof $n?r:Fn(r,i)}function qn(e,n,t){const i=Gn(n),{line:r,scale:o,axis:s}=n,l=r.options,d=l.fill,c=l.backgroundColor,{above:u=c,below:h=c}=d||{};i&&r.points.length&&(Object(a.m)(e,t),function(e,n){const{line:t,target:a,above:i,below:r,area:o,scale:s}=n,l=t._loop?"angle":n.axis;e.save(),"x"===l&&r!==i&&(Xn(e,a,o.top),Jn(e,{line:t,target:a,color:i,scale:s,property:l}),e.restore(),e.save(),Xn(e,a,o.bottom));Jn(e,{line:t,target:a,color:r,scale:s,property:l}),e.restore()}(e,{line:r,target:i,above:u,below:h,area:t,scale:o,axis:s}),Object(a.o)(e))}function Xn(e,n,t){const{segments:a,points:i}=n;let r=!0,o=!1;e.beginPath();for(const s of a){const{start:a,end:l}=s,d=i[a],c=i[Nn(a,l,i)];r?(e.moveTo(d.x,d.y),r=!1):(e.lineTo(d.x,t),e.lineTo(d.x,d.y)),o=!!n.pathSegment(e,s,{move:o}),o?e.closePath():e.lineTo(c.x,t)}e.lineTo(n.first().x,t),e.closePath(),e.clip()}function Jn(e,n){const{line:t,target:i,property:r,color:o,scale:s}=n,l=function(e,n,t){const i=e.segments,r=e.points,o=n.points,s=[];for(const e of i){let{start:i,end:l}=e;l=Nn(i,l,r);const d=Un(t,r[i],r[l],e.loop);if(!n.segments){s.push({source:e,target:d,start:r[i],end:r[l]});continue}const c=Object(a.rb)(n,d);for(const n of c){const i=Un(t,o[n.start],o[n.end],n.loop),l=Object(a.Bb)(e,r,i);for(const e of l)s.push({source:e,target:n,start:{[t]:Bn(d,i,"start",Math.max)},end:{[t]:Bn(d,i,"end",Math.min)}})}}return s}(t,i,r);for(const{source:n,target:a,start:d,end:c}of l){const{style:{backgroundColor:l=o}={}}=n,u=!0!==i;e.save(),e.fillStyle=l,Zn(e,s,u&&Un(r,d,c)),e.beginPath();const h=!!t.pathSegment(e,n);let p;if(u){h?e.closePath():Kn(e,i,c,r);const n=!!i.pathSegment(e,a,{move:h,reverse:!0});p=h&&n,p||Kn(e,i,d,r)}e.closePath(),e.fill(p?"evenodd":"nonzero"),e.restore()}}function Zn(e,n,t){const{top:a,bottom:i}=n.chart.chartArea,{property:r,start:o,end:s}=t||{};"x"===r&&(e.beginPath(),e.rect(o,a,s-o,i-a),e.clip())}function Kn(e,n,t,a){const i=n.interpolate(t,a);i&&e.lineTo(i.x,i.y)}var Qn={id:"filler",afterDatasetsUpdate(e,n,t){const a=(e.data.datasets||[]).length,i=[];let r,o,s,l;for(o=0;o<a;++o)r=e.getDatasetMeta(o),s=r.dataset,l=null,s&&s.options&&s instanceof Dn&&(l={visible:e.isDatasetVisible(o),index:o,fill:Vn(s,o,a),chart:e,axis:r.controller.options.indexAxis,scale:r.vScale,line:s}),r.$filler=l,i.push(l);for(o=0;o<a;++o)l=i[o],l&&!1!==l.fill&&(l.fill=Hn(i,o,t.propagate))},beforeDraw(e,n,t){const a="beforeDraw"===t.drawTime,i=e.getSortedVisibleDatasetMetas(),r=e.chartArea;for(let n=i.length-1;n>=0;--n){const t=i[n].$filler;t&&(t.line.updateControlPoints(r,t.axis),a&&t.fill&&qn(e.ctx,t,r))}},beforeDatasetsDraw(e,n,t){if("beforeDatasetsDraw"!==t.drawTime)return;const a=e.getSortedVisibleDatasetMetas();for(let n=a.length-1;n>=0;--n){const t=a[n].$filler;zn(t)&&qn(e.ctx,t,e.chartArea)}},beforeDatasetDraw(e,n,t){const a=n.meta.$filler;zn(a)&&"beforeDatasetDraw"===t.drawTime&&qn(e.ctx,a,e.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const et=(e,n)=>{let{boxHeight:t=n,boxWidth:a=n}=e;return e.usePointStyle&&(t=Math.min(t,n),a=e.pointStyleWidth||Math.min(a,n)),{boxWidth:a,boxHeight:t,itemHeight:Math.max(n,t)}};class nt extends j{constructor(e){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,n,t){this.maxWidth=e,this.maxHeight=n,this._margins=t,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const e=this.options.labels||{};let n=Object(a.d)(e.generateLabels,[this.chart],this)||[];e.filter&&(n=n.filter(n=>e.filter(n,this.chart.data))),e.sort&&(n=n.sort((n,t)=>e.sort(n,t,this.chart.data))),this.options.reverse&&n.reverse(),this.legendItems=n}fit(){const{options:e,ctx:n}=this;if(!e.display)return void(this.width=this.height=0);const t=e.labels,i=Object(a.p)(t.font),r=i.size,o=this._computeTitleHeight(),{boxWidth:s,itemHeight:l}=et(t,r);let d,c;n.font=i.string,this.isHorizontal()?(d=this.maxWidth,c=this._fitRows(o,r,s,l)+10):(c=this.maxHeight,d=this._fitCols(o,r,s,l)+10),this.width=Math.min(d,e.maxWidth||this.maxWidth),this.height=Math.min(c,e.maxHeight||this.maxHeight)}_fitRows(e,n,t,a){const{ctx:i,maxWidth:r,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],l=this.lineWidths=[0],d=a+o;let c=e;i.textAlign="left",i.textBaseline="middle";let u=-1,h=-d;return this.legendItems.forEach((e,p)=>{const f=t+n/2+i.measureText(e.text).width;(0===p||l[l.length-1]+f+2*o>r)&&(c+=d,l[l.length-(p>0?0:1)]=0,h+=d,u++),s[p]={left:0,top:h,row:u,width:f,height:a},l[l.length-1]+=f+o}),c}_fitCols(e,n,t,a){const{ctx:i,maxHeight:r,options:{labels:{padding:o}}}=this,s=this.legendHitBoxes=[],l=this.columnSizes=[],d=r-e;let c=o,u=0,h=0,p=0,f=0;return this.legendItems.forEach((e,r)=>{const m=t+n/2+i.measureText(e.text).width;r>0&&h+a+2*o>d&&(c+=u+o,l.push({width:u,height:h}),p+=u+o,f++,u=h=0),s[r]={left:p,top:h,col:f,width:m,height:a},u=Math.max(u,m),h+=a+o}),c+=u,l.push({width:u,height:h}),c}adjustHitBoxes(){if(!this.options.display)return;const e=this._computeTitleHeight(),{legendHitBoxes:n,options:{align:t,labels:{padding:i},rtl:r}}=this,o=Object(a.N)(r,this.left,this.width);if(this.isHorizontal()){let r=0,s=Object(a.t)(t,this.left+i,this.right-this.lineWidths[r]);for(const l of n)r!==l.row&&(r=l.row,s=Object(a.t)(t,this.left+i,this.right-this.lineWidths[r])),l.top+=this.top+e+i,l.left=o.leftForLtr(o.x(s),l.width),s+=l.width+i}else{let r=0,s=Object(a.t)(t,this.top+e+i,this.bottom-this.columnSizes[r].height);for(const l of n)l.col!==r&&(r=l.col,s=Object(a.t)(t,this.top+e+i,this.bottom-this.columnSizes[r].height)),l.top=s,l.left+=this.left+i,l.left=o.leftForLtr(o.x(l.left),l.width),s+=l.height+i}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const e=this.ctx;Object(a.m)(e,this),this._draw(),Object(a.o)(e)}}_draw(){const{options:e,columnSizes:n,lineWidths:t,ctx:i}=this,{align:r,labels:o}=e,s=a.Fb.color,l=Object(a.N)(e.rtl,this.left,this.width),d=Object(a.p)(o.font),{color:c,padding:u}=o,h=d.size,p=h/2;let f;this.drawTitle(),i.textAlign=l.textAlign("left"),i.textBaseline="middle",i.lineWidth=.5,i.font=d.string;const{boxWidth:m,boxHeight:g,itemHeight:b}=et(o,h),v=this.isHorizontal(),y=this._computeTitleHeight();f=v?{x:Object(a.t)(r,this.left+u,this.right-t[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:Object(a.t)(r,this.top+y+u,this.bottom-n[0].height),line:0},Object(a.O)(this.ctx,e.textDirection);const x=b+u;this.legendItems.forEach((C,T)=>{i.strokeStyle=C.fontColor||c,i.fillStyle=C.fontColor||c;const D=i.measureText(C.text).width,w=l.textAlign(C.textAlign||(C.textAlign=o.textAlign)),O=m+p+D;let k=f.x,S=f.y;l.setWidth(this.width),v?T>0&&k+O+u>this.right&&(S=f.y+=x,f.line++,k=f.x=Object(a.t)(r,this.left+u,this.right-t[f.line])):T>0&&S+x>this.bottom&&(k=f.x=k+n[f.line].width+u,f.line++,S=f.y=Object(a.t)(r,this.top+y+u,this.bottom-n[f.line].height));!function(e,n,t){if(isNaN(m)||m<=0||isNaN(g)||g<0)return;i.save();const r=Object(a.Xb)(t.lineWidth,1);if(i.fillStyle=Object(a.Xb)(t.fillStyle,s),i.lineCap=Object(a.Xb)(t.lineCap,"butt"),i.lineDashOffset=Object(a.Xb)(t.lineDashOffset,0),i.lineJoin=Object(a.Xb)(t.lineJoin,"miter"),i.lineWidth=r,i.strokeStyle=Object(a.Xb)(t.strokeStyle,s),i.setLineDash(Object(a.Xb)(t.lineDash,[])),o.usePointStyle){const s={radius:g*Math.SQRT2/2,pointStyle:t.pointStyle,rotation:t.rotation,borderWidth:r},d=l.xPlus(e,m/2),c=n+p;Object(a.R)(i,s,d,c,o.pointStyleWidth&&m)}else{const o=n+Math.max((h-g)/2,0),s=l.leftForLtr(e,m),d=Object(a.Ab)(t.borderRadius);i.beginPath(),Object.values(d).some(e=>0!==e)?Object(a.yb)(i,{x:s,y:o,w:m,h:g,radius:d}):i.rect(s,o,m,g),i.fill(),0!==r&&i.stroke()}i.restore()}(l.x(k),S,C),k=Object(a.P)(w,k+m+p,v?k+O:this.right,e.rtl),function(e,n,t){Object(a.n)(i,t.text,e,n+b/2,d,{strikethrough:t.hidden,textAlign:l.textAlign(t.textAlign)})}(l.x(k),S,C),v?f.x+=O+u:f.y+=x}),Object(a.Q)(this.ctx,e.textDirection)}drawTitle(){const e=this.options,n=e.title,t=Object(a.p)(n.font),i=Object(a.l)(n.padding);if(!n.display)return;const r=Object(a.N)(e.rtl,this.left,this.width),o=this.ctx,s=n.position,l=t.size/2,d=i.top+l;let c,u=this.left,h=this.width;if(this.isHorizontal())h=Math.max(...this.lineWidths),c=this.top+d,u=Object(a.t)(e.align,u,this.right-h);else{const n=this.columnSizes.reduce((e,n)=>Math.max(e,n.height),0);c=d+Object(a.t)(e.align,this.top,this.bottom-n-e.labels.padding-this._computeTitleHeight())}const p=Object(a.t)(s,u,u+h);o.textAlign=r.textAlign(Object(a.s)(s)),o.textBaseline="middle",o.strokeStyle=n.color,o.fillStyle=n.color,o.font=t.string,Object(a.n)(o,n.text,p,c,t)}_computeTitleHeight(){const e=this.options.title,n=Object(a.p)(e.font),t=Object(a.l)(e.padding);return e.display?n.lineHeight+t.height:0}_getLegendItemAt(e,n){let t,i,r;if(Object(a.nb)(e,this.left,this.right)&&Object(a.nb)(n,this.top,this.bottom))for(r=this.legendHitBoxes,t=0;t<r.length;++t)if(i=r[t],Object(a.nb)(e,i.left,i.left+i.width)&&Object(a.nb)(n,i.top,i.top+i.height))return this.legendItems[t];return null}handleEvent(e){const n=this.options;if(!function(e,n){if(("mousemove"===e||"mouseout"===e)&&(n.onHover||n.onLeave))return!0;if(n.onClick&&("click"===e||"mouseup"===e))return!0;return!1}(e.type,n))return;const t=this._getLegendItemAt(e.x,e.y);if("mousemove"===e.type||"mouseout"===e.type){const o=this._hoveredItem,s=(r=t,null!==(i=o)&&null!==r&&i.datasetIndex===r.datasetIndex&&i.index===r.index);o&&!s&&Object(a.d)(n.onLeave,[e,o,this],this),this._hoveredItem=t,t&&!s&&Object(a.d)(n.onHover,[e,t,this],this)}else t&&Object(a.d)(n.onClick,[e,t,this],this);var i,r}}var tt={id:"legend",_element:nt,start(e,n,t){const a=e.legend=new nt({ctx:e.ctx,options:t,chart:e});xe.configure(e,a,t),xe.addBox(e,a)},stop(e){xe.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,n,t){const a=e.legend;xe.configure(e,a,t),a.options=t},afterUpdate(e){const n=e.legend;n.buildLabels(),n.adjustHitBoxes()},afterEvent(e,n){n.replay||e.legend.handleEvent(n.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(e,n,t){const a=n.datasetIndex,i=t.chart;i.isDatasetVisible(a)?(i.hide(a),n.hidden=!0):(i.show(a),n.hidden=!1)},onHover:null,onLeave:null,labels:{color:e=>e.chart.options.color,boxWidth:40,padding:10,generateLabels(e){const n=e.data.datasets,{labels:{usePointStyle:t,pointStyle:i,textAlign:r,color:o}}=e.legend.options;return e._getSortedDatasetMetas().map(e=>{const s=e.controller.getStyle(t?0:void 0),l=Object(a.l)(s.borderWidth);return{text:n[e.index].label,fillStyle:s.backgroundColor,fontColor:o,hidden:!e.visible,lineCap:s.borderCapStyle,lineDash:s.borderDash,lineDashOffset:s.borderDashOffset,lineJoin:s.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:s.borderColor,pointStyle:i||s.pointStyle,rotation:s.rotation,textAlign:r||s.textAlign,borderRadius:0,datasetIndex:e.index}},this)}},title:{color:e=>e.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:e=>!e.startsWith("on"),labels:{_scriptable:e=>!["generateLabels","filter","sort"].includes(e)}}};class at extends j{constructor(e){super(),this.chart=e.chart,this.options=e.options,this.ctx=e.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(e,n){const t=this.options;if(this.left=0,this.top=0,!t.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=e,this.height=this.bottom=n;const i=Object(a.Db)(t.text)?t.text.length:1;this._padding=Object(a.l)(t.padding);const r=i*Object(a.p)(t.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=r:this.width=r}isHorizontal(){const e=this.options.position;return"top"===e||"bottom"===e}_drawArgs(e){const{top:n,left:t,bottom:i,right:r,options:o}=this,s=o.align;let l,d,c,u=0;return this.isHorizontal()?(d=Object(a.t)(s,t,r),c=n+e,l=r-t):("left"===o.position?(d=t+e,c=Object(a.t)(s,i,n),u=-.5*a.q):(d=r-e,c=Object(a.t)(s,n,i),u=.5*a.q),l=i-n),{titleX:d,titleY:c,maxWidth:l,rotation:u}}draw(){const e=this.ctx,n=this.options;if(!n.display)return;const t=Object(a.p)(n.font),i=t.lineHeight/2+this._padding.top,{titleX:r,titleY:o,maxWidth:s,rotation:l}=this._drawArgs(i);Object(a.n)(e,n.text,0,0,t,{color:n.color,maxWidth:s,rotation:l,textAlign:Object(a.s)(n.align),textBaseline:"middle",translation:[r,o]})}}var it={id:"title",_element:at,start(e,n,t){!function(e,n){const t=new at({ctx:e.ctx,options:n,chart:e});xe.configure(e,t,n),xe.addBox(e,t),e.titleBlock=t}(e,t)},stop(e){const n=e.titleBlock;xe.removeBox(e,n),delete e.titleBlock},beforeUpdate(e,n,t){const a=e.titleBlock;xe.configure(e,a,t),a.options=t},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const rt=new WeakMap;var ot={id:"subtitle",start(e,n,t){const a=new at({ctx:e.ctx,options:t,chart:e});xe.configure(e,a,t),xe.addBox(e,a),rt.set(e,a)},stop(e){xe.removeBox(e,rt.get(e)),rt.delete(e)},beforeUpdate(e,n,t){const a=rt.get(e);xe.configure(e,a,t),a.options=t},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const st={average(e){if(!e.length)return!1;let n,t,a=0,i=0,r=0;for(n=0,t=e.length;n<t;++n){const t=e[n].element;if(t&&t.hasValue()){const e=t.tooltipPosition();a+=e.x,i+=e.y,++r}}return{x:a/r,y:i/r}},nearest(e,n){if(!e.length)return!1;let t,i,r,o=n.x,s=n.y,l=Number.POSITIVE_INFINITY;for(t=0,i=e.length;t<i;++t){const i=e[t].element;if(i&&i.hasValue()){const e=i.getCenterPoint(),t=Object(a.T)(n,e);t<l&&(l=t,r=i)}}if(r){const e=r.tooltipPosition();o=e.x,s=e.y}return{x:o,y:s}}};function lt(e,n){return n&&(Object(a.Db)(n)?Array.prototype.push.apply(e,n):e.push(n)),e}function dt(e){return("string"==typeof e||e instanceof String)&&e.indexOf("\n")>-1?e.split("\n"):e}function ct(e,n){const{element:t,datasetIndex:a,index:i}=n,r=e.getDatasetMeta(a).controller,{label:o,value:s}=r.getLabelAndValue(i);return{chart:e,label:o,parsed:r.getParsed(i),raw:e.data.datasets[a].data[i],formattedValue:s,dataset:r.getDataset(),dataIndex:i,datasetIndex:a,element:t}}function ut(e,n){const t=e.chart.ctx,{body:i,footer:r,title:o}=e,{boxWidth:s,boxHeight:l}=n,d=Object(a.p)(n.bodyFont),c=Object(a.p)(n.titleFont),u=Object(a.p)(n.footerFont),h=o.length,p=r.length,f=i.length,m=Object(a.l)(n.padding);let g=m.height,b=0,v=i.reduce((e,n)=>e+n.before.length+n.lines.length+n.after.length,0);if(v+=e.beforeBody.length+e.afterBody.length,h&&(g+=h*c.lineHeight+(h-1)*n.titleSpacing+n.titleMarginBottom),v){g+=f*(n.displayColors?Math.max(l,d.lineHeight):d.lineHeight)+(v-f)*d.lineHeight+(v-1)*n.bodySpacing}p&&(g+=n.footerMarginTop+p*u.lineHeight+(p-1)*n.footerSpacing);let y=0;const x=function(e){b=Math.max(b,t.measureText(e).width+y)};return t.save(),t.font=c.string,Object(a.r)(e.title,x),t.font=d.string,Object(a.r)(e.beforeBody.concat(e.afterBody),x),y=n.displayColors?s+2+n.boxPadding:0,Object(a.r)(i,e=>{Object(a.r)(e.before,x),Object(a.r)(e.lines,x),Object(a.r)(e.after,x)}),y=0,t.font=u.string,Object(a.r)(e.footer,x),t.restore(),b+=m.width,{width:b,height:g}}function ht(e,n,t,a){const{x:i,width:r}=t,{width:o,chartArea:{left:s,right:l}}=e;let d="center";return"center"===a?d=i<=(s+l)/2?"left":"right":i<=r/2?d="left":i>=o-r/2&&(d="right"),function(e,n,t,a){const{x:i,width:r}=a,o=t.caretSize+t.caretPadding;return"left"===e&&i+r+o>n.width||("right"===e&&i-r-o<0||void 0)}(d,e,n,t)&&(d="center"),d}function pt(e,n,t){const a=t.yAlign||n.yAlign||function(e,n){const{y:t,height:a}=n;return t<a/2?"top":t>e.height-a/2?"bottom":"center"}(e,t);return{xAlign:t.xAlign||n.xAlign||ht(e,n,t,a),yAlign:a}}function ft(e,n,t,i){const{caretSize:r,caretPadding:o,cornerRadius:s}=e,{xAlign:l,yAlign:d}=t,c=r+o,{topLeft:u,topRight:h,bottomLeft:p,bottomRight:f}=Object(a.Ab)(s);let m=function(e,n){let{x:t,width:a}=e;return"right"===n?t-=a:"center"===n&&(t-=a/2),t}(n,l);const g=function(e,n,t){let{y:a,height:i}=e;return"top"===n?a+=t:a-="bottom"===n?i+t:i/2,a}(n,d,c);return"center"===d?"left"===l?m+=c:"right"===l&&(m-=c):"left"===l?m-=Math.max(u,p)+r:"right"===l&&(m+=Math.max(h,f)+r),{x:Object(a.f)(m,0,i.width-n.width),y:Object(a.f)(g,0,i.height-n.height)}}function mt(e,n,t){const i=Object(a.l)(t.padding);return"center"===n?e.x+e.width/2:"right"===n?e.x+e.width-i.right:e.x+i.left}function gt(e){return lt([],dt(e))}function bt(e,n){const t=n&&n.dataset&&n.dataset.tooltip&&n.dataset.tooltip.callbacks;return t?e.override(t):e}class vt extends j{constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart||e._chart,this._chart=this.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const e=this._cachedAnimations;if(e)return e;const n=this.chart,t=this.options.setContext(this.getContext()),a=t.enabled&&n.options.animation&&t.animations,i=new l(this.chart,a);return a._cacheable&&(this._cachedAnimations=Object.freeze(i)),i}getContext(){return this.$context||(this.$context=(e=this.chart.getContext(),n=this,t=this._tooltipItems,Object(a.Jb)(e,{tooltip:n,tooltipItems:t,type:"tooltip"})));var e,n,t}getTitle(e,n){const{callbacks:t}=n,a=t.beforeTitle.apply(this,[e]),i=t.title.apply(this,[e]),r=t.afterTitle.apply(this,[e]);let o=[];return o=lt(o,dt(a)),o=lt(o,dt(i)),o=lt(o,dt(r)),o}getBeforeBody(e,n){return gt(n.callbacks.beforeBody.apply(this,[e]))}getBody(e,n){const{callbacks:t}=n,i=[];return Object(a.r)(e,e=>{const n={before:[],lines:[],after:[]},a=bt(t,e);lt(n.before,dt(a.beforeLabel.call(this,e))),lt(n.lines,a.label.call(this,e)),lt(n.after,dt(a.afterLabel.call(this,e))),i.push(n)}),i}getAfterBody(e,n){return gt(n.callbacks.afterBody.apply(this,[e]))}getFooter(e,n){const{callbacks:t}=n,a=t.beforeFooter.apply(this,[e]),i=t.footer.apply(this,[e]),r=t.afterFooter.apply(this,[e]);let o=[];return o=lt(o,dt(a)),o=lt(o,dt(i)),o=lt(o,dt(r)),o}_createItems(e){const n=this._active,t=this.chart.data,i=[],r=[],o=[];let s,l,d=[];for(s=0,l=n.length;s<l;++s)d.push(ct(this.chart,n[s]));return e.filter&&(d=d.filter((n,a,i)=>e.filter(n,a,i,t))),e.itemSort&&(d=d.sort((n,a)=>e.itemSort(n,a,t))),Object(a.r)(d,n=>{const t=bt(e.callbacks,n);i.push(t.labelColor.call(this,n)),r.push(t.labelPointStyle.call(this,n)),o.push(t.labelTextColor.call(this,n))}),this.labelColors=i,this.labelPointStyles=r,this.labelTextColors=o,this.dataPoints=d,d}update(e,n){const t=this.options.setContext(this.getContext()),a=this._active;let i,r=[];if(a.length){const e=st[t.position].call(this,a,this._eventPosition);r=this._createItems(t),this.title=this.getTitle(r,t),this.beforeBody=this.getBeforeBody(r,t),this.body=this.getBody(r,t),this.afterBody=this.getAfterBody(r,t),this.footer=this.getFooter(r,t);const n=this._size=ut(this,t),o=Object.assign({},e,n),s=pt(this.chart,t,o),l=ft(t,o,s,this.chart);this.xAlign=s.xAlign,this.yAlign=s.yAlign,i={opacity:1,x:l.x,y:l.y,width:n.width,height:n.height,caretX:e.x,caretY:e.y}}else 0!==this.opacity&&(i={opacity:0});this._tooltipItems=r,this.$context=void 0,i&&this._resolveAnimations().update(this,i),e&&t.external&&t.external.call(this,{chart:this.chart,tooltip:this,replay:n})}drawCaret(e,n,t,a){const i=this.getCaretPosition(e,t,a);n.lineTo(i.x1,i.y1),n.lineTo(i.x2,i.y2),n.lineTo(i.x3,i.y3)}getCaretPosition(e,n,t){const{xAlign:i,yAlign:r}=this,{caretSize:o,cornerRadius:s}=t,{topLeft:l,topRight:d,bottomLeft:c,bottomRight:u}=Object(a.Ab)(s),{x:h,y:p}=e,{width:f,height:m}=n;let g,b,v,y,x,C;return"center"===r?(x=p+m/2,"left"===i?(g=h,b=g-o,y=x+o,C=x-o):(g=h+f,b=g+o,y=x-o,C=x+o),v=g):(b="left"===i?h+Math.max(l,c)+o:"right"===i?h+f-Math.max(d,u)-o:this.caretX,"top"===r?(y=p,x=y-o,g=b-o,v=b+o):(y=p+m,x=y+o,g=b+o,v=b-o),C=y),{x1:g,x2:b,x3:v,y1:y,y2:x,y3:C}}drawTitle(e,n,t){const i=this.title,r=i.length;let o,s,l;if(r){const d=Object(a.N)(t.rtl,this.x,this.width);for(e.x=mt(this,t.titleAlign,t),n.textAlign=d.textAlign(t.titleAlign),n.textBaseline="middle",o=Object(a.p)(t.titleFont),s=t.titleSpacing,n.fillStyle=t.titleColor,n.font=o.string,l=0;l<r;++l)n.fillText(i[l],d.x(e.x),e.y+o.lineHeight/2),e.y+=o.lineHeight+s,l+1===r&&(e.y+=t.titleMarginBottom-s)}}_drawColorBox(e,n,t,i,r){const o=this.labelColors[t],s=this.labelPointStyles[t],{boxHeight:l,boxWidth:d,boxPadding:c}=r,u=Object(a.p)(r.bodyFont),h=mt(this,"left",r),p=i.x(h),f=l<u.lineHeight?(u.lineHeight-l)/2:0,m=n.y+f;if(r.usePointStyle){const n={radius:Math.min(d,l)/2,pointStyle:s.pointStyle,rotation:s.rotation,borderWidth:1},t=i.leftForLtr(p,d)+d/2,c=m+l/2;e.strokeStyle=r.multiKeyBackground,e.fillStyle=r.multiKeyBackground,Object(a.xb)(e,n,t,c),e.strokeStyle=o.borderColor,e.fillStyle=o.backgroundColor,Object(a.xb)(e,n,t,c)}else{e.lineWidth=Object(a.Kb)(o.borderWidth)?Math.max(...Object.values(o.borderWidth)):o.borderWidth||1,e.strokeStyle=o.borderColor,e.setLineDash(o.borderDash||[]),e.lineDashOffset=o.borderDashOffset||0;const n=i.leftForLtr(p,d-c),t=i.leftForLtr(i.xPlus(p,1),d-c-2),s=Object(a.Ab)(o.borderRadius);Object.values(s).some(e=>0!==e)?(e.beginPath(),e.fillStyle=r.multiKeyBackground,Object(a.yb)(e,{x:n,y:m,w:d,h:l,radius:s}),e.fill(),e.stroke(),e.fillStyle=o.backgroundColor,e.beginPath(),Object(a.yb)(e,{x:t,y:m+1,w:d-2,h:l-2,radius:s}),e.fill()):(e.fillStyle=r.multiKeyBackground,e.fillRect(n,m,d,l),e.strokeRect(n,m,d,l),e.fillStyle=o.backgroundColor,e.fillRect(t,m+1,d-2,l-2))}e.fillStyle=this.labelTextColors[t]}drawBody(e,n,t){const{body:i}=this,{bodySpacing:r,bodyAlign:o,displayColors:s,boxHeight:l,boxWidth:d,boxPadding:c}=t,u=Object(a.p)(t.bodyFont);let h=u.lineHeight,p=0;const f=Object(a.N)(t.rtl,this.x,this.width),m=function(t){n.fillText(t,f.x(e.x+p),e.y+h/2),e.y+=h+r},g=f.textAlign(o);let b,v,y,x,C,T,D;for(n.textAlign=o,n.textBaseline="middle",n.font=u.string,e.x=mt(this,g,t),n.fillStyle=t.bodyColor,Object(a.r)(this.beforeBody,m),p=s&&"right"!==g?"center"===o?d/2+c:d+2+c:0,x=0,T=i.length;x<T;++x){for(b=i[x],v=this.labelTextColors[x],n.fillStyle=v,Object(a.r)(b.before,m),y=b.lines,s&&y.length&&(this._drawColorBox(n,e,x,f,t),h=Math.max(u.lineHeight,l)),C=0,D=y.length;C<D;++C)m(y[C]),h=u.lineHeight;Object(a.r)(b.after,m)}p=0,h=u.lineHeight,Object(a.r)(this.afterBody,m),e.y-=r}drawFooter(e,n,t){const i=this.footer,r=i.length;let o,s;if(r){const l=Object(a.N)(t.rtl,this.x,this.width);for(e.x=mt(this,t.footerAlign,t),e.y+=t.footerMarginTop,n.textAlign=l.textAlign(t.footerAlign),n.textBaseline="middle",o=Object(a.p)(t.footerFont),n.fillStyle=t.footerColor,n.font=o.string,s=0;s<r;++s)n.fillText(i[s],l.x(e.x),e.y+o.lineHeight/2),e.y+=o.lineHeight+t.footerSpacing}}drawBackground(e,n,t,i){const{xAlign:r,yAlign:o}=this,{x:s,y:l}=e,{width:d,height:c}=t,{topLeft:u,topRight:h,bottomLeft:p,bottomRight:f}=Object(a.Ab)(i.cornerRadius);n.fillStyle=i.backgroundColor,n.strokeStyle=i.borderColor,n.lineWidth=i.borderWidth,n.beginPath(),n.moveTo(s+u,l),"top"===o&&this.drawCaret(e,n,t,i),n.lineTo(s+d-h,l),n.quadraticCurveTo(s+d,l,s+d,l+h),"center"===o&&"right"===r&&this.drawCaret(e,n,t,i),n.lineTo(s+d,l+c-f),n.quadraticCurveTo(s+d,l+c,s+d-f,l+c),"bottom"===o&&this.drawCaret(e,n,t,i),n.lineTo(s+p,l+c),n.quadraticCurveTo(s,l+c,s,l+c-p),"center"===o&&"left"===r&&this.drawCaret(e,n,t,i),n.lineTo(s,l+u),n.quadraticCurveTo(s,l,s+u,l),n.closePath(),n.fill(),i.borderWidth>0&&n.stroke()}_updateAnimationTarget(e){const n=this.chart,t=this.$animations,a=t&&t.x,i=t&&t.y;if(a||i){const t=st[e.position].call(this,this._active,this._eventPosition);if(!t)return;const r=this._size=ut(this,e),o=Object.assign({},t,this._size),s=pt(n,e,o),l=ft(e,o,s,n);a._to===l.x&&i._to===l.y||(this.xAlign=s.xAlign,this.yAlign=s.yAlign,this.width=r.width,this.height=r.height,this.caretX=t.x,this.caretY=t.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(e){const n=this.options.setContext(this.getContext());let t=this.opacity;if(!t)return;this._updateAnimationTarget(n);const i={width:this.width,height:this.height},r={x:this.x,y:this.y};t=Math.abs(t)<.001?0:t;const o=Object(a.l)(n.padding),s=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;n.enabled&&s&&(e.save(),e.globalAlpha=t,this.drawBackground(r,e,i,n),Object(a.O)(e,n.textDirection),r.y+=o.top,this.drawTitle(r,e,n),this.drawBody(r,e,n),this.drawFooter(r,e,n),Object(a.Q)(e,n.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,n){const t=this._active,i=e.map(({datasetIndex:e,index:n})=>{const t=this.chart.getDatasetMeta(e);if(!t)throw new Error("Cannot find a dataset at index "+e);return{datasetIndex:e,element:t.data[n],index:n}}),r=!Object(a.lb)(t,i),o=this._positionChanged(i,n);(r||o)&&(this._active=i,this._eventPosition=n,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,n,t=!0){if(n&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const i=this.options,r=this._active||[],o=this._getActiveElements(e,r,n,t),s=this._positionChanged(o,e),l=n||!Object(a.lb)(o,r)||s;return l&&(this._active=o,(i.enabled||i.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,n))),l}_getActiveElements(e,n,t,a){const i=this.options;if("mouseout"===e.type)return[];if(!a)return n;const r=this.chart.getElementsAtEventForMode(e,i.mode,i,t);return i.reverse&&r.reverse(),r}_positionChanged(e,n){const{caretX:t,caretY:a,options:i}=this,r=st[i.position].call(this,e,n);return!1!==r&&(t!==r.x||a!==r.y)}}vt.positioners=st;var yt={id:"tooltip",_element:vt,positioners:st,afterInit(e,n,t){t&&(e.tooltip=new vt({chart:e,options:t}))},beforeUpdate(e,n,t){e.tooltip&&e.tooltip.initialize(t)},reset(e,n,t){e.tooltip&&e.tooltip.initialize(t)},afterDraw(e){const n=e.tooltip;if(n&&n._willRender()){const t={tooltip:n};if(!1===e.notifyPlugins("beforeTooltipDraw",t))return;n.draw(e.ctx),e.notifyPlugins("afterTooltipDraw",t)}},afterEvent(e,n){if(e.tooltip){const t=n.replay;e.tooltip.handleEvent(n.event,t,n.inChartArea)&&(n.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(e,n)=>n.bodyFont.size,boxWidth:(e,n)=>n.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:a.S,title(e){if(e.length>0){const n=e[0],t=n.chart.data.labels,a=t?t.length:0;if(this&&this.options&&"dataset"===this.options.mode)return n.dataset.label||"";if(n.label)return n.label;if(a>0&&n.dataIndex<a)return t[n.dataIndex]}return""},afterTitle:a.S,beforeBody:a.S,beforeLabel:a.S,label(e){if(this&&this.options&&"dataset"===this.options.mode)return e.label+": "+e.formattedValue||e.formattedValue;let n=e.dataset.label||"";n&&(n+=": ");const t=e.formattedValue;return Object(a.Mb)(t)||(n+=t),n},labelColor(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{borderColor:n.borderColor,backgroundColor:n.backgroundColor,borderWidth:n.borderWidth,borderDash:n.borderDash,borderDashOffset:n.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(e){const n=e.chart.getDatasetMeta(e.datasetIndex).controller.getStyle(e.dataIndex);return{pointStyle:n.pointStyle,rotation:n.rotation}},afterLabel:a.S,afterBody:a.S,beforeFooter:a.S,footer:a.S,afterFooter:a.S}},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:e=>"filter"!==e&&"itemSort"!==e&&"external"!==e,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},xt=Object.freeze({__proto__:null,Decimation:jn,Filler:Qn,Legend:tt,SubTitle:ot,Title:it,Tooltip:yt});function Ct(e,n,t,a){const i=e.indexOf(n);if(-1===i)return((e,n,t,a)=>("string"==typeof n?(t=e.push(n)-1,a.unshift({index:t,label:n})):isNaN(n)&&(t=null),t))(e,n,t,a);return i!==e.lastIndexOf(n)?t:i}class Tt extends G{constructor(e){super(e),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(e){const n=this._addedLabels;if(n.length){const e=this.getLabels();for(const{index:t,label:a}of n)e[t]===a&&e.splice(t,1);this._addedLabels=[]}super.init(e)}parse(e,n){if(Object(a.Mb)(e))return null;const t=this.getLabels();return((e,n)=>null===e?null:Object(a.f)(Math.round(e),0,n))(n=isFinite(n)&&t[n]===e?n:Ct(t,e,Object(a.Xb)(n,e),this._addedLabels),t.length-1)}determineDataLimits(){const{minDefined:e,maxDefined:n}=this.getUserBounds();let{min:t,max:a}=this.getMinMax(!0);"ticks"===this.options.bounds&&(e||(t=0),n||(a=this.getLabels().length-1)),this.min=t,this.max=a}buildTicks(){const e=this.min,n=this.max,t=this.options.offset,a=[];let i=this.getLabels();i=0===e&&n===i.length-1?i:i.slice(e,n+1),this._valueRange=Math.max(i.length-(t?0:1),1),this._startValue=this.min-(t?.5:0);for(let t=e;t<=n;t++)a.push({value:t});return a}getLabelForValue(e){const n=this.getLabels();return e>=0&&e<n.length?n[e]:e}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(e){return"number"!=typeof e&&(e=this.parse(e)),null===e?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getPixelForTick(e){const n=this.ticks;return e<0||e>n.length-1?null:this.getPixelForValue(n[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}function Dt(e,n,{horizontal:t,minRotation:i}){const r=Object(a.Vb)(i),o=(t?Math.sin(r):Math.cos(r))||.001,s=.75*n*(""+e).length;return Math.min(n/o,s)}Tt.id="category",Tt.defaults={ticks:{callback:Tt.prototype.getLabelForValue}};class wt extends G{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(e,n){return Object(a.Mb)(e)||("number"==typeof e||e instanceof Number)&&!isFinite(+e)?null:+e}handleTickRangeOptions(){const{beginAtZero:e}=this.options,{minDefined:n,maxDefined:t}=this.getUserBounds();let{min:i,max:r}=this;const o=e=>i=n?i:e,s=e=>r=t?r:e;if(e){const e=Object(a.Ub)(i),n=Object(a.Ub)(r);e<0&&n<0?s(0):e>0&&n>0&&o(0)}if(i===r){let n=1;(r>=Number.MAX_SAFE_INTEGER||i<=Number.MIN_SAFE_INTEGER)&&(n=Math.abs(.05*r)),s(r+n),e||o(i-n)}this.min=i,this.max=r}getTickLimit(){const e=this.options.ticks;let n,{maxTicksLimit:t,stepSize:a}=e;return a?(n=Math.ceil(this.max/a)-Math.floor(this.min/a)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${a} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),t=t||11),t&&(n=Math.min(t,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const e=this.options,n=e.ticks;let t=this.getTickLimit();t=Math.max(2,t);const i=function(e,n){const t=[],{bounds:i,step:r,min:o,max:s,precision:l,count:d,maxTicks:c,maxDigits:u,includeBounds:h}=e,p=r||1,f=c-1,{min:m,max:g}=n,b=!Object(a.Mb)(o),v=!Object(a.Mb)(s),y=!Object(a.Mb)(d),x=(g-m)/(u+1);let C,T,D,w,O=Object(a.V)((g-m)/f/p)*p;if(O<1e-14&&!b&&!v)return[{value:m},{value:g}];w=Math.ceil(g/O)-Math.floor(m/O),w>f&&(O=Object(a.V)(w*O/f/p)*p),Object(a.Mb)(l)||(C=Math.pow(10,l),O=Math.ceil(O*C)/C),"ticks"===i?(T=Math.floor(m/O)*O,D=Math.ceil(g/O)*O):(T=m,D=g),b&&v&&r&&Object(a.W)((s-o)/r,O/1e3)?(w=Math.round(Math.min((s-o)/O,c)),O=(s-o)/w,T=o,D=s):y?(T=b?o:T,D=v?s:D,w=d-1,O=(D-T)/w):(w=(D-T)/O,w=Object(a.X)(w,Math.round(w),O/1e3)?Math.round(w):Math.ceil(w));const k=Math.max(Object(a.Y)(O),Object(a.Y)(T));C=Math.pow(10,Object(a.Mb)(l)?k:l),T=Math.round(T*C)/C,D=Math.round(D*C)/C;let S=0;for(b&&(h&&T!==o?(t.push({value:o}),T<o&&S++,Object(a.X)(Math.round((T+S*O)*C)/C,o,Dt(o,x,e))&&S++):T<o&&S++);S<w;++S)t.push({value:Math.round((T+S*O)*C)/C});return v&&h&&D!==s?t.length&&Object(a.X)(t[t.length-1].value,s,Dt(s,x,e))?t[t.length-1].value=s:t.push({value:s}):v&&D!==s||t.push({value:D}),t}({maxTicks:t,bounds:e.bounds,min:e.min,max:e.max,precision:n.precision,step:n.stepSize,count:n.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:n.minRotation||0,includeBounds:!1!==n.includeBounds},this._range||this);return"ticks"===e.bounds&&Object(a.U)(i,this,"value"),e.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}configure(){const e=this.ticks;let n=this.min,t=this.max;if(super.configure(),this.options.offset&&e.length){const a=(t-n)/Math.max(e.length-1,1)/2;n-=a,t+=a}this._startValue=n,this._endValue=t,this._valueRange=t-n}getLabelForValue(e){return Object(a.Qb)(e,this.chart.options.locale,this.options.ticks.format)}}class Ot extends wt{determineDataLimits(){const{min:e,max:n}=this.getMinMax(!0);this.min=Object(a.Ib)(e)?e:0,this.max=Object(a.Ib)(n)?n:1,this.handleTickRangeOptions()}computeTickLimit(){const e=this.isHorizontal(),n=e?this.width:this.height,t=Object(a.Vb)(this.options.ticks.minRotation),i=(e?Math.sin(t):Math.cos(t))||.001,r=this._resolveTickFontOptions(0);return Math.ceil(n/Math.min(40,r.lineHeight/i))}getPixelForValue(e){return null===e?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getValueForPixel(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange}}function kt(e){return 1===e/Math.pow(10,Math.floor(Object(a.bc)(e)))}Ot.id="linear",Ot.defaults={ticks:{callback:N.formatters.numeric}};class St extends G{constructor(e){super(e),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(e,n){const t=wt.prototype.parse.apply(this,[e,n]);if(0!==t)return Object(a.Ib)(t)&&t>0?t:null;this._zero=!0}determineDataLimits(){const{min:e,max:n}=this.getMinMax(!0);this.min=Object(a.Ib)(e)?Math.max(0,e):null,this.max=Object(a.Ib)(n)?Math.max(0,n):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:e,maxDefined:n}=this.getUserBounds();let t=this.min,i=this.max;const r=n=>t=e?t:n,o=e=>i=n?i:e,s=(e,n)=>Math.pow(10,Math.floor(Object(a.bc)(e))+n);t===i&&(t<=0?(r(1),o(10)):(r(s(t,-1)),o(s(i,1)))),t<=0&&r(s(i,-1)),i<=0&&o(s(t,1)),this._zero&&this.min!==this._suggestedMin&&t===s(this.min,0)&&r(s(t,-1)),this.min=t,this.max=i}buildTicks(){const e=this.options,n=function(e,n){const t=Math.floor(Object(a.bc)(n.max)),i=Math.ceil(n.max/Math.pow(10,t)),r=[];let o=Object(a.c)(e.min,Math.pow(10,Math.floor(Object(a.bc)(n.min)))),s=Math.floor(Object(a.bc)(o)),l=Math.floor(o/Math.pow(10,s)),d=s<0?Math.pow(10,Math.abs(s)):1;do{r.push({value:o,major:kt(o)}),++l,10===l&&(l=1,++s,d=s>=0?1:d),o=Math.round(l*Math.pow(10,s)*d)/d}while(s<t||s===t&&l<i);const c=Object(a.c)(e.max,o);return r.push({value:c,major:kt(o)}),r}({min:this._userMin,max:this._userMax},this);return"ticks"===e.bounds&&Object(a.U)(n,this,"value"),e.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}getLabelForValue(e){return void 0===e?"0":Object(a.Qb)(e,this.chart.options.locale,this.options.ticks.format)}configure(){const e=this.min;super.configure(),this._startValue=Object(a.bc)(e),this._valueRange=Object(a.bc)(this.max)-Object(a.bc)(e)}getPixelForValue(e){return void 0!==e&&0!==e||(e=this.min),null===e||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Object(a.bc)(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const n=this.getDecimalForPixel(e);return Math.pow(10,this._startValue+n*this._valueRange)}}function Pt(e){const n=e.ticks;if(n.display&&e.display){const e=Object(a.l)(n.backdropPadding);return Object(a.Xb)(n.font&&n.font.size,a.Fb.font.size)+e.height}return 0}function At(e,n,t,a,i){return e===a||e===i?{start:n-t/2,end:n+t/2}:e<a||e>i?{start:n-t,end:n}:{start:n,end:n+t}}function Rt(e){const n={l:e.left+e._padding.left,r:e.right-e._padding.right,t:e.top+e._padding.top,b:e.bottom-e._padding.bottom},t=Object.assign({},n),i=[],r=[],o=e._pointLabels.length,s=e.options.pointLabels,l=s.centerPointLabels?a.q/o:0;for(let h=0;h<o;h++){const o=s.setContext(e.getPointLabelContext(h));r[h]=o.padding;const p=e.getPointPosition(h,e.drawingArea+r[h],l),f=Object(a.p)(o.font),m=(d=e.ctx,c=f,u=e._pointLabels[h],u=Object(a.Db)(u)?u:[u],{w:Object(a.Z)(d,c.string,u),h:u.length*c.lineHeight});i[h]=m;const g=Object(a.Cb)(e.getIndexAngle(h)+l),b=Math.round(Object(a.g)(g));It(t,n,g,At(b,p.x,m.w,0,180),At(b,p.y,m.h,90,270))}var d,c,u;e.setCenterPoint(n.l-t.l,t.r-n.r,n.t-t.t,t.b-n.b),e._pointLabelItems=function(e,n,t){const i=[],r=e._pointLabels.length,o=e.options,s=Pt(o)/2,l=e.drawingArea,d=o.pointLabels.centerPointLabels?a.q/r:0;for(let o=0;o<r;o++){const r=e.getPointPosition(o,l+s+t[o],d),c=Math.round(Object(a.g)(Object(a.Cb)(r.angle+a.i))),u=n[o],h=Et(r.y,u.h,c),p=_t(c),f=Lt(r.x,u.w,p);i.push({x:r.x,y:h,textAlign:p,left:f,top:h,right:f+u.w,bottom:h+u.h})}return i}(e,i,r)}function It(e,n,t,a,i){const r=Math.abs(Math.sin(t)),o=Math.abs(Math.cos(t));let s=0,l=0;a.start<n.l?(s=(n.l-a.start)/r,e.l=Math.min(e.l,n.l-s)):a.end>n.r&&(s=(a.end-n.r)/r,e.r=Math.max(e.r,n.r+s)),i.start<n.t?(l=(n.t-i.start)/o,e.t=Math.min(e.t,n.t-l)):i.end>n.b&&(l=(i.end-n.b)/o,e.b=Math.max(e.b,n.b+l))}function _t(e){return 0===e||180===e?"center":e<180?"left":"right"}function Lt(e,n,t){return"right"===t?e-=n:"center"===t&&(e-=n/2),e}function Et(e,n,t){return 90===t||270===t?e-=n/2:(t>270||t<90)&&(e-=n),e}function Mt(e,n,t,i){const{ctx:r}=e;if(t)r.arc(e.xCenter,e.yCenter,n,0,a.u);else{let t=e.getPointPosition(0,n);r.moveTo(t.x,t.y);for(let a=1;a<i;a++)t=e.getPointPosition(a,n),r.lineTo(t.x,t.y)}}St.id="logarithmic",St.defaults={ticks:{callback:N.formatters.logarithmic,major:{enabled:!0}}};class jt extends wt{constructor(e){super(e),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const e=this._padding=Object(a.l)(Pt(this.options)/2),n=this.width=this.maxWidth-e.width,t=this.height=this.maxHeight-e.height;this.xCenter=Math.floor(this.left+n/2+e.left),this.yCenter=Math.floor(this.top+t/2+e.top),this.drawingArea=Math.floor(Math.min(n,t)/2)}determineDataLimits(){const{min:e,max:n}=this.getMinMax(!1);this.min=Object(a.Ib)(e)&&!isNaN(e)?e:0,this.max=Object(a.Ib)(n)&&!isNaN(n)?n:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Pt(this.options))}generateTickLabels(e){wt.prototype.generateTickLabels.call(this,e),this._pointLabels=this.getLabels().map((e,n)=>{const t=Object(a.d)(this.options.pointLabels.callback,[e,n],this);return t||0===t?t:""}).filter((e,n)=>this.chart.getDataVisibility(n))}fit(){const e=this.options;e.display&&e.pointLabels.display?Rt(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(e,n,t,a){this.xCenter+=Math.floor((e-n)/2),this.yCenter+=Math.floor((t-a)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(e,n,t,a))}getIndexAngle(e){const n=a.u/(this._pointLabels.length||1),t=this.options.startAngle||0;return Object(a.Cb)(e*n+Object(a.Vb)(t))}getDistanceFromCenterForValue(e){if(Object(a.Mb)(e))return NaN;const n=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-e)*n:(e-this.min)*n}getValueForDistanceFromCenter(e){if(Object(a.Mb)(e))return NaN;const n=e/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-n:this.min+n}getPointLabelContext(e){const n=this._pointLabels||[];if(e>=0&&e<n.length){const t=n[e];return function(e,n,t){return Object(a.Jb)(e,{label:t,index:n,type:"pointLabel"})}(this.getContext(),e,t)}}getPointPosition(e,n,t=0){const i=this.getIndexAngle(e)-a.i+t;return{x:Math.cos(i)*n+this.xCenter,y:Math.sin(i)*n+this.yCenter,angle:i}}getPointPositionForValue(e,n){return this.getPointPosition(e,this.getDistanceFromCenterForValue(n))}getBasePosition(e){return this.getPointPositionForValue(e||0,this.getBaseValue())}getPointLabelPosition(e){const{left:n,top:t,right:a,bottom:i}=this._pointLabelItems[e];return{left:n,top:t,right:a,bottom:i}}drawBackground(){const{backgroundColor:e,grid:{circular:n}}=this.options;if(e){const t=this.ctx;t.save(),t.beginPath(),Mt(this,this.getDistanceFromCenterForValue(this._endValue),n,this._pointLabels.length),t.closePath(),t.fillStyle=e,t.fill(),t.restore()}}drawGrid(){const e=this.ctx,n=this.options,{angleLines:t,grid:i}=n,r=this._pointLabels.length;let o,s,l;if(n.pointLabels.display&&function(e,n){const{ctx:t,options:{pointLabels:i}}=e;for(let r=n-1;r>=0;r--){const n=i.setContext(e.getPointLabelContext(r)),o=Object(a.p)(n.font),{x:s,y:l,textAlign:d,left:c,top:u,right:h,bottom:p}=e._pointLabelItems[r],{backdropColor:f}=n;if(!Object(a.Mb)(f)){const e=Object(a.Ab)(n.borderRadius),i=Object(a.l)(n.backdropPadding);t.fillStyle=f;const r=c-i.left,o=u-i.top,s=h-c+i.width,l=p-u+i.height;Object.values(e).some(e=>0!==e)?(t.beginPath(),Object(a.yb)(t,{x:r,y:o,w:s,h:l,radius:e}),t.fill()):t.fillRect(r,o,s,l)}Object(a.n)(t,e._pointLabels[r],s,l+o.lineHeight/2,o,{color:n.color,textAlign:d,textBaseline:"middle"})}}(this,r),i.display&&this.ticks.forEach((e,n)=>{if(0!==n){s=this.getDistanceFromCenterForValue(e.value);!function(e,n,t,a){const i=e.ctx,r=n.circular,{color:o,lineWidth:s}=n;!r&&!a||!o||!s||t<0||(i.save(),i.strokeStyle=o,i.lineWidth=s,i.setLineDash(n.borderDash),i.lineDashOffset=n.borderDashOffset,i.beginPath(),Mt(e,t,r,a),i.closePath(),i.stroke(),i.restore())}(this,i.setContext(this.getContext(n-1)),s,r)}}),t.display){for(e.save(),o=r-1;o>=0;o--){const a=t.setContext(this.getPointLabelContext(o)),{color:i,lineWidth:r}=a;r&&i&&(e.lineWidth=r,e.strokeStyle=i,e.setLineDash(a.borderDash),e.lineDashOffset=a.borderDashOffset,s=this.getDistanceFromCenterForValue(n.ticks.reverse?this.min:this.max),l=this.getPointPosition(o,s),e.beginPath(),e.moveTo(this.xCenter,this.yCenter),e.lineTo(l.x,l.y),e.stroke())}e.restore()}}drawBorder(){}drawLabels(){const e=this.ctx,n=this.options,t=n.ticks;if(!t.display)return;const i=this.getIndexAngle(0);let r,o;e.save(),e.translate(this.xCenter,this.yCenter),e.rotate(i),e.textAlign="center",e.textBaseline="middle",this.ticks.forEach((i,s)=>{if(0===s&&!n.reverse)return;const l=t.setContext(this.getContext(s)),d=Object(a.p)(l.font);if(r=this.getDistanceFromCenterForValue(this.ticks[s].value),l.showLabelBackdrop){e.font=d.string,o=e.measureText(i.label).width,e.fillStyle=l.backdropColor;const n=Object(a.l)(l.backdropPadding);e.fillRect(-o/2-n.left,-r-d.size/2-n.top,o+n.width,d.size+n.height)}Object(a.n)(e,i.label,0,-r,d,{color:l.color})}),e.restore()}drawTitle(){}}jt.id="radialLinear",jt.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:N.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:e=>e,padding:5,centerPointLabels:!1}},jt.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},jt.descriptors={angleLines:{_fallback:"grid"}};const Ut={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Nt=Object.keys(Ut);function Bt(e,n){return e-n}function Ft(e,n){if(Object(a.Mb)(n))return null;const t=e._adapter,{parser:i,round:r,isoWeekday:o}=e._parseOpts;let s=n;return"function"==typeof i&&(s=i(s)),Object(a.Ib)(s)||(s="string"==typeof i?t.parse(s,i):t.parse(s)),null===s?null:(r&&(s="week"!==r||!Object(a.Zb)(o)&&!0!==o?t.startOf(s,r):t.startOf(s,"isoWeek",o)),+s)}function zt(e,n,t,a){const i=Nt.length;for(let r=Nt.indexOf(e);r<i-1;++r){const e=Ut[Nt[r]],i=e.steps?e.steps:Number.MAX_SAFE_INTEGER;if(e.common&&Math.ceil((t-n)/(i*e.size))<=a)return Nt[r]}return Nt[i-1]}function Ht(e,n,t){if(t){if(t.length){const{lo:i,hi:r}=Object(a.bb)(t,n);e[t[i]>=n?t[i]:t[r]]=!0}}else e[n]=!0}function Vt(e,n,t){const a=[],i={},r=n.length;let o,s;for(o=0;o<r;++o)s=n[o],i[s]=o,a.push({value:s,major:!1});return 0!==r&&t?function(e,n,t,a){const i=e._adapter,r=+i.startOf(n[0].value,a),o=n[n.length-1].value;let s,l;for(s=r;s<=o;s=+i.add(s,1,a))l=t[s],l>=0&&(n[l].major=!0);return n}(e,a,i,t):a}class Wt extends G{constructor(e){super(e),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(e,n){const t=e.time||(e.time={}),i=this._adapter=new ee._date(e.adapters.date);i.init(n),Object(a.fb)(t.displayFormats,i.formats()),this._parseOpts={parser:t.parser,round:t.round,isoWeekday:t.isoWeekday},super.init(e),this._normalized=n.normalized}parse(e,n){return void 0===e?null:Ft(this,e)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const e=this.options,n=this._adapter,t=e.time.unit||"day";let{min:i,max:r,minDefined:o,maxDefined:s}=this.getUserBounds();function l(e){o||isNaN(e.min)||(i=Math.min(i,e.min)),s||isNaN(e.max)||(r=Math.max(r,e.max))}o&&s||(l(this._getLabelBounds()),"ticks"===e.bounds&&"labels"===e.ticks.source||l(this.getMinMax(!1))),i=Object(a.Ib)(i)&&!isNaN(i)?i:+n.startOf(Date.now(),t),r=Object(a.Ib)(r)&&!isNaN(r)?r:+n.endOf(Date.now(),t)+1,this.min=Math.min(i,r-1),this.max=Math.max(i+1,r)}_getLabelBounds(){const e=this.getLabelTimestamps();let n=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY;return e.length&&(n=e[0],t=e[e.length-1]),{min:n,max:t}}buildTicks(){const e=this.options,n=e.time,t=e.ticks,i="labels"===t.source?this.getLabelTimestamps():this._generate();"ticks"===e.bounds&&i.length&&(this.min=this._userMin||i[0],this.max=this._userMax||i[i.length-1]);const r=this.min,o=this.max,s=Object(a.ab)(i,r,o);return this._unit=n.unit||(t.autoSkip?zt(n.minUnit,this.min,this.max,this._getLabelCapacity(r)):function(e,n,t,a,i){for(let r=Nt.length-1;r>=Nt.indexOf(t);r--){const t=Nt[r];if(Ut[t].common&&e._adapter.diff(i,a,t)>=n-1)return t}return Nt[t?Nt.indexOf(t):0]}(this,s.length,n.minUnit,this.min,this.max)),this._majorUnit=t.major.enabled&&"year"!==this._unit?function(e){for(let n=Nt.indexOf(e)+1,t=Nt.length;n<t;++n)if(Ut[Nt[n]].common)return Nt[n]}(this._unit):void 0,this.initOffsets(i),e.reverse&&s.reverse(),Vt(this,s,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(e=>+e.value))}initOffsets(e){let n,t,i=0,r=0;this.options.offset&&e.length&&(n=this.getDecimalForValue(e[0]),i=1===e.length?1-n:(this.getDecimalForValue(e[1])-n)/2,t=this.getDecimalForValue(e[e.length-1]),r=1===e.length?t:(t-this.getDecimalForValue(e[e.length-2]))/2);const o=e.length<3?.5:.25;i=Object(a.f)(i,0,o),r=Object(a.f)(r,0,o),this._offsets={start:i,end:r,factor:1/(i+1+r)}}_generate(){const e=this._adapter,n=this.min,t=this.max,i=this.options,r=i.time,o=r.unit||zt(r.minUnit,n,t,this._getLabelCapacity(n)),s=Object(a.Xb)(r.stepSize,1),l="week"===o&&r.isoWeekday,d=Object(a.Zb)(l)||!0===l,c={};let u,h,p=n;if(d&&(p=+e.startOf(p,"isoWeek",l)),p=+e.startOf(p,d?"day":o),e.diff(t,n,o)>1e5*s)throw new Error(n+" and "+t+" are too far apart with stepSize of "+s+" "+o);const f="data"===i.ticks.source&&this.getDataTimestamps();for(u=p,h=0;u<t;u=+e.add(u,s,o),h++)Ht(c,u,f);return u!==t&&"ticks"!==i.bounds&&1!==h||Ht(c,u,f),Object.keys(c).sort((e,n)=>e-n).map(e=>+e)}getLabelForValue(e){const n=this._adapter,t=this.options.time;return t.tooltipFormat?n.format(e,t.tooltipFormat):n.format(e,t.displayFormats.datetime)}_tickFormatFunction(e,n,t,i){const r=this.options,o=r.time.displayFormats,s=this._unit,l=this._majorUnit,d=s&&o[s],c=l&&o[l],u=t[n],h=l&&c&&u&&u.major,p=this._adapter.format(e,i||(h?c:d)),f=r.ticks.callback;return f?Object(a.d)(f,[p,n,t],this):p}generateTickLabels(e){let n,t,a;for(n=0,t=e.length;n<t;++n)a=e[n],a.label=this._tickFormatFunction(a.value,n,e)}getDecimalForValue(e){return null===e?NaN:(e-this.min)/(this.max-this.min)}getPixelForValue(e){const n=this._offsets,t=this.getDecimalForValue(e);return this.getPixelForDecimal((n.start+t)*n.factor)}getValueForPixel(e){const n=this._offsets,t=this.getDecimalForPixel(e)/n.factor-n.end;return this.min+t*(this.max-this.min)}_getLabelSize(e){const n=this.options.ticks,t=this.ctx.measureText(e).width,i=Object(a.Vb)(this.isHorizontal()?n.maxRotation:n.minRotation),r=Math.cos(i),o=Math.sin(i),s=this._resolveTickFontOptions(0).size;return{w:t*r+s*o,h:t*o+s*r}}_getLabelCapacity(e){const n=this.options.time,t=n.displayFormats,a=t[n.unit]||t.millisecond,i=this._tickFormatFunction(e,0,Vt(this,[e],this._majorUnit),a),r=this._getLabelSize(i),o=Math.floor(this.isHorizontal()?this.width/r.w:this.height/r.h)-1;return o>0?o:1}getDataTimestamps(){let e,n,t=this._cache.data||[];if(t.length)return t;const a=this.getMatchingVisibleMetas();if(this._normalized&&a.length)return this._cache.data=a[0].controller.getAllParsedValues(this);for(e=0,n=a.length;e<n;++e)t=t.concat(a[e].controller.getAllParsedValues(this));return this._cache.data=this.normalize(t)}getLabelTimestamps(){const e=this._cache.labels||[];let n,t;if(e.length)return e;const a=this.getLabels();for(n=0,t=a.length;n<t;++n)e.push(Ft(this,a[n]));return this._cache.labels=this._normalized?e:this.normalize(e)}normalize(e){return Object(a.B)(e.sort(Bt))}}function Yt(e,n,t){let i,r,o,s,l=0,d=e.length-1;t?(n>=e[l].pos&&n<=e[d].pos&&({lo:l,hi:d}=Object(a.A)(e,"pos",n)),({pos:i,time:o}=e[l]),({pos:r,time:s}=e[d])):(n>=e[l].time&&n<=e[d].time&&({lo:l,hi:d}=Object(a.A)(e,"time",n)),({time:i,pos:o}=e[l]),({time:r,pos:s}=e[d]));const c=r-i;return c?o+(s-o)*(n-i)/c:o}Wt.id="time",Wt.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class $t extends Wt{constructor(e){super(e),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const e=this._getTimestampsForTable(),n=this._table=this.buildLookupTable(e);this._minPos=Yt(n,this.min),this._tableRange=Yt(n,this.max)-this._minPos,super.initOffsets(e)}buildLookupTable(e){const{min:n,max:t}=this,a=[],i=[];let r,o,s,l,d;for(r=0,o=e.length;r<o;++r)l=e[r],l>=n&&l<=t&&a.push(l);if(a.length<2)return[{time:n,pos:0},{time:t,pos:1}];for(r=0,o=a.length;r<o;++r)d=a[r+1],s=a[r-1],l=a[r],Math.round((d+s)/2)!==l&&i.push({time:l,pos:r/(o-1)});return i}_getTimestampsForTable(){let e=this._cache.all||[];if(e.length)return e;const n=this.getDataTimestamps(),t=this.getLabelTimestamps();return e=n.length&&t.length?this.normalize(n.concat(t)):n.length?n:t,e=this._cache.all=e,e}getDecimalForValue(e){return(Yt(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){const n=this._offsets,t=this.getDecimalForPixel(e)/n.factor-n.end;return Yt(this._table,t*this._tableRange+this._minPos,!0)}}$t.id="timeseries",$t.defaults=Wt.defaults;const Gt=[Z,Ln,xt,Object.freeze({__proto__:null,CategoryScale:Tt,LinearScale:Ot,LogarithmicScale:St,RadialLinearScale:jt,TimeScale:Wt,TimeSeriesScale:$t})]},function(e,n,t){"use strict";function a(e,n,t,a,i,r,o,s){var l,d="function"==typeof e?e.options:e;if(n&&(d.render=n,d.staticRenderFns=t,d._compiled=!0),a&&(d.functional=!0),r&&(d._scopeId="data-v-"+r),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__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},d._ssrRegister=l):i&&(l=s?function(){i.call(this,(d.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(d.functional){d._injectStyles=l;var c=d.render;d.render=function(e,n){return l.call(n),c(e,n)}}else{var u=d.beforeCreate;d.beforeCreate=u?[].concat(u,l):[l]}return{exports:e,options:d}}t.d(n,"a",(function(){return a}))},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,t){"use strict";function a(e,n){for(var t=0;t<n.length;t++){var a=n[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}function i(e,n,t){return n&&a(e.prototype,n),t&&a(e,t),e}function r(){return(r=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a])}return e}).apply(this,arguments)}function o(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,l(e,n)}function s(e){return(s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,n){return(l=Object.setPrototypeOf||function(e,n){return e.__proto__=n,e})(e,n)}function d(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function c(e,n,t){return(c=d()?Reflect.construct:function(e,n,t){var a=[null];a.push.apply(a,n);var i=new(Function.bind.apply(e,a));return t&&l(i,t.prototype),i}).apply(null,arguments)}function u(e){var n="function"==typeof Map?new Map:void 0;return(u=function(e){if(null===e||(t=e,-1===Function.toString.call(t).indexOf("[native code]")))return e;var t;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(e))return n.get(e);n.set(e,a)}function a(){return c(e,arguments,s(this).constructor)}return a.prototype=Object.create(e.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),l(a,e)})(e)}function h(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=new Array(n);t<n;t++)a[t]=e[t];return a}function p(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return h(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?h(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var a=0;return function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(n,"__esModule",{value:!0});var f=function(e){function n(){return e.apply(this,arguments)||this}return o(n,e),n}(u(Error)),m=function(e){function n(n){return e.call(this,"Invalid DateTime: "+n.toMessage())||this}return o(n,e),n}(f),g=function(e){function n(n){return e.call(this,"Invalid Interval: "+n.toMessage())||this}return o(n,e),n}(f),b=function(e){function n(n){return e.call(this,"Invalid Duration: "+n.toMessage())||this}return o(n,e),n}(f),v=function(e){function n(){return e.apply(this,arguments)||this}return o(n,e),n}(f),y=function(e){function n(n){return e.call(this,"Invalid unit "+n)||this}return o(n,e),n}(f),x=function(e){function n(){return e.apply(this,arguments)||this}return o(n,e),n}(f),C=function(e){function n(){return e.call(this,"Zone is an abstract class")||this}return o(n,e),n}(f),T="numeric",D="short",w="long",O={year:T,month:T,day:T},k={year:T,month:D,day:T},S={year:T,month:D,day:T,weekday:D},P={year:T,month:w,day:T},A={year:T,month:w,day:T,weekday:w},R={hour:T,minute:T},I={hour:T,minute:T,second:T},_={hour:T,minute:T,second:T,timeZoneName:D},L={hour:T,minute:T,second:T,timeZoneName:w},E={hour:T,minute:T,hourCycle:"h23"},M={hour:T,minute:T,second:T,hourCycle:"h23"},j={hour:T,minute:T,second:T,hourCycle:"h23",timeZoneName:D},U={hour:T,minute:T,second:T,hourCycle:"h23",timeZoneName:w},N={year:T,month:T,day:T,hour:T,minute:T},B={year:T,month:T,day:T,hour:T,minute:T,second:T},F={year:T,month:D,day:T,hour:T,minute:T},z={year:T,month:D,day:T,hour:T,minute:T,second:T},H={year:T,month:D,day:T,weekday:D,hour:T,minute:T},V={year:T,month:w,day:T,hour:T,minute:T,timeZoneName:D},W={year:T,month:w,day:T,hour:T,minute:T,second:T,timeZoneName:D},Y={year:T,month:w,day:T,weekday:w,hour:T,minute:T,timeZoneName:w},$={year:T,month:w,day:T,weekday:w,hour:T,minute:T,second:T,timeZoneName:w};function G(e){return void 0===e}function q(e){return"number"==typeof e}function X(e){return"number"==typeof e&&e%1==0}function J(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function Z(e,n,t){if(0!==e.length)return e.reduce((function(e,a){var i=[n(a),a];return e&&t(e[0],i[0])===e[0]?e:i}),null)[1]}function K(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function Q(e,n,t){return X(e)&&e>=n&&e<=t}function ee(e,n){void 0===n&&(n=2);var t=e<0?"-":"",a=t?-1*e:e;return""+t+(a.toString().length<n?("0".repeat(n)+a).slice(-n):a.toString())}function ne(e){return G(e)||null===e||""===e?void 0:parseInt(e,10)}function te(e){return G(e)||null===e||""===e?void 0:parseFloat(e)}function ae(e){if(!G(e)&&null!==e&&""!==e){var n=1e3*parseFloat("0."+e);return Math.floor(n)}}function ie(e,n,t){void 0===t&&(t=!1);var a=Math.pow(10,n);return(t?Math.trunc:Math.round)(e*a)/a}function re(e){return e%4==0&&(e%100!=0||e%400==0)}function oe(e){return re(e)?366:365}function se(e,n){var t=function(e,n){return e-n*Math.floor(e/n)}(n-1,12)+1;return 2===t?re(e+(n-t)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][t-1]}function le(e){var n=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(n=new Date(n)).setUTCFullYear(n.getUTCFullYear()-1900),+n}function de(e){var n=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7,t=e-1,a=(t+Math.floor(t/4)-Math.floor(t/100)+Math.floor(t/400))%7;return 4===n||3===a?53:52}function ce(e){return e>99?e:e>60?1900+e:2e3+e}function ue(e,n,t,a){void 0===a&&(a=null);var i=new Date(e),o={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};a&&(o.timeZone=a);var s=r({timeZoneName:n},o),l=new Intl.DateTimeFormat(t,s).formatToParts(i).find((function(e){return"timezonename"===e.type.toLowerCase()}));return l?l.value:null}function he(e,n){var t=parseInt(e,10);Number.isNaN(t)&&(t=0);var a=parseInt(n,10)||0;return 60*t+(t<0||Object.is(t,-0)?-a:a)}function pe(e){var n=Number(e);if("boolean"==typeof e||""===e||Number.isNaN(n))throw new x("Invalid unit value "+e);return n}function fe(e,n){var t={};for(var a in e)if(K(e,a)){var i=e[a];if(null==i)continue;t[n(a)]=pe(i)}return t}function me(e,n){var t=Math.trunc(Math.abs(e/60)),a=Math.trunc(Math.abs(e%60)),i=e>=0?"+":"-";switch(n){case"short":return""+i+ee(t,2)+":"+ee(a,2);case"narrow":return""+i+t+(a>0?":"+a:"");case"techie":return""+i+ee(t,2)+ee(a,2);default:throw new RangeError("Value format "+n+" is out of range for property format")}}function ge(e){return function(e,n){return n.reduce((function(n,t){return n[t]=e[t],n}),{})}(e,["hour","minute","second","millisecond"])}var be=/[A-Za-z_+-]{1,256}(:?\/[A-Za-z0-9_+-]{1,256}(\/[A-Za-z0-9_+-]{1,256})?)?/,ve=["January","February","March","April","May","June","July","August","September","October","November","December"],ye=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],xe=["J","F","M","A","M","J","J","A","S","O","N","D"];function Ce(e){switch(e){case"narrow":return[].concat(xe);case"short":return[].concat(ye);case"long":return[].concat(ve);case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}var Te=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],De=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],we=["M","T","W","T","F","S","S"];function Oe(e){switch(e){case"narrow":return[].concat(we);case"short":return[].concat(De);case"long":return[].concat(Te);case"numeric":return["1","2","3","4","5","6","7"];default:return null}}var ke=["AM","PM"],Se=["Before Christ","Anno Domini"],Pe=["BC","AD"],Ae=["B","A"];function Re(e){switch(e){case"narrow":return[].concat(Ae);case"short":return[].concat(Pe);case"long":return[].concat(Se);default:return null}}function Ie(e,n){for(var t,a="",i=p(e);!(t=i()).done;){var r=t.value;r.literal?a+=r.val:a+=n(r.val)}return a}var _e={D:O,DD:k,DDD:P,DDDD:A,t:R,tt:I,ttt:_,tttt:L,T:E,TT:M,TTT:j,TTTT:U,f:N,ff:F,fff:V,ffff:Y,F:B,FF:z,FFF:W,FFFF:$},Le=function(){function e(e,n){this.opts=n,this.loc=e,this.systemLoc=null}e.create=function(n,t){return void 0===t&&(t={}),new e(n,t)},e.parseFormat=function(e){for(var n=null,t="",a=!1,i=[],r=0;r<e.length;r++){var o=e.charAt(r);"'"===o?(t.length>0&&i.push({literal:a,val:t}),n=null,t="",a=!a):a||o===n?t+=o:(t.length>0&&i.push({literal:!1,val:t}),t=o,n=o)}return t.length>0&&i.push({literal:a,val:t}),i},e.macroTokenToFormatOpts=function(e){return _e[e]};var n=e.prototype;return n.formatWithSystemDefault=function(e,n){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,r({},this.opts,n)).format()},n.formatDateTime=function(e,n){return void 0===n&&(n={}),this.loc.dtFormatter(e,r({},this.opts,n)).format()},n.formatDateTimeParts=function(e,n){return void 0===n&&(n={}),this.loc.dtFormatter(e,r({},this.opts,n)).formatToParts()},n.resolvedOptions=function(e,n){return void 0===n&&(n={}),this.loc.dtFormatter(e,r({},this.opts,n)).resolvedOptions()},n.num=function(e,n){if(void 0===n&&(n=0),this.opts.forceSimple)return ee(e,n);var t=r({},this.opts);return n>0&&(t.padTo=n),this.loc.numberFormatter(t).format(e)},n.formatDateTimeFromString=function(n,t){var a=this,i="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,o=function(e,t){return a.loc.extract(n,e,t)},s=function(e){return n.isOffsetFixed&&0===n.offset&&e.allowZ?"Z":n.isValid?n.zone.formatOffset(n.ts,e.format):""},l=function(){return i?function(e){return ke[e.hour<12?0:1]}(n):o({hour:"numeric",hourCycle:"h12"},"dayperiod")},d=function(e,t){return i?function(e,n){return Ce(n)[e.month-1]}(n,e):o(t?{month:e}:{month:e,day:"numeric"},"month")},c=function(e,t){return i?function(e,n){return Oe(n)[e.weekday-1]}(n,e):o(t?{weekday:e}:{weekday:e,month:"long",day:"numeric"},"weekday")},u=function(e){return i?function(e,n){return Re(n)[e.year<0?0:1]}(n,e):o({era:e},"era")};return Ie(e.parseFormat(t),(function(t){switch(t){case"S":return a.num(n.millisecond);case"u":case"SSS":return a.num(n.millisecond,3);case"s":return a.num(n.second);case"ss":return a.num(n.second,2);case"uu":return a.num(Math.floor(n.millisecond/10),2);case"uuu":return a.num(Math.floor(n.millisecond/100));case"m":return a.num(n.minute);case"mm":return a.num(n.minute,2);case"h":return a.num(n.hour%12==0?12:n.hour%12);case"hh":return a.num(n.hour%12==0?12:n.hour%12,2);case"H":return a.num(n.hour);case"HH":return a.num(n.hour,2);case"Z":return s({format:"narrow",allowZ:a.opts.allowZ});case"ZZ":return s({format:"short",allowZ:a.opts.allowZ});case"ZZZ":return s({format:"techie",allowZ:a.opts.allowZ});case"ZZZZ":return n.zone.offsetName(n.ts,{format:"short",locale:a.loc.locale});case"ZZZZZ":return n.zone.offsetName(n.ts,{format:"long",locale:a.loc.locale});case"z":return n.zoneName;case"a":return l();case"d":return r?o({day:"numeric"},"day"):a.num(n.day);case"dd":return r?o({day:"2-digit"},"day"):a.num(n.day,2);case"c":return a.num(n.weekday);case"ccc":return c("short",!0);case"cccc":return c("long",!0);case"ccccc":return c("narrow",!0);case"E":return a.num(n.weekday);case"EEE":return c("short",!1);case"EEEE":return c("long",!1);case"EEEEE":return c("narrow",!1);case"L":return r?o({month:"numeric",day:"numeric"},"month"):a.num(n.month);case"LL":return r?o({month:"2-digit",day:"numeric"},"month"):a.num(n.month,2);case"LLL":return d("short",!0);case"LLLL":return d("long",!0);case"LLLLL":return d("narrow",!0);case"M":return r?o({month:"numeric"},"month"):a.num(n.month);case"MM":return r?o({month:"2-digit"},"month"):a.num(n.month,2);case"MMM":return d("short",!1);case"MMMM":return d("long",!1);case"MMMMM":return d("narrow",!1);case"y":return r?o({year:"numeric"},"year"):a.num(n.year);case"yy":return r?o({year:"2-digit"},"year"):a.num(n.year.toString().slice(-2),2);case"yyyy":return r?o({year:"numeric"},"year"):a.num(n.year,4);case"yyyyyy":return r?o({year:"numeric"},"year"):a.num(n.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return a.num(n.weekYear.toString().slice(-2),2);case"kkkk":return a.num(n.weekYear,4);case"W":return a.num(n.weekNumber);case"WW":return a.num(n.weekNumber,2);case"o":return a.num(n.ordinal);case"ooo":return a.num(n.ordinal,3);case"q":return a.num(n.quarter);case"qq":return a.num(n.quarter,2);case"X":return a.num(Math.floor(n.ts/1e3));case"x":return a.num(n.ts);default:return function(t){var i=e.macroTokenToFormatOpts(t);return i?a.formatWithSystemDefault(n,i):t}(t)}}))},n.formatDurationFromString=function(n,t){var a,i=this,r=function(e){switch(e[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"M":return"month";case"y":return"year";default:return null}},o=e.parseFormat(t),s=o.reduce((function(e,n){var t=n.literal,a=n.val;return t?e:e.concat(a)}),[]),l=n.shiftTo.apply(n,s.map(r).filter((function(e){return e})));return Ie(o,(a=l,function(e){var n=r(e);return n?i.num(a.get(n),e.length):e}))},e}(),Ee=function(){function e(e,n){this.reason=e,this.explanation=n}return e.prototype.toMessage=function(){return this.explanation?this.reason+": "+this.explanation:this.reason},e}(),Me=function(){function e(){}var n=e.prototype;return n.offsetName=function(e,n){throw new C},n.formatOffset=function(e,n){throw new C},n.offset=function(e){throw new C},n.equals=function(e){throw new C},i(e,[{key:"type",get:function(){throw new C}},{key:"name",get:function(){throw new C}},{key:"isUniversal",get:function(){throw new C}},{key:"isValid",get:function(){throw new C}}]),e}(),je=null,Ue=function(e){function n(){return e.apply(this,arguments)||this}o(n,e);var t=n.prototype;return t.offsetName=function(e,n){return ue(e,n.format,n.locale)},t.formatOffset=function(e,n){return me(this.offset(e),n)},t.offset=function(e){return-new Date(e).getTimezoneOffset()},t.equals=function(e){return"system"===e.type},i(n,[{key:"type",get:function(){return"system"}},{key:"name",get:function(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return!0}}],[{key:"instance",get:function(){return null===je&&(je=new n),je}}]),n}(Me),Ne=RegExp("^"+be.source+"$"),Be={};var Fe={year:0,month:1,day:2,hour:3,minute:4,second:5};var ze={},He=function(e){function n(t){var a;return(a=e.call(this)||this).zoneName=t,a.valid=n.isValidZone(t),a}o(n,e),n.create=function(e){return ze[e]||(ze[e]=new n(e)),ze[e]},n.resetCache=function(){ze={},Be={}},n.isValidSpecifier=function(e){return!(!e||!e.match(Ne))},n.isValidZone=function(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}};var t=n.prototype;return t.offsetName=function(e,n){return ue(e,n.format,n.locale,this.name)},t.formatOffset=function(e,n){return me(this.offset(e),n)},t.offset=function(e){var n=new Date(e);if(isNaN(n))return NaN;var t,a=(t=this.name,Be[t]||(Be[t]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),Be[t]),i=a.formatToParts?function(e,n){for(var t=e.formatToParts(n),a=[],i=0;i<t.length;i++){var r=t[i],o=r.type,s=r.value,l=Fe[o];G(l)||(a[l]=parseInt(s,10))}return a}(a,n):function(e,n){var t=e.format(n).replace(/\u200E/g,""),a=/(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(t),i=a[1],r=a[2];return[a[3],i,r,a[4],a[5],a[6]]}(a,n),r=i[0],o=i[1],s=i[2],l=i[3],d=+n,c=d%1e3;return(le({year:r,month:o,day:s,hour:24===l?0:l,minute:i[4],second:i[5],millisecond:0})-(d-=c>=0?c:1e3+c))/6e4},t.equals=function(e){return"iana"===e.type&&e.name===this.name},i(n,[{key:"type",get:function(){return"iana"}},{key:"name",get:function(){return this.zoneName}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return this.valid}}]),n}(Me),Ve=null,We=function(e){function n(n){var t;return(t=e.call(this)||this).fixed=n,t}o(n,e),n.instance=function(e){return 0===e?n.utcInstance:new n(e)},n.parseSpecifier=function(e){if(e){var t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new n(he(t[1],t[2]))}return null};var t=n.prototype;return t.offsetName=function(){return this.name},t.formatOffset=function(e,n){return me(this.fixed,n)},t.offset=function(){return this.fixed},t.equals=function(e){return"fixed"===e.type&&e.fixed===this.fixed},i(n,[{key:"type",get:function(){return"fixed"}},{key:"name",get:function(){return 0===this.fixed?"UTC":"UTC"+me(this.fixed,"narrow")}},{key:"isUniversal",get:function(){return!0}},{key:"isValid",get:function(){return!0}}],[{key:"utcInstance",get:function(){return null===Ve&&(Ve=new n(0)),Ve}}]),n}(Me),Ye=function(e){function n(n){var t;return(t=e.call(this)||this).zoneName=n,t}o(n,e);var t=n.prototype;return t.offsetName=function(){return null},t.formatOffset=function(){return""},t.offset=function(){return NaN},t.equals=function(){return!1},i(n,[{key:"type",get:function(){return"invalid"}},{key:"name",get:function(){return this.zoneName}},{key:"isUniversal",get:function(){return!1}},{key:"isValid",get:function(){return!1}}]),n}(Me);function $e(e,n){if(G(e)||null===e)return n;if(e instanceof Me)return e;if("string"==typeof e){var t=e.toLowerCase();return"local"===t||"system"===t?n:"utc"===t||"gmt"===t?We.utcInstance:He.isValidSpecifier(t)?He.create(e):We.parseSpecifier(t)||new Ye(e)}return q(e)?We.instance(e):"object"==typeof e&&e.offset&&"number"==typeof e.offset?e:new Ye(e)}var Ge,qe=function(){return Date.now()},Xe="system",Je=null,Ze=null,Ke=null,Qe=function(){function e(){}return e.resetCaches=function(){hn.resetCache(),He.resetCache()},i(e,null,[{key:"now",get:function(){return qe},set:function(e){qe=e}},{key:"defaultZone",get:function(){return $e(Xe,Ue.instance)},set:function(e){Xe=e}},{key:"defaultLocale",get:function(){return Je},set:function(e){Je=e}},{key:"defaultNumberingSystem",get:function(){return Ze},set:function(e){Ze=e}},{key:"defaultOutputCalendar",get:function(){return Ke},set:function(e){Ke=e}},{key:"throwOnInvalid",get:function(){return Ge},set:function(e){Ge=e}}]),e}(),en=["base"],nn={};function tn(e,n){void 0===n&&(n={});var t=JSON.stringify([e,n]),a=nn[t];return a||(a=new Intl.DateTimeFormat(e,n),nn[t]=a),a}var an={};var rn={};function on(e,n){void 0===n&&(n={});var t=n;t.base;var a=function(e,n){if(null==e)return{};var t,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||(i[t]=e[t]);return i}(t,en),i=JSON.stringify([e,a]),r=rn[i];return r||(r=new Intl.RelativeTimeFormat(e,n),rn[i]=r),r}var sn=null;function ln(e,n,t,a,i){var r=e.listingMode(t);return"error"===r?null:"en"===r?a(n):i(n)}var dn=function(){function e(e,n,t){if(this.padTo=t.padTo||0,this.floor=t.floor||!1,!n){var a={useGrouping:!1};t.padTo>0&&(a.minimumIntegerDigits=t.padTo),this.inf=function(e,n){void 0===n&&(n={});var t=JSON.stringify([e,n]),a=an[t];return a||(a=new Intl.NumberFormat(e,n),an[t]=a),a}(e,a)}}return e.prototype.format=function(e){if(this.inf){var n=this.floor?Math.floor(e):e;return this.inf.format(n)}return ee(this.floor?Math.floor(e):ie(e,3),this.padTo)},e}(),cn=function(){function e(e,n,t){var a;if(this.opts=t,e.zone.isUniversal){var i=e.offset/60*-1,o=i>=0?"Etc/GMT+"+i:"Etc/GMT"+i;0!==e.offset&&He.create(o).valid?(a=o,this.dt=e):(a="UTC",t.timeZoneName?this.dt=e:this.dt=0===e.offset?e:ca.fromMillis(e.ts+60*e.offset*1e3))}else"system"===e.zone.type?this.dt=e:(this.dt=e,a=e.zone.name);var s=r({},this.opts);a&&(s.timeZone=a),this.dtf=tn(n,s)}var n=e.prototype;return n.format=function(){return this.dtf.format(this.dt.toJSDate())},n.formatToParts=function(){return this.dtf.formatToParts(this.dt.toJSDate())},n.resolvedOptions=function(){return this.dtf.resolvedOptions()},e}(),un=function(){function e(e,n,t){this.opts=r({style:"long"},t),!n&&J()&&(this.rtf=on(e,t))}var n=e.prototype;return n.format=function(e,n){return this.rtf?this.rtf.format(e,n):function(e,n,t,a){void 0===t&&(t="always"),void 0===a&&(a=!1);var i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===t&&r){var o="days"===e;switch(n){case 1:return o?"tomorrow":"next "+i[e][0];case-1:return o?"yesterday":"last "+i[e][0];case 0:return o?"today":"this "+i[e][0]}}var s=Object.is(n,-0)||n<0,l=Math.abs(n),d=1===l,c=i[e],u=a?d?c[1]:c[2]||c[1]:d?i[e][0]:e;return s?l+" "+u+" ago":"in "+l+" "+u}(n,e,this.opts.numeric,"long"!==this.opts.style)},n.formatToParts=function(e,n){return this.rtf?this.rtf.formatToParts(e,n):[]},e}(),hn=function(){function e(e,n,t,a){var i=function(e){var n=e.indexOf("-u-");if(-1===n)return[e];var t,a=e.substring(0,n);try{t=tn(e).resolvedOptions()}catch(e){t=tn(a).resolvedOptions()}var i=t;return[a,i.numberingSystem,i.calendar]}(e),r=i[0],o=i[1],s=i[2];this.locale=r,this.numberingSystem=n||o||null,this.outputCalendar=t||s||null,this.intl=function(e,n,t){return t||n?(e+="-u",t&&(e+="-ca-"+t),n&&(e+="-nu-"+n),e):e}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=a,this.fastNumbersCached=null}e.fromOpts=function(n){return e.create(n.locale,n.numberingSystem,n.outputCalendar,n.defaultToEN)},e.create=function(n,t,a,i){void 0===i&&(i=!1);var r=n||Qe.defaultLocale;return new e(r||(i?"en-US":sn||(sn=(new Intl.DateTimeFormat).resolvedOptions().locale)),t||Qe.defaultNumberingSystem,a||Qe.defaultOutputCalendar,r)},e.resetCache=function(){sn=null,nn={},an={},rn={}},e.fromObject=function(n){var t=void 0===n?{}:n,a=t.locale,i=t.numberingSystem,r=t.outputCalendar;return e.create(a,i,r)};var n=e.prototype;return n.listingMode=function(e){var n=this.isEnglish(),t=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return n&&t?"en":"intl"},n.clone=function(n){return n&&0!==Object.getOwnPropertyNames(n).length?e.create(n.locale||this.specifiedLocale,n.numberingSystem||this.numberingSystem,n.outputCalendar||this.outputCalendar,n.defaultToEN||!1):this},n.redefaultToEN=function(e){return void 0===e&&(e={}),this.clone(r({},e,{defaultToEN:!0}))},n.redefaultToSystem=function(e){return void 0===e&&(e={}),this.clone(r({},e,{defaultToEN:!1}))},n.months=function(e,n,t){var a=this;return void 0===n&&(n=!1),void 0===t&&(t=!0),ln(this,e,t,Ce,(function(){var t=n?{month:e,day:"numeric"}:{month:e},i=n?"format":"standalone";return a.monthsCache[i][e]||(a.monthsCache[i][e]=function(e){for(var n=[],t=1;t<=12;t++){var a=ca.utc(2016,t,1);n.push(e(a))}return n}((function(e){return a.extract(e,t,"month")}))),a.monthsCache[i][e]}))},n.weekdays=function(e,n,t){var a=this;return void 0===n&&(n=!1),void 0===t&&(t=!0),ln(this,e,t,Oe,(function(){var t=n?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},i=n?"format":"standalone";return a.weekdaysCache[i][e]||(a.weekdaysCache[i][e]=function(e){for(var n=[],t=1;t<=7;t++){var a=ca.utc(2016,11,13+t);n.push(e(a))}return n}((function(e){return a.extract(e,t,"weekday")}))),a.weekdaysCache[i][e]}))},n.meridiems=function(e){var n=this;return void 0===e&&(e=!0),ln(this,void 0,e,(function(){return ke}),(function(){if(!n.meridiemCache){var e={hour:"numeric",hourCycle:"h12"};n.meridiemCache=[ca.utc(2016,11,13,9),ca.utc(2016,11,13,19)].map((function(t){return n.extract(t,e,"dayperiod")}))}return n.meridiemCache}))},n.eras=function(e,n){var t=this;return void 0===n&&(n=!0),ln(this,e,n,Re,(function(){var n={era:e};return t.eraCache[e]||(t.eraCache[e]=[ca.utc(-40,1,1),ca.utc(2017,1,1)].map((function(e){return t.extract(e,n,"era")}))),t.eraCache[e]}))},n.extract=function(e,n,t){var a=this.dtFormatter(e,n).formatToParts().find((function(e){return e.type.toLowerCase()===t}));return a?a.value:null},n.numberFormatter=function(e){return void 0===e&&(e={}),new dn(this.intl,e.forceSimple||this.fastNumbers,e)},n.dtFormatter=function(e,n){return void 0===n&&(n={}),new cn(e,this.intl,n)},n.relFormatter=function(e){return void 0===e&&(e={}),new un(this.intl,this.isEnglish(),e)},n.isEnglish=function(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")},n.equals=function(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar},i(e,[{key:"fastNumbers",get:function(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(e.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}}]),e}();function pn(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];var a=n.reduce((function(e,n){return e+n.source}),"");return RegExp("^"+a+"$")}function fn(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){return n.reduce((function(n,t){var a=n[0],i=n[1],o=n[2],s=t(e,o),l=s[0],d=s[1],c=s[2];return[r({},a,l),i||d,c]}),[{},null,1]).slice(0,2)}}function mn(e){if(null==e)return[null,null];for(var n=arguments.length,t=new Array(n>1?n-1:0),a=1;a<n;a++)t[a-1]=arguments[a];for(var i=0,r=t;i<r.length;i++){var o=r[i],s=o[0],l=o[1],d=s.exec(e);if(d)return l(d)}return[null,null]}function gn(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e,t){var a,i={};for(a=0;a<n.length;a++)i[n[a]]=ne(e[t+a]);return[i,null,t+a]}}var bn=/(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/,vn=/(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,yn=RegExp(""+vn.source+bn.source+"?"),xn=RegExp("(?:T"+yn.source+")?"),Cn=gn("weekYear","weekNumber","weekDay"),Tn=gn("year","ordinal"),Dn=RegExp(vn.source+" ?(?:"+bn.source+"|("+be.source+"))?"),wn=RegExp("(?: "+Dn.source+")?");function On(e,n,t){var a=e[n];return G(a)?t:ne(a)}function kn(e,n){return[{year:On(e,n),month:On(e,n+1,1),day:On(e,n+2,1)},null,n+3]}function Sn(e,n){return[{hours:On(e,n,0),minutes:On(e,n+1,0),seconds:On(e,n+2,0),milliseconds:ae(e[n+3])},null,n+4]}function Pn(e,n){var t=!e[n]&&!e[n+1],a=he(e[n+1],e[n+2]);return[{},t?null:We.instance(a),n+3]}function An(e,n){return[{},e[n]?He.create(e[n]):null,n+1]}var Rn=RegExp("^T?"+vn.source+"$"),In=/^-?P(?:(?:(-?\d{1,9}(?:\.\d{1,9})?)Y)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,9}(?:\.\d{1,9})?)W)?(?:(-?\d{1,9}(?:\.\d{1,9})?)D)?(?:T(?:(-?\d{1,9}(?:\.\d{1,9})?)H)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/;function _n(e){var n=e[0],t=e[1],a=e[2],i=e[3],r=e[4],o=e[5],s=e[6],l=e[7],d=e[8],c="-"===n[0],u=l&&"-"===l[0],h=function(e,n){return void 0===n&&(n=!1),void 0!==e&&(n||e&&c)?-e:e};return[{years:h(te(t)),months:h(te(a)),weeks:h(te(i)),days:h(te(r)),hours:h(te(o)),minutes:h(te(s)),seconds:h(te(l),"-0"===l),milliseconds:h(ae(d),u)}]}var Ln={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function En(e,n,t,a,i,r,o){var s={year:2===n.length?ce(ne(n)):ne(n),month:ye.indexOf(t)+1,day:ne(a),hour:ne(i),minute:ne(r)};return o&&(s.second=ne(o)),e&&(s.weekday=e.length>3?Te.indexOf(e)+1:De.indexOf(e)+1),s}var Mn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function jn(e){var n,t=e[1],a=e[2],i=e[3],r=e[4],o=e[5],s=e[6],l=e[7],d=e[8],c=e[9],u=e[10],h=e[11],p=En(t,r,i,a,o,s,l);return n=d?Ln[d]:c?0:he(u,h),[p,new We(n)]}var Un=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Nn=/^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Bn=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Fn(e){var n=e[1],t=e[2],a=e[3];return[En(n,e[4],a,t,e[5],e[6],e[7]),We.utcInstance]}function zn(e){var n=e[1],t=e[2],a=e[3],i=e[4],r=e[5],o=e[6];return[En(n,e[7],t,a,i,r,o),We.utcInstance]}var Hn=pn(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,xn),Vn=pn(/(\d{4})-?W(\d\d)(?:-?(\d))?/,xn),Wn=pn(/(\d{4})-?(\d{3})/,xn),Yn=pn(yn),$n=fn(kn,Sn,Pn),Gn=fn(Cn,Sn,Pn),qn=fn(Tn,Sn,Pn),Xn=fn(Sn,Pn);var Jn=fn(Sn);var Zn=pn(/(\d{4})-(\d\d)-(\d\d)/,wn),Kn=pn(Dn),Qn=fn(kn,Sn,Pn,An),et=fn(Sn,Pn,An);var nt={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},tt=r({years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6}},nt),at=r({years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:30.436875/7,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3}},nt),it=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],rt=it.slice(0).reverse();function ot(e,n,t){void 0===t&&(t=!1);var a={values:t?n.values:r({},e.values,n.values||{}),loc:e.loc.clone(n.loc),conversionAccuracy:n.conversionAccuracy||e.conversionAccuracy};return new lt(a)}function st(e,n,t,a,i){var r=e[i][t],o=n[t]/r,s=!(Math.sign(o)===Math.sign(a[i]))&&0!==a[i]&&Math.abs(o)<=1?function(e){return e<0?Math.floor(e):Math.ceil(e)}(o):Math.trunc(o);a[i]+=s,n[t]-=s*r}var lt=function(){function e(e){var n="longterm"===e.conversionAccuracy||!1;this.values=e.values,this.loc=e.loc||hn.create(),this.conversionAccuracy=n?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=n?at:tt,this.isLuxonDuration=!0}e.fromMillis=function(n,t){return e.fromObject({milliseconds:n},t)},e.fromObject=function(n,t){if(void 0===t&&(t={}),null==n||"object"!=typeof n)throw new x("Duration.fromObject: argument expected to be an object, got "+(null===n?"null":typeof n));return new e({values:fe(n,e.normalizeUnit),loc:hn.fromObject(t),conversionAccuracy:t.conversionAccuracy})},e.fromDurationLike=function(n){if(q(n))return e.fromMillis(n);if(e.isDuration(n))return n;if("object"==typeof n)return e.fromObject(n);throw new x("Unknown duration argument "+n+" of type "+typeof n)},e.fromISO=function(n,t){var a=function(e){return mn(e,[In,_n])}(n)[0];return a?e.fromObject(a,t):e.invalid("unparsable",'the input "'+n+"\" can't be parsed as ISO 8601")},e.fromISOTime=function(n,t){var a=function(e){return mn(e,[Rn,Jn])}(n)[0];return a?e.fromObject(a,t):e.invalid("unparsable",'the input "'+n+"\" can't be parsed as ISO 8601")},e.invalid=function(n,t){if(void 0===t&&(t=null),!n)throw new x("need to specify a reason the Duration is invalid");var a=n instanceof Ee?n:new Ee(n,t);if(Qe.throwOnInvalid)throw new b(a);return new e({invalid:a})},e.normalizeUnit=function(e){var n={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!n)throw new y(e);return n},e.isDuration=function(e){return e&&e.isLuxonDuration||!1};var n=e.prototype;return n.toFormat=function(e,n){void 0===n&&(n={});var t=r({},n,{floor:!1!==n.round&&!1!==n.floor});return this.isValid?Le.create(this.loc,t).formatDurationFromString(this,e):"Invalid Duration"},n.toObject=function(){return this.isValid?r({},this.values):{}},n.toISO=function(){if(!this.isValid)return null;var e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=ie(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e},n.toISOTime=function(e){if(void 0===e&&(e={}),!this.isValid)return null;var n=this.toMillis();if(n<0||n>=864e5)return null;e=r({suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended"},e);var t=this.shiftTo("hours","minutes","seconds","milliseconds"),a="basic"===e.format?"hhmm":"hh:mm";e.suppressSeconds&&0===t.seconds&&0===t.milliseconds||(a+="basic"===e.format?"ss":":ss",e.suppressMilliseconds&&0===t.milliseconds||(a+=".SSS"));var i=t.toFormat(a);return e.includePrefix&&(i="T"+i),i},n.toJSON=function(){return this.toISO()},n.toString=function(){return this.toISO()},n.toMillis=function(){return this.as("milliseconds")},n.valueOf=function(){return this.toMillis()},n.plus=function(n){if(!this.isValid)return this;for(var t,a=e.fromDurationLike(n),i={},r=p(it);!(t=r()).done;){var o=t.value;(K(a.values,o)||K(this.values,o))&&(i[o]=a.get(o)+this.get(o))}return ot(this,{values:i},!0)},n.minus=function(n){if(!this.isValid)return this;var t=e.fromDurationLike(n);return this.plus(t.negate())},n.mapUnits=function(e){if(!this.isValid)return this;for(var n={},t=0,a=Object.keys(this.values);t<a.length;t++){var i=a[t];n[i]=pe(e(this.values[i],i))}return ot(this,{values:n},!0)},n.get=function(n){return this[e.normalizeUnit(n)]},n.set=function(n){return this.isValid?ot(this,{values:r({},this.values,fe(n,e.normalizeUnit))}):this},n.reconfigure=function(e){var n=void 0===e?{}:e,t=n.locale,a=n.numberingSystem,i=n.conversionAccuracy,r={loc:this.loc.clone({locale:t,numberingSystem:a})};return i&&(r.conversionAccuracy=i),ot(this,r)},n.as=function(e){return this.isValid?this.shiftTo(e).get(e):NaN},n.normalize=function(){if(!this.isValid)return this;var e=this.toObject();return function(e,n){rt.reduce((function(t,a){return G(n[a])?t:(t&&st(e,n,t,n,a),a)}),null)}(this.matrix,e),ot(this,{values:e},!0)},n.shiftTo=function(){for(var n=arguments.length,t=new Array(n),a=0;a<n;a++)t[a]=arguments[a];if(!this.isValid)return this;if(0===t.length)return this;t=t.map((function(n){return e.normalizeUnit(n)}));for(var i,r,o={},s={},l=this.toObject(),d=p(it);!(r=d()).done;){var c=r.value;if(t.indexOf(c)>=0){i=c;var u=0;for(var h in s)u+=this.matrix[h][c]*s[h],s[h]=0;q(l[c])&&(u+=l[c]);var f=Math.trunc(u);for(var m in o[c]=f,s[c]=(1e3*u-1e3*f)/1e3,l)it.indexOf(m)>it.indexOf(c)&&st(this.matrix,l,m,o,c)}else q(l[c])&&(s[c]=l[c])}for(var g in s)0!==s[g]&&(o[i]+=g===i?s[g]:s[g]/this.matrix[i][g]);return ot(this,{values:o},!0).normalize()},n.negate=function(){if(!this.isValid)return this;for(var e={},n=0,t=Object.keys(this.values);n<t.length;n++){var a=t[n];e[a]=-this.values[a]}return ot(this,{values:e},!0)},n.equals=function(e){if(!this.isValid||!e.isValid)return!1;if(!this.loc.equals(e.loc))return!1;for(var n,t=p(it);!(n=t()).done;){var a=n.value;if(i=this.values[a],r=e.values[a],!(void 0===i||0===i?void 0===r||0===r:i===r))return!1}var i,r;return!0},i(e,[{key:"locale",get:function(){return this.isValid?this.loc.locale:null}},{key:"numberingSystem",get:function(){return this.isValid?this.loc.numberingSystem:null}},{key:"years",get:function(){return this.isValid?this.values.years||0:NaN}},{key:"quarters",get:function(){return this.isValid?this.values.quarters||0:NaN}},{key:"months",get:function(){return this.isValid?this.values.months||0:NaN}},{key:"weeks",get:function(){return this.isValid?this.values.weeks||0:NaN}},{key:"days",get:function(){return this.isValid?this.values.days||0:NaN}},{key:"hours",get:function(){return this.isValid?this.values.hours||0:NaN}},{key:"minutes",get:function(){return this.isValid?this.values.minutes||0:NaN}},{key:"seconds",get:function(){return this.isValid?this.values.seconds||0:NaN}},{key:"milliseconds",get:function(){return this.isValid?this.values.milliseconds||0:NaN}},{key:"isValid",get:function(){return null===this.invalid}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}}]),e}(),dt="Invalid Interval";function ct(e,n){return e&&e.isValid?n&&n.isValid?n<e?ut.invalid("end before start","The end of an interval must be after its start, but you had start="+e.toISO()+" and end="+n.toISO()):null:ut.invalid("missing or invalid end"):ut.invalid("missing or invalid start")}var ut=function(){function e(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}e.invalid=function(n,t){if(void 0===t&&(t=null),!n)throw new x("need to specify a reason the Interval is invalid");var a=n instanceof Ee?n:new Ee(n,t);if(Qe.throwOnInvalid)throw new g(a);return new e({invalid:a})},e.fromDateTimes=function(n,t){var a=ua(n),i=ua(t),r=ct(a,i);return null==r?new e({start:a,end:i}):r},e.after=function(n,t){var a=lt.fromDurationLike(t),i=ua(n);return e.fromDateTimes(i,i.plus(a))},e.before=function(n,t){var a=lt.fromDurationLike(t),i=ua(n);return e.fromDateTimes(i.minus(a),i)},e.fromISO=function(n,t){var a=(n||"").split("/",2),i=a[0],r=a[1];if(i&&r){var o,s,l,d;try{s=(o=ca.fromISO(i,t)).isValid}catch(r){s=!1}try{d=(l=ca.fromISO(r,t)).isValid}catch(r){d=!1}if(s&&d)return e.fromDateTimes(o,l);if(s){var c=lt.fromISO(r,t);if(c.isValid)return e.after(o,c)}else if(d){var u=lt.fromISO(i,t);if(u.isValid)return e.before(l,u)}}return e.invalid("unparsable",'the input "'+n+"\" can't be parsed as ISO 8601")},e.isInterval=function(e){return e&&e.isLuxonInterval||!1};var n=e.prototype;return n.length=function(e){return void 0===e&&(e="milliseconds"),this.isValid?this.toDuration.apply(this,[e]).get(e):NaN},n.count=function(e){if(void 0===e&&(e="milliseconds"),!this.isValid)return NaN;var n=this.start.startOf(e),t=this.end.startOf(e);return Math.floor(t.diff(n,e).get(e))+1},n.hasSame=function(e){return!!this.isValid&&(this.isEmpty()||this.e.minus(1).hasSame(this.s,e))},n.isEmpty=function(){return this.s.valueOf()===this.e.valueOf()},n.isAfter=function(e){return!!this.isValid&&this.s>e},n.isBefore=function(e){return!!this.isValid&&this.e<=e},n.contains=function(e){return!!this.isValid&&(this.s<=e&&this.e>e)},n.set=function(n){var t=void 0===n?{}:n,a=t.start,i=t.end;return this.isValid?e.fromDateTimes(a||this.s,i||this.e):this},n.splitAt=function(){var n=this;if(!this.isValid)return[];for(var t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];for(var r=a.map(ua).filter((function(e){return n.contains(e)})).sort(),o=[],s=this.s,l=0;s<this.e;){var d=r[l]||this.e,c=+d>+this.e?this.e:d;o.push(e.fromDateTimes(s,c)),s=c,l+=1}return o},n.splitBy=function(n){var t=lt.fromDurationLike(n);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];for(var a,i=this.s,r=1,o=[];i<this.e;){var s=this.start.plus(t.mapUnits((function(e){return e*r})));a=+s>+this.e?this.e:s,o.push(e.fromDateTimes(i,a)),i=a,r+=1}return o},n.divideEqually=function(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]},n.overlaps=function(e){return this.e>e.s&&this.s<e.e},n.abutsStart=function(e){return!!this.isValid&&+this.e==+e.s},n.abutsEnd=function(e){return!!this.isValid&&+e.e==+this.s},n.engulfs=function(e){return!!this.isValid&&(this.s<=e.s&&this.e>=e.e)},n.equals=function(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))},n.intersection=function(n){if(!this.isValid)return this;var t=this.s>n.s?this.s:n.s,a=this.e<n.e?this.e:n.e;return t>=a?null:e.fromDateTimes(t,a)},n.union=function(n){if(!this.isValid)return this;var t=this.s<n.s?this.s:n.s,a=this.e>n.e?this.e:n.e;return e.fromDateTimes(t,a)},e.merge=function(e){var n=e.sort((function(e,n){return e.s-n.s})).reduce((function(e,n){var t=e[0],a=e[1];return a?a.overlaps(n)||a.abutsStart(n)?[t,a.union(n)]:[t.concat([a]),n]:[t,n]}),[[],null]),t=n[0],a=n[1];return a&&t.push(a),t},e.xor=function(n){for(var t,a,i=null,r=0,o=[],s=n.map((function(e){return[{time:e.s,type:"s"},{time:e.e,type:"e"}]})),l=p((t=Array.prototype).concat.apply(t,s).sort((function(e,n){return e.time-n.time})));!(a=l()).done;){var d=a.value;1===(r+="s"===d.type?1:-1)?i=d.time:(i&&+i!=+d.time&&o.push(e.fromDateTimes(i,d.time)),i=null)}return e.merge(o)},n.difference=function(){for(var n=this,t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];return e.xor([this].concat(a)).map((function(e){return n.intersection(e)})).filter((function(e){return e&&!e.isEmpty()}))},n.toString=function(){return this.isValid?"["+this.s.toISO()+" – "+this.e.toISO()+")":dt},n.toISO=function(e){return this.isValid?this.s.toISO(e)+"/"+this.e.toISO(e):dt},n.toISODate=function(){return this.isValid?this.s.toISODate()+"/"+this.e.toISODate():dt},n.toISOTime=function(e){return this.isValid?this.s.toISOTime(e)+"/"+this.e.toISOTime(e):dt},n.toFormat=function(e,n){var t=(void 0===n?{}:n).separator,a=void 0===t?" – ":t;return this.isValid?""+this.s.toFormat(e)+a+this.e.toFormat(e):dt},n.toDuration=function(e,n){return this.isValid?this.e.diff(this.s,e,n):lt.invalid(this.invalidReason)},n.mapEndpoints=function(n){return e.fromDateTimes(n(this.s),n(this.e))},i(e,[{key:"start",get:function(){return this.isValid?this.s:null}},{key:"end",get:function(){return this.isValid?this.e:null}},{key:"isValid",get:function(){return null===this.invalidReason}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}}]),e}(),ht=function(){function e(){}return e.hasDST=function(e){void 0===e&&(e=Qe.defaultZone);var n=ca.now().setZone(e).set({month:12});return!e.isUniversal&&n.offset!==n.set({month:6}).offset},e.isValidIANAZone=function(e){return He.isValidSpecifier(e)&&He.isValidZone(e)},e.normalizeZone=function(e){return $e(e,Qe.defaultZone)},e.months=function(e,n){void 0===e&&(e="long");var t=void 0===n?{}:n,a=t.locale,i=void 0===a?null:a,r=t.numberingSystem,o=void 0===r?null:r,s=t.locObj,l=void 0===s?null:s,d=t.outputCalendar,c=void 0===d?"gregory":d;return(l||hn.create(i,o,c)).months(e)},e.monthsFormat=function(e,n){void 0===e&&(e="long");var t=void 0===n?{}:n,a=t.locale,i=void 0===a?null:a,r=t.numberingSystem,o=void 0===r?null:r,s=t.locObj,l=void 0===s?null:s,d=t.outputCalendar,c=void 0===d?"gregory":d;return(l||hn.create(i,o,c)).months(e,!0)},e.weekdays=function(e,n){void 0===e&&(e="long");var t=void 0===n?{}:n,a=t.locale,i=void 0===a?null:a,r=t.numberingSystem,o=void 0===r?null:r,s=t.locObj;return((void 0===s?null:s)||hn.create(i,o,null)).weekdays(e)},e.weekdaysFormat=function(e,n){void 0===e&&(e="long");var t=void 0===n?{}:n,a=t.locale,i=void 0===a?null:a,r=t.numberingSystem,o=void 0===r?null:r,s=t.locObj;return((void 0===s?null:s)||hn.create(i,o,null)).weekdays(e,!0)},e.meridiems=function(e){var n=(void 0===e?{}:e).locale,t=void 0===n?null:n;return hn.create(t).meridiems()},e.eras=function(e,n){void 0===e&&(e="short");var t=(void 0===n?{}:n).locale,a=void 0===t?null:t;return hn.create(a,null,"gregory").eras(e)},e.features=function(){return{relative:J()}},e}();function pt(e,n){var t=function(e){return e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf()},a=t(n)-t(e);return Math.floor(lt.fromMillis(a).as("days"))}function ft(e,n,t,a){var i=function(e,n,t){for(var a,i,r={},o=0,s=[["years",function(e,n){return n.year-e.year}],["quarters",function(e,n){return n.quarter-e.quarter}],["months",function(e,n){return n.month-e.month+12*(n.year-e.year)}],["weeks",function(e,n){var t=pt(e,n);return(t-t%7)/7}],["days",pt]];o<s.length;o++){var l=s[o],d=l[0],c=l[1];if(t.indexOf(d)>=0){var u;a=d;var h,p=c(e,n);if((i=e.plus(((u={})[d]=p,u)))>n)e=e.plus(((h={})[d]=p-1,h)),p-=1;else e=i;r[d]=p}}return[e,r,i,a]}(e,n,t),r=i[0],o=i[1],s=i[2],l=i[3],d=n-r,c=t.filter((function(e){return["hours","minutes","seconds","milliseconds"].indexOf(e)>=0}));if(0===c.length){var u;if(s<n)s=r.plus(((u={})[l]=1,u));s!==r&&(o[l]=(o[l]||0)+d/(s-r))}var h,p=lt.fromObject(o,a);return c.length>0?(h=lt.fromMillis(d,a)).shiftTo.apply(h,c).plus(p):p}var mt={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},gt={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},bt=mt.hanidec.replace(/[\[|\]]/g,"").split("");function vt(e,n){var t=e.numberingSystem;return void 0===n&&(n=""),new RegExp(""+mt[t||"latn"]+n)}function yt(e,n){return void 0===n&&(n=function(e){return e}),{regex:e,deser:function(e){var t=e[0];return n(function(e){var n=parseInt(e,10);if(isNaN(n)){n="";for(var t=0;t<e.length;t++){var a=e.charCodeAt(t);if(-1!==e[t].search(mt.hanidec))n+=bt.indexOf(e[t]);else for(var i in gt){var r=gt[i],o=r[0],s=r[1];a>=o&&a<=s&&(n+=a-o)}}return parseInt(n,10)}return n}(t))}}}var xt="( |"+String.fromCharCode(160)+")",Ct=new RegExp(xt,"g");function Tt(e){return e.replace(/\./g,"\\.?").replace(Ct,xt)}function Dt(e){return e.replace(/\./g,"").replace(Ct," ").toLowerCase()}function wt(e,n){return null===e?null:{regex:RegExp(e.map(Tt).join("|")),deser:function(t){var a=t[0];return e.findIndex((function(e){return Dt(a)===Dt(e)}))+n}}}function Ot(e,n){return{regex:e,deser:function(e){return he(e[1],e[2])},groups:n}}function kt(e){return{regex:e,deser:function(e){return e[0]}}}var St={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};var Pt=null;function At(e,n){if(e.literal)return e;var t=Le.macroTokenToFormatOpts(e.val);if(!t)return e;var a=Le.create(n,t).formatDateTimeParts((Pt||(Pt=ca.fromMillis(1555555555555)),Pt)).map((function(e){return function(e,n,t){var a=e.type,i=e.value;if("literal"===a)return{literal:!0,val:i};var r=t[a],o=St[a];return"object"==typeof o&&(o=o[r]),o?{literal:!1,val:o}:void 0}(e,0,t)}));return a.includes(void 0)?e:a}function Rt(e,n,t){var a=function(e,n){var t;return(t=Array.prototype).concat.apply(t,e.map((function(e){return At(e,n)})))}(Le.parseFormat(t),e),i=a.map((function(n){return t=n,i=vt(a=e),r=vt(a,"{2}"),o=vt(a,"{3}"),s=vt(a,"{4}"),l=vt(a,"{6}"),d=vt(a,"{1,2}"),c=vt(a,"{1,3}"),u=vt(a,"{1,6}"),h=vt(a,"{1,9}"),p=vt(a,"{2,4}"),f=vt(a,"{4,6}"),m=function(e){return{regex:RegExp((n=e.val,n.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:function(e){return e[0]},literal:!0};var n},(g=function(e){if(t.literal)return m(e);switch(e.val){case"G":return wt(a.eras("short",!1),0);case"GG":return wt(a.eras("long",!1),0);case"y":return yt(u);case"yy":return yt(p,ce);case"yyyy":return yt(s);case"yyyyy":return yt(f);case"yyyyyy":return yt(l);case"M":return yt(d);case"MM":return yt(r);case"MMM":return wt(a.months("short",!0,!1),1);case"MMMM":return wt(a.months("long",!0,!1),1);case"L":return yt(d);case"LL":return yt(r);case"LLL":return wt(a.months("short",!1,!1),1);case"LLLL":return wt(a.months("long",!1,!1),1);case"d":return yt(d);case"dd":return yt(r);case"o":return yt(c);case"ooo":return yt(o);case"HH":return yt(r);case"H":return yt(d);case"hh":return yt(r);case"h":return yt(d);case"mm":return yt(r);case"m":case"q":return yt(d);case"qq":return yt(r);case"s":return yt(d);case"ss":return yt(r);case"S":return yt(c);case"SSS":return yt(o);case"u":return kt(h);case"uu":return kt(d);case"uuu":return yt(i);case"a":return wt(a.meridiems(),0);case"kkkk":return yt(s);case"kk":return yt(p,ce);case"W":return yt(d);case"WW":return yt(r);case"E":case"c":return yt(i);case"EEE":return wt(a.weekdays("short",!1,!1),1);case"EEEE":return wt(a.weekdays("long",!1,!1),1);case"ccc":return wt(a.weekdays("short",!0,!1),1);case"cccc":return wt(a.weekdays("long",!0,!1),1);case"Z":case"ZZ":return Ot(new RegExp("([+-]"+d.source+")(?::("+r.source+"))?"),2);case"ZZZ":return Ot(new RegExp("([+-]"+d.source+")("+r.source+")?"),2);case"z":return kt(/[a-z_+-/]{1,256}?/i);default:return m(e)}}(t)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"}).token=t,g;var t,a,i,r,o,s,l,d,c,u,h,p,f,m,g})),r=i.find((function(e){return e.invalidReason}));if(r)return{input:n,tokens:a,invalidReason:r.invalidReason};var o=function(e){return["^"+e.map((function(e){return e.regex})).reduce((function(e,n){return e+"("+n.source+")"}),"")+"$",e]}(i),s=o[0],l=o[1],d=RegExp(s,"i"),c=function(e,n,t){var a=e.match(n);if(a){var i={},r=1;for(var o in t)if(K(t,o)){var s=t[o],l=s.groups?s.groups+1:1;!s.literal&&s.token&&(i[s.token.val[0]]=s.deser(a.slice(r,r+l))),r+=l}return[a,i]}return[a,{}]}(n,d,l),u=c[0],h=c[1],p=h?function(e){var n,t=null;return G(e.z)||(t=He.create(e.z)),G(e.Z)||(t||(t=new We(e.Z)),n=e.Z),G(e.q)||(e.M=3*(e.q-1)+1),G(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),G(e.u)||(e.S=ae(e.u)),[Object.keys(e).reduce((function(n,t){var a=function(e){switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}}(t);return a&&(n[a]=e[t]),n}),{}),t,n]}(h):[null,null,void 0],f=p[0],m=p[1],g=p[2];if(K(h,"a")&&K(h,"H"))throw new v("Can't include meridiem when specifying 24-hour format");return{input:n,tokens:a,regex:d,rawMatches:u,matches:h,result:f,zone:m,specificOffset:g}}var It=[0,31,59,90,120,151,181,212,243,273,304,334],_t=[0,31,60,91,121,152,182,213,244,274,305,335];function Lt(e,n){return new Ee("unit out of range","you specified "+n+" (of type "+typeof n+") as a "+e+", which is invalid")}function Et(e,n,t){var a=new Date(Date.UTC(e,n-1,t)).getUTCDay();return 0===a?7:a}function Mt(e,n,t){return t+(re(e)?_t:It)[n-1]}function jt(e,n){var t=re(e)?_t:It,a=t.findIndex((function(e){return e<n}));return{month:a+1,day:n-t[a]}}function Ut(e){var n,t=e.year,a=e.month,i=e.day,o=Mt(t,a,i),s=Et(t,a,i),l=Math.floor((o-s+10)/7);return l<1?l=de(n=t-1):l>de(t)?(n=t+1,l=1):n=t,r({weekYear:n,weekNumber:l,weekday:s},ge(e))}function Nt(e){var n,t=e.weekYear,a=e.weekNumber,i=e.weekday,o=Et(t,1,4),s=oe(t),l=7*a+i-o-3;l<1?l+=oe(n=t-1):l>s?(n=t+1,l-=oe(t)):n=t;var d=jt(n,l);return r({year:n,month:d.month,day:d.day},ge(e))}function Bt(e){var n=e.year;return r({year:n,ordinal:Mt(n,e.month,e.day)},ge(e))}function Ft(e){var n=e.year,t=jt(n,e.ordinal);return r({year:n,month:t.month,day:t.day},ge(e))}function zt(e){var n=X(e.year),t=Q(e.month,1,12),a=Q(e.day,1,se(e.year,e.month));return n?t?!a&&Lt("day",e.day):Lt("month",e.month):Lt("year",e.year)}function Ht(e){var n=e.hour,t=e.minute,a=e.second,i=e.millisecond,r=Q(n,0,23)||24===n&&0===t&&0===a&&0===i,o=Q(t,0,59),s=Q(a,0,59),l=Q(i,0,999);return r?o?s?!l&&Lt("millisecond",i):Lt("second",a):Lt("minute",t):Lt("hour",n)}var Vt="Invalid DateTime";function Wt(e){return new Ee("unsupported zone",'the zone "'+e.name+'" is not supported')}function Yt(e){return null===e.weekData&&(e.weekData=Ut(e.c)),e.weekData}function $t(e,n){var t={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new ca(r({},t,n,{old:t}))}function Gt(e,n,t){var a=e-60*n*1e3,i=t.offset(a);if(n===i)return[a,n];a-=60*(i-n)*1e3;var r=t.offset(a);return i===r?[a,i]:[e-60*Math.min(i,r)*1e3,Math.max(i,r)]}function qt(e,n){var t=new Date(e+=60*n*1e3);return{year:t.getUTCFullYear(),month:t.getUTCMonth()+1,day:t.getUTCDate(),hour:t.getUTCHours(),minute:t.getUTCMinutes(),second:t.getUTCSeconds(),millisecond:t.getUTCMilliseconds()}}function Xt(e,n,t){return Gt(le(e),n,t)}function Jt(e,n){var t=e.o,a=e.c.year+Math.trunc(n.years),i=e.c.month+Math.trunc(n.months)+3*Math.trunc(n.quarters),o=r({},e.c,{year:a,month:i,day:Math.min(e.c.day,se(a,i))+Math.trunc(n.days)+7*Math.trunc(n.weeks)}),s=lt.fromObject({years:n.years-Math.trunc(n.years),quarters:n.quarters-Math.trunc(n.quarters),months:n.months-Math.trunc(n.months),weeks:n.weeks-Math.trunc(n.weeks),days:n.days-Math.trunc(n.days),hours:n.hours,minutes:n.minutes,seconds:n.seconds,milliseconds:n.milliseconds}).as("milliseconds"),l=Gt(le(o),t,e.zone),d=l[0],c=l[1];return 0!==s&&(d+=s,c=e.zone.offset(d)),{ts:d,o:c}}function Zt(e,n,t,a,i,o){var s=t.setZone,l=t.zone;if(e&&0!==Object.keys(e).length){var d=n||l,c=ca.fromObject(e,r({},t,{zone:d,specificOffset:o}));return s?c:c.setZone(l)}return ca.invalid(new Ee("unparsable",'the input "'+i+"\" can't be parsed as "+a))}function Kt(e,n,t){return void 0===t&&(t=!0),e.isValid?Le.create(hn.create("en-US"),{allowZ:t,forceSimple:!0}).formatDateTimeFromString(e,n):null}function Qt(e,n){var t=n.suppressSeconds,a=void 0!==t&&t,i=n.suppressMilliseconds,r=void 0!==i&&i,o=n.includeOffset,s=n.includePrefix,l=void 0!==s&&s,d=n.includeZone,c=void 0!==d&&d,u=n.spaceZone,h=void 0!==u&&u,p=n.format,f=void 0===p?"extended":p,m="basic"===f?"HHmm":"HH:mm";a&&0===e.second&&0===e.millisecond||(m+="basic"===f?"ss":":ss",r&&0===e.millisecond||(m+=".SSS")),(c||o)&&h&&(m+=" "),c?m+="z":o&&(m+="basic"===f?"ZZZ":"ZZ");var g=Kt(e,m);return l&&(g="T"+g),g}var ea={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},na={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},ta={ordinal:1,hour:0,minute:0,second:0,millisecond:0},aa=["year","month","day","hour","minute","second","millisecond"],ia=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],ra=["year","ordinal","hour","minute","second","millisecond"];function oa(e){var n={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!n)throw new y(e);return n}function sa(e,n){var t,a,i=$e(n.zone,Qe.defaultZone),r=hn.fromObject(n),o=Qe.now();if(G(e.year))t=o;else{for(var s,l=p(aa);!(s=l()).done;){var d=s.value;G(e[d])&&(e[d]=ea[d])}var c=zt(e)||Ht(e);if(c)return ca.invalid(c);var u=Xt(e,i.offset(o),i);t=u[0],a=u[1]}return new ca({ts:t,zone:i,loc:r,o:a})}function la(e,n,t){var a=!!G(t.round)||t.round,i=function(e,i){return e=ie(e,a||t.calendary?0:2,!0),n.loc.clone(t).relFormatter(t).format(e,i)},r=function(a){return t.calendary?n.hasSame(e,a)?0:n.startOf(a).diff(e.startOf(a),a).get(a):n.diff(e,a).get(a)};if(t.unit)return i(r(t.unit),t.unit);for(var o,s=p(t.units);!(o=s()).done;){var l=o.value,d=r(l);if(Math.abs(d)>=1)return i(d,l)}return i(e>n?-0:0,t.units[t.units.length-1])}function da(e){var n,t={};return e.length>0&&"object"==typeof e[e.length-1]?(t=e[e.length-1],n=Array.from(e).slice(0,e.length-1)):n=Array.from(e),[t,n]}var ca=function(){function e(e){var n=e.zone||Qe.defaultZone,t=e.invalid||(Number.isNaN(e.ts)?new Ee("invalid input"):null)||(n.isValid?null:Wt(n));this.ts=G(e.ts)?Qe.now():e.ts;var a=null,i=null;if(!t)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(n)){var r=[e.old.c,e.old.o];a=r[0],i=r[1]}else{var o=n.offset(this.ts);a=qt(this.ts,o),a=(t=Number.isNaN(a.year)?new Ee("invalid input"):null)?null:a,i=t?null:o}this._zone=n,this.loc=e.loc||hn.create(),this.invalid=t,this.weekData=null,this.c=a,this.o=i,this.isLuxonDateTime=!0}e.now=function(){return new e({})},e.local=function(){var e=da(arguments),n=e[0],t=e[1],a=t[0],i=t[1],r=t[2],o=t[3],s=t[4],l=t[5],d=t[6];return sa({year:a,month:i,day:r,hour:o,minute:s,second:l,millisecond:d},n)},e.utc=function(){var e=da(arguments),n=e[0],t=e[1],a=t[0],i=t[1],r=t[2],o=t[3],s=t[4],l=t[5],d=t[6];return n.zone=We.utcInstance,sa({year:a,month:i,day:r,hour:o,minute:s,second:l,millisecond:d},n)},e.fromJSDate=function(n,t){void 0===t&&(t={});var a,i=(a=n,"[object Date]"===Object.prototype.toString.call(a)?n.valueOf():NaN);if(Number.isNaN(i))return e.invalid("invalid input");var r=$e(t.zone,Qe.defaultZone);return r.isValid?new e({ts:i,zone:r,loc:hn.fromObject(t)}):e.invalid(Wt(r))},e.fromMillis=function(n,t){if(void 0===t&&(t={}),q(n))return n<-864e13||n>864e13?e.invalid("Timestamp out of range"):new e({ts:n,zone:$e(t.zone,Qe.defaultZone),loc:hn.fromObject(t)});throw new x("fromMillis requires a numerical input, but received a "+typeof n+" with value "+n)},e.fromSeconds=function(n,t){if(void 0===t&&(t={}),q(n))return new e({ts:1e3*n,zone:$e(t.zone,Qe.defaultZone),loc:hn.fromObject(t)});throw new x("fromSeconds requires a numerical input")},e.fromObject=function(n,t){void 0===t&&(t={}),n=n||{};var a=$e(t.zone,Qe.defaultZone);if(!a.isValid)return e.invalid(Wt(a));var i=Qe.now(),r=G(t.specificOffset)?a.offset(i):t.specificOffset,o=fe(n,oa),s=!G(o.ordinal),l=!G(o.year),d=!G(o.month)||!G(o.day),c=l||d,u=o.weekYear||o.weekNumber,h=hn.fromObject(t);if((c||s)&&u)throw new v("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(d&&s)throw new v("Can't mix ordinal dates with month/day");var f,m,g=u||o.weekday&&!c,b=qt(i,r);g?(f=ia,m=na,b=Ut(b)):s?(f=ra,m=ta,b=Bt(b)):(f=aa,m=ea);for(var y,x=!1,C=p(f);!(y=C()).done;){var T=y.value;G(o[T])?o[T]=x?m[T]:b[T]:x=!0}var D=(g?function(e){var n=X(e.weekYear),t=Q(e.weekNumber,1,de(e.weekYear)),a=Q(e.weekday,1,7);return n?t?!a&&Lt("weekday",e.weekday):Lt("week",e.week):Lt("weekYear",e.weekYear)}(o):s?function(e){var n=X(e.year),t=Q(e.ordinal,1,oe(e.year));return n?!t&&Lt("ordinal",e.ordinal):Lt("year",e.year)}(o):zt(o))||Ht(o);if(D)return e.invalid(D);var w=Xt(g?Nt(o):s?Ft(o):o,r,a),O=new e({ts:w[0],zone:a,o:w[1],loc:h});return o.weekday&&c&&n.weekday!==O.weekday?e.invalid("mismatched weekday","you can't specify both a weekday of "+o.weekday+" and a date of "+O.toISO()):O},e.fromISO=function(e,n){void 0===n&&(n={});var t=function(e){return mn(e,[Hn,$n],[Vn,Gn],[Wn,qn],[Yn,Xn])}(e);return Zt(t[0],t[1],n,"ISO 8601",e)},e.fromRFC2822=function(e,n){void 0===n&&(n={});var t=function(e){return mn(function(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[Mn,jn])}(e);return Zt(t[0],t[1],n,"RFC 2822",e)},e.fromHTTP=function(e,n){void 0===n&&(n={});var t=function(e){return mn(e,[Un,Fn],[Nn,Fn],[Bn,zn])}(e);return Zt(t[0],t[1],n,"HTTP",n)},e.fromFormat=function(n,t,a){if(void 0===a&&(a={}),G(n)||G(t))throw new x("fromFormat requires an input string and a format");var i=a,r=i.locale,o=void 0===r?null:r,s=i.numberingSystem,l=void 0===s?null:s,d=function(e,n,t){var a=Rt(e,n,t);return[a.result,a.zone,a.specificOffset,a.invalidReason]}(hn.fromOpts({locale:o,numberingSystem:l,defaultToEN:!0}),n,t),c=d[0],u=d[1],h=d[2],p=d[3];return p?e.invalid(p):Zt(c,u,a,"format "+t,n,h)},e.fromString=function(n,t,a){return void 0===a&&(a={}),e.fromFormat(n,t,a)},e.fromSQL=function(e,n){void 0===n&&(n={});var t=function(e){return mn(e,[Zn,Qn],[Kn,et])}(e);return Zt(t[0],t[1],n,"SQL",e)},e.invalid=function(n,t){if(void 0===t&&(t=null),!n)throw new x("need to specify a reason the DateTime is invalid");var a=n instanceof Ee?n:new Ee(n,t);if(Qe.throwOnInvalid)throw new m(a);return new e({invalid:a})},e.isDateTime=function(e){return e&&e.isLuxonDateTime||!1};var n=e.prototype;return n.get=function(e){return this[e]},n.resolvedLocaleOptions=function(e){void 0===e&&(e={});var n=Le.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:n.locale,numberingSystem:n.numberingSystem,outputCalendar:n.calendar}},n.toUTC=function(e,n){return void 0===e&&(e=0),void 0===n&&(n={}),this.setZone(We.instance(e),n)},n.toLocal=function(){return this.setZone(Qe.defaultZone)},n.setZone=function(n,t){var a=void 0===t?{}:t,i=a.keepLocalTime,r=void 0!==i&&i,o=a.keepCalendarTime,s=void 0!==o&&o;if((n=$e(n,Qe.defaultZone)).equals(this.zone))return this;if(n.isValid){var l=this.ts;if(r||s){var d=n.offset(this.ts);l=Xt(this.toObject(),d,n)[0]}return $t(this,{ts:l,zone:n})}return e.invalid(Wt(n))},n.reconfigure=function(e){var n=void 0===e?{}:e,t=n.locale,a=n.numberingSystem,i=n.outputCalendar;return $t(this,{loc:this.loc.clone({locale:t,numberingSystem:a,outputCalendar:i})})},n.setLocale=function(e){return this.reconfigure({locale:e})},n.set=function(e){if(!this.isValid)return this;var n,t=fe(e,oa),a=!G(t.weekYear)||!G(t.weekNumber)||!G(t.weekday),i=!G(t.ordinal),o=!G(t.year),s=!G(t.month)||!G(t.day),l=o||s,d=t.weekYear||t.weekNumber;if((l||i)&&d)throw new v("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(s&&i)throw new v("Can't mix ordinal dates with month/day");a?n=Nt(r({},Ut(this.c),t)):G(t.ordinal)?(n=r({},this.toObject(),t),G(t.day)&&(n.day=Math.min(se(n.year,n.month),n.day))):n=Ft(r({},Bt(this.c),t));var c=Xt(n,this.o,this.zone);return $t(this,{ts:c[0],o:c[1]})},n.plus=function(e){return this.isValid?$t(this,Jt(this,lt.fromDurationLike(e))):this},n.minus=function(e){return this.isValid?$t(this,Jt(this,lt.fromDurationLike(e).negate())):this},n.startOf=function(e){if(!this.isValid)return this;var n={},t=lt.normalizeUnit(e);switch(t){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0}if("weeks"===t&&(n.weekday=1),"quarters"===t){var a=Math.ceil(this.month/3);n.month=3*(a-1)+1}return this.set(n)},n.endOf=function(e){var n;return this.isValid?this.plus((n={},n[e]=1,n)).startOf(e).minus(1):this},n.toFormat=function(e,n){return void 0===n&&(n={}),this.isValid?Le.create(this.loc.redefaultToEN(n)).formatDateTimeFromString(this,e):Vt},n.toLocaleString=function(e,n){return void 0===e&&(e=O),void 0===n&&(n={}),this.isValid?Le.create(this.loc.clone(n),e).formatDateTime(this):Vt},n.toLocaleParts=function(e){return void 0===e&&(e={}),this.isValid?Le.create(this.loc.clone(e),e).formatDateTimeParts(this):[]},n.toISO=function(e){return void 0===e&&(e={}),this.isValid?this.toISODate(e)+"T"+this.toISOTime(e):null},n.toISODate=function(e){var n=(void 0===e?{}:e).format,t="basic"===(void 0===n?"extended":n)?"yyyyMMdd":"yyyy-MM-dd";return this.year>9999&&(t="+"+t),Kt(this,t)},n.toISOWeekDate=function(){return Kt(this,"kkkk-'W'WW-c")},n.toISOTime=function(e){var n=void 0===e?{}:e,t=n.suppressMilliseconds,a=void 0!==t&&t,i=n.suppressSeconds,r=void 0!==i&&i,o=n.includeOffset,s=void 0===o||o,l=n.includePrefix,d=void 0!==l&&l,c=n.format;return Qt(this,{suppressSeconds:r,suppressMilliseconds:a,includeOffset:s,includePrefix:d,format:void 0===c?"extended":c})},n.toRFC2822=function(){return Kt(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)},n.toHTTP=function(){return Kt(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")},n.toSQLDate=function(){return Kt(this,"yyyy-MM-dd")},n.toSQLTime=function(e){var n=void 0===e?{}:e,t=n.includeOffset,a=void 0===t||t,i=n.includeZone;return Qt(this,{includeOffset:a,includeZone:void 0!==i&&i,spaceZone:!0})},n.toSQL=function(e){return void 0===e&&(e={}),this.isValid?this.toSQLDate()+" "+this.toSQLTime(e):null},n.toString=function(){return this.isValid?this.toISO():Vt},n.valueOf=function(){return this.toMillis()},n.toMillis=function(){return this.isValid?this.ts:NaN},n.toSeconds=function(){return this.isValid?this.ts/1e3:NaN},n.toJSON=function(){return this.toISO()},n.toBSON=function(){return this.toJSDate()},n.toObject=function(e){if(void 0===e&&(e={}),!this.isValid)return{};var n=r({},this.c);return e.includeConfig&&(n.outputCalendar=this.outputCalendar,n.numberingSystem=this.loc.numberingSystem,n.locale=this.loc.locale),n},n.toJSDate=function(){return new Date(this.isValid?this.ts:NaN)},n.diff=function(e,n,t){if(void 0===n&&(n="milliseconds"),void 0===t&&(t={}),!this.isValid||!e.isValid)return lt.invalid("created by diffing an invalid DateTime");var a,i=r({locale:this.locale,numberingSystem:this.numberingSystem},t),o=(a=n,Array.isArray(a)?a:[a]).map(lt.normalizeUnit),s=e.valueOf()>this.valueOf(),l=ft(s?this:e,s?e:this,o,i);return s?l.negate():l},n.diffNow=function(n,t){return void 0===n&&(n="milliseconds"),void 0===t&&(t={}),this.diff(e.now(),n,t)},n.until=function(e){return this.isValid?ut.fromDateTimes(this,e):this},n.hasSame=function(e,n){if(!this.isValid)return!1;var t=e.valueOf(),a=this.setZone(e.zone,{keepLocalTime:!0});return a.startOf(n)<=t&&t<=a.endOf(n)},n.equals=function(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)},n.toRelative=function(n){if(void 0===n&&(n={}),!this.isValid)return null;var t=n.base||e.fromObject({},{zone:this.zone}),a=n.padding?this<t?-n.padding:n.padding:0,i=["years","months","days","hours","minutes","seconds"],o=n.unit;return Array.isArray(n.unit)&&(i=n.unit,o=void 0),la(t,this.plus(a),r({},n,{numeric:"always",units:i,unit:o}))},n.toRelativeCalendar=function(n){return void 0===n&&(n={}),this.isValid?la(n.base||e.fromObject({},{zone:this.zone}),this,r({},n,{numeric:"auto",units:["years","months","days"],calendary:!0})):null},e.min=function(){for(var n=arguments.length,t=new Array(n),a=0;a<n;a++)t[a]=arguments[a];if(!t.every(e.isDateTime))throw new x("min requires all arguments be DateTimes");return Z(t,(function(e){return e.valueOf()}),Math.min)},e.max=function(){for(var n=arguments.length,t=new Array(n),a=0;a<n;a++)t[a]=arguments[a];if(!t.every(e.isDateTime))throw new x("max requires all arguments be DateTimes");return Z(t,(function(e){return e.valueOf()}),Math.max)},e.fromFormatExplain=function(e,n,t){void 0===t&&(t={});var a=t,i=a.locale,r=void 0===i?null:i,o=a.numberingSystem,s=void 0===o?null:o;return Rt(hn.fromOpts({locale:r,numberingSystem:s,defaultToEN:!0}),e,n)},e.fromStringExplain=function(n,t,a){return void 0===a&&(a={}),e.fromFormatExplain(n,t,a)},i(e,[{key:"isValid",get:function(){return null===this.invalid}},{key:"invalidReason",get:function(){return this.invalid?this.invalid.reason:null}},{key:"invalidExplanation",get:function(){return this.invalid?this.invalid.explanation:null}},{key:"locale",get:function(){return this.isValid?this.loc.locale:null}},{key:"numberingSystem",get:function(){return this.isValid?this.loc.numberingSystem:null}},{key:"outputCalendar",get:function(){return this.isValid?this.loc.outputCalendar:null}},{key:"zone",get:function(){return this._zone}},{key:"zoneName",get:function(){return this.isValid?this.zone.name:null}},{key:"year",get:function(){return this.isValid?this.c.year:NaN}},{key:"quarter",get:function(){return this.isValid?Math.ceil(this.c.month/3):NaN}},{key:"month",get:function(){return this.isValid?this.c.month:NaN}},{key:"day",get:function(){return this.isValid?this.c.day:NaN}},{key:"hour",get:function(){return this.isValid?this.c.hour:NaN}},{key:"minute",get:function(){return this.isValid?this.c.minute:NaN}},{key:"second",get:function(){return this.isValid?this.c.second:NaN}},{key:"millisecond",get:function(){return this.isValid?this.c.millisecond:NaN}},{key:"weekYear",get:function(){return this.isValid?Yt(this).weekYear:NaN}},{key:"weekNumber",get:function(){return this.isValid?Yt(this).weekNumber:NaN}},{key:"weekday",get:function(){return this.isValid?Yt(this).weekday:NaN}},{key:"ordinal",get:function(){return this.isValid?Bt(this.c).ordinal:NaN}},{key:"monthShort",get:function(){return this.isValid?ht.months("short",{locObj:this.loc})[this.month-1]:null}},{key:"monthLong",get:function(){return this.isValid?ht.months("long",{locObj:this.loc})[this.month-1]:null}},{key:"weekdayShort",get:function(){return this.isValid?ht.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}},{key:"weekdayLong",get:function(){return this.isValid?ht.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}},{key:"offset",get:function(){return this.isValid?+this.o:NaN}},{key:"offsetNameShort",get:function(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}},{key:"offsetNameLong",get:function(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}},{key:"isOffsetFixed",get:function(){return this.isValid?this.zone.isUniversal:null}},{key:"isInDST",get:function(){return!this.isOffsetFixed&&(this.offset>this.set({month:1}).offset||this.offset>this.set({month:5}).offset)}},{key:"isInLeapYear",get:function(){return re(this.year)}},{key:"daysInMonth",get:function(){return se(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?oe(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?de(this.weekYear):NaN}}],[{key:"DATE_SHORT",get:function(){return O}},{key:"DATE_MED",get:function(){return k}},{key:"DATE_MED_WITH_WEEKDAY",get:function(){return S}},{key:"DATE_FULL",get:function(){return P}},{key:"DATE_HUGE",get:function(){return A}},{key:"TIME_SIMPLE",get:function(){return R}},{key:"TIME_WITH_SECONDS",get:function(){return I}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return _}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return L}},{key:"TIME_24_SIMPLE",get:function(){return E}},{key:"TIME_24_WITH_SECONDS",get:function(){return M}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return j}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return U}},{key:"DATETIME_SHORT",get:function(){return N}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return B}},{key:"DATETIME_MED",get:function(){return F}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return z}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return H}},{key:"DATETIME_FULL",get:function(){return V}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return W}},{key:"DATETIME_HUGE",get:function(){return Y}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return $}}]),e}();function ua(e){if(ca.isDateTime(e))return e;if(e&&e.valueOf&&q(e.valueOf()))return ca.fromJSDate(e);if(e&&"object"==typeof e)return ca.fromObject(e);throw new x("Unknown datetime argument: "+e+", of type "+typeof e)}n.DateTime=ca,n.Duration=lt,n.FixedOffsetZone=We,n.IANAZone=He,n.Info=ht,n.Interval=ut,n.InvalidZone=Ye,n.Settings=Qe,n.SystemZone=Ue,n.VERSION="2.2.0",n.Zone=Me},function(e,n,t){var a=t(2),i=t(148),r=t(149),o=t(150),s=t(24),l=t(10),d=l("iterator"),c=l("toStringTag"),u=o.values,h=function(e,n){if(e){if(e[d]!==u)try{s(e,d,u)}catch(n){e[d]=u}if(e[c]||s(e,c,n),i[n])for(var t in o)if(e[t]!==o[t])try{s(e,t,o[t])}catch(n){e[t]=o[t]}}};for(var p in i)h(a[p]&&a[p].prototype,p);h(r,"DOMTokenList")},function(e,n,t){var a=t(2),i=t(45),r=t(13),o=t(79),s=t(75),l=t(74),d=i("wks"),c=a.Symbol,u=c&&c.for,h=l?c:c&&c.withoutSetter||o;e.exports=function(e){if(!r(d,e)||!s&&"string"!=typeof d[e]){var n="Symbol."+e;s&&r(c,e)?d[e]=c[e]:d[e]=l&&u?u(n):h(n)}return d[e]}},function(e,n,t){var a=t(2),i=t(22),r=a.String,o=a.TypeError;e.exports=function(e){if(i(e))return e;throw o(r(e)+" is not an object")}},function(e,n){var t=Array.isArray;e.exports=t},function(e,n,t){var a=t(4),i=t(48),r=a({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,n){return r(i(e),n)}},function(e,n,t){var a=t(89),i="object"==typeof self&&self&&self.Object===Object&&self,r=a||i||Function("return this")();e.exports=r},function(e,n){e.exports={package:"../../package.json",menu:{text:"{{version|title}}",locations:[".navbar > .home-link::after",".sidebar > .nav-links > :first-child::before"],items:[{text:"Documentation",items:[{text:"Development (master)",link:"/docs/master/"},{text:"Latest version",link:"/docs/latest/"},{type:"versions",text:"{{version}}{{tag|suffix}}",link:"/docs/{{version}}/",exclude:/^[01]\.|2\.[0-5]\./,group:"minor"}]},{text:"Release notes (5 latest)",items:[{type:"versions",limit:5,target:"_blank",group:"patch",link:"https://github.com/chartjs/Chart.js/releases/tag/v{{version}}"}]}]},filters:{suffix:e=>e?` (${e})`:"",title:(e,n)=>window.location.href.includes("master")?"Development (master)":"latest"===n.tag?"Latest ("+e+")":e+(n.tag?` (${tag})`:"")+" (outdated)"},base:"/docs/3.9.1/",name:"chart.js",version:"3.9.1",versions:[{tag:null,name:"3.9.0"},{tag:null,name:"3.8.2"},{tag:null,name:"3.8.1"},{tag:null,name:"3.8.0"},{tag:null,name:"3.7.1"},{tag:null,name:"3.7.0"},{tag:null,name:"3.6.2"},{tag:null,name:"3.6.1"},{tag:null,name:"3.6.0"},{tag:null,name:"3.5.1"},{tag:null,name:"3.5.0"},{tag:null,name:"3.4.1"},{tag:null,name:"3.4.0"},{tag:null,name:"3.3.2"},{tag:null,name:"3.3.1"},{tag:null,name:"3.3.0"},{tag:null,name:"3.2.1"},{tag:null,name:"3.2.0"},{tag:null,name:"3.1.1"},{tag:null,name:"3.1.0"},{tag:null,name:"3.0.2"},{tag:null,name:"3.0.1"},{tag:null,name:"3.0.0"},{tag:null,name:"3.0.0-rc.7"},{tag:null,name:"3.0.0-rc.6"},{tag:null,name:"3.0.0-rc.5"},{tag:null,name:"3.0.0-rc.4"},{tag:null,name:"3.0.0-rc.3"},{tag:null,name:"3.0.0-rc.2"},{tag:null,name:"3.0.0-rc"},{tag:null,name:"3.0.0-beta.14"},{tag:null,name:"3.0.0-beta.13"},{tag:null,name:"3.0.0-beta.12"},{tag:null,name:"3.0.0-beta.11"},{tag:null,name:"3.0.0-beta.10"},{tag:null,name:"3.0.0-beta.9"},{tag:null,name:"3.0.0-beta.8"},{tag:null,name:"3.0.0-beta.7"},{tag:null,name:"3.0.0-beta.6"},{tag:null,name:"3.0.0-beta.5"},{tag:null,name:"3.0.0-beta.4"},{tag:null,name:"3.0.0-beta.3"},{tag:null,name:"3.0.0-beta.2"},{tag:null,name:"3.0.0-beta"},{tag:null,name:"3.0.0-alpha.2"},{tag:null,name:"3.0.0-alpha"},{tag:null,name:"2.9.4"},{tag:null,name:"2.9.3"},{tag:null,name:"2.9.2"},{tag:null,name:"2.9.1"},{tag:null,name:"2.9.0"},{tag:null,name:"2.8.0"},{tag:null,name:"2.8.0-rc.1"},{tag:null,name:"2.7.3"},{tag:null,name:"2.7.2"},{tag:null,name:"2.7.1"},{tag:null,name:"2.7.0"},{tag:null,name:"2.6.0"},{tag:null,name:"2.5.0"},{tag:null,name:"2.4.0"},{tag:null,name:"2.3.0"},{tag:null,name:"2.3.0-rc.1"},{tag:null,name:"2.2.2"},{tag:null,name:"2.2.1"},{tag:null,name:"2.2.0"},{tag:null,name:"2.2.0-rc.2"},{tag:null,name:"2.2.0-rc.1"},{tag:null,name:"2.1.6"},{tag:null,name:"2.1.5"},{tag:null,name:"2.1.4"},{tag:null,name:"2.1.3"},{tag:null,name:"2.1.2"},{tag:null,name:"2.1.1"},{tag:null,name:"2.1.0"},{tag:null,name:"2.0.2"},{tag:null,name:"2.0.1"},{tag:null,name:"2.0.0"},{tag:null,name:"1.1.1"},{tag:null,name:"1.1.0"},{tag:null,name:"1.0.2"},{tag:null,name:"1.0.1"},{tag:null,name:"1.0.1-beta.2"}]}},function(e,n,t){var a=t(7);e.exports=!a((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(e,n){var t=Function.prototype.call;e.exports=t.bind?t.bind(t):function(){return t.apply(t,arguments)}},function(e,n,t){var a=t(189),i=t(192);e.exports=function(e,n){var t=i(e,n);return a(t)?t:void 0}},function(e,n,t){"use strict";var a=t(160),i=t(17),r=t(4),o=t(161),s=t(7),l=t(11),d=t(3),c=t(34),u=t(83),h=t(57),p=t(33),f=t(167),m=t(76),g=t(169),b=t(170),v=t(10)("replace"),y=Math.max,x=Math.min,C=r([].concat),T=r([].push),D=r("".indexOf),w=r("".slice),O="$0"==="a".replace(/./,"$0"),k=!!/./[v]&&""===/./[v]("a","$0");o("replace",(function(e,n,t){var r=k?"$":"$0";return[function(e,t){var a=p(this),r=null==e?void 0:m(e,v);return r?i(r,e,a,t):i(n,h(a),e,t)},function(e,i){var o=l(this),s=h(e);if("string"==typeof i&&-1===D(i,r)&&-1===D(i,"$<")){var p=t(n,o,s,i);if(p.done)return p.value}var m=d(i);m||(i=h(i));var v=o.global;if(v){var O=o.unicode;o.lastIndex=0}for(var k=[];;){var S=b(o,s);if(null===S)break;if(T(k,S),!v)break;""===h(S[0])&&(o.lastIndex=f(s,u(o.lastIndex),O))}for(var P,A="",R=0,I=0;I<k.length;I++){for(var _=h((S=k[I])[0]),L=y(x(c(S.index),s.length),0),E=[],M=1;M<S.length;M++)T(E,void 0===(P=S[M])?P:String(P));var j=S.groups;if(m){var U=C([_],E,L,s);void 0!==j&&T(U,j);var N=h(a(i,void 0,U))}else N=g(_,s,L,E,j,i);L>=R&&(A+=w(s,R,L)+N,R=L+_.length)}return A+w(s,R)}]}),!!s((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!O||k)},function(e,n,t){"use strict";t.d(n,"d",(function(){return a})),t.d(n,"a",(function(){return r})),t.d(n,"i",(function(){return o})),t.d(n,"f",(function(){return l})),t.d(n,"g",(function(){return d})),t.d(n,"h",(function(){return c})),t.d(n,"b",(function(){return u})),t.d(n,"e",(function(){return h})),t.d(n,"k",(function(){return p})),t.d(n,"l",(function(){return f})),t.d(n,"c",(function(){return g})),t.d(n,"j",(function(){return b}));t(19);const a=/#.*$/,i=/\.(md|html)$/,r=/\/$/,o=/^[a-z]+:/i;function s(e){return decodeURI(e).replace(a,"").replace(i,"")}function l(e){return o.test(e)}function d(e){return/^mailto:/.test(e)}function c(e){return/^tel:/.test(e)}function u(e){if(l(e))return e;const n=e.match(a),t=n?n[0]:"",i=s(e);return r.test(i)?e:i+".html"+t}function h(e,n){const t=decodeURIComponent(e.hash),i=function(e){const n=e.match(a);if(n)return n[0]}(n);if(i&&t!==i)return!1;return s(e.path)===s(n)}function p(e,n,t){if(l(n))return{type:"external",path:n};t&&(n=function(e,n,t){const a=e.charAt(0);if("/"===a)return e;if("?"===a||"#"===a)return n+e;const i=n.split("/");t&&i[i.length-1]||i.pop();const r=e.replace(/^\//,"").split("/");for(let e=0;e<r.length;e++){const n=r[e];".."===n?i.pop():"."!==n&&i.push(n)}""!==i[0]&&i.unshift("");return i.join("/")}(n,t));const a=s(n);for(let n=0;n<e.length;n++)if(s(e[n].regularPath)===a)return Object.assign({},e[n],{type:"page",path:u(e[n].path)});return console.error(`[vuepress] No matching page found for sidebar item "${n}"`),{}}function f(e,n,t,a){const{pages:i,themeConfig:r}=t,o=a&&r.locales&&r.locales[a]||r;if("auto"===(e.frontmatter.sidebar||o.sidebar||r.sidebar))return m(e);const s=o.sidebar||r.sidebar;if(s){const{base:t,config:a}=function(e,n){if(Array.isArray(n))return{base:"/",config:n};for(const a in n)if(0===(t=e,/(\.html|\/)$/.test(t)?t:t+"/").indexOf(encodeURI(a)))return{base:a,config:n[a]};var t;return{}}(n,s);return"auto"===a?m(e):a?a.map(e=>function e(n,t,a,i=1){if("string"==typeof n)return p(t,n,a);if(Array.isArray(n))return Object.assign(p(t,n[0],a),{title:n[1]});{const r=n.children||[];return 0===r.length&&n.path?Object.assign(p(t,n.path,a),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:r.map(n=>e(n,t,a,i+1)),collapsable:!1!==n.collapsable}}}(e,i,t)):[]}return[]}function m(e){const n=g(e.headers||[]);return[{type:"group",collapsable:!1,title:e.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:e.path,path:e.path+"#"+n.slug,children:n.children||[]}))}]}function g(e){let n;return(e=e.map(e=>Object.assign({},e))).forEach(e=>{2===e.level?n=e:n&&(n.children||(n.children=[])).push(e)}),e.filter(e=>2===e.level)}function b(e){return Object.assign(e,{type:e.items&&e.items.length?"links":"link"})}},function(e,n){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,n,t){var a=t(3);e.exports=function(e){return"object"==typeof e?null!==e:a(e)}},function(e,n,t){var a=t(2),i=t(3),r=function(e){return i(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?r(a[e]):a[e]&&a[e][n]}},function(e,n,t){var a=t(16),i=t(25),r=t(43);e.exports=a?function(e,n,t){return i.f(e,n,r(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n,t){var a=t(2),i=t(16),r=t(80),o=t(11),s=t(72),l=a.TypeError,d=Object.defineProperty;n.f=i?d:function(e,n,t){if(o(e),n=s(n),o(t),r)try{return d(e,n,t)}catch(e){}if("get"in t||"set"in t)throw l("Accessors not supported");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var a=t(30),i=t(174),r=t(175),o=a?a.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):r(e)}},function(e,n,t){var a=t(126),i=t(33);e.exports=function(e){return a(i(e))}},function(e,n){e.exports=!1},function(e,n,t){var a=t(2),i=t(3),r=t(13),o=t(24),s=t(47),l=t(50),d=t(51),c=t(81).CONFIGURABLE,u=d.get,h=d.enforce,p=String(String).split("String");(e.exports=function(e,n,t,l){var d,u=!!l&&!!l.unsafe,f=!!l&&!!l.enumerable,m=!!l&&!!l.noTargetGet,g=l&&void 0!==l.name?l.name:n;i(t)&&("Symbol("===String(g).slice(0,7)&&(g="["+String(g).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!r(t,"name")||c&&t.name!==g)&&o(t,"name",g),(d=h(t)).source||(d.source=p.join("string"==typeof g?g:""))),e!==a?(u?!m&&e[n]&&(f=!0):delete e[n],f?e[n]=t:o(e,n,t)):f?e[n]=t:s(n,t)})(Function.prototype,"toString",(function(){return i(this)&&u(this).source||l(this)}))},function(e,n,t){var a=t(14).Symbol;e.exports=a},function(e,n,t){t(9),t(19);e.exports={resolveTemplate:function(e,n,t){if(!e)return e;for(const[a,i]of Object.entries(n)){const r=new RegExp(`{{\\s*${a}\\s*(\\|\\s*(?<filter>\\w+)\\s*)?}}`,"g");e=e.replace(r,(e,a,r)=>{const o=r&&t[r]?t[r](i,n):i;return null==o?"":o})}return e}}},function(e,n,t){t(9);const a=t(266),i=/^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>0|[1-9]\d*)(?:-(?<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?<build>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,r={major:/^\d\./,minor:/^\d\.\d\./,patch:/^\d\.\d\.\d/};e.exports={collapseVersions:function({group:e},n){const t=[...n].sort((e,n)=>-a(e.name,n.name)),i=r[e],o={};return i?t.filter(e=>{const n=i.exec(e.name),t=n&&n[0];if(t&&!o[t])return o[t]=e,!0}):t},describeVersion:function({name:e,tag:n}){const t=i.exec(e);if(!t)return{};const a=e,r=t.groups,o=`${r.major}.${r.minor}.${r.patch}`;return{...r,version:a,core:o,tag:n}}}},function(e,n,t){var a=t(2).TypeError;e.exports=function(e){if(null==e)throw a("Can't call method on "+e);return e}},function(e,n){var t=Math.ceil,a=Math.floor;e.exports=function(e){var n=+e;return n!=n||0===n?0:(n>0?a:t)(n)}},function(e,n,t){var a,i=t(11),r=t(152),o=t(54),s=t(53),l=t(154),d=t(49),c=t(52),u=c("IE_PROTO"),h=function(){},p=function(e){return"<script>"+e+"<\/script>"},f=function(e){e.write(p("")),e.close();var n=e.parentWindow.Object;return e=null,n},m=function(){try{a=new ActiveXObject("htmlfile")}catch(e){}var e,n;m="undefined"!=typeof document?document.domain&&a?f(a):((n=d("iframe")).style.display="none",l.appendChild(n),n.src=String("javascript:"),(e=n.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F):f(a);for(var t=o.length;t--;)delete m.prototype[o[t]];return m()};s[u]=!0,e.exports=Object.create||function(e,n){var t;return null!==e?(h.prototype=i(e),t=new h,h.prototype=null,t[u]=e):t=m(),void 0===n?t:r(t,n)}},function(e,n,t){var a=t(179),i=t(180),r=t(181),o=t(182),s=t(183);function l(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}l.prototype.clear=a,l.prototype.delete=i,l.prototype.get=r,l.prototype.has=o,l.prototype.set=s,e.exports=l},function(e,n,t){var a=t(91);e.exports=function(e,n){for(var t=e.length;t--;)if(a(e[t][0],n))return t;return-1}},function(e,n,t){var a=t(18)(Object,"create");e.exports=a},function(e,n,t){var a=t(201);e.exports=function(e,n){var t=e.__data__;return a(n)?t["string"==typeof n?"string":"hash"]:t.map}},function(e,n,t){var a=t(65);e.exports=function(e){if("string"==typeof e||a(e))return e;var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(e,n,t){var a,i;
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
 * @license MIT */void 0===(i="function"==typeof(a=function(){var e,n,t={version:"0.2.0"},a=t.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function i(e,n,t){return e<n?n:e>t?t:e}function r(e){return 100*(-1+e)}t.configure=function(e){var n,t;for(n in e)void 0!==(t=e[n])&&e.hasOwnProperty(n)&&(a[n]=t);return this},t.status=null,t.set=function(e){var n=t.isStarted();e=i(e,a.minimum,1),t.status=1===e?null:e;var l=t.render(!n),d=l.querySelector(a.barSelector),c=a.speed,u=a.easing;return l.offsetWidth,o((function(n){""===a.positionUsing&&(a.positionUsing=t.getPositioningCSS()),s(d,function(e,n,t){var i;return(i="translate3d"===a.positionUsing?{transform:"translate3d("+r(e)+"%,0,0)"}:"translate"===a.positionUsing?{transform:"translate("+r(e)+"%,0)"}:{"margin-left":r(e)+"%"}).transition="all "+n+"ms "+t,i}(e,c,u)),1===e?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){t.remove(),n()}),c)}),c)):setTimeout(n,c)})),this},t.isStarted=function(){return"number"==typeof t.status},t.start=function(){t.status||t.set(0);var e=function(){setTimeout((function(){t.status&&(t.trickle(),e())}),a.trickleSpeed)};return a.trickle&&e(),this},t.done=function(e){return e||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(e){var n=t.status;return n?("number"!=typeof e&&(e=(1-n)*i(Math.random()*n,.1,.95)),n=i(n+e,0,.994),t.set(n)):t.start()},t.trickle=function(){return t.inc(Math.random()*a.trickleRate)},e=0,n=0,t.promise=function(a){return a&&"resolved"!==a.state()?(0===n&&t.start(),e++,n++,a.always((function(){0==--n?(e=0,t.done()):t.set((e-n)/e)})),this):this},t.render=function(e){if(t.isRendered())return document.getElementById("nprogress");d(document.documentElement,"nprogress-busy");var n=document.createElement("div");n.id="nprogress",n.innerHTML=a.template;var i,o=n.querySelector(a.barSelector),l=e?"-100":r(t.status||0),c=document.querySelector(a.parent);return s(o,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),a.showSpinner||(i=n.querySelector(a.spinnerSelector))&&h(i),c!=document.body&&d(c,"nprogress-custom-parent"),c.appendChild(n),n},t.remove=function(){c(document.documentElement,"nprogress-busy"),c(document.querySelector(a.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&h(e)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var e=document.body.style,n="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return n+"Perspective"in e?"translate3d":n+"Transform"in e?"translate":"margin"};var o=function(){var e=[];function n(){var t=e.shift();t&&t(n)}return function(t){e.push(t),1==e.length&&n()}}(),s=function(){var e=["Webkit","O","Moz","ms"],n={};function t(t){return t=t.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,n){return n.toUpperCase()})),n[t]||(n[t]=function(n){var t=document.body.style;if(n in t)return n;for(var a,i=e.length,r=n.charAt(0).toUpperCase()+n.slice(1);i--;)if((a=e[i]+r)in t)return a;return n}(t))}function a(e,n,a){n=t(n),e.style[n]=a}return function(e,n){var t,i,r=arguments;if(2==r.length)for(t in n)void 0!==(i=n[t])&&n.hasOwnProperty(t)&&a(e,t,i);else a(e,r[1],r[2])}}();function l(e,n){return("string"==typeof e?e:u(e)).indexOf(" "+n+" ")>=0}function d(e,n){var t=u(e),a=t+n;l(t,n)||(e.className=a.substring(1))}function c(e,n){var t,a=u(e);l(e,n)&&(t=a.replace(" "+n+" "," "),e.className=t.substring(1,t.length-1))}function u(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function h(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return t})?a.call(n,t,n,e):a)||(e.exports=i)},function(e,n,t){var a=t(2),i=t(71).f,r=t(24),o=t(29),s=t(47),l=t(133),d=t(140);e.exports=function(e,n){var t,c,u,h,p,f=e.target,m=e.global,g=e.stat;if(t=m?a:g?a[f]||s(f,{}):(a[f]||{}).prototype)for(c in n){if(h=n[c],u=e.noTargetGet?(p=i(t,c))&&p.value:t[c],!d(m?c:f+(g?".":"#")+c,e.forced)&&void 0!==u){if(typeof h==typeof u)continue;l(h,u)}(e.sham||u&&u.sham)&&r(h,"sham",!0),o(t,c,h,e)}}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var a=t(4),i=a({}.toString),r=a("".slice);e.exports=function(e){return r(i(e),8,-1)}},function(e,n,t){var a=t(28),i=t(46);(e.exports=function(e,n){return i[e]||(i[e]=void 0!==n?n:{})})("versions",[]).push({version:"3.20.0",mode:a?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(e,n,t){var a=t(2),i=t(47),r=a["__core-js_shared__"]||i("__core-js_shared__",{});e.exports=r},function(e,n,t){var a=t(2),i=Object.defineProperty;e.exports=function(e,n){try{i(a,e,{value:n,configurable:!0,writable:!0})}catch(t){a[e]=n}return n}},function(e,n,t){var a=t(2),i=t(33),r=a.Object;e.exports=function(e){return r(i(e))}},function(e,n,t){var a=t(2),i=t(22),r=a.document,o=i(r)&&i(r.createElement);e.exports=function(e){return o?r.createElement(e):{}}},function(e,n,t){var a=t(4),i=t(3),r=t(46),o=a(Function.toString);i(r.inspectSource)||(r.inspectSource=function(e){return o(e)}),e.exports=r.inspectSource},function(e,n,t){var a,i,r,o=t(132),s=t(2),l=t(4),d=t(22),c=t(24),u=t(13),h=t(46),p=t(52),f=t(53),m=s.TypeError,g=s.WeakMap;if(o||h.state){var b=h.state||(h.state=new g),v=l(b.get),y=l(b.has),x=l(b.set);a=function(e,n){if(y(b,e))throw new m("Object already initialized");return n.facade=e,x(b,e,n),n},i=function(e){return v(b,e)||{}},r=function(e){return y(b,e)}}else{var C=p("state");f[C]=!0,a=function(e,n){if(u(e,C))throw new m("Object already initialized");return n.facade=e,c(e,C,n),n},i=function(e){return u(e,C)?e[C]:{}},r=function(e){return u(e,C)}}e.exports={set:a,get:i,has:r,enforce:function(e){return r(e)?i(e):a(e,{})},getterFor:function(e){return function(n){var t;if(!d(n)||(t=i(n)).type!==e)throw m("Incompatible receiver, "+e+" required");return t}}}},function(e,n,t){var a=t(45),i=t(79),r=a("keys");e.exports=function(e){return r[e]||(r[e]=i(e))}},function(e,n){e.exports={}},function(e,n){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,n){e.exports={}},function(e,n,t){"use strict";var a,i,r=t(17),o=t(4),s=t(57),l=t(163),d=t(164),c=t(45),u=t(35),h=t(51).get,p=t(165),f=t(166),m=c("native-string-replace",String.prototype.replace),g=RegExp.prototype.exec,b=g,v=o("".charAt),y=o("".indexOf),x=o("".replace),C=o("".slice),T=(i=/b*/g,r(g,a=/a/,"a"),r(g,i,"a"),0!==a.lastIndex||0!==i.lastIndex),D=d.BROKEN_CARET,w=void 0!==/()??/.exec("")[1];(T||w||D||p||f)&&(b=function(e){var n,t,a,i,o,d,c,p=this,f=h(p),O=s(e),k=f.raw;if(k)return k.lastIndex=p.lastIndex,n=r(b,k,O),p.lastIndex=k.lastIndex,n;var S=f.groups,P=D&&p.sticky,A=r(l,p),R=p.source,I=0,_=O;if(P&&(A=x(A,"y",""),-1===y(A,"g")&&(A+="g"),_=C(O,p.lastIndex),p.lastIndex>0&&(!p.multiline||p.multiline&&"\n"!==v(O,p.lastIndex-1))&&(R="(?: "+R+")",_=" "+_,I++),t=new RegExp("^(?:"+R+")",A)),w&&(t=new RegExp("^"+R+"$(?!\\s)",A)),T&&(a=p.lastIndex),i=r(g,P?t:p,_),P?i?(i.input=C(i.input,I),i[0]=C(i[0],I),i.index=p.lastIndex,p.lastIndex+=i[0].length):p.lastIndex=0:T&&i&&(p.lastIndex=p.global?i.index+i[0].length:a),w&&i&&i.length>1&&r(m,i[0],t,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(i[o]=void 0)})),i&&S)for(i.groups=d=u(null),o=0;o<S.length;o++)d[(c=S[o])[0]]=i[c[1]];return i}),e.exports=b},function(e,n,t){var a=t(2),i=t(84),r=a.String;e.exports=function(e){if("Symbol"===i(e))throw TypeError("Cannot convert a Symbol value to a string");return r(e)}},function(e,n,t){var a=t(173),i=t(21),r=Object.prototype,o=r.hasOwnProperty,s=r.propertyIsEnumerable,l=a(function(){return arguments}())?a:function(e){return i(e)&&o.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},function(e,n,t){var a=t(18)(t(14),"Map");e.exports=a},function(e,n){e.exports=function(e){var n=typeof e;return null!=e&&("object"==n||"function"==n)}},function(e,n,t){var a=t(193),i=t(200),r=t(202),o=t(203),s=t(204);function l(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}l.prototype.clear=a,l.prototype.delete=i,l.prototype.get=r,l.prototype.has=o,l.prototype.set=s,e.exports=l},function(e,n){e.exports=function(e){var n=-1,t=Array(e.size);return e.forEach((function(e){t[++n]=e})),t}},function(e,n){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,n,t){var a=t(12),i=t(65),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,n){if(a(e))return!1;var t=typeof e;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=e&&!i(e))||(o.test(e)||!r.test(e)||null!=n&&e in Object(n))}},function(e,n,t){var a=t(26),i=t(21);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==a(e)}},function(e,n){e.exports=function(e){return e}},function(e,n){e.exports=function(e){var n=null==e?0:e.length;return n?e[n-1]:void 0}},function(e,n){function t(e,n){for(var t=0,a=e.length-1;a>=0;a--){var i=e[a];"."===i?e.splice(a,1):".."===i?(e.splice(a,1),t++):t&&(e.splice(a,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}function a(e,n){if(e.filter)return e.filter(n);for(var t=[],a=0;a<e.length;a++)n(e[a],a,e)&&t.push(e[a]);return t}n.resolve=function(){for(var e="",n=!1,i=arguments.length-1;i>=-1&&!n;i--){var r=i>=0?arguments[i]:process.cwd();if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(e=r+"/"+e,n="/"===r.charAt(0))}return(n?"/":"")+(e=t(a(e.split("/"),(function(e){return!!e})),!n).join("/"))||"."},n.normalize=function(e){var r=n.isAbsolute(e),o="/"===i(e,-1);return(e=t(a(e.split("/"),(function(e){return!!e})),!r).join("/"))||r||(e="."),e&&o&&(e+="/"),(r?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(a(e,(function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},n.relative=function(e,t){function a(e){for(var n=0;n<e.length&&""===e[n];n++);for(var t=e.length-1;t>=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var i=a(e.split("/")),r=a(t.split("/")),o=Math.min(i.length,r.length),s=o,l=0;l<o;l++)if(i[l]!==r[l]){s=l;break}var d=[];for(l=s;l<i.length;l++)d.push("..");return(d=d.concat(r.slice(s))).join("/")},n.sep="/",n.delimiter=":",n.dirname=function(e){if("string"!=typeof e&&(e+=""),0===e.length)return".";for(var n=e.charCodeAt(0),t=47===n,a=-1,i=!0,r=e.length-1;r>=1;--r)if(47===(n=e.charCodeAt(r))){if(!i){a=r;break}}else i=!1;return-1===a?t?"/":".":t&&1===a?"/":e.slice(0,a)},n.basename=function(e,n){var t=function(e){"string"!=typeof e&&(e+="");var n,t=0,a=-1,i=!0;for(n=e.length-1;n>=0;--n)if(47===e.charCodeAt(n)){if(!i){t=n+1;break}}else-1===a&&(i=!1,a=n+1);return-1===a?"":e.slice(t,a)}(e);return n&&t.substr(-1*n.length)===n&&(t=t.substr(0,t.length-n.length)),t},n.extname=function(e){"string"!=typeof e&&(e+="");for(var n=-1,t=0,a=-1,i=!0,r=0,o=e.length-1;o>=0;--o){var s=e.charCodeAt(o);if(47!==s)-1===a&&(i=!1,a=o+1),46===s?-1===n?n=o:1!==r&&(r=1):-1!==n&&(r=-1);else if(!i){t=o+1;break}}return-1===n||-1===a||0===r||1===r&&n===a-1&&n===t+1?"":e.slice(n,a)};var i="b"==="ab".substr(-1)?function(e,n,t){return e.substr(n,t)}:function(e,n,t){return n<0&&(n=e.length+n),e.substr(n,t)}},function(e,n){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,n,t){"use strict";var a=t(20),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(a.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(e=>e===this.link):"/"===this.link},isNonHttpURI(){return Object(a.g)(this.link)||Object(a.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(a.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(a.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=t(6),o=Object(r.a)(i,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return e.isInternal?t("RouterLink",{staticClass:"nav-link",attrs:{to:e.link,exact:e.exact},nativeOn:{focusout:function(n){return e.focusoutAction.apply(null,arguments)}}},[e._v("\n  "+e._s(e.item.text)+"\n")]):t("a",{staticClass:"nav-link external",attrs:{href:e.link,target:e.target,rel:e.rel},on:{focusout:e.focusoutAction}},[e._v("\n  "+e._s(e.item.text)+"\n  "),e.isBlankTarget?t("OutboundLink"):e._e()],1)}),[],!1,null,null,null);n.a=o.exports},function(e,n,t){var a=t(16),i=t(17),r=t(125),o=t(43),s=t(27),l=t(72),d=t(13),c=t(80),u=Object.getOwnPropertyDescriptor;n.f=a?u:function(e,n){if(e=s(e),n=l(n),c)try{return u(e,n)}catch(e){}if(d(e,n))return o(!i(r.f,e,n),e[n])}},function(e,n,t){var a=t(127),i=t(73);e.exports=function(e){var n=a(e,"string");return i(n)?n:n+""}},function(e,n,t){var a=t(2),i=t(23),r=t(3),o=t(128),s=t(74),l=a.Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var n=i("Symbol");return r(n)&&o(n.prototype,l(e))}},function(e,n,t){var a=t(75);e.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(e,n,t){var a=t(129),i=t(7);e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&a&&a<41}))},function(e,n,t){var a=t(77);e.exports=function(e,n){var t=e[n];return null==t?void 0:a(t)}},function(e,n,t){var a=t(2),i=t(3),r=t(78),o=a.TypeError;e.exports=function(e){if(i(e))return e;throw o(r(e)+" is not a function")}},function(e,n,t){var a=t(2).String;e.exports=function(e){try{return a(e)}catch(e){return"Object"}}},function(e,n,t){var a=t(4),i=0,r=Math.random(),o=a(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++i+r,36)}},function(e,n,t){var a=t(16),i=t(7),r=t(49);e.exports=!a&&!i((function(){return 7!=Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a}))},function(e,n,t){var a=t(16),i=t(13),r=Function.prototype,o=a&&Object.getOwnPropertyDescriptor,s=i(r,"name"),l=s&&"something"===function(){}.name,d=s&&(!a||a&&o(r,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:d}},function(e,n,t){var a=t(4),i=t(13),r=t(27),o=t(136).indexOf,s=t(53),l=a([].push);e.exports=function(e,n){var t,a=r(e),d=0,c=[];for(t in a)!i(s,t)&&i(a,t)&&l(c,t);for(;n.length>d;)i(a,t=n[d++])&&(~o(c,t)||l(c,t));return c}},function(e,n,t){var a=t(34),i=Math.min;e.exports=function(e){return e>0?i(a(e),9007199254740991):0}},function(e,n,t){var a=t(2),i=t(145),r=t(3),o=t(44),s=t(10)("toStringTag"),l=a.Object,d="Arguments"==o(function(){return arguments}());e.exports=i?o:function(e){var n,t,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(t=function(e,n){try{return e[n]}catch(e){}}(n=l(e),s))?t:d?o(n):"Object"==(a=o(n))&&r(n.callee)?"Arguments":a}},function(e,n,t){"use strict";var a,i,r,o=t(7),s=t(3),l=t(35),d=t(86),c=t(29),u=t(10),h=t(28),p=u("iterator"),f=!1;[].keys&&("next"in(r=[].keys())?(i=d(d(r)))!==Object.prototype&&(a=i):f=!0),null==a||o((function(){var e={};return a[p].call(e)!==e}))?a={}:h&&(a=l(a)),s(a[p])||c(a,p,(function(){return this})),e.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:f}},function(e,n,t){var a=t(2),i=t(13),r=t(3),o=t(48),s=t(52),l=t(157),d=s("IE_PROTO"),c=a.Object,u=c.prototype;e.exports=l?c.getPrototypeOf:function(e){var n=o(e);if(i(n,d))return n[d];var t=n.constructor;return r(t)&&n instanceof t?t.prototype:n instanceof c?u:null}},function(e,n,t){var a=t(25).f,i=t(13),r=t(10)("toStringTag");e.exports=function(e,n,t){e&&!t&&(e=e.prototype),e&&!i(e,r)&&a(e,r,{configurable:!0,value:n})}},function(e,n){e.exports=function(e,n){for(var t=-1,a=n.length,i=e.length;++t<a;)e[i+t]=n[t];return e}},function(e,n){var t="object"==typeof global&&global&&global.Object===Object&&global;e.exports=t},function(e,n,t){var a=t(36),i=t(184),r=t(185),o=t(186),s=t(187),l=t(188);function d(e){var n=this.__data__=new a(e);this.size=n.size}d.prototype.clear=i,d.prototype.delete=r,d.prototype.get=o,d.prototype.has=s,d.prototype.set=l,e.exports=d},function(e,n){e.exports=function(e,n){return e===n||e!=e&&n!=n}},function(e,n,t){var a=t(26),i=t(60);e.exports=function(e){if(!i(e))return!1;var n=a(e);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}},function(e,n){var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,n,t){var a=t(205),i=t(21);e.exports=function e(n,t,r,o,s){return n===t||(null==n||null==t||!i(n)&&!i(t)?n!=n&&t!=t:a(n,t,r,o,e,s))}},function(e,n,t){var a=t(96),i=t(208),r=t(97);e.exports=function(e,n,t,o,s,l){var d=1&t,c=e.length,u=n.length;if(c!=u&&!(d&&u>c))return!1;var h=l.get(e),p=l.get(n);if(h&&p)return h==n&&p==e;var f=-1,m=!0,g=2&t?new a:void 0;for(l.set(e,n),l.set(n,e);++f<c;){var b=e[f],v=n[f];if(o)var y=d?o(v,b,f,n,e,l):o(b,v,f,e,n,l);if(void 0!==y){if(y)continue;m=!1;break}if(g){if(!i(n,(function(e,n){if(!r(g,n)&&(b===e||s(b,e,t,o,l)))return g.push(n)}))){m=!1;break}}else if(b!==v&&!s(b,v,t,o,l)){m=!1;break}}return l.delete(e),l.delete(n),m}},function(e,n,t){var a=t(61),i=t(206),r=t(207);function o(e){var n=-1,t=null==e?0:e.length;for(this.__data__=new a;++n<t;)this.add(e[n])}o.prototype.add=o.prototype.push=i,o.prototype.has=r,e.exports=o},function(e,n){e.exports=function(e,n){return e.has(n)}},function(e,n,t){var a=t(218),i=t(224),r=t(102);e.exports=function(e){return r(e)?a(e):i(e)}},function(e,n,t){(function(e){var a=t(14),i=t(220),r=n&&!n.nodeType&&n,o=r&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===r?a.Buffer:void 0,l=(s?s.isBuffer:void 0)||i;e.exports=l}).call(this,t(69)(e))},function(e,n){var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var a=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==a||"symbol"!=a&&t.test(e))&&e>-1&&e%1==0&&e<n}},function(e,n,t){var a=t(221),i=t(222),r=t(223),o=r&&r.isTypedArray,s=o?i(o):a;e.exports=s},function(e,n,t){var a=t(92),i=t(63);e.exports=function(e){return null!=e&&i(e.length)&&!a(e)}},function(e,n,t){var a=t(18)(t(14),"Set");e.exports=a},function(e,n,t){var a=t(60);e.exports=function(e){return e==e&&!a(e)}},function(e,n){e.exports=function(e,n){return function(t){return null!=t&&(t[e]===n&&(void 0!==n||e in Object(t)))}}},function(e,n,t){var a=t(107),i=t(40);e.exports=function(e,n){for(var t=0,r=(n=a(n,e)).length;null!=e&&t<r;)e=e[i(n[t++])];return t&&t==r?e:void 0}},function(e,n,t){var a=t(12),i=t(64),r=t(234),o=t(237);e.exports=function(e,n){return a(e)?e:i(e,n)?[e]:r(o(e))}},function(e,n,t){},function(e,n,t){},function(e,n,t){},function(e,n,t){},function(e,n,t){},function(e,n,t){},function(e,n,t){"use strict";var a=t(70),i=t(115),r=t(67),o=t.n(r),s={name:"DropdownLink",components:{NavLink:a.a,DropdownTransition:i.a},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(e){this.open=e},isLastItemOfArray:(e,n)=>o()(n)===e,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(t(268),t(6)),d=Object(l.a)(s,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{staticClass:"dropdown-wrapper",class:{open:e.open}},[t("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":e.dropdownAriaLabel},on:{click:e.handleDropdown}},[t("span",{staticClass:"title"},[e._v(e._s(e.item.text))]),e._v(" "),t("span",{staticClass:"arrow down"})]),e._v(" "),t("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":e.dropdownAriaLabel},on:{click:function(n){return e.setOpen(!e.open)}}},[t("span",{staticClass:"title"},[e._v(e._s(e.item.text))]),e._v(" "),t("span",{staticClass:"arrow",class:e.open?"down":"right"})]),e._v(" "),t("DropdownTransition",[t("ul",{directives:[{name:"show",rawName:"v-show",value:e.open,expression:"open"}],staticClass:"nav-dropdown"},e._l(e.item.items,(function(n,a){return t("li",{key:n.link||a,staticClass:"dropdown-item"},["links"===n.type?t("h4",[e._v("\n          "+e._s(n.text)+"\n        ")]):e._e(),e._v(" "),"links"===n.type?t("ul",{staticClass:"dropdown-subitem-wrapper"},e._l(n.items,(function(a){return t("li",{key:a.link,staticClass:"dropdown-subitem"},[t("NavLink",{attrs:{item:a},on:{focusout:function(t){e.isLastItemOfArray(a,n.items)&&e.isLastItemOfArray(n,e.item.items)&&e.setOpen(!1)}}})],1)})),0):t("NavLink",{attrs:{item:n},on:{focusout:function(t){e.isLastItemOfArray(n,e.item.items)&&e.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);n.a=d.exports},function(e,n,t){"use strict";var a={name:"DropdownTransition",methods:{setHeight(e){e.style.height=e.scrollHeight+"px"},unsetHeight(e){e.style.height=""}}},i=(t(267),t(6)),r=Object(i.a)(a,(function(){var e=this.$createElement;return(this._self._c||e)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);n.a=r.exports},function(e,n,t){var a=t(171),i=t(176),r=t(246),o=t(254),s=t(263),l=t(67),d=r((function(e){var n=l(e);return s(n)&&(n=void 0),o(a(e,1,s,!0),i(n,2))}));e.exports=d},function(e,n,t){"use strict";
/*!
 * escape-html
 * Copyright(c) 2012-2013 TJ Holowaychuk
 * Copyright(c) 2015 Andreas Lubbe
 * Copyright(c) 2015 Tiancheng "Timothy" Gu
 * MIT Licensed
 */var a=/["'&<>]/;e.exports=function(e){var n,t=""+e,i=a.exec(t);if(!i)return t;var r="",o=0,s=0;for(o=i.index;o<t.length;o++){switch(t.charCodeAt(o)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}s!==o&&(r+=t.substring(s,o)),s=o+1,r+=n}return s!==o?r+t.substring(s,o):r}},function(e,n){var t=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,r=/^0o[0-7]+$/i,o=parseInt,s="object"==typeof global&&global&&global.Object===Object&&global,l="object"==typeof self&&self&&self.Object===Object&&self,d=s||l||Function("return this")(),c=Object.prototype.toString,u=Math.max,h=Math.min,p=function(){return d.Date.now()};function f(e){var n=typeof e;return!!e&&("object"==n||"function"==n)}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]"==c.call(e)}(e))return NaN;if(f(e)){var n="function"==typeof e.valueOf?e.valueOf():e;e=f(n)?n+"":n}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(t,"");var s=i.test(e);return s||r.test(e)?o(e.slice(2),s?2:8):a.test(e)?NaN:+e}e.exports=function(e,n,t){var a,i,r,o,s,l,d=0,c=!1,g=!1,b=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function v(n){var t=a,r=i;return a=i=void 0,d=n,o=e.apply(r,t)}function y(e){return d=e,s=setTimeout(C,n),c?v(e):o}function x(e){var t=e-l;return void 0===l||t>=n||t<0||g&&e-d>=r}function C(){var e=p();if(x(e))return T(e);s=setTimeout(C,function(e){var t=n-(e-l);return g?h(t,r-(e-d)):t}(e))}function T(e){return s=void 0,b&&a?v(e):(a=i=void 0,o)}function D(){var e=p(),t=x(e);if(a=arguments,i=this,l=e,t){if(void 0===s)return y(l);if(g)return s=setTimeout(C,n),v(l)}return void 0===s&&(s=setTimeout(C,n)),o}return n=m(n)||0,f(t)&&(c=!!t.leading,r=(g="maxWait"in t)?u(m(t.maxWait)||0,n):r,b="trailing"in t?!!t.trailing:b),D.cancel=function(){void 0!==s&&clearTimeout(s),d=0,a=l=i=s=void 0},D.flush=function(){return void 0===s?o:T(p())},D}},function(e,n){const t=/^(?<selector>.+?)(::(?<position>after|before))?$/;e.exports={injectElement:function(e,n,a){const i=t.exec(a.trim());if(!i)return void console.error("Invalid query selector: "+a);const{selector:r,position:o}=i.groups,s=e.querySelector(r.trim());if(s)if(o){const e="before"===o?s:s.nextSibling;e?s.parentNode.insertBefore(n,e):s.parentNode.appendChild(n)}else s.appendChild(n);else console.error(`Target '${s}' does not match any element`)}}},function(e,n){e.exports={fetchNpmVersions:async function(e,n){const t="https://data.jsdelivr.com/v1/package/npm/"+n,a=await(await e(t)).json(),i=Object.entries(a.tags||[]);return a.versions.map(e=>({tag:(i.find(n=>n[1]===e)||[null])[0],name:e}))}}},function(e,n,t){var a;"undefined"!=typeof self&&self,a=function(){return function(e){var n={};function t(a){if(n[a])return n[a].exports;var i=n[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=e,t.c=n,t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=7)}([function(e,n,t){e.exports=!t(6)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){e.exports=function(e,n,t,a,i){var r,o=e=e||{},s=typeof e.default;"object"!==s&&"function"!==s||(r=e,o=e.default);var l,d="function"==typeof o?o.options:o;if(n&&(d.render=n.render,d.staticRenderFns=n.staticRenderFns),a&&(d._scopeId=a),i?(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__),t&&t.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},d._ssrRegister=l):t&&(l=t),l){var c=d.functional,u=c?d.render:d.beforeCreate;c?d.render=function(e,n){return l.call(n),u(e,n)}:d.beforeCreate=u?[].concat(u,l):[l]}return{esModule:r,exports:o,options:d}}},function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){var t=e.exports={version:"2.5.7"};"number"==typeof __e&&(__e=t)},function(e,n,t){var a=t(23),i=t(24),r=t(26),o=Object.defineProperty;n.f=t(0)?Object.defineProperty:function(e,n,t){if(a(e),n=r(n,!0),a(t),i)try{return o(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,t){var a,i,r;i=[n,t(8),t(11)],void 0===(r="function"==typeof(a=function(e,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Tabs=e.Tab=void 0;var a=r(n),i=r(t);function r(e){return e&&e.__esModule?e:{default:e}}e.default={install:function(e){e.component("tab",a.default),e.component("tabs",i.default)}},e.Tab=a.default,e.Tabs=i.default})?a.apply(n,i):a)||(e.exports=r)},function(e,n,t){var a=t(2)(t(9),t(10),null,null,null);e.exports=a.exports},function(e,n,t){var a,i,r;i=[n],void 0===(r="function"==typeof(a=function(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={props:{id:{default:null},name:{required:!0},prefix:{default:""},suffix:{default:""},isDisabled:{default:!1}},data:function(){return{isActive:!1,isVisible:!0}},computed:{header:function(){return this.prefix+this.name+this.suffix},computedId:function(){return this.id?this.id:this.name.toLowerCase().replace(/ /g,"-")},hash:function(){return this.isDisabled?"#":"#"+this.computedId}}}})?a.apply(n,i):a)||(e.exports=r)},function(e,n){e.exports={render:function(){var e=this.$createElement;return(this._self._c||e)("section",{directives:[{name:"show",rawName:"v-show",value:this.isActive,expression:"isActive"}],staticClass:"tabs-component-panel",attrs:{"aria-hidden":!this.isActive,id:this.computedId,role:"tabpanel"}},[this._t("default")],2)},staticRenderFns:[]}},function(e,n,t){var a=t(2)(t(12),t(29),null,null,null);e.exports=a.exports},function(e,n,t){var a,i,r;i=[n,t(13)],void 0===(r="function"==typeof(a=function(e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t,a=(t=n)&&t.__esModule?t:{default:t};e.default={props:{cacheLifetime:{default:5},options:{type:Object,required:!1,default:function(){return{useUrlFragment:!0,defaultTabHash:null}}}},data:function(){return{tabs:[],activeTabHash:"",activeTabIndex:0,lastActiveTabHash:""}},computed:{storageKey:function(){return"vue-tabs-component.cache."+window.location.host+window.location.pathname}},created:function(){this.tabs=this.$children},mounted:function(){var e=this;if(window.addEventListener("hashchange",(function(){return e.selectTab(window.location.hash)})),this.findTab(window.location.hash))this.selectTab(window.location.hash);else{var n=a.default.get(this.storageKey);this.findTab(n)?this.selectTab(n):null!==this.options.defaultTabHash&&this.findTab("#"+this.options.defaultTabHash)?this.selectTab("#"+this.options.defaultTabHash):this.tabs.length&&this.selectTab(this.tabs[0].hash)}},methods:{findTab:function(e){return this.tabs.find((function(n){return n.hash===e}))},selectTab:function(e,n){n&&!this.options.useUrlFragment&&n.preventDefault();var t=this.findTab(e);t&&(t.isDisabled?n.preventDefault():this.lastActiveTabHash!==t.hash?(this.tabs.forEach((function(e){e.isActive=e.hash===t.hash})),this.$emit("changed",{tab:t}),this.activeTabHash=t.hash,this.activeTabIndex=this.getTabIndex(e),this.lastActiveTabHash=this.activeTabHash=t.hash,a.default.set(this.storageKey,t.hash,this.cacheLifetime)):this.$emit("clicked",{tab:t}))},setTabVisible:function(e,n){var t=this.findTab(e);t&&(t.isVisible=n,t.isActive&&(t.isActive=n,this.tabs.every((function(e,n,t){return!e.isVisible||(e.isActive=!0,!1)}))))},getTabIndex:function(e){var n=this.findTab(e);return this.tabs.indexOf(n)},getTabHash:function(e){var n=this,t=this.tabs.find((function(t){return n.tabs.indexOf(t)===e}));if(t)return t.hash},getActiveTab:function(){return this.findTab(this.activeTabHash)},getActiveTabIndex:function(){return this.getTabIndex(this.activeTabHash)}}}})?a.apply(n,i):a)||(e.exports=r)},function(e,n,t){var a,i,r;i=[n,t(14),t(15)],void 0===(r="function"==typeof(a=function(e,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a=r(n),i=r(t);function r(e){return e&&e.__esModule?e:{default:e}}var o=function(){function e(){(0,a.default)(this,e)}return(0,i.default)(e,[{key:"get",value:function(e){var n=JSON.parse(localStorage.getItem(e));return n?new Date(n.expires)<new Date?(localStorage.removeItem(e),null):n.value:null}},{key:"set",value:function(e,n,t){var a=(new Date).getTime(),i=new Date(a+6e4*t);localStorage.setItem(e,JSON.stringify({value:n,expires:i}))}}]),e}();e.default=new o})?a.apply(n,i):a)||(e.exports=r)},function(e,n,t){"use strict";n.__esModule=!0,n.default=function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}},function(e,n,t){"use strict";n.__esModule=!0;var a,i=t(16),r=(a=i)&&a.__esModule?a:{default:a};n.default=function(){function e(e,n){for(var t=0;t<n.length;t++){var a=n[t];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),(0,r.default)(e,a.key,a)}}return function(n,t,a){return t&&e(n.prototype,t),a&&e(n,a),n}}()},function(e,n,t){e.exports={default:t(17),__esModule:!0}},function(e,n,t){t(18);var a=t(4).Object;e.exports=function(e,n,t){return a.defineProperty(e,n,t)}},function(e,n,t){var a=t(19);a(a.S+a.F*!t(0),"Object",{defineProperty:t(5).f})},function(e,n,t){var a=t(3),i=t(4),r=t(20),o=t(22),s=t(28),l=function(e,n,t){var d,c,u,h=e&l.F,p=e&l.G,f=e&l.S,m=e&l.P,g=e&l.B,b=e&l.W,v=p?i:i[n]||(i[n]={}),y=v.prototype,x=p?a:f?a[n]:(a[n]||{}).prototype;for(d in p&&(t=n),t)(c=!h&&x&&void 0!==x[d])&&s(v,d)||(u=c?x[d]:t[d],v[d]=p&&"function"!=typeof x[d]?t[d]:g&&c?r(u,a):b&&x[d]==u?function(e){var n=function(n,t,a){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,t)}return new e(n,t,a)}return e.apply(this,arguments)};return n.prototype=e.prototype,n}(u):m&&"function"==typeof u?r(Function.call,u):u,m&&((v.virtual||(v.virtual={}))[d]=u,e&l.R&&y&&!y[d]&&o(y,d,u)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},function(e,n,t){var a=t(21);e.exports=function(e,n,t){if(a(e),void 0===n)return e;switch(t){case 1:return function(t){return e.call(n,t)};case 2:return function(t,a){return e.call(n,t,a)};case 3:return function(t,a,i){return e.call(n,t,a,i)}}return function(){return e.apply(n,arguments)}}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var a=t(5),i=t(27);e.exports=t(0)?function(e,n,t){return a.f(e,n,i(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n,t){var a=t(1);e.exports=function(e){if(!a(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(0)&&!t(6)((function(){return 7!=Object.defineProperty(t(25)("div"),"a",{get:function(){return 7}}).a}))},function(e,n,t){var a=t(1),i=t(3).document,r=a(i)&&a(i.createElement);e.exports=function(e){return r?i.createElement(e):{}}},function(e,n,t){var a=t(1);e.exports=function(e,n){if(!a(e))return e;var t,i;if(n&&"function"==typeof(t=e.toString)&&!a(i=t.call(e)))return i;if("function"==typeof(t=e.valueOf)&&!a(i=t.call(e)))return i;if(!n&&"function"==typeof(t=e.toString)&&!a(i=t.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports={render:function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{staticClass:"tabs-component"},[t("ul",{staticClass:"tabs-component-tabs",attrs:{role:"tablist"}},e._l(e.tabs,(function(n,a){return t("li",{directives:[{name:"show",rawName:"v-show",value:n.isVisible,expression:"tab.isVisible"}],key:a,staticClass:"tabs-component-tab",class:{"is-active":n.isActive,"is-disabled":n.isDisabled},attrs:{role:"presentation"}},[t("a",{staticClass:"tabs-component-tab-a",attrs:{"aria-controls":n.hash,"aria-selected":n.isActive,href:n.hash,role:"tab"},domProps:{innerHTML:e._s(n.header)},on:{click:function(t){e.selectTab(n.hash,t)}}})])}))),e._v(" "),t("div",{staticClass:"tabs-component-panels"},[e._t("default")],2)])},staticRenderFns:[]}}])},e.exports=a()},function(e,n,t){var a=t(106);e.exports=function(e,n,t){var i=null==e?void 0:a(e,n);return void 0===i?t:i}},function(e,n,t){e.exports=t(275)},function(e,n,t){"use strict";var a=t(42),i=t(28),r=t(141),o=t(7),s=t(23),l=t(3),d=t(142),c=t(146),u=t(29);if(a({target:"Promise",proto:!0,real:!0,forced:!!r&&o((function(){r.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var n=d(this,s("Promise")),t=l(e);return this.then(t?function(t){return c(n,e()).then((function(){return t}))}:e,t?function(t){return c(n,e()).then((function(){throw t}))}:e)}}),!i&&l(r)){var h=s("Promise").prototype.finally;r.prototype.finally!==h&&u(r.prototype,"finally",h,{unsafe:!0})}},function(e,n,t){"use strict";var a={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,r=i&&!a.call({1:2},1);n.f=r?function(e){var n=i(this,e);return!!n&&n.enumerable}:a},function(e,n,t){var a=t(2),i=t(4),r=t(7),o=t(44),s=a.Object,l=i("".split);e.exports=r((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?l(e,""):s(e)}:s},function(e,n,t){var a=t(2),i=t(17),r=t(22),o=t(73),s=t(76),l=t(131),d=t(10),c=a.TypeError,u=d("toPrimitive");e.exports=function(e,n){if(!r(e)||o(e))return e;var t,a=s(e,u);if(a){if(void 0===n&&(n="default"),t=i(a,e,n),!r(t)||o(t))return t;throw c("Can't convert object to primitive value")}return void 0===n&&(n="number"),l(e,n)}},function(e,n,t){var a=t(4);e.exports=a({}.isPrototypeOf)},function(e,n,t){var a,i,r=t(2),o=t(130),s=r.process,l=r.Deno,d=s&&s.versions||l&&l.version,c=d&&d.v8;c&&(i=(a=c.split("."))[0]>0&&a[0]<4?1:+(a[0]+a[1])),!i&&o&&(!(a=o.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=o.match(/Chrome\/(\d+)/))&&(i=+a[1]),e.exports=i},function(e,n,t){var a=t(23);e.exports=a("navigator","userAgent")||""},function(e,n,t){var a=t(2),i=t(17),r=t(3),o=t(22),s=a.TypeError;e.exports=function(e,n){var t,a;if("string"===n&&r(t=e.toString)&&!o(a=i(t,e)))return a;if(r(t=e.valueOf)&&!o(a=i(t,e)))return a;if("string"!==n&&r(t=e.toString)&&!o(a=i(t,e)))return a;throw s("Can't convert object to primitive value")}},function(e,n,t){var a=t(2),i=t(3),r=t(50),o=a.WeakMap;e.exports=i(o)&&/native code/.test(r(o))},function(e,n,t){var a=t(13),i=t(134),r=t(71),o=t(25);e.exports=function(e,n,t){for(var s=i(n),l=o.f,d=r.f,c=0;c<s.length;c++){var u=s[c];a(e,u)||t&&a(t,u)||l(e,u,d(n,u))}}},function(e,n,t){var a=t(23),i=t(4),r=t(135),o=t(139),s=t(11),l=i([].concat);e.exports=a("Reflect","ownKeys")||function(e){var n=r.f(s(e)),t=o.f;return t?l(n,t(e)):n}},function(e,n,t){var a=t(82),i=t(54).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return a(e,i)}},function(e,n,t){var a=t(27),i=t(137),r=t(138),o=function(e){return function(n,t,o){var s,l=a(n),d=r(l),c=i(o,d);if(e&&t!=t){for(;d>c;)if((s=l[c++])!=s)return!0}else for(;d>c;c++)if((e||c in l)&&l[c]===t)return e||c||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},function(e,n,t){var a=t(34),i=Math.max,r=Math.min;e.exports=function(e,n){var t=a(e);return t<0?i(t+n,0):r(t,n)}},function(e,n,t){var a=t(83);e.exports=function(e){return a(e.length)}},function(e,n){n.f=Object.getOwnPropertySymbols},function(e,n,t){var a=t(7),i=t(3),r=/#|\.prototype\./,o=function(e,n){var t=l[s(e)];return t==c||t!=d&&(i(n)?a(n):!!n)},s=o.normalize=function(e){return String(e).replace(r,".").toLowerCase()},l=o.data={},d=o.NATIVE="N",c=o.POLYFILL="P";e.exports=o},function(e,n,t){var a=t(2);e.exports=a.Promise},function(e,n,t){var a=t(11),i=t(143),r=t(10)("species");e.exports=function(e,n){var t,o=a(e).constructor;return void 0===o||null==(t=a(o)[r])?n:i(t)}},function(e,n,t){var a=t(2),i=t(144),r=t(78),o=a.TypeError;e.exports=function(e){if(i(e))return e;throw o(r(e)+" is not a constructor")}},function(e,n,t){var a=t(4),i=t(7),r=t(3),o=t(84),s=t(23),l=t(50),d=function(){},c=[],u=s("Reflect","construct"),h=/^\s*(?:class|function)\b/,p=a(h.exec),f=!h.exec(d),m=function(e){if(!r(e))return!1;try{return u(d,c,e),!0}catch(e){return!1}},g=function(e){if(!r(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return f||!!p(h,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!u||i((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},function(e,n,t){var a={};a[t(10)("toStringTag")]="z",e.exports="[object z]"===String(a)},function(e,n,t){var a=t(11),i=t(22),r=t(147);e.exports=function(e,n){if(a(e),i(n)&&n.constructor===e)return n;var t=r.f(e);return(0,t.resolve)(n),t.promise}},function(e,n,t){"use strict";var a=t(77),i=function(e){var n,t;this.promise=new e((function(e,a){if(void 0!==n||void 0!==t)throw TypeError("Bad Promise constructor");n=e,t=a})),this.resolve=a(n),this.reject=a(t)};e.exports.f=function(e){return new i(e)}},function(e,n){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(e,n,t){var a=t(49)("span").classList,i=a&&a.constructor&&a.constructor.prototype;e.exports=i===Object.prototype?void 0:i},function(e,n,t){"use strict";var a=t(27),i=t(151),r=t(55),o=t(51),s=t(25).f,l=t(155),d=t(28),c=t(16),u=o.set,h=o.getterFor("Array Iterator");e.exports=l(Array,"Array",(function(e,n){u(this,{type:"Array Iterator",target:a(e),index:0,kind:n})}),(function(){var e=h(this),n=e.target,t=e.kind,a=e.index++;return!n||a>=n.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==t?{value:a,done:!1}:"values"==t?{value:n[a],done:!1}:{value:[a,n[a]],done:!1}}),"values");var p=r.Arguments=r.Array;if(i("keys"),i("values"),i("entries"),!d&&c&&"values"!==p.name)try{s(p,"name",{value:"values"})}catch(e){}},function(e,n,t){var a=t(10),i=t(35),r=t(25),o=a("unscopables"),s=Array.prototype;null==s[o]&&r.f(s,o,{configurable:!0,value:i(null)}),e.exports=function(e){s[o][e]=!0}},function(e,n,t){var a=t(16),i=t(25),r=t(11),o=t(27),s=t(153);e.exports=a?Object.defineProperties:function(e,n){r(e);for(var t,a=o(n),l=s(n),d=l.length,c=0;d>c;)i.f(e,t=l[c++],a[t]);return e}},function(e,n,t){var a=t(82),i=t(54);e.exports=Object.keys||function(e){return a(e,i)}},function(e,n,t){var a=t(23);e.exports=a("document","documentElement")},function(e,n,t){"use strict";var a=t(42),i=t(17),r=t(28),o=t(81),s=t(3),l=t(156),d=t(86),c=t(158),u=t(87),h=t(24),p=t(29),f=t(10),m=t(55),g=t(85),b=o.PROPER,v=o.CONFIGURABLE,y=g.IteratorPrototype,x=g.BUGGY_SAFARI_ITERATORS,C=f("iterator"),T=function(){return this};e.exports=function(e,n,t,o,f,g,D){l(t,n,o);var w,O,k,S=function(e){if(e===f&&_)return _;if(!x&&e in R)return R[e];switch(e){case"keys":case"values":case"entries":return function(){return new t(this,e)}}return function(){return new t(this)}},P=n+" Iterator",A=!1,R=e.prototype,I=R[C]||R["@@iterator"]||f&&R[f],_=!x&&I||S(f),L="Array"==n&&R.entries||I;if(L&&(w=d(L.call(new e)))!==Object.prototype&&w.next&&(r||d(w)===y||(c?c(w,y):s(w[C])||p(w,C,T)),u(w,P,!0,!0),r&&(m[P]=T)),b&&"values"==f&&I&&"values"!==I.name&&(!r&&v?h(R,"name","values"):(A=!0,_=function(){return i(I,this)})),f)if(O={values:S("values"),keys:g?_:S("keys"),entries:S("entries")},D)for(k in O)(x||A||!(k in R))&&p(R,k,O[k]);else a({target:n,proto:!0,forced:x||A},O);return r&&!D||R[C]===_||p(R,C,_,{name:f}),m[n]=_,O}},function(e,n,t){"use strict";var a=t(85).IteratorPrototype,i=t(35),r=t(43),o=t(87),s=t(55),l=function(){return this};e.exports=function(e,n,t,d){var c=n+" Iterator";return e.prototype=i(a,{next:r(+!d,t)}),o(e,c,!1,!0),s[c]=l,e}},function(e,n,t){var a=t(7);e.exports=!a((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},function(e,n,t){var a=t(4),i=t(11),r=t(159);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,n=!1,t={};try{(e=a(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(t,[]),n=t instanceof Array}catch(e){}return function(t,a){return i(t),r(a),n?e(t,a):t.__proto__=a,t}}():void 0)},function(e,n,t){var a=t(2),i=t(3),r=a.String,o=a.TypeError;e.exports=function(e){if("object"==typeof e||i(e))return e;throw o("Can't set "+r(e)+" as a prototype")}},function(e,n){var t=Function.prototype,a=t.apply,i=t.bind,r=t.call;e.exports="object"==typeof Reflect&&Reflect.apply||(i?r.bind(a):function(){return r.apply(a,arguments)})},function(e,n,t){"use strict";t(162);var a=t(4),i=t(29),r=t(56),o=t(7),s=t(10),l=t(24),d=s("species"),c=RegExp.prototype;e.exports=function(e,n,t,u){var h=s(e),p=!o((function(){var n={};return n[h]=function(){return 7},7!=""[e](n)})),f=p&&!o((function(){var n=!1,t=/a/;return"split"===e&&((t={}).constructor={},t.constructor[d]=function(){return t},t.flags="",t[h]=/./[h]),t.exec=function(){return n=!0,null},t[h](""),!n}));if(!p||!f||t){var m=a(/./[h]),g=n(h,""[e],(function(e,n,t,i,o){var s=a(e),l=n.exec;return l===r||l===c.exec?p&&!o?{done:!0,value:m(n,t,i)}:{done:!0,value:s(t,n,i)}:{done:!1}}));i(String.prototype,e,g[0]),i(c,h,g[1])}u&&l(c[h],"sham",!0)}},function(e,n,t){"use strict";var a=t(42),i=t(56);a({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},function(e,n,t){"use strict";var a=t(11);e.exports=function(){var e=a(this),n="";return e.global&&(n+="g"),e.ignoreCase&&(n+="i"),e.multiline&&(n+="m"),e.dotAll&&(n+="s"),e.unicode&&(n+="u"),e.sticky&&(n+="y"),n}},function(e,n,t){var a=t(7),i=t(2).RegExp,r=a((function(){var e=i("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),o=r||a((function(){return!i("a","y").sticky})),s=r||a((function(){var e=i("^r","gy");return e.lastIndex=2,null!=e.exec("str")}));e.exports={BROKEN_CARET:s,MISSED_STICKY:o,UNSUPPORTED_Y:r}},function(e,n,t){var a=t(7),i=t(2).RegExp;e.exports=a((function(){var e=i(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},function(e,n,t){var a=t(7),i=t(2).RegExp;e.exports=a((function(){var e=i("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")}))},function(e,n,t){"use strict";var a=t(168).charAt;e.exports=function(e,n,t){return n+(t?a(e,n).length:1)}},function(e,n,t){var a=t(4),i=t(34),r=t(57),o=t(33),s=a("".charAt),l=a("".charCodeAt),d=a("".slice),c=function(e){return function(n,t){var a,c,u=r(o(n)),h=i(t),p=u.length;return h<0||h>=p?e?"":void 0:(a=l(u,h))<55296||a>56319||h+1===p||(c=l(u,h+1))<56320||c>57343?e?s(u,h):a:e?d(u,h,h+2):c-56320+(a-55296<<10)+65536}};e.exports={codeAt:c(!1),charAt:c(!0)}},function(e,n,t){var a=t(4),i=t(48),r=Math.floor,o=a("".charAt),s=a("".replace),l=a("".slice),d=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,c=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,n,t,a,u,h){var p=t+e.length,f=a.length,m=c;return void 0!==u&&(u=i(u),m=d),s(h,m,(function(i,s){var d;switch(o(s,0)){case"$":return"$";case"&":return e;case"`":return l(n,0,t);case"'":return l(n,p);case"<":d=u[l(s,1,-1)];break;default:var c=+s;if(0===c)return i;if(c>f){var h=r(c/10);return 0===h?i:h<=f?void 0===a[h-1]?o(s,1):a[h-1]+o(s,1):i}d=a[c-1]}return void 0===d?"":d}))}},function(e,n,t){var a=t(2),i=t(17),r=t(11),o=t(3),s=t(44),l=t(56),d=a.TypeError;e.exports=function(e,n){var t=e.exec;if(o(t)){var a=i(t,e,n);return null!==a&&r(a),a}if("RegExp"===s(e))return i(l,e,n);throw d("RegExp#exec called on incompatible receiver")}},function(e,n,t){var a=t(88),i=t(172);e.exports=function e(n,t,r,o,s){var l=-1,d=n.length;for(r||(r=i),s||(s=[]);++l<d;){var c=n[l];t>0&&r(c)?t>1?e(c,t-1,r,o,s):a(s,c):o||(s[s.length]=c)}return s}},function(e,n,t){var a=t(30),i=t(58),r=t(12),o=a?a.isConcatSpreadable:void 0;e.exports=function(e){return r(e)||i(e)||!!(o&&e&&e[o])}},function(e,n,t){var a=t(26),i=t(21);e.exports=function(e){return i(e)&&"[object Arguments]"==a(e)}},function(e,n,t){var a=t(30),i=Object.prototype,r=i.hasOwnProperty,o=i.toString,s=a?a.toStringTag:void 0;e.exports=function(e){var n=r.call(e,s),t=e[s];try{e[s]=void 0;var a=!0}catch(e){}var i=o.call(e);return a&&(n?e[s]=t:delete e[s]),i}},function(e,n){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},function(e,n,t){var a=t(177),i=t(233),r=t(66),o=t(12),s=t(243);e.exports=function(e){return"function"==typeof e?e:null==e?r:"object"==typeof e?o(e)?i(e[0],e[1]):a(e):s(e)}},function(e,n,t){var a=t(178),i=t(232),r=t(105);e.exports=function(e){var n=i(e);return 1==n.length&&n[0][2]?r(n[0][0],n[0][1]):function(t){return t===e||a(t,e,n)}}},function(e,n,t){var a=t(90),i=t(94);e.exports=function(e,n,t,r){var o=t.length,s=o,l=!r;if(null==e)return!s;for(e=Object(e);o--;){var d=t[o];if(l&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++o<s;){var c=(d=t[o])[0],u=e[c],h=d[1];if(l&&d[2]){if(void 0===u&&!(c in e))return!1}else{var p=new a;if(r)var f=r(u,h,c,e,n,p);if(!(void 0===f?i(h,u,3,r,p):f))return!1}}return!0}},function(e,n){e.exports=function(){this.__data__=[],this.size=0}},function(e,n,t){var a=t(37),i=Array.prototype.splice;e.exports=function(e){var n=this.__data__,t=a(n,e);return!(t<0)&&(t==n.length-1?n.pop():i.call(n,t,1),--this.size,!0)}},function(e,n,t){var a=t(37);e.exports=function(e){var n=this.__data__,t=a(n,e);return t<0?void 0:n[t][1]}},function(e,n,t){var a=t(37);e.exports=function(e){return a(this.__data__,e)>-1}},function(e,n,t){var a=t(37);e.exports=function(e,n){var t=this.__data__,i=a(t,e);return i<0?(++this.size,t.push([e,n])):t[i][1]=n,this}},function(e,n,t){var a=t(36);e.exports=function(){this.__data__=new a,this.size=0}},function(e,n){e.exports=function(e){var n=this.__data__,t=n.delete(e);return this.size=n.size,t}},function(e,n){e.exports=function(e){return this.__data__.get(e)}},function(e,n){e.exports=function(e){return this.__data__.has(e)}},function(e,n,t){var a=t(36),i=t(59),r=t(61);e.exports=function(e,n){var t=this.__data__;if(t instanceof a){var o=t.__data__;if(!i||o.length<199)return o.push([e,n]),this.size=++t.size,this;t=this.__data__=new r(o)}return t.set(e,n),this.size=t.size,this}},function(e,n,t){var a=t(92),i=t(190),r=t(60),o=t(93),s=/^\[object .+?Constructor\]$/,l=Function.prototype,d=Object.prototype,c=l.toString,u=d.hasOwnProperty,h=RegExp("^"+c.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!r(e)||i(e))&&(a(e)?h:s).test(o(e))}},function(e,n,t){var a,i=t(191),r=(a=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+a:"";e.exports=function(e){return!!r&&r in e}},function(e,n,t){var a=t(14)["__core-js_shared__"];e.exports=a},function(e,n){e.exports=function(e,n){return null==e?void 0:e[n]}},function(e,n,t){var a=t(194),i=t(36),r=t(59);e.exports=function(){this.size=0,this.__data__={hash:new a,map:new(r||i),string:new a}}},function(e,n,t){var a=t(195),i=t(196),r=t(197),o=t(198),s=t(199);function l(e){var n=-1,t=null==e?0:e.length;for(this.clear();++n<t;){var a=e[n];this.set(a[0],a[1])}}l.prototype.clear=a,l.prototype.delete=i,l.prototype.get=r,l.prototype.has=o,l.prototype.set=s,e.exports=l},function(e,n,t){var a=t(38);e.exports=function(){this.__data__=a?a(null):{},this.size=0}},function(e,n){e.exports=function(e){var n=this.has(e)&&delete this.__data__[e];return this.size-=n?1:0,n}},function(e,n,t){var a=t(38),i=Object.prototype.hasOwnProperty;e.exports=function(e){var n=this.__data__;if(a){var t=n[e];return"__lodash_hash_undefined__"===t?void 0:t}return i.call(n,e)?n[e]:void 0}},function(e,n,t){var a=t(38),i=Object.prototype.hasOwnProperty;e.exports=function(e){var n=this.__data__;return a?void 0!==n[e]:i.call(n,e)}},function(e,n,t){var a=t(38);e.exports=function(e,n){var t=this.__data__;return this.size+=this.has(e)?0:1,t[e]=a&&void 0===n?"__lodash_hash_undefined__":n,this}},function(e,n,t){var a=t(39);e.exports=function(e){var n=a(this,e).delete(e);return this.size-=n?1:0,n}},function(e,n){e.exports=function(e){var n=typeof e;return"string"==n||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==e:null===e}},function(e,n,t){var a=t(39);e.exports=function(e){return a(this,e).get(e)}},function(e,n,t){var a=t(39);e.exports=function(e){return a(this,e).has(e)}},function(e,n,t){var a=t(39);e.exports=function(e,n){var t=a(this,e),i=t.size;return t.set(e,n),this.size+=t.size==i?0:1,this}},function(e,n,t){var a=t(90),i=t(95),r=t(209),o=t(212),s=t(228),l=t(12),d=t(99),c=t(101),u="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,n,t,p,f,m){var g=l(e),b=l(n),v=g?"[object Array]":s(e),y=b?"[object Array]":s(n),x=(v="[object Arguments]"==v?u:v)==u,C=(y="[object Arguments]"==y?u:y)==u,T=v==y;if(T&&d(e)){if(!d(n))return!1;g=!0,x=!1}if(T&&!x)return m||(m=new a),g||c(e)?i(e,n,t,p,f,m):r(e,n,v,t,p,f,m);if(!(1&t)){var D=x&&h.call(e,"__wrapped__"),w=C&&h.call(n,"__wrapped__");if(D||w){var O=D?e.value():e,k=w?n.value():n;return m||(m=new a),f(O,k,t,p,m)}}return!!T&&(m||(m=new a),o(e,n,t,p,f,m))}},function(e,n){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,n){e.exports=function(e){return this.__data__.has(e)}},function(e,n){e.exports=function(e,n){for(var t=-1,a=null==e?0:e.length;++t<a;)if(n(e[t],t,e))return!0;return!1}},function(e,n,t){var a=t(30),i=t(210),r=t(91),o=t(95),s=t(211),l=t(62),d=a?a.prototype:void 0,c=d?d.valueOf:void 0;e.exports=function(e,n,t,a,d,u,h){switch(t){case"[object DataView]":if(e.byteLength!=n.byteLength||e.byteOffset!=n.byteOffset)return!1;e=e.buffer,n=n.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=n.byteLength||!u(new i(e),new i(n)));case"[object Boolean]":case"[object Date]":case"[object Number]":return r(+e,+n);case"[object Error]":return e.name==n.name&&e.message==n.message;case"[object RegExp]":case"[object String]":return e==n+"";case"[object Map]":var p=s;case"[object Set]":var f=1&a;if(p||(p=l),e.size!=n.size&&!f)return!1;var m=h.get(e);if(m)return m==n;a|=2,h.set(e,n);var g=o(p(e),p(n),a,d,u,h);return h.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(n)}return!1}},function(e,n,t){var a=t(14).Uint8Array;e.exports=a},function(e,n){e.exports=function(e){var n=-1,t=Array(e.size);return e.forEach((function(e,a){t[++n]=[a,e]})),t}},function(e,n,t){var a=t(213),i=Object.prototype.hasOwnProperty;e.exports=function(e,n,t,r,o,s){var l=1&t,d=a(e),c=d.length;if(c!=a(n).length&&!l)return!1;for(var u=c;u--;){var h=d[u];if(!(l?h in n:i.call(n,h)))return!1}var p=s.get(e),f=s.get(n);if(p&&f)return p==n&&f==e;var m=!0;s.set(e,n),s.set(n,e);for(var g=l;++u<c;){var b=e[h=d[u]],v=n[h];if(r)var y=l?r(v,b,h,n,e,s):r(b,v,h,e,n,s);if(!(void 0===y?b===v||o(b,v,t,r,s):y)){m=!1;break}g||(g="constructor"==h)}if(m&&!g){var x=e.constructor,C=n.constructor;x==C||!("constructor"in e)||!("constructor"in n)||"function"==typeof x&&x instanceof x&&"function"==typeof C&&C instanceof C||(m=!1)}return s.delete(e),s.delete(n),m}},function(e,n,t){var a=t(214),i=t(215),r=t(98);e.exports=function(e){return a(e,r,i)}},function(e,n,t){var a=t(88),i=t(12);e.exports=function(e,n,t){var r=n(e);return i(e)?r:a(r,t(e))}},function(e,n,t){var a=t(216),i=t(217),r=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(e){return null==e?[]:(e=Object(e),a(o(e),(function(n){return r.call(e,n)})))}:i;e.exports=s},function(e,n){e.exports=function(e,n){for(var t=-1,a=null==e?0:e.length,i=0,r=[];++t<a;){var o=e[t];n(o,t,e)&&(r[i++]=o)}return r}},function(e,n){e.exports=function(){return[]}},function(e,n,t){var a=t(219),i=t(58),r=t(12),o=t(99),s=t(100),l=t(101),d=Object.prototype.hasOwnProperty;e.exports=function(e,n){var t=r(e),c=!t&&i(e),u=!t&&!c&&o(e),h=!t&&!c&&!u&&l(e),p=t||c||u||h,f=p?a(e.length,String):[],m=f.length;for(var g in e)!n&&!d.call(e,g)||p&&("length"==g||u&&("offset"==g||"parent"==g)||h&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,m))||f.push(g);return f}},function(e,n){e.exports=function(e,n){for(var t=-1,a=Array(e);++t<e;)a[t]=n(t);return a}},function(e,n){e.exports=function(){return!1}},function(e,n,t){var a=t(26),i=t(63),r=t(21),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,e.exports=function(e){return r(e)&&i(e.length)&&!!o[a(e)]}},function(e,n){e.exports=function(e){return function(n){return e(n)}}},function(e,n,t){(function(e){var a=t(89),i=n&&!n.nodeType&&n,r=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=r&&r.exports===i&&a.process,s=function(){try{var e=r&&r.require&&r.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();e.exports=s}).call(this,t(69)(e))},function(e,n,t){var a=t(225),i=t(226),r=Object.prototype.hasOwnProperty;e.exports=function(e){if(!a(e))return i(e);var n=[];for(var t in Object(e))r.call(e,t)&&"constructor"!=t&&n.push(t);return n}},function(e,n){var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},function(e,n,t){var a=t(227)(Object.keys,Object);e.exports=a},function(e,n){e.exports=function(e,n){return function(t){return e(n(t))}}},function(e,n,t){var a=t(229),i=t(59),r=t(230),o=t(103),s=t(231),l=t(26),d=t(93),c=d(a),u=d(i),h=d(r),p=d(o),f=d(s),m=l;(a&&"[object DataView]"!=m(new a(new ArrayBuffer(1)))||i&&"[object Map]"!=m(new i)||r&&"[object Promise]"!=m(r.resolve())||o&&"[object Set]"!=m(new o)||s&&"[object WeakMap]"!=m(new s))&&(m=function(e){var n=l(e),t="[object Object]"==n?e.constructor:void 0,a=t?d(t):"";if(a)switch(a){case c:return"[object DataView]";case u:return"[object Map]";case h:return"[object Promise]";case p:return"[object Set]";case f:return"[object WeakMap]"}return n}),e.exports=m},function(e,n,t){var a=t(18)(t(14),"DataView");e.exports=a},function(e,n,t){var a=t(18)(t(14),"Promise");e.exports=a},function(e,n,t){var a=t(18)(t(14),"WeakMap");e.exports=a},function(e,n,t){var a=t(104),i=t(98);e.exports=function(e){for(var n=i(e),t=n.length;t--;){var r=n[t],o=e[r];n[t]=[r,o,a(o)]}return n}},function(e,n,t){var a=t(94),i=t(122),r=t(240),o=t(64),s=t(104),l=t(105),d=t(40);e.exports=function(e,n){return o(e)&&s(n)?l(d(e),n):function(t){var o=i(t,e);return void 0===o&&o===n?r(t,e):a(n,o,3)}}},function(e,n,t){var a=t(235),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,o=a((function(e){var n=[];return 46===e.charCodeAt(0)&&n.push(""),e.replace(i,(function(e,t,a,i){n.push(a?i.replace(r,"$1"):t||e)})),n}));e.exports=o},function(e,n,t){var a=t(236);e.exports=function(e){var n=a(e,(function(e){return 500===t.size&&t.clear(),e})),t=n.cache;return n}},function(e,n,t){var a=t(61);function i(e,n){if("function"!=typeof e||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var t=function(){var a=arguments,i=n?n.apply(this,a):a[0],r=t.cache;if(r.has(i))return r.get(i);var o=e.apply(this,a);return t.cache=r.set(i,o)||r,o};return t.cache=new(i.Cache||a),t}i.Cache=a,e.exports=i},function(e,n,t){var a=t(238);e.exports=function(e){return null==e?"":a(e)}},function(e,n,t){var a=t(30),i=t(239),r=t(12),o=t(65),s=a?a.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(n){if("string"==typeof n)return n;if(r(n))return i(n,e)+"";if(o(n))return l?l.call(n):"";var t=n+"";return"0"==t&&1/n==-1/0?"-0":t}},function(e,n){e.exports=function(e,n){for(var t=-1,a=null==e?0:e.length,i=Array(a);++t<a;)i[t]=n(e[t],t,e);return i}},function(e,n,t){var a=t(241),i=t(242);e.exports=function(e,n){return null!=e&&i(e,n,a)}},function(e,n){e.exports=function(e,n){return null!=e&&n in Object(e)}},function(e,n,t){var a=t(107),i=t(58),r=t(12),o=t(100),s=t(63),l=t(40);e.exports=function(e,n,t){for(var d=-1,c=(n=a(n,e)).length,u=!1;++d<c;){var h=l(n[d]);if(!(u=null!=e&&t(e,h)))break;e=e[h]}return u||++d!=c?u:!!(c=null==e?0:e.length)&&s(c)&&o(h,c)&&(r(e)||i(e))}},function(e,n,t){var a=t(244),i=t(245),r=t(64),o=t(40);e.exports=function(e){return r(e)?a(o(e)):i(e)}},function(e,n){e.exports=function(e){return function(n){return null==n?void 0:n[e]}}},function(e,n,t){var a=t(106);e.exports=function(e){return function(n){return a(n,e)}}},function(e,n,t){var a=t(66),i=t(247),r=t(249);e.exports=function(e,n){return r(i(e,n,a),e+"")}},function(e,n,t){var a=t(248),i=Math.max;e.exports=function(e,n,t){return n=i(void 0===n?e.length-1:n,0),function(){for(var r=arguments,o=-1,s=i(r.length-n,0),l=Array(s);++o<s;)l[o]=r[n+o];o=-1;for(var d=Array(n+1);++o<n;)d[o]=r[o];return d[n]=t(l),a(e,this,d)}}},function(e,n){e.exports=function(e,n,t){switch(t.length){case 0:return e.call(n);case 1:return e.call(n,t[0]);case 2:return e.call(n,t[0],t[1]);case 3:return e.call(n,t[0],t[1],t[2])}return e.apply(n,t)}},function(e,n,t){var a=t(250),i=t(253)(a);e.exports=i},function(e,n,t){var a=t(251),i=t(252),r=t(66),o=i?function(e,n){return i(e,"toString",{configurable:!0,enumerable:!1,value:a(n),writable:!0})}:r;e.exports=o},function(e,n){e.exports=function(e){return function(){return e}}},function(e,n,t){var a=t(18),i=function(){try{var e=a(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},function(e,n){var t=Date.now;e.exports=function(e){var n=0,a=0;return function(){var i=t(),r=16-(i-a);if(a=i,r>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},function(e,n,t){var a=t(96),i=t(255),r=t(260),o=t(97),s=t(261),l=t(62);e.exports=function(e,n,t){var d=-1,c=i,u=e.length,h=!0,p=[],f=p;if(t)h=!1,c=r;else if(u>=200){var m=n?null:s(e);if(m)return l(m);h=!1,c=o,f=new a}else f=n?[]:p;e:for(;++d<u;){var g=e[d],b=n?n(g):g;if(g=t||0!==g?g:0,h&&b==b){for(var v=f.length;v--;)if(f[v]===b)continue e;n&&f.push(b),p.push(g)}else c(f,b,t)||(f!==p&&f.push(b),p.push(g))}return p}},function(e,n,t){var a=t(256);e.exports=function(e,n){return!!(null==e?0:e.length)&&a(e,n,0)>-1}},function(e,n,t){var a=t(257),i=t(258),r=t(259);e.exports=function(e,n,t){return n==n?r(e,n,t):a(e,i,t)}},function(e,n){e.exports=function(e,n,t,a){for(var i=e.length,r=t+(a?1:-1);a?r--:++r<i;)if(n(e[r],r,e))return r;return-1}},function(e,n){e.exports=function(e){return e!=e}},function(e,n){e.exports=function(e,n,t){for(var a=t-1,i=e.length;++a<i;)if(e[a]===n)return a;return-1}},function(e,n){e.exports=function(e,n,t){for(var a=-1,i=null==e?0:e.length;++a<i;)if(t(n,e[a]))return!0;return!1}},function(e,n,t){var a=t(103),i=t(262),r=t(62),o=a&&1/r(new a([,-0]))[1]==1/0?function(e){return new a(e)}:i;e.exports=o},function(e,n){e.exports=function(){}},function(e,n,t){var a=t(102),i=t(21);e.exports=function(e){return i(e)&&a(e)}},function(e,n,t){"use strict";t(108)},function(e,n,t){},function(e,n){var t=new Intl.Collator(0,{numeric:1}).compare;e.exports=function(e,n,a){return e=e.split("."),n=n.split("."),t(e[0],n[0])||t(e[1],n[1])||(n[2]=n.slice(2).join("."),(a=/[.-]/.test(e[2]=e.slice(2).join(".")))==/[.-]/.test(n[2])?t(e[2],n[2]):a?-1:1)}},function(e,n,t){"use strict";t(109)},function(e,n,t){"use strict";t(110)},function(e,n,t){"use strict";t(111)},function(e,n){"undefined"!=typeof window&&void 0===window.global&&(window.global=window)},function(e,n,t){},function(e,n,t){},function(e,n,t){"use strict";t(112)},function(e,n,t){"use strict";t(113)},function(e,n,t){"use strict";t.r(n);var a={};t.r(a),t.d(a,"srand",(function(){return Ht})),t.d(a,"rand",(function(){return Vt})),t.d(a,"numbers",(function(){return Wt})),t.d(a,"points",(function(){return Yt})),t.d(a,"bubbles",(function(){return $t})),t.d(a,"labels",(function(){return Gt})),t.d(a,"months",(function(){return Xt})),t.d(a,"color",(function(){return Zt})),t.d(a,"transparentize",(function(){return Kt})),t.d(a,"CHART_COLORS",(function(){return Qt})),t.d(a,"namedColor",(function(){return na})),t.d(a,"newDate",(function(){return ta})),t.d(a,"newDateString",(function(){return aa})),t.d(a,"parseISODate",(function(){return ia}));var i={};t.r(i),t.d(i,"color",(function(){return Ft.Eb})),t.d(i,"getHoverColor",(function(){return Ft.cb})),t.d(i,"easingEffects",(function(){return Ft.Gb}));var r={};t.r(r),t.d(r,"Tooltip",(function(){return nt.e}));t(124),t(9);var o=t(1);function s(e,n){for(var t in n)e[t]=n[t];return e}var l=/[!'()*]/g,d=function(e){return"%"+e.charCodeAt(0).toString(16)},c=/%2C/g,u=function(e){return encodeURIComponent(e).replace(l,d).replace(c,",")};function h(e){try{return decodeURIComponent(e)}catch(e){0}return e}var p=function(e){return null==e||"object"==typeof e?e:String(e)};function f(e){var n={};return(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=h(t.shift()),i=t.length>0?h(t.join("=")):null;void 0===n[a]?n[a]=i:Array.isArray(n[a])?n[a].push(i):n[a]=[n[a],i]})),n):n}function m(e){var n=e?Object.keys(e).map((function(n){var t=e[n];if(void 0===t)return"";if(null===t)return u(n);if(Array.isArray(t)){var a=[];return t.forEach((function(e){void 0!==e&&(null===e?a.push(u(n)):a.push(u(n)+"="+u(e)))})),a.join("&")}return u(n)+"="+u(t)})).filter((function(e){return e.length>0})).join("&"):null;return n?"?"+n:""}var g=/\/?$/;function b(e,n,t,a){var i=a&&a.options.stringifyQuery,r=n.query||{};try{r=v(r)}catch(e){}var o={name:n.name||e&&e.name,meta:e&&e.meta||{},path:n.path||"/",hash:n.hash||"",query:r,params:n.params||{},fullPath:C(n,i),matched:e?x(e):[]};return t&&(o.redirectedFrom=C(t,i)),Object.freeze(o)}function v(e){if(Array.isArray(e))return e.map(v);if(e&&"object"==typeof e){var n={};for(var t in e)n[t]=v(e[t]);return n}return e}var y=b(null,{path:"/"});function x(e){for(var n=[];e;)n.unshift(e),e=e.parent;return n}function C(e,n){var t=e.path,a=e.query;void 0===a&&(a={});var i=e.hash;return void 0===i&&(i=""),(t||"/")+(n||m)(a)+i}function T(e,n,t){return n===y?e===n:!!n&&(e.path&&n.path?e.path.replace(g,"")===n.path.replace(g,"")&&(t||e.hash===n.hash&&D(e.query,n.query)):!(!e.name||!n.name)&&(e.name===n.name&&(t||e.hash===n.hash&&D(e.query,n.query)&&D(e.params,n.params))))}function D(e,n){if(void 0===e&&(e={}),void 0===n&&(n={}),!e||!n)return e===n;var t=Object.keys(e).sort(),a=Object.keys(n).sort();return t.length===a.length&&t.every((function(t,i){var r=e[t];if(a[i]!==t)return!1;var o=n[t];return null==r||null==o?r===o:"object"==typeof r&&"object"==typeof o?D(r,o):String(r)===String(o)}))}function w(e){for(var n=0;n<e.matched.length;n++){var t=e.matched[n];for(var a in t.instances){var i=t.instances[a],r=t.enteredCbs[a];if(i&&r){delete t.enteredCbs[a];for(var o=0;o<r.length;o++)i._isBeingDestroyed||r[o](i)}}}}var O={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(e,n){var t=n.props,a=n.children,i=n.parent,r=n.data;r.routerView=!0;for(var o=i.$createElement,l=t.name,d=i.$route,c=i._routerViewCache||(i._routerViewCache={}),u=0,h=!1;i&&i._routerRoot!==i;){var p=i.$vnode?i.$vnode.data:{};p.routerView&&u++,p.keepAlive&&i._directInactive&&i._inactive&&(h=!0),i=i.$parent}if(r.routerViewDepth=u,h){var f=c[l],m=f&&f.component;return m?(f.configProps&&k(m,r,f.route,f.configProps),o(m,r,a)):o()}var g=d.matched[u],b=g&&g.components[l];if(!g||!b)return c[l]=null,o();c[l]={component:b},r.registerRouteInstance=function(e,n){var t=g.instances[l];(n&&t!==e||!n&&t===e)&&(g.instances[l]=n)},(r.hook||(r.hook={})).prepatch=function(e,n){g.instances[l]=n.componentInstance},r.hook.init=function(e){e.data.keepAlive&&e.componentInstance&&e.componentInstance!==g.instances[l]&&(g.instances[l]=e.componentInstance),w(d)};var v=g.props&&g.props[l];return v&&(s(c[l],{route:d,configProps:v}),k(b,r,d,v)),o(b,r,a)}};function k(e,n,t,a){var i=n.props=function(e,n){switch(typeof n){case"undefined":return;case"object":return n;case"function":return n(e);case"boolean":return n?e.params:void 0;default:0}}(t,a);if(i){i=n.props=s({},i);var r=n.attrs=n.attrs||{};for(var o in i)e.props&&o in e.props||(r[o]=i[o],delete i[o])}}function S(e,n,t){var a=e.charAt(0);if("/"===a)return e;if("?"===a||"#"===a)return n+e;var i=n.split("/");t&&i[i.length-1]||i.pop();for(var r=e.replace(/^\//,"").split("/"),o=0;o<r.length;o++){var s=r[o];".."===s?i.pop():"."!==s&&i.push(s)}return""!==i[0]&&i.unshift(""),i.join("/")}function P(e){return e.replace(/\/+/g,"/")}var A=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},R=W,I=j,_=function(e,n){return N(j(e,n),n)},L=N,E=V,M=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function j(e,n){for(var t,a=[],i=0,r=0,o="",s=n&&n.delimiter||"/";null!=(t=M.exec(e));){var l=t[0],d=t[1],c=t.index;if(o+=e.slice(r,c),r=c+l.length,d)o+=d[1];else{var u=e[r],h=t[2],p=t[3],f=t[4],m=t[5],g=t[6],b=t[7];o&&(a.push(o),o="");var v=null!=h&&null!=u&&u!==h,y="+"===g||"*"===g,x="?"===g||"*"===g,C=t[2]||s,T=f||m;a.push({name:p||i++,prefix:h||"",delimiter:C,optional:x,repeat:y,partial:v,asterisk:!!b,pattern:T?F(T):b?".*":"[^"+B(C)+"]+?"})}}return r<e.length&&(o+=e.substr(r)),o&&a.push(o),a}function U(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function N(e,n){for(var t=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(t[a]=new RegExp("^(?:"+e[a].pattern+")$",H(n)));return function(n,a){for(var i="",r=n||{},o=(a||{}).pretty?U:encodeURIComponent,s=0;s<e.length;s++){var l=e[s];if("string"!=typeof l){var d,c=r[l.name];if(null==c){if(l.optional){l.partial&&(i+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(A(c)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(c)+"`");if(0===c.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var u=0;u<c.length;u++){if(d=o(c[u]),!t[s].test(d))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(d)+"`");i+=(0===u?l.prefix:l.delimiter)+d}}else{if(d=l.asterisk?encodeURI(c).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):o(c),!t[s].test(d))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+d+'"');i+=l.prefix+d}}else i+=l}return i}}function B(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function F(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function z(e,n){return e.keys=n,e}function H(e){return e&&e.sensitive?"":"i"}function V(e,n,t){A(n)||(t=n||t,n=[]);for(var a=(t=t||{}).strict,i=!1!==t.end,r="",o=0;o<e.length;o++){var s=e[o];if("string"==typeof s)r+=B(s);else{var l=B(s.prefix),d="(?:"+s.pattern+")";n.push(s),s.repeat&&(d+="(?:"+l+d+")*"),r+=d=s.optional?s.partial?l+"("+d+")?":"(?:"+l+"("+d+"))?":l+"("+d+")"}}var c=B(t.delimiter||"/"),u=r.slice(-c.length)===c;return a||(r=(u?r.slice(0,-c.length):r)+"(?:"+c+"(?=$))?"),r+=i?"$":a&&u?"":"(?="+c+"|$)",z(new RegExp("^"+r,H(t)),n)}function W(e,n,t){return A(n)||(t=n||t,n=[]),t=t||{},e instanceof RegExp?function(e,n){var t=e.source.match(/\((?!\?)/g);if(t)for(var a=0;a<t.length;a++)n.push({name:a,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return z(e,n)}(e,n):A(e)?function(e,n,t){for(var a=[],i=0;i<e.length;i++)a.push(W(e[i],n,t).source);return z(new RegExp("(?:"+a.join("|")+")",H(t)),n)}(e,n,t):function(e,n,t){return V(j(e,t),n,t)}(e,n,t)}R.parse=I,R.compile=_,R.tokensToFunction=L,R.tokensToRegExp=E;var Y=Object.create(null);function $(e,n,t){n=n||{};try{var a=Y[e]||(Y[e]=R.compile(e));return"string"==typeof n.pathMatch&&(n[0]=n.pathMatch),a(n,{pretty:!0})}catch(e){return""}finally{delete n[0]}}function G(e,n,t,a){var i="string"==typeof e?{path:e}:e;if(i._normalized)return i;if(i.name){var r=(i=s({},e)).params;return r&&"object"==typeof r&&(i.params=s({},r)),i}if(!i.path&&i.params&&n){(i=s({},i))._normalized=!0;var o=s(s({},n.params),i.params);if(n.name)i.name=n.name,i.params=o;else if(n.matched.length){var l=n.matched[n.matched.length-1].path;i.path=$(l,o,n.path)}else 0;return i}var d=function(e){var n="",t="",a=e.indexOf("#");a>=0&&(n=e.slice(a),e=e.slice(0,a));var i=e.indexOf("?");return i>=0&&(t=e.slice(i+1),e=e.slice(0,i)),{path:e,query:t,hash:n}}(i.path||""),c=n&&n.path||"/",u=d.path?S(d.path,c,t||i.append):c,h=function(e,n,t){void 0===n&&(n={});var a,i=t||f;try{a=i(e||"")}catch(e){a={}}for(var r in n){var o=n[r];a[r]=Array.isArray(o)?o.map(p):p(o)}return a}(d.query,i.query,a&&a.options.parseQuery),m=i.hash||d.hash;return m&&"#"!==m.charAt(0)&&(m="#"+m),{_normalized:!0,path:u,query:h,hash:m}}var q,X=function(){},J={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(e){var n=this,t=this.$router,a=this.$route,i=t.resolve(this.to,a,this.append),r=i.location,o=i.route,l=i.href,d={},c=t.options.linkActiveClass,u=t.options.linkExactActiveClass,h=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,f=null==this.activeClass?h:this.activeClass,m=null==this.exactActiveClass?p:this.exactActiveClass,v=o.redirectedFrom?b(null,G(o.redirectedFrom),null,t):o;d[m]=T(a,v,this.exactPath),d[f]=this.exact||this.exactPath?d[m]:function(e,n){return 0===e.path.replace(g,"/").indexOf(n.path.replace(g,"/"))&&(!n.hash||e.hash===n.hash)&&function(e,n){for(var t in n)if(!(t in e))return!1;return!0}(e.query,n.query)}(a,v);var y=d[m]?this.ariaCurrentValue:null,x=function(e){Z(e)&&(n.replace?t.replace(r,X):t.push(r,X))},C={click:Z};Array.isArray(this.event)?this.event.forEach((function(e){C[e]=x})):C[this.event]=x;var D={class:d},w=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:l,route:o,navigate:x,isActive:d[f],isExactActive:d[m]});if(w){if(1===w.length)return w[0];if(w.length>1||!w.length)return 0===w.length?e():e("span",{},w)}if("a"===this.tag)D.on=C,D.attrs={href:l,"aria-current":y};else{var O=function e(n){var t;if(n)for(var a=0;a<n.length;a++){if("a"===(t=n[a]).tag)return t;if(t.children&&(t=e(t.children)))return t}}(this.$slots.default);if(O){O.isStatic=!1;var k=O.data=s({},O.data);for(var S in k.on=k.on||{},k.on){var P=k.on[S];S in C&&(k.on[S]=Array.isArray(P)?P:[P])}for(var A in C)A in k.on?k.on[A].push(C[A]):k.on[A]=x;var R=O.data.attrs=s({},O.data.attrs);R.href=l,R["aria-current"]=y}else D.on=C}return e(this.tag,D,this.$slots.default)}};function Z(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.defaultPrevented||void 0!==e.button&&0!==e.button)){if(e.currentTarget&&e.currentTarget.getAttribute){var n=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(n))return}return e.preventDefault&&e.preventDefault(),!0}}var K="undefined"!=typeof window;function Q(e,n,t,a,i){var r=n||[],o=t||Object.create(null),s=a||Object.create(null);e.forEach((function(e){!function e(n,t,a,i,r,o){var s=i.path,l=i.name;0;var d=i.pathToRegexpOptions||{},c=function(e,n,t){t||(e=e.replace(/\/$/,""));if("/"===e[0])return e;if(null==n)return e;return P(n.path+"/"+e)}(s,r,d.strict);"boolean"==typeof i.caseSensitive&&(d.sensitive=i.caseSensitive);var u={path:c,regex:ee(c,d),components:i.components||{default:i.component},alias:i.alias?"string"==typeof i.alias?[i.alias]:i.alias:[],instances:{},enteredCbs:{},name:l,parent:r,matchAs:o,redirect:i.redirect,beforeEnter:i.beforeEnter,meta:i.meta||{},props:null==i.props?{}:i.components?i.props:{default:i.props}};i.children&&i.children.forEach((function(i){var r=o?P(o+"/"+i.path):void 0;e(n,t,a,i,u,r)}));t[u.path]||(n.push(u.path),t[u.path]=u);if(void 0!==i.alias)for(var h=Array.isArray(i.alias)?i.alias:[i.alias],p=0;p<h.length;++p){0;var f={path:h[p],children:i.children};e(n,t,a,f,r,u.path||"/")}l&&(a[l]||(a[l]=u))}(r,o,s,e,i)}));for(var l=0,d=r.length;l<d;l++)"*"===r[l]&&(r.push(r.splice(l,1)[0]),d--,l--);return{pathList:r,pathMap:o,nameMap:s}}function ee(e,n){return R(e,[],n)}function ne(e,n){var t=Q(e),a=t.pathList,i=t.pathMap,r=t.nameMap;function o(e,t,o){var s=G(e,t,!1,n),d=s.name;if(d){var c=r[d];if(!c)return l(null,s);var u=c.regex.keys.filter((function(e){return!e.optional})).map((function(e){return e.name}));if("object"!=typeof s.params&&(s.params={}),t&&"object"==typeof t.params)for(var h in t.params)!(h in s.params)&&u.indexOf(h)>-1&&(s.params[h]=t.params[h]);return s.path=$(c.path,s.params),l(c,s,o)}if(s.path){s.params={};for(var p=0;p<a.length;p++){var f=a[p],m=i[f];if(te(m.regex,s.path,s.params))return l(m,s,o)}}return l(null,s)}function s(e,t){var a=e.redirect,i="function"==typeof a?a(b(e,t,null,n)):a;if("string"==typeof i&&(i={path:i}),!i||"object"!=typeof i)return l(null,t);var s=i,d=s.name,c=s.path,u=t.query,h=t.hash,p=t.params;if(u=s.hasOwnProperty("query")?s.query:u,h=s.hasOwnProperty("hash")?s.hash:h,p=s.hasOwnProperty("params")?s.params:p,d){r[d];return o({_normalized:!0,name:d,query:u,hash:h,params:p},void 0,t)}if(c){var f=function(e,n){return S(e,n.parent?n.parent.path:"/",!0)}(c,e);return o({_normalized:!0,path:$(f,p),query:u,hash:h},void 0,t)}return l(null,t)}function l(e,t,a){return e&&e.redirect?s(e,a||t):e&&e.matchAs?function(e,n,t){var a=o({_normalized:!0,path:$(t,n.params)});if(a){var i=a.matched,r=i[i.length-1];return n.params=a.params,l(r,n)}return l(null,n)}(0,t,e.matchAs):b(e,t,a,n)}return{match:o,addRoute:function(e,n){var t="object"!=typeof e?r[e]:void 0;Q([n||e],a,i,r,t),t&&t.alias.length&&Q(t.alias.map((function(e){return{path:e,children:[n]}})),a,i,r,t)},getRoutes:function(){return a.map((function(e){return i[e]}))},addRoutes:function(e){Q(e,a,i,r)}}}function te(e,n,t){var a=n.match(e);if(!a)return!1;if(!t)return!0;for(var i=1,r=a.length;i<r;++i){var o=e.keys[i-1];o&&(t[o.name||"pathMatch"]="string"==typeof a[i]?h(a[i]):a[i])}return!0}var ae=K&&window.performance&&window.performance.now?window.performance:Date;function ie(){return ae.now().toFixed(3)}var re=ie();function oe(){return re}function se(e){return re=e}var le=Object.create(null);function de(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var e=window.location.protocol+"//"+window.location.host,n=window.location.href.replace(e,""),t=s({},window.history.state);return t.key=oe(),window.history.replaceState(t,"",n),window.addEventListener("popstate",he),function(){window.removeEventListener("popstate",he)}}function ce(e,n,t,a){if(e.app){var i=e.options.scrollBehavior;i&&e.app.$nextTick((function(){var r=function(){var e=oe();if(e)return le[e]}(),o=i.call(e,n,t,a?r:null);o&&("function"==typeof o.then?o.then((function(e){be(e,r)})).catch((function(e){0})):be(o,r))}))}}function ue(){var e=oe();e&&(le[e]={x:window.pageXOffset,y:window.pageYOffset})}function he(e){ue(),e.state&&e.state.key&&se(e.state.key)}function pe(e){return me(e.x)||me(e.y)}function fe(e){return{x:me(e.x)?e.x:window.pageXOffset,y:me(e.y)?e.y:window.pageYOffset}}function me(e){return"number"==typeof e}var ge=/^#\d/;function be(e,n){var t,a="object"==typeof e;if(a&&"string"==typeof e.selector){var i=ge.test(e.selector)?document.getElementById(e.selector.slice(1)):document.querySelector(e.selector);if(i){var r=e.offset&&"object"==typeof e.offset?e.offset:{};n=function(e,n){var t=document.documentElement.getBoundingClientRect(),a=e.getBoundingClientRect();return{x:a.left-t.left-n.x,y:a.top-t.top-n.y}}(i,r={x:me((t=r).x)?t.x:0,y:me(t.y)?t.y:0})}else pe(e)&&(n=fe(e))}else a&&pe(e)&&(n=fe(e));n&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:n.x,top:n.y,behavior:e.behavior}):window.scrollTo(n.x,n.y))}var ve,ye=K&&((-1===(ve=window.navigator.userAgent).indexOf("Android 2.")&&-1===ve.indexOf("Android 4.0")||-1===ve.indexOf("Mobile Safari")||-1!==ve.indexOf("Chrome")||-1!==ve.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState);function xe(e,n){ue();var t=window.history;try{if(n){var a=s({},t.state);a.key=oe(),t.replaceState(a,"",e)}else t.pushState({key:se(ie())},"",e)}catch(t){window.location[n?"replace":"assign"](e)}}function Ce(e){xe(e,!0)}function Te(e,n,t){var a=function(i){i>=e.length?t():e[i]?n(e[i],(function(){a(i+1)})):a(i+1)};a(0)}var De={redirected:2,aborted:4,cancelled:8,duplicated:16};function we(e,n){return ke(e,n,De.redirected,'Redirected when going from "'+e.fullPath+'" to "'+function(e){if("string"==typeof e)return e;if("path"in e)return e.path;var n={};return Se.forEach((function(t){t in e&&(n[t]=e[t])})),JSON.stringify(n,null,2)}(n)+'" via a navigation guard.')}function Oe(e,n){return ke(e,n,De.cancelled,'Navigation cancelled from "'+e.fullPath+'" to "'+n.fullPath+'" with a new navigation.')}function ke(e,n,t,a){var i=new Error(a);return i._isRouter=!0,i.from=e,i.to=n,i.type=t,i}var Se=["params","query","hash"];function Pe(e){return Object.prototype.toString.call(e).indexOf("Error")>-1}function Ae(e,n){return Pe(e)&&e._isRouter&&(null==n||e.type===n)}function Re(e){return function(n,t,a){var i=!1,r=0,o=null;Ie(e,(function(e,n,t,s){if("function"==typeof e&&void 0===e.cid){i=!0,r++;var l,d=Ee((function(n){var i;((i=n).__esModule||Le&&"Module"===i[Symbol.toStringTag])&&(n=n.default),e.resolved="function"==typeof n?n:q.extend(n),t.components[s]=n,--r<=0&&a()})),c=Ee((function(e){var n="Failed to resolve async component "+s+": "+e;o||(o=Pe(e)?e:new Error(n),a(o))}));try{l=e(d,c)}catch(e){c(e)}if(l)if("function"==typeof l.then)l.then(d,c);else{var u=l.component;u&&"function"==typeof u.then&&u.then(d,c)}}})),i||a()}}function Ie(e,n){return _e(e.map((function(e){return Object.keys(e.components).map((function(t){return n(e.components[t],e.instances[t],e,t)}))})))}function _e(e){return Array.prototype.concat.apply([],e)}var Le="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ee(e){var n=!1;return function(){for(var t=[],a=arguments.length;a--;)t[a]=arguments[a];if(!n)return n=!0,e.apply(this,t)}}var Me=function(e,n){this.router=e,this.base=function(e){if(!e)if(K){var n=document.querySelector("base");e=(e=n&&n.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else e="/";"/"!==e.charAt(0)&&(e="/"+e);return e.replace(/\/$/,"")}(n),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function je(e,n,t,a){var i=Ie(e,(function(e,a,i,r){var o=function(e,n){"function"!=typeof e&&(e=q.extend(e));return e.options[n]}(e,n);if(o)return Array.isArray(o)?o.map((function(e){return t(e,a,i,r)})):t(o,a,i,r)}));return _e(a?i.reverse():i)}function Ue(e,n){if(n)return function(){return e.apply(n,arguments)}}Me.prototype.listen=function(e){this.cb=e},Me.prototype.onReady=function(e,n){this.ready?e():(this.readyCbs.push(e),n&&this.readyErrorCbs.push(n))},Me.prototype.onError=function(e){this.errorCbs.push(e)},Me.prototype.transitionTo=function(e,n,t){var a,i=this;try{a=this.router.match(e,this.current)}catch(e){throw this.errorCbs.forEach((function(n){n(e)})),e}var r=this.current;this.confirmTransition(a,(function(){i.updateRoute(a),n&&n(a),i.ensureURL(),i.router.afterHooks.forEach((function(e){e&&e(a,r)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(e){e(a)})))}),(function(e){t&&t(e),e&&!i.ready&&(Ae(e,De.redirected)&&r===y||(i.ready=!0,i.readyErrorCbs.forEach((function(n){n(e)}))))}))},Me.prototype.confirmTransition=function(e,n,t){var a=this,i=this.current;this.pending=e;var r,o,s=function(e){!Ae(e)&&Pe(e)&&(a.errorCbs.length?a.errorCbs.forEach((function(n){n(e)})):console.error(e)),t&&t(e)},l=e.matched.length-1,d=i.matched.length-1;if(T(e,i)&&l===d&&e.matched[l]===i.matched[d])return this.ensureURL(),e.hash&&ce(this.router,i,e,!1),s(((o=ke(r=i,e,De.duplicated,'Avoided redundant navigation to current location: "'+r.fullPath+'".')).name="NavigationDuplicated",o));var c=function(e,n){var t,a=Math.max(e.length,n.length);for(t=0;t<a&&e[t]===n[t];t++);return{updated:n.slice(0,t),activated:n.slice(t),deactivated:e.slice(t)}}(this.current.matched,e.matched),u=c.updated,h=c.deactivated,p=c.activated,f=[].concat(function(e){return je(e,"beforeRouteLeave",Ue,!0)}(h),this.router.beforeHooks,function(e){return je(e,"beforeRouteUpdate",Ue)}(u),p.map((function(e){return e.beforeEnter})),Re(p)),m=function(n,t){if(a.pending!==e)return s(Oe(i,e));try{n(e,i,(function(n){!1===n?(a.ensureURL(!0),s(function(e,n){return ke(e,n,De.aborted,'Navigation aborted from "'+e.fullPath+'" to "'+n.fullPath+'" via a navigation guard.')}(i,e))):Pe(n)?(a.ensureURL(!0),s(n)):"string"==typeof n||"object"==typeof n&&("string"==typeof n.path||"string"==typeof n.name)?(s(we(i,e)),"object"==typeof n&&n.replace?a.replace(n):a.push(n)):t(n)}))}catch(e){s(e)}};Te(f,m,(function(){Te(function(e){return je(e,"beforeRouteEnter",(function(e,n,t,a){return function(e,n,t){return function(a,i,r){return e(a,i,(function(e){"function"==typeof e&&(n.enteredCbs[t]||(n.enteredCbs[t]=[]),n.enteredCbs[t].push(e)),r(e)}))}}(e,t,a)}))}(p).concat(a.router.resolveHooks),m,(function(){if(a.pending!==e)return s(Oe(i,e));a.pending=null,n(e),a.router.app&&a.router.app.$nextTick((function(){w(e)}))}))}))},Me.prototype.updateRoute=function(e){this.current=e,this.cb&&this.cb(e)},Me.prototype.setupListeners=function(){},Me.prototype.teardown=function(){this.listeners.forEach((function(e){e()})),this.listeners=[],this.current=y,this.pending=null};var Ne=function(e){function n(n,t){e.call(this,n,t),this._startLocation=Be(this.base)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var n=this.router,t=n.options.scrollBehavior,a=ye&&t;a&&this.listeners.push(de());var i=function(){var t=e.current,i=Be(e.base);e.current===y&&i===e._startLocation||e.transitionTo(i,(function(e){a&&ce(n,e,t,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},n.prototype.go=function(e){window.history.go(e)},n.prototype.push=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){xe(P(a.base+e.fullPath)),ce(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){Ce(P(a.base+e.fullPath)),ce(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.ensureURL=function(e){if(Be(this.base)!==this.current.fullPath){var n=P(this.base+this.current.fullPath);e?xe(n):Ce(n)}},n.prototype.getCurrentLocation=function(){return Be(this.base)},n}(Me);function Be(e){var n=window.location.pathname,t=n.toLowerCase(),a=e.toLowerCase();return!e||t!==a&&0!==t.indexOf(P(a+"/"))||(n=n.slice(e.length)),(n||"/")+window.location.search+window.location.hash}var Fe=function(e){function n(n,t,a){e.call(this,n,t),a&&function(e){var n=Be(e);if(!/^\/#/.test(n))return window.location.replace(P(e+"/#"+n)),!0}(this.base)||ze()}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.setupListeners=function(){var e=this;if(!(this.listeners.length>0)){var n=this.router.options.scrollBehavior,t=ye&&n;t&&this.listeners.push(de());var a=function(){var n=e.current;ze()&&e.transitionTo(He(),(function(a){t&&ce(e.router,a,n,!0),ye||Ye(a.fullPath)}))},i=ye?"popstate":"hashchange";window.addEventListener(i,a),this.listeners.push((function(){window.removeEventListener(i,a)}))}},n.prototype.push=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){We(e.fullPath),ce(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this,i=this.current;this.transitionTo(e,(function(e){Ye(e.fullPath),ce(a.router,e,i,!1),n&&n(e)}),t)},n.prototype.go=function(e){window.history.go(e)},n.prototype.ensureURL=function(e){var n=this.current.fullPath;He()!==n&&(e?We(n):Ye(n))},n.prototype.getCurrentLocation=function(){return He()},n}(Me);function ze(){var e=He();return"/"===e.charAt(0)||(Ye("/"+e),!1)}function He(){var e=window.location.href,n=e.indexOf("#");return n<0?"":e=e.slice(n+1)}function Ve(e){var n=window.location.href,t=n.indexOf("#");return(t>=0?n.slice(0,t):n)+"#"+e}function We(e){ye?xe(Ve(e)):window.location.hash=e}function Ye(e){ye?Ce(Ve(e)):window.location.replace(Ve(e))}var $e=function(e){function n(n,t){e.call(this,n,t),this.stack=[],this.index=-1}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.push=function(e,n,t){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index+1).concat(e),a.index++,n&&n(e)}),t)},n.prototype.replace=function(e,n,t){var a=this;this.transitionTo(e,(function(e){a.stack=a.stack.slice(0,a.index).concat(e),n&&n(e)}),t)},n.prototype.go=function(e){var n=this,t=this.index+e;if(!(t<0||t>=this.stack.length)){var a=this.stack[t];this.confirmTransition(a,(function(){var e=n.current;n.index=t,n.updateRoute(a),n.router.afterHooks.forEach((function(n){n&&n(a,e)}))}),(function(e){Ae(e,De.duplicated)&&(n.index=t)}))}},n.prototype.getCurrentLocation=function(){var e=this.stack[this.stack.length-1];return e?e.fullPath:"/"},n.prototype.ensureURL=function(){},n}(Me),Ge=function(e){void 0===e&&(e={}),this.app=null,this.apps=[],this.options=e,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=ne(e.routes||[],this);var n=e.mode||"hash";switch(this.fallback="history"===n&&!ye&&!1!==e.fallback,this.fallback&&(n="hash"),K||(n="abstract"),this.mode=n,n){case"history":this.history=new Ne(this,e.base);break;case"hash":this.history=new Fe(this,e.base,this.fallback);break;case"abstract":this.history=new $e(this,e.base);break;default:0}},qe={currentRoute:{configurable:!0}};function Xe(e,n){return e.push(n),function(){var t=e.indexOf(n);t>-1&&e.splice(t,1)}}Ge.prototype.match=function(e,n,t){return this.matcher.match(e,n,t)},qe.currentRoute.get=function(){return this.history&&this.history.current},Ge.prototype.init=function(e){var n=this;if(this.apps.push(e),e.$once("hook:destroyed",(function(){var t=n.apps.indexOf(e);t>-1&&n.apps.splice(t,1),n.app===e&&(n.app=n.apps[0]||null),n.app||n.history.teardown()})),!this.app){this.app=e;var t=this.history;if(t instanceof Ne||t instanceof Fe){var a=function(e){t.setupListeners(),function(e){var a=t.current,i=n.options.scrollBehavior;ye&&i&&"fullPath"in e&&ce(n,e,a,!1)}(e)};t.transitionTo(t.getCurrentLocation(),a,a)}t.listen((function(e){n.apps.forEach((function(n){n._route=e}))}))}},Ge.prototype.beforeEach=function(e){return Xe(this.beforeHooks,e)},Ge.prototype.beforeResolve=function(e){return Xe(this.resolveHooks,e)},Ge.prototype.afterEach=function(e){return Xe(this.afterHooks,e)},Ge.prototype.onReady=function(e,n){this.history.onReady(e,n)},Ge.prototype.onError=function(e){this.history.onError(e)},Ge.prototype.push=function(e,n,t){var a=this;if(!n&&!t&&"undefined"!=typeof Promise)return new Promise((function(n,t){a.history.push(e,n,t)}));this.history.push(e,n,t)},Ge.prototype.replace=function(e,n,t){var a=this;if(!n&&!t&&"undefined"!=typeof Promise)return new Promise((function(n,t){a.history.replace(e,n,t)}));this.history.replace(e,n,t)},Ge.prototype.go=function(e){this.history.go(e)},Ge.prototype.back=function(){this.go(-1)},Ge.prototype.forward=function(){this.go(1)},Ge.prototype.getMatchedComponents=function(e){var n=e?e.matched?e:this.resolve(e).route:this.currentRoute;return n?[].concat.apply([],n.matched.map((function(e){return Object.keys(e.components).map((function(n){return e.components[n]}))}))):[]},Ge.prototype.resolve=function(e,n,t){var a=G(e,n=n||this.history.current,t,this),i=this.match(a,n),r=i.redirectedFrom||i.fullPath;return{location:a,route:i,href:function(e,n,t){var a="hash"===t?"#"+n:n;return e?P(e+"/"+a):a}(this.history.base,r,this.mode),normalizedTo:a,resolved:i}},Ge.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ge.prototype.addRoute=function(e,n){this.matcher.addRoute(e,n),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Ge.prototype.addRoutes=function(e){this.matcher.addRoutes(e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ge.prototype,qe),Ge.install=function e(n){if(!e.installed||q!==n){e.installed=!0,q=n;var t=function(e){return void 0!==e},a=function(e,n){var a=e.$options._parentVnode;t(a)&&t(a=a.data)&&t(a=a.registerRouteInstance)&&a(e,n)};n.mixin({beforeCreate:function(){t(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),n.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,a(this,this)},destroyed:function(){a(this)}}),Object.defineProperty(n.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(n.prototype,"$route",{get:function(){return this._routerRoot._route}}),n.component("RouterView",O),n.component("RouterLink",J);var i=n.config.optionMergeStrategies;i.beforeRouteEnter=i.beforeRouteLeave=i.beforeRouteUpdate=i.created}},Ge.version="3.5.3",Ge.isNavigationFailure=Ae,Ge.NavigationFailureType=De,Ge.START_LOCATION=y,K&&window.Vue&&window.Vue.use(Ge);var Je=Ge;t(19);var Ze={NotFound:()=>t.e(8).then(t.bind(null,337)),Layout:()=>Promise.all([t.e(0),t.e(2)]).then(t.bind(null,335))},Ke={"v-23203c85":()=>t.e(10).then(t.bind(null,340)),"v-38665300":()=>t.e(9).then(t.bind(null,341)),"v-a67dbfd2":()=>t.e(11).then(t.bind(null,342)),"v-2a8da932":()=>t.e(12).then(t.bind(null,343)),"v-51e101ad":()=>t.e(13).then(t.bind(null,344)),"v-4afbfd36":()=>t.e(14).then(t.bind(null,345)),"v-bf041b76":()=>t.e(15).then(t.bind(null,346)),"v-0d019285":()=>t.e(16).then(t.bind(null,347)),"v-198663b6":()=>t.e(17).then(t.bind(null,348)),"v-19707276":()=>t.e(18).then(t.bind(null,349)),"v-03f2ff85":()=>t.e(19).then(t.bind(null,350)),"v-9eee279a":()=>t.e(20).then(t.bind(null,351)),"v-38a45c31":()=>t.e(21).then(t.bind(null,352)),"v-5348cb45":()=>t.e(22).then(t.bind(null,353)),"v-06876285":()=>t.e(23).then(t.bind(null,354)),"v-3ff754d1":()=>t.e(24).then(t.bind(null,355)),"v-588697f6":()=>t.e(25).then(t.bind(null,356)),"v-7e3661ee":()=>t.e(26).then(t.bind(null,357)),"v-0a747e76":()=>t.e(27).then(t.bind(null,358)),"v-134e5af6":()=>t.e(28).then(t.bind(null,359)),"v-75b2bb13":()=>t.e(29).then(t.bind(null,360)),"v-20a23187":()=>t.e(30).then(t.bind(null,361)),"v-200d47a5":()=>t.e(31).then(t.bind(null,362)),"v-24adaff2":()=>t.e(32).then(t.bind(null,363)),"v-47165465":()=>t.e(33).then(t.bind(null,364)),"v-6549ec36":()=>t.e(34).then(t.bind(null,365)),"v-74068085":()=>t.e(35).then(t.bind(null,366)),"v-238a68f6":()=>t.e(36).then(t.bind(null,367)),"v-453a40bd":()=>t.e(37).then(t.bind(null,368)),"v-0b172339":()=>t.e(38).then(t.bind(null,369)),"v-de6b88b6":()=>t.e(39).then(t.bind(null,370)),"v-1ddd101b":()=>t.e(40).then(t.bind(null,371)),"v-e8b9ed36":()=>t.e(41).then(t.bind(null,372)),"v-16b1e745":()=>t.e(42).then(t.bind(null,373)),"v-35dcbfca":()=>t.e(43).then(t.bind(null,374)),"v-d0a858be":()=>t.e(44).then(t.bind(null,375)),"v-3b10c036":()=>t.e(45).then(t.bind(null,376)),"v-4741c4a5":()=>t.e(46).then(t.bind(null,377)),"v-2caf25f6":()=>t.e(47).then(t.bind(null,378)),"v-74866a76":()=>t.e(48).then(t.bind(null,379)),"v-1108a487":()=>t.e(49).then(t.bind(null,380)),"v-6ef86765":()=>t.e(50).then(t.bind(null,381)),"v-3367d225":()=>t.e(51).then(t.bind(null,382)),"v-f267ef2e":()=>t.e(52).then(t.bind(null,383)),"v-d15d95f6":()=>t.e(53).then(t.bind(null,384)),"v-0fdcd625":()=>t.e(54).then(t.bind(null,385)),"v-6d36d2e5":()=>t.e(55).then(t.bind(null,386)),"v-cd0b82b6":()=>t.e(56).then(t.bind(null,387)),"v-2dd725cb":()=>t.e(57).then(t.bind(null,388)),"v-6f02c1ef":()=>t.e(58).then(t.bind(null,389)),"v-0d4a6f05":()=>t.e(59).then(t.bind(null,390)),"v-3c815145":()=>t.e(60).then(t.bind(null,391)),"v-100be385":()=>t.e(61).then(t.bind(null,392)),"v-56d15cf6":()=>t.e(62).then(t.bind(null,393)),"v-197c1c45":()=>t.e(63).then(t.bind(null,394)),"v-5e97d636":()=>t.e(64).then(t.bind(null,395)),"v-12b65579":()=>t.e(65).then(t.bind(null,396)),"v-9cffebb6":()=>t.e(66).then(t.bind(null,397)),"v-319337c5":()=>t.e(67).then(t.bind(null,398)),"v-efc3b1f6":()=>t.e(68).then(t.bind(null,399)),"v-1e488555":()=>t.e(69).then(t.bind(null,400)),"v-7a714605":()=>t.e(70).then(t.bind(null,401)),"v-296b7fa9":()=>t.e(71).then(t.bind(null,402)),"v-37c12267":()=>t.e(72).then(t.bind(null,403)),"v-67767436":()=>t.e(73).then(t.bind(null,404)),"v-1c6afec5":()=>t.e(74).then(t.bind(null,405)),"v-d0a339b6":()=>t.e(75).then(t.bind(null,406)),"v-7931575a":()=>t.e(76).then(t.bind(null,407)),"v-55ebf045":()=>t.e(77).then(t.bind(null,408)),"v-367510e2":()=>t.e(78).then(t.bind(null,409)),"v-7ab66376":()=>t.e(79).then(t.bind(null,410)),"v-b2e2d0f6":()=>t.e(80).then(t.bind(null,411)),"v-1b9fd7a1":()=>t.e(81).then(t.bind(null,412)),"v-72b00d85":()=>t.e(82).then(t.bind(null,413)),"v-d6ba6b46":()=>t.e(83).then(t.bind(null,414)),"v-7a49a039":()=>t.e(84).then(t.bind(null,415)),"v-6709d785":()=>t.e(85).then(t.bind(null,416)),"v-185c4be5":()=>t.e(86).then(t.bind(null,417)),"v-e8eb7b36":()=>t.e(87).then(t.bind(null,418)),"v-62852e79":()=>t.e(88).then(t.bind(null,419)),"v-588b94d1":()=>t.e(89).then(t.bind(null,420)),"v-541cd645":()=>t.e(90).then(t.bind(null,421)),"v-32ba1d8d":()=>t.e(91).then(t.bind(null,422)),"v-8b3abaf6":()=>t.e(92).then(t.bind(null,423)),"v-020834aa":()=>t.e(93).then(t.bind(null,424)),"v-33fa7d65":()=>t.e(94).then(t.bind(null,425)),"v-14a55045":()=>t.e(95).then(t.bind(null,426)),"v-432826a3":()=>t.e(96).then(t.bind(null,427)),"v-93cee5ba":()=>t.e(97).then(t.bind(null,428)),"v-6f194a17":()=>t.e(98).then(t.bind(null,429)),"v-067c5bbe":()=>t.e(99).then(t.bind(null,430)),"v-4dd94c65":()=>t.e(100).then(t.bind(null,431)),"v-d2ac71a6":()=>t.e(101).then(t.bind(null,432)),"v-e03e0436":()=>t.e(102).then(t.bind(null,433)),"v-7733d2af":()=>t.e(103).then(t.bind(null,434)),"v-06e8aec5":()=>t.e(104).then(t.bind(null,435)),"v-ba437e3e":()=>t.e(105).then(t.bind(null,436)),"v-68fa6685":()=>t.e(106).then(t.bind(null,437)),"v-43b7a846":()=>t.e(107).then(t.bind(null,438)),"v-23ea0565":()=>t.e(108).then(t.bind(null,439)),"v-5a35b005":()=>t.e(109).then(t.bind(null,440)),"v-49df9785":()=>t.e(110).then(t.bind(null,441)),"v-7ee82865":()=>t.e(111).then(t.bind(null,442)),"v-062b988b":()=>t.e(112).then(t.bind(null,443)),"v-b4763136":()=>t.e(113).then(t.bind(null,444)),"v-4ed8b4ef":()=>t.e(114).then(t.bind(null,445)),"v-b1a78892":()=>t.e(115).then(t.bind(null,446)),"v-4ff88985":()=>t.e(116).then(t.bind(null,447)),"v-53991eeb":()=>t.e(117).then(t.bind(null,448)),"v-bca459f6":()=>t.e(119).then(t.bind(null,449)),"v-632afde5":()=>t.e(122).then(t.bind(null,450)),"v-59510185":()=>t.e(121).then(t.bind(null,451)),"v-097b8e4e":()=>t.e(123).then(t.bind(null,452)),"v-54e217b6":()=>t.e(124).then(t.bind(null,453)),"v-9303bdba":()=>t.e(125).then(t.bind(null,454)),"v-73ff348e":()=>t.e(126).then(t.bind(null,455)),"v-35b8e831":()=>t.e(127).then(t.bind(null,456)),"v-61db21c3":()=>t.e(128).then(t.bind(null,457)),"v-66a3f9bf":()=>t.e(129).then(t.bind(null,458)),"v-7c170851":()=>t.e(130).then(t.bind(null,459)),"v-3287dba8":()=>t.e(132).then(t.bind(null,460)),"v-f09e3db6":()=>t.e(131).then(t.bind(null,461)),"v-7b6f0e85":()=>t.e(133).then(t.bind(null,462)),"v-250e44d5":()=>t.e(134).then(t.bind(null,463)),"v-aecbafb6":()=>t.e(136).then(t.bind(null,464)),"v-47077485":()=>t.e(135).then(t.bind(null,465)),"v-7a3da8f1":()=>t.e(138).then(t.bind(null,466)),"v-5ff80d5a":()=>t.e(137).then(t.bind(null,467)),"v-2f65a8fe":()=>t.e(139).then(t.bind(null,468)),"v-73259cca":()=>t.e(140).then(t.bind(null,469)),"v-0e2a86e9":()=>t.e(141).then(t.bind(null,470)),"v-055ef8b6":()=>t.e(142).then(t.bind(null,471)),"v-2789e33f":()=>t.e(143).then(t.bind(null,472)),"v-75cd8345":()=>t.e(145).then(t.bind(null,473)),"v-29c13ef6":()=>t.e(144).then(t.bind(null,474)),"v-84a75af6":()=>t.e(146).then(t.bind(null,475)),"v-3f8fac2f":()=>t.e(147).then(t.bind(null,476)),"v-18949c4e":()=>t.e(149).then(t.bind(null,477)),"v-7ce84f69":()=>t.e(148).then(t.bind(null,478)),"v-afb8a42e":()=>t.e(150).then(t.bind(null,479)),"v-d2bee9be":()=>t.e(151).then(t.bind(null,480)),"v-3eb5f9e1":()=>t.e(153).then(t.bind(null,481)),"v-780ac3f6":()=>t.e(152).then(t.bind(null,482)),"v-4c3fbf36":()=>t.e(154).then(t.bind(null,483)),"v-48b49fde":()=>t.e(155).then(t.bind(null,484)),"v-1c7c991e":()=>t.e(156).then(t.bind(null,485)),"v-3e9146bd":()=>t.e(157).then(t.bind(null,486)),"v-773a2a6b":()=>t.e(158).then(t.bind(null,487)),"v-6b745d65":()=>t.e(159).then(t.bind(null,488)),"v-80c4dfea":()=>t.e(160).then(t.bind(null,489)),"v-75b52a57":()=>t.e(161).then(t.bind(null,490)),"v-221e424f":()=>t.e(162).then(t.bind(null,491)),"v-685e35a5":()=>t.e(163).then(t.bind(null,492)),"v-067ab7f6":()=>t.e(164).then(t.bind(null,493)),"v-6876a209":()=>t.e(165).then(t.bind(null,494)),"v-3ae8d0b6":()=>t.e(166).then(t.bind(null,495)),"v-5ad7f765":()=>t.e(167).then(t.bind(null,496)),"v-55746476":()=>t.e(168).then(t.bind(null,497)),"v-4529055c":()=>t.e(169).then(t.bind(null,498)),"v-cbca35b6":()=>t.e(170).then(t.bind(null,499)),"v-dfe3a406":()=>t.e(4).then(t.bind(null,500)),"v-26241ba9":()=>t.e(171).then(t.bind(null,501)),"v-38e8b165":()=>t.e(172).then(t.bind(null,502)),"v-7a90f145":()=>t.e(174).then(t.bind(null,503)),"v-4a93cba5":()=>t.e(175).then(t.bind(null,504)),"v-26d33183":()=>t.e(173).then(t.bind(null,505)),"v-6936c725":()=>t.e(176).then(t.bind(null,506)),"v-4160ce05":()=>t.e(177).then(t.bind(null,507)),"v-6fc6c8e5":()=>t.e(178).then(t.bind(null,508)),"v-1907f51e":()=>t.e(179).then(t.bind(null,509)),"v-4eb521cf":()=>t.e(180).then(t.bind(null,510)),"v-93702f36":()=>t.e(181).then(t.bind(null,511)),"v-a053eff6":()=>t.e(182).then(t.bind(null,512)),"v-5332aa47":()=>t.e(183).then(t.bind(null,513)),"v-0c574d84":()=>t.e(184).then(t.bind(null,514)),"v-32a3884a":()=>t.e(185).then(t.bind(null,515)),"v-5ae5fc53":()=>t.e(186).then(t.bind(null,516)),"v-b42df276":()=>t.e(187).then(t.bind(null,517)),"v-c76cb662":()=>t.e(188).then(t.bind(null,518)),"v-3294305f":()=>t.e(189).then(t.bind(null,519)),"v-12361bf6":()=>t.e(190).then(t.bind(null,520)),"v-6dca2ac3":()=>t.e(191).then(t.bind(null,521)),"v-1b036bdf":()=>t.e(192).then(t.bind(null,522)),"v-56ffc565":()=>t.e(193).then(t.bind(null,523)),"v-2eef3a85":()=>t.e(194).then(t.bind(null,524)),"v-03bfee3e":()=>t.e(195).then(t.bind(null,525)),"v-bb2f4e76":()=>t.e(196).then(t.bind(null,526)),"v-ee2054b2":()=>t.e(197).then(t.bind(null,527)),"v-31e27a01":()=>t.e(198).then(t.bind(null,528)),"v-434629d5":()=>t.e(199).then(t.bind(null,529)),"v-4da19405":()=>t.e(200).then(t.bind(null,530)),"v-66fe6f5d":()=>t.e(201).then(t.bind(null,531)),"v-068132b6":()=>t.e(202).then(t.bind(null,532)),"v-86e6a23e":()=>t.e(203).then(t.bind(null,533)),"v-d4755bb6":()=>t.e(204).then(t.bind(null,534)),"v-4ad9ddf9":()=>t.e(205).then(t.bind(null,535)),"v-6abbef36":()=>t.e(206).then(t.bind(null,536)),"v-031ce7fe":()=>t.e(207).then(t.bind(null,537)),"v-b091f4f6":()=>t.e(208).then(t.bind(null,538)),"v-ee799cb6":()=>t.e(209).then(t.bind(null,539)),"v-0bf9eaa5":()=>t.e(210).then(t.bind(null,540)),"v-1e95cf01":()=>t.e(211).then(t.bind(null,541)),"v-5fa74ee5":()=>t.e(212).then(t.bind(null,542)),"v-614ec58e":()=>t.e(213).then(t.bind(null,543)),"v-7e4ade5a":()=>t.e(214).then(t.bind(null,544)),"v-1d315ea5":()=>t.e(215).then(t.bind(null,545)),"v-cd72e3f6":()=>t.e(216).then(t.bind(null,546)),"v-3573ab39":()=>t.e(217).then(t.bind(null,547)),"v-300471a5":()=>t.e(218).then(t.bind(null,548)),"v-0d0a7615":()=>t.e(219).then(t.bind(null,549)),"v-a078b402":()=>t.e(220).then(t.bind(null,550)),"v-2b6f5925":()=>t.e(221).then(t.bind(null,551)),"v-e3cb5bb6":()=>t.e(223).then(t.bind(null,552)),"v-3fc5bb45":()=>t.e(222).then(t.bind(null,553)),"v-2ce89747":()=>t.e(225).then(t.bind(null,554)),"v-79e56a25":()=>t.e(224).then(t.bind(null,555)),"v-0a3e57a5":()=>t.e(226).then(t.bind(null,556)),"v-f72532b6":()=>t.e(227).then(t.bind(null,557)),"v-823e326a":()=>t.e(228).then(t.bind(null,558)),"v-39d68593":()=>t.e(229).then(t.bind(null,559)),"v-47e586a5":()=>t.e(230).then(t.bind(null,560)),"v-252911e3":()=>t.e(231).then(t.bind(null,561)),"v-d3338236":()=>t.e(232).then(t.bind(null,562)),"v-42b89576":()=>t.e(233).then(t.bind(null,563)),"v-62fa92fb":()=>t.e(234).then(t.bind(null,564)),"v-4205b905":()=>t.e(235).then(t.bind(null,565)),"v-d5fcd9da":()=>t.e(236).then(t.bind(null,566)),"v-2c4bdff1":()=>t.e(237).then(t.bind(null,567)),"v-42597776":()=>t.e(238).then(t.bind(null,568)),"v-5ea2edf2":()=>t.e(239).then(t.bind(null,569)),"v-383af825":()=>t.e(240).then(t.bind(null,570)),"v-136b6525":()=>t.e(241).then(t.bind(null,571)),"v-61b2dc05":()=>t.e(242).then(t.bind(null,572)),"v-131e3c29":()=>t.e(243).then(t.bind(null,573)),"v-0649723a":()=>t.e(244).then(t.bind(null,574)),"v-8592c41e":()=>t.e(120).then(t.bind(null,575)),"v-44b60cf6":()=>t.e(245).then(t.bind(null,576)),"v-23b86e93":()=>t.e(248).then(t.bind(null,577)),"v-2ca5a245":()=>t.e(249).then(t.bind(null,578)),"v-7b63aa76":()=>t.e(250).then(t.bind(null,579)),"v-81d9cfbe":()=>t.e(251).then(t.bind(null,580)),"v-d1d12886":()=>t.e(252).then(t.bind(null,581)),"v-3260ba2d":()=>t.e(253).then(t.bind(null,582)),"v-3e0acdf7":()=>t.e(254).then(t.bind(null,583)),"v-2090b8f6":()=>t.e(255).then(t.bind(null,584)),"v-388e70b7":()=>t.e(257).then(t.bind(null,585)),"v-4e932fb6":()=>t.e(256).then(t.bind(null,586)),"v-a44d8d6a":()=>t.e(258).then(t.bind(null,587)),"v-378fbdf6":()=>t.e(259).then(t.bind(null,588)),"v-35b265e5":()=>t.e(261).then(t.bind(null,589)),"v-31d48fbb":()=>t.e(260).then(t.bind(null,590)),"v-75e164b6":()=>t.e(118).then(t.bind(null,591)),"v-2e0fa86a":()=>t.e(247).then(t.bind(null,592)),"v-05954049":()=>t.e(246).then(t.bind(null,593))};function Qe(e){const n=Object.create(null);return function(t){return n[t]||(n[t]=e(t))}}const en=/-(\w)/g,nn=Qe(e=>e.replace(en,(e,n)=>n?n.toUpperCase():"")),tn=/\B([A-Z])/g,an=Qe(e=>e.replace(tn,"-$1").toLowerCase()),rn=Qe(e=>e.charAt(0).toUpperCase()+e.slice(1));function on(e,n){if(!n)return;if(e(n))return e(n);return n.includes("-")?e(rn(nn(n))):e(rn(n))||e(an(n))}const sn=Object.assign({},Ze,Ke),ln=e=>sn[e],dn=e=>Ke[e],cn=e=>Ze[e],un=e=>o.a.component(e);function hn(e){return on(dn,e)}function pn(e){return on(cn,e)}function fn(e){return on(ln,e)}function mn(e){return on(un,e)}function gn(...e){return Promise.all(e.filter(e=>e).map(async e=>{if(!mn(e)&&fn(e)){const n=await fn(e)();o.a.component(e,n.default)}}))}function bn(e,n){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[e]=n)}var vn=t(116),yn=t.n(vn),xn=t(117),Cn=t.n(xn),Tn={created(){if(this.siteMeta=this.$site.headTags.filter(([e])=>"meta"===e).map(([e,n])=>n),this.$ssrContext){const n=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(e=n)?e.map(e=>{let n="<meta";return Object.keys(e).forEach(t=>{n+=` ${t}="${Cn()(e[t])}"`}),n+">"}).join("\n    "):"",this.$ssrContext.canonicalLink=wn(this.$canonicalUrl)}var e},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const e=this.getMergedMetaTags();this.currentMetaTags=On(e,this.currentMetaTags)},getMergedMetaTags(){const e=this.$page.frontmatter.meta||[];return yn()([{name:"description",content:this.$description}],e,this.siteMeta,kn)},updateCanonicalLink(){Dn(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",wn(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){On(null,this.currentMetaTags),Dn()}};function Dn(){const e=document.querySelector("link[rel='canonical']");e&&e.remove()}function wn(e=""){return e?`<link href="${e}" rel="canonical" />`:""}function On(e,n){if(n&&[...n].filter(e=>e.parentNode===document.head).forEach(e=>document.head.removeChild(e)),e)return e.map(e=>{const n=document.createElement("meta");return Object.keys(e).forEach(t=>{n.setAttribute(t,e[t])}),document.head.appendChild(n),n})}function kn(e){for(const n of["name","property","itemprop"])if(e.hasOwnProperty(n))return e[n]+n;return JSON.stringify(e)}var Sn=t(118),Pn={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:t.n(Sn)()((function(){this.setActiveHash()}),300),setActiveHash(){const e=[].slice.call(document.querySelectorAll(".sidebar-link")),n=[].slice.call(document.querySelectorAll(".header-anchor")).filter(n=>e.some(e=>e.hash===n.hash)),t=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),i=window.innerHeight+t;for(let e=0;e<n.length;e++){const r=n[e],o=n[e+1],s=0===e&&0===t||t>=r.parentElement.offsetTop+10&&(!o||t<o.parentElement.offsetTop-10),l=decodeURIComponent(this.$route.hash);if(s&&l!==decodeURIComponent(r.hash)){const t=r;if(i===a)for(let t=e+1;t<n.length;t++)if(l===decodeURIComponent(n[t].hash))return;return this.$vuepress.$set("disableScrollBehavior",!0),void this.$router.replace(decodeURIComponent(t.hash),()=>{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},An=t(41),Rn=t.n(An),In={mounted(){Rn.a.configure({showSpinner:!1}),this.$router.beforeEach((e,n,t)=>{e.path===n.path||o.a.component(e.name)||Rn.a.start(),t()}),this.$router.afterEach(()=>{Rn.a.done(),this.isSidebarOpen=!1})}},_n={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let e={};return e[this.options.align]="7.5px",e},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(e){let n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null},copyToClipboard(e){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let e=document.createElement("textarea");document.body.appendChild(e),e.value=this.code,e.select(),document.execCommand("Copy"),e.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let e=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${e.r}, ${e.g}, ${e.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Ln=(t(264),t(6)),En=Object(Ln.a)(_n,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{staticClass:"code-copy"},[t("svg",{class:e.iconClass,style:e.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:e.copyToClipboard}},[t("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),e._v(" "),t("path",{attrs:{fill:e.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),e._v(" "),t("span",{class:e.success?"success":"",style:e.alignStyle},[e._v("\n        "+e._s(e.options.successText)+"\n    ")])])}),[],!1,null,"49140617",null).exports,Mn=(t(265),{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(e=>{if(e.classList.contains("code-copy-added"))return;let n=new(o.a.extend(En));n.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},n.code=e.innerText,n.parent=e,n.$mount(),e.classList.add("code-copy-added"),e.appendChild(n.$el)})},100)}}}),jn=t(15),Un=t.n(jn),Nn=t(119),Bn=t(120),Fn=t(31),zn=t(32),Hn=t(114),Vn=o.a.extend({components:{DropdownLink:Hn.a},props:{item:{type:Object,required:!0}}}),Wn=(t(269),Object(Ln.a)(Vn,(function(){var e=this.$createElement,n=this._self._c||e;return n("div",{staticClass:"versions-dropdown nav-item can-hide"},[n("dropdown-link",{attrs:{item:this.item}})],1)}),[],!1,null,"3dd359e2",null).exports);const Yn=Un.a.filters||{};function $n(e,n,t){let a=Object(Fn.resolveTemplate)(e,n,t);a.startsWith("/")&&(a=`${window.location.origin}${a}`);const i=`${window.location.origin}${Un.a.base}`;return a.startsWith(i)?a.substring(i.length)+"/":a}function Gn(e,n){if(e.exclude){const t=new RegExp(e.exclude);n=n.filter(({name:e})=>!e.match(t))}let t=Object(zn.collapseVersions)(e,n);return e.limit>0&&(t=t.slice(0,e.limit)),t.map(n=>{const{target:t}=e,a=Object(zn.describeVersion)(n);return{target:t,text:Object(Fn.resolveTemplate)(e.text,a,Yn),link:$n(e.link,a,Yn)}})}function qn(e,n){const t=e.menu;if(!t)return{};const a=n.find(n=>n.name===e.version)||{name:e.version,tag:null},i=Object(zn.describeVersion)(a),r=Object(Fn.resolveTemplate)(t.text,i,Yn);return{items:function e(n,t,a){const i=[];for(const r of n)if("versions"===r.type)i.push(...Gn({group:"minor",link:"/{{version}}/",text:"{{version}}",...r},t));else{const n=Object(zn.describeVersion)(a),o=Object(Fn.resolveTemplate)(r.text||"",n,Yn);r.items?i.push({...r,text:o,type:"links",items:e(r.items,t,a)}):i.push({...r,text:o,link:$n(r.link||"",n,Yn)})}return i}(t.items||[],n,a),text:r}}const Xn=o.a.observable({inserted:!1,dropdown:{}});var Jn=[Tn,Pn,In,Mn,{async mounted(){{const e=qn(Un.a,Un.a.versions||[]);o.a.set(Xn,"dropdown",e)}try{const e=await Object(Bn.fetchNpmVersions)(fetch,Un.a.name),n=qn(Un.a,e);Object.assign(Xn.dropdown,n)}catch(e){console.error("Failed to retrieve available versions")}},async updated(){const e=this.$router;if(!Xn.inserted){for(const n of Un.a.menu.locations){const t={item:Xn.dropdown},a=new Wn({router:e,propsData:t}).$mount();Object(Nn.injectElement)(this.$el,a.$el,n)}Xn.inserted=!0}}}],Zn={name:"GlobalLayout",computed:{layout(){const e=this.getLayout();return bn("layout",e),o.a.component(e)}},methods:{getLayout(){if(this.$page.path){const e=this.$page.frontmatter.layout;return e&&(this.$vuepress.getLayoutAsyncComponent(e)||this.$vuepress.getVueComponent(e))?e:"Layout"}return"NotFound"}}},Kn=Object(Ln.a)(Zn,(function(){var e=this.$createElement;return(this._self._c||e)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(e,n,t){switch(n){case"components":e[n]||(e[n]={}),Object.assign(e[n],t);break;case"mixins":e[n]||(e[n]=[]),e[n].push(...t);break;default:throw new Error("Unknown option name.")}}(Kn,"mixins",Jn);const Qn=[{name:"v-23203c85",path:"/api/classes/Animation.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-23203c85").then(t)}},{name:"v-38665300",path:"/api/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-38665300").then(t)}},{path:"/api/index.html",redirect:"/api/"},{name:"v-a67dbfd2",path:"/api/classes/Animations.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-a67dbfd2").then(t)}},{name:"v-2a8da932",path:"/api/classes/Animator.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2a8da932").then(t)}},{name:"v-51e101ad",path:"/api/classes/BasePlatform.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-51e101ad").then(t)}},{name:"v-4afbfd36",path:"/api/classes/BasicPlatform.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4afbfd36").then(t)}},{name:"v-bf041b76",path:"/api/classes/Chart.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-bf041b76").then(t)}},{name:"v-0d019285",path:"/api/classes/DatasetController.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0d019285").then(t)}},{name:"v-198663b6",path:"/api/classes/DomPlatform.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-198663b6").then(t)}},{name:"v-19707276",path:"/api/classes/Scale.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-19707276").then(t)}},{name:"v-03f2ff85",path:"/api/enums/DecimationAlgorithm.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-03f2ff85").then(t)}},{name:"v-9eee279a",path:"/api/enums/UpdateModeEnum.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-9eee279a").then(t)}},{name:"v-38a45c31",path:"/api/interfaces/ActiveDataPoint.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-38a45c31").then(t)}},{name:"v-5348cb45",path:"/api/interfaces/ActiveElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5348cb45").then(t)}},{name:"v-06876285",path:"/api/interfaces/AnimationEvent.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-06876285").then(t)}},{name:"v-3ff754d1",path:"/api/interfaces/ArcBorderRadius.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3ff754d1").then(t)}},{name:"v-588697f6",path:"/api/interfaces/ArcElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-588697f6").then(t)}},{name:"v-7e3661ee",path:"/api/interfaces/ArcHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7e3661ee").then(t)}},{name:"v-0a747e76",path:"/api/interfaces/ArcOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0a747e76").then(t)}},{name:"v-134e5af6",path:"/api/interfaces/ArcProps.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-134e5af6").then(t)}},{name:"v-75b2bb13",path:"/api/interfaces/BarControllerChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-75b2bb13").then(t)}},{name:"v-20a23187",path:"/api/interfaces/BarControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-20a23187").then(t)}},{name:"v-200d47a5",path:"/api/interfaces/BarElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-200d47a5").then(t)}},{name:"v-24adaff2",path:"/api/interfaces/BarHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-24adaff2").then(t)}},{name:"v-47165465",path:"/api/interfaces/BarOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-47165465").then(t)}},{name:"v-6549ec36",path:"/api/interfaces/BarProps.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6549ec36").then(t)}},{name:"v-74068085",path:"/api/interfaces/BorderRadius.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-74068085").then(t)}},{name:"v-238a68f6",path:"/api/interfaces/BubbleControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-238a68f6").then(t)}},{name:"v-453a40bd",path:"/api/interfaces/BubbleDataPoint.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-453a40bd").then(t)}},{name:"v-0b172339",path:"/api/interfaces/CartesianScaleOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0b172339").then(t)}},{name:"v-de6b88b6",path:"/api/interfaces/CartesianScaleTypeRegistry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-de6b88b6").then(t)}},{name:"v-1ddd101b",path:"/api/interfaces/ChartArea.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1ddd101b").then(t)}},{name:"v-e8b9ed36",path:"/api/interfaces/ChartComponent.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-e8b9ed36").then(t)}},{name:"v-16b1e745",path:"/api/interfaces/ChartConfiguration.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-16b1e745").then(t)}},{name:"v-35dcbfca",path:"/api/interfaces/ChartConfigurationCustomTypesPerDataset.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-35dcbfca").then(t)}},{name:"v-d0a858be",path:"/api/interfaces/ChartData.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d0a858be").then(t)}},{name:"v-3b10c036",path:"/api/interfaces/ChartDataCustomTypesPerDataset.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3b10c036").then(t)}},{name:"v-4741c4a5",path:"/api/interfaces/ChartDatasetProperties.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4741c4a5").then(t)}},{name:"v-2caf25f6",path:"/api/interfaces/ChartDatasetPropertiesCustomTypesPerDataset.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2caf25f6").then(t)}},{name:"v-74866a76",path:"/api/interfaces/ChartEvent.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-74866a76").then(t)}},{name:"v-1108a487",path:"/api/interfaces/ChartTypeRegistry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1108a487").then(t)}},{name:"v-6ef86765",path:"/api/interfaces/CommonElementOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6ef86765").then(t)}},{name:"v-3367d225",path:"/api/interfaces/CommonHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3367d225").then(t)}},{name:"v-f267ef2e",path:"/api/interfaces/ComplexFillTarget.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-f267ef2e").then(t)}},{name:"v-d15d95f6",path:"/api/interfaces/ControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d15d95f6").then(t)}},{name:"v-0fdcd625",path:"/api/interfaces/CoreChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0fdcd625").then(t)}},{name:"v-6d36d2e5",path:"/api/interfaces/CoreInteractionOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6d36d2e5").then(t)}},{name:"v-cd0b82b6",path:"/api/interfaces/CoreScaleOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-cd0b82b6").then(t)}},{name:"v-2dd725cb",path:"/api/interfaces/DatasetControllerChartComponent.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2dd725cb").then(t)}},{name:"v-6f02c1ef",path:"/api/interfaces/DateAdapter.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6f02c1ef").then(t)}},{name:"v-0d4a6f05",path:"/api/interfaces/Defaults.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0d4a6f05").then(t)}},{name:"v-3c815145",path:"/api/interfaces/DoughnutAnimationOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3c815145").then(t)}},{name:"v-100be385",path:"/api/interfaces/DoughnutController.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-100be385").then(t)}},{name:"v-56d15cf6",path:"/api/interfaces/DoughnutControllerChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-56d15cf6").then(t)}},{name:"v-197c1c45",path:"/api/interfaces/DoughnutControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-197c1c45").then(t)}},{name:"v-5e97d636",path:"/api/interfaces/DoughnutMetaExtensions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5e97d636").then(t)}},{name:"v-12b65579",path:"/api/interfaces/Element.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-12b65579").then(t)}},{name:"v-9cffebb6",path:"/api/interfaces/ElementOptionsByType.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-9cffebb6").then(t)}},{name:"v-319337c5",path:"/api/interfaces/ExtendedPlugin.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-319337c5").then(t)}},{name:"v-efc3b1f6",path:"/api/interfaces/FillerControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-efc3b1f6").then(t)}},{name:"v-1e488555",path:"/api/interfaces/FillerOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1e488555").then(t)}},{name:"v-7a714605",path:"/api/interfaces/FontSpec.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7a714605").then(t)}},{name:"v-296b7fa9",path:"/api/interfaces/GridLineOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-296b7fa9").then(t)}},{name:"v-37c12267",path:"/api/interfaces/InteractionItem.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-37c12267").then(t)}},{name:"v-67767436",path:"/api/interfaces/InteractionModeMap.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-67767436").then(t)}},{name:"v-1c6afec5",path:"/api/interfaces/InteractionOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1c6afec5").then(t)}},{name:"v-d0a339b6",path:"/api/interfaces/LayoutItem.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d0a339b6").then(t)}},{name:"v-7931575a",path:"/api/interfaces/LegendElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7931575a").then(t)}},{name:"v-55ebf045",path:"/api/interfaces/LegendItem.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-55ebf045").then(t)}},{name:"v-367510e2",path:"/api/interfaces/LegendOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-367510e2").then(t)}},{name:"v-7ab66376",path:"/api/interfaces/LineControllerChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7ab66376").then(t)}},{name:"v-b2e2d0f6",path:"/api/interfaces/LineControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-b2e2d0f6").then(t)}},{name:"v-1b9fd7a1",path:"/api/interfaces/LineElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1b9fd7a1").then(t)}},{name:"v-72b00d85",path:"/api/interfaces/LineHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-72b00d85").then(t)}},{name:"v-d6ba6b46",path:"/api/interfaces/LineOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d6ba6b46").then(t)}},{name:"v-7a49a039",path:"/api/interfaces/LineProps.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7a49a039").then(t)}},{name:"v-6709d785",path:"/api/interfaces/ParsingOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6709d785").then(t)}},{name:"v-185c4be5",path:"/api/interfaces/Plugin.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-185c4be5").then(t)}},{name:"v-e8eb7b36",path:"/api/interfaces/PluginChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-e8eb7b36").then(t)}},{name:"v-62852e79",path:"/api/interfaces/PluginOptionsByType.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-62852e79").then(t)}},{name:"v-588b94d1",path:"/api/interfaces/Point.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-588b94d1").then(t)}},{name:"v-541cd645",path:"/api/interfaces/PointElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-541cd645").then(t)}},{name:"v-32ba1d8d",path:"/api/interfaces/PointHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-32ba1d8d").then(t)}},{name:"v-8b3abaf6",path:"/api/interfaces/PointOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-8b3abaf6").then(t)}},{name:"v-020834aa",path:"/api/interfaces/PointPrefixedHoverOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-020834aa").then(t)}},{name:"v-33fa7d65",path:"/api/interfaces/PointPrefixedOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-33fa7d65").then(t)}},{name:"v-14a55045",path:"/api/interfaces/PointProps.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-14a55045").then(t)}},{name:"v-432826a3",path:"/api/interfaces/PolarAreaController.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-432826a3").then(t)}},{name:"v-93cee5ba",path:"/api/interfaces/PolarAreaControllerChartOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-93cee5ba").then(t)}},{name:"v-6f194a17",path:"/api/interfaces/PolarAreaControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6f194a17").then(t)}},{name:"v-067c5bbe",path:"/api/interfaces/RadarControllerDatasetOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-067c5bbe").then(t)}},{name:"v-4dd94c65",path:"/api/interfaces/RadialLinearScale.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4dd94c65").then(t)}},{name:"v-d2ac71a6",path:"/api/interfaces/RadialScaleTypeRegistry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d2ac71a6").then(t)}},{name:"v-e03e0436",path:"/api/interfaces/Registry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-e03e0436").then(t)}},{name:"v-7733d2af",path:"/api/interfaces/ScaleTypeRegistry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7733d2af").then(t)}},{name:"v-06e8aec5",path:"/api/interfaces/ScatterDataPoint.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-06e8aec5").then(t)}},{name:"v-ba437e3e",path:"/api/interfaces/ScriptableCartesianScaleContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-ba437e3e").then(t)}},{name:"v-68fa6685",path:"/api/interfaces/ScriptableChartContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-68fa6685").then(t)}},{name:"v-43b7a846",path:"/api/interfaces/ScriptableContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-43b7a846").then(t)}},{name:"v-23ea0565",path:"/api/interfaces/ScriptableLineSegmentContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-23ea0565").then(t)}},{name:"v-5a35b005",path:"/api/interfaces/ScriptableScaleContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5a35b005").then(t)}},{name:"v-49df9785",path:"/api/interfaces/ScriptableScalePointLabelContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-49df9785").then(t)}},{name:"v-7ee82865",path:"/api/interfaces/ScriptableTooltipContext.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7ee82865").then(t)}},{name:"v-062b988b",path:"/api/interfaces/Segment.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-062b988b").then(t)}},{name:"v-b4763136",path:"/api/interfaces/Tick.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-b4763136").then(t)}},{name:"v-4ed8b4ef",path:"/api/interfaces/TickOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4ed8b4ef").then(t)}},{name:"v-b1a78892",path:"/api/interfaces/TimeScale.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-b1a78892").then(t)}},{name:"v-4ff88985",path:"/api/interfaces/TitleOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4ff88985").then(t)}},{name:"v-53991eeb",path:"/api/interfaces/Tooltip.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-53991eeb").then(t)}},{name:"v-bca459f6",path:"/api/interfaces/TooltipItem.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-bca459f6").then(t)}},{name:"v-632afde5",path:"/api/interfaces/TooltipOptions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-632afde5").then(t)}},{name:"v-59510185",path:"/api/interfaces/TooltipModel.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-59510185").then(t)}},{name:"v-097b8e4e",path:"/api/interfaces/TooltipPosition.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-097b8e4e").then(t)}},{name:"v-54e217b6",path:"/api/interfaces/TooltipPositionerMap.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-54e217b6").then(t)}},{name:"v-9303bdba",path:"/api/interfaces/TypedRegistry.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-9303bdba").then(t)}},{name:"v-73ff348e",path:"/api/interfaces/VisualElement.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-73ff348e").then(t)}},{name:"v-35b8e831",path:"/axes/_common.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-35b8e831").then(t)}},{name:"v-61db21c3",path:"/axes/_common_ticks.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-61db21c3").then(t)}},{name:"v-66a3f9bf",path:"/axes/cartesian/_common.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-66a3f9bf").then(t)}},{name:"v-7c170851",path:"/axes/cartesian/_common_ticks.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7c170851").then(t)}},{name:"v-3287dba8",path:"/axes/cartesian/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3287dba8").then(t)}},{path:"/axes/cartesian/index.html",redirect:"/axes/cartesian/"},{name:"v-f09e3db6",path:"/axes/cartesian/category.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-f09e3db6").then(t)}},{name:"v-7b6f0e85",path:"/axes/cartesian/linear.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7b6f0e85").then(t)}},{name:"v-250e44d5",path:"/axes/cartesian/logarithmic.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-250e44d5").then(t)}},{name:"v-aecbafb6",path:"/axes/cartesian/timeseries.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-aecbafb6").then(t)}},{name:"v-47077485",path:"/axes/cartesian/time.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-47077485").then(t)}},{name:"v-7a3da8f1",path:"/axes/labelling.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7a3da8f1").then(t)}},{name:"v-5ff80d5a",path:"/axes/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5ff80d5a").then(t)}},{path:"/axes/index.html",redirect:"/axes/"},{name:"v-2f65a8fe",path:"/axes/radial/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2f65a8fe").then(t)}},{path:"/axes/radial/index.html",redirect:"/axes/radial/"},{name:"v-73259cca",path:"/axes/radial/linear.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-73259cca").then(t)}},{name:"v-0e2a86e9",path:"/axes/styling.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0e2a86e9").then(t)}},{name:"v-055ef8b6",path:"/charts/area.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-055ef8b6").then(t)}},{name:"v-2789e33f",path:"/charts/bar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2789e33f").then(t)}},{name:"v-75cd8345",path:"/charts/doughnut.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-75cd8345").then(t)}},{name:"v-29c13ef6",path:"/charts/bubble.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-29c13ef6").then(t)}},{name:"v-84a75af6",path:"/charts/line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-84a75af6").then(t)}},{name:"v-3f8fac2f",path:"/charts/mixed.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3f8fac2f").then(t)}},{name:"v-18949c4e",path:"/charts/radar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-18949c4e").then(t)}},{name:"v-7ce84f69",path:"/charts/polar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7ce84f69").then(t)}},{name:"v-afb8a42e",path:"/charts/scatter.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-afb8a42e").then(t)}},{name:"v-d2bee9be",path:"/configuration/animations.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d2bee9be").then(t)}},{name:"v-3eb5f9e1",path:"/configuration/decimation.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3eb5f9e1").then(t)}},{name:"v-780ac3f6",path:"/configuration/canvas-background.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-780ac3f6").then(t)}},{name:"v-4c3fbf36",path:"/configuration/device-pixel-ratio.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4c3fbf36").then(t)}},{name:"v-48b49fde",path:"/configuration/elements.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-48b49fde").then(t)}},{name:"v-1c7c991e",path:"/configuration/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1c7c991e").then(t)}},{path:"/configuration/index.html",redirect:"/configuration/"},{name:"v-3e9146bd",path:"/configuration/interactions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3e9146bd").then(t)}},{name:"v-773a2a6b",path:"/configuration/layout.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-773a2a6b").then(t)}},{name:"v-6b745d65",path:"/configuration/legend.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6b745d65").then(t)}},{name:"v-80c4dfea",path:"/configuration/locale.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-80c4dfea").then(t)}},{name:"v-75b52a57",path:"/configuration/responsive.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-75b52a57").then(t)}},{name:"v-221e424f",path:"/configuration/subtitle.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-221e424f").then(t)}},{name:"v-685e35a5",path:"/configuration/title.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-685e35a5").then(t)}},{name:"v-067ab7f6",path:"/configuration/tooltip.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-067ab7f6").then(t)}},{name:"v-6876a209",path:"/developers/api.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6876a209").then(t)}},{name:"v-3ae8d0b6",path:"/developers/axes.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3ae8d0b6").then(t)}},{name:"v-5ad7f765",path:"/developers/charts.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5ad7f765").then(t)}},{name:"v-55746476",path:"/developers/contributing.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-55746476").then(t)}},{name:"v-4529055c",path:"/developers/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4529055c").then(t)}},{path:"/developers/index.html",redirect:"/developers/"},{name:"v-cbca35b6",path:"/developers/publishing.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-cbca35b6").then(t)}},{name:"v-dfe3a406",path:"/developers/plugins.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-dfe3a406").then(t)}},{name:"v-26241ba9",path:"/developers/updates.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-26241ba9").then(t)}},{name:"v-38e8b165",path:"/general/accessibility.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-38e8b165").then(t)}},{name:"v-7a90f145",path:"/general/data-structures.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7a90f145").then(t)}},{name:"v-4a93cba5",path:"/general/fonts.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4a93cba5").then(t)}},{name:"v-26d33183",path:"/general/colors.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-26d33183").then(t)}},{name:"v-6936c725",path:"/general/options.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6936c725").then(t)}},{name:"v-4160ce05",path:"/general/padding.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4160ce05").then(t)}},{name:"v-6fc6c8e5",path:"/general/performance.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6fc6c8e5").then(t)}},{name:"v-1907f51e",path:"/getting-started/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1907f51e").then(t)}},{path:"/getting-started/index.html",redirect:"/getting-started/"},{name:"v-4eb521cf",path:"/getting-started/installation.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4eb521cf").then(t)}},{name:"v-93702f36",path:"/getting-started/integration.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-93702f36").then(t)}},{name:"v-a053eff6",path:"/getting-started/usage.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-a053eff6").then(t)}},{name:"v-5332aa47",path:"/getting-started/v3-migration.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5332aa47").then(t)}},{name:"v-0c574d84",path:"/",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0c574d84").then(t)}},{path:"/index.html",redirect:"/"},{name:"v-32a3884a",path:"/samples/advanced/data-decimation.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-32a3884a").then(t)}},{name:"v-5ae5fc53",path:"/samples/advanced/derived-axis-type.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5ae5fc53").then(t)}},{name:"v-b42df276",path:"/samples/advanced/derived-chart-type.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-b42df276").then(t)}},{name:"v-c76cb662",path:"/samples/advanced/linear-gradient.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-c76cb662").then(t)}},{name:"v-3294305f",path:"/samples/advanced/programmatic-events.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3294305f").then(t)}},{name:"v-12361bf6",path:"/samples/advanced/progress-bar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-12361bf6").then(t)}},{name:"v-6dca2ac3",path:"/samples/advanced/radial-gradient.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6dca2ac3").then(t)}},{name:"v-1b036bdf",path:"/samples/animations/delay.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1b036bdf").then(t)}},{name:"v-56ffc565",path:"/samples/animations/drop.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-56ffc565").then(t)}},{name:"v-2eef3a85",path:"/samples/animations/loop.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2eef3a85").then(t)}},{name:"v-03bfee3e",path:"/samples/animations/progressive-line-easing.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-03bfee3e").then(t)}},{name:"v-bb2f4e76",path:"/samples/animations/progressive-line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-bb2f4e76").then(t)}},{name:"v-ee2054b2",path:"/samples/area/line-boundaries.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-ee2054b2").then(t)}},{name:"v-31e27a01",path:"/samples/area/line-datasets.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-31e27a01").then(t)}},{name:"v-434629d5",path:"/samples/area/line-drawtime.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-434629d5").then(t)}},{name:"v-4da19405",path:"/samples/area/line-stacked.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4da19405").then(t)}},{name:"v-66fe6f5d",path:"/samples/area/radar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-66fe6f5d").then(t)}},{name:"v-068132b6",path:"/samples/bar/border-radius.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-068132b6").then(t)}},{name:"v-86e6a23e",path:"/samples/bar/floating.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-86e6a23e").then(t)}},{name:"v-d4755bb6",path:"/samples/bar/horizontal.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d4755bb6").then(t)}},{name:"v-4ad9ddf9",path:"/samples/bar/stacked-groups.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4ad9ddf9").then(t)}},{name:"v-6abbef36",path:"/samples/bar/stacked.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-6abbef36").then(t)}},{name:"v-031ce7fe",path:"/samples/bar/vertical.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-031ce7fe").then(t)}},{name:"v-b091f4f6",path:"/samples/information.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-b091f4f6").then(t)}},{name:"v-ee799cb6",path:"/samples/legend/events.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-ee799cb6").then(t)}},{name:"v-0bf9eaa5",path:"/samples/legend/html.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0bf9eaa5").then(t)}},{name:"v-1e95cf01",path:"/samples/legend/point-style.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1e95cf01").then(t)}},{name:"v-5fa74ee5",path:"/samples/legend/position.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5fa74ee5").then(t)}},{name:"v-614ec58e",path:"/samples/legend/title.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-614ec58e").then(t)}},{name:"v-7e4ade5a",path:"/samples/line/interpolation.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7e4ade5a").then(t)}},{name:"v-1d315ea5",path:"/samples/line/line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-1d315ea5").then(t)}},{name:"v-cd72e3f6",path:"/samples/line/multi-axis.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-cd72e3f6").then(t)}},{name:"v-3573ab39",path:"/samples/line/point-styling.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3573ab39").then(t)}},{name:"v-300471a5",path:"/samples/line/segments.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-300471a5").then(t)}},{name:"v-0d0a7615",path:"/samples/line/stepped.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0d0a7615").then(t)}},{name:"v-a078b402",path:"/samples/line/styling.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-a078b402").then(t)}},{name:"v-2b6f5925",path:"/samples/other-charts/bubble.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2b6f5925").then(t)}},{name:"v-e3cb5bb6",path:"/samples/other-charts/doughnut.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-e3cb5bb6").then(t)}},{name:"v-3fc5bb45",path:"/samples/other-charts/combo-bar-line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3fc5bb45").then(t)}},{name:"v-2ce89747",path:"/samples/other-charts/pie.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2ce89747").then(t)}},{name:"v-79e56a25",path:"/samples/other-charts/multi-series-pie.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-79e56a25").then(t)}},{name:"v-0a3e57a5",path:"/samples/other-charts/polar-area-center-labels.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0a3e57a5").then(t)}},{name:"v-f72532b6",path:"/samples/other-charts/polar-area.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-f72532b6").then(t)}},{name:"v-823e326a",path:"/samples/other-charts/radar-skip-points.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-823e326a").then(t)}},{name:"v-39d68593",path:"/samples/other-charts/radar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-39d68593").then(t)}},{name:"v-47e586a5",path:"/samples/other-charts/scatter-multi-axis.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-47e586a5").then(t)}},{name:"v-252911e3",path:"/samples/other-charts/scatter.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-252911e3").then(t)}},{name:"v-d3338236",path:"/samples/other-charts/stacked-bar-line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d3338236").then(t)}},{name:"v-42b89576",path:"/samples/plugins/chart-area-border.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-42b89576").then(t)}},{name:"v-62fa92fb",path:"/samples/plugins/doughnut-empty-state.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-62fa92fb").then(t)}},{name:"v-4205b905",path:"/samples/plugins/quadrants.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4205b905").then(t)}},{name:"v-d5fcd9da",path:"/samples/scale-options/center.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d5fcd9da").then(t)}},{name:"v-2c4bdff1",path:"/samples/scale-options/grid.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2c4bdff1").then(t)}},{name:"v-42597776",path:"/samples/scale-options/ticks.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-42597776").then(t)}},{name:"v-5ea2edf2",path:"/samples/scale-options/titles.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-5ea2edf2").then(t)}},{name:"v-383af825",path:"/samples/scales/linear-min-max-suggested.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-383af825").then(t)}},{name:"v-136b6525",path:"/samples/scales/linear-min-max.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-136b6525").then(t)}},{name:"v-61b2dc05",path:"/samples/scales/linear-step-size.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-61b2dc05").then(t)}},{name:"v-131e3c29",path:"/samples/scales/log.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-131e3c29").then(t)}},{name:"v-0649723a",path:"/samples/scales/stacked.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-0649723a").then(t)}},{name:"v-8592c41e",path:"/api/interfaces/TooltipLabelStyle.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-8592c41e").then(t)}},{name:"v-44b60cf6",path:"/samples/scales/time-combo.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-44b60cf6").then(t)}},{name:"v-23b86e93",path:"/samples/scriptable/bar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-23b86e93").then(t)}},{name:"v-2ca5a245",path:"/samples/scriptable/bubble.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2ca5a245").then(t)}},{name:"v-7b63aa76",path:"/samples/scriptable/line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-7b63aa76").then(t)}},{name:"v-81d9cfbe",path:"/samples/scriptable/pie.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-81d9cfbe").then(t)}},{name:"v-d1d12886",path:"/samples/scriptable/polar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-d1d12886").then(t)}},{name:"v-3260ba2d",path:"/samples/scriptable/radar.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3260ba2d").then(t)}},{name:"v-3e0acdf7",path:"/samples/subtitle/basic.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-3e0acdf7").then(t)}},{name:"v-2090b8f6",path:"/samples/title/alignment.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2090b8f6").then(t)}},{name:"v-388e70b7",path:"/samples/tooltip/html.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-388e70b7").then(t)}},{name:"v-4e932fb6",path:"/samples/tooltip/content.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-4e932fb6").then(t)}},{name:"v-a44d8d6a",path:"/samples/tooltip/interactions.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-a44d8d6a").then(t)}},{name:"v-378fbdf6",path:"/samples/tooltip/point-style.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-378fbdf6").then(t)}},{name:"v-35b265e5",path:"/samples/utils.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-35b265e5").then(t)}},{name:"v-31d48fbb",path:"/samples/tooltip/position.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-31d48fbb").then(t)}},{name:"v-75e164b6",path:"/api/interfaces/TooltipCallbacks.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-75e164b6").then(t)}},{name:"v-2e0fa86a",path:"/samples/scales/time-max-span.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-2e0fa86a").then(t)}},{name:"v-05954049",path:"/samples/scales/time-line.html",component:Kn,beforeEnter:(e,n,t)=>{gn("Layout","v-05954049").then(t)}},{path:"*",component:Kn}],et={title:"Chart.js",description:"Open source HTML5 Charts for your website",base:"/docs/3.9.1/",headTags:[["link",{rel:"icon",href:"/docs/3.9.1/favicon.ico"}]],pages:[{title:"Class: Animation",frontmatter:{},regularPath:"/api/classes/Animation.html",relativePath:"api/classes/Animation.md",key:"v-23203c85",path:"/api/classes/Animation.html",headers:[{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"active",slug:"active"},{level:3,title:"cancel",slug:"cancel"},{level:3,title:"tick",slug:"tick"},{level:3,title:"update",slug:"update"}],content:" Class: Animation \n Constructors \n constructor \n •  new Animation ( cfg ,  target ,  prop ,  to? ) \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n cfg \n AnyObject \n \n \n target \n AnyObject \n \n \n prop \n string \n \n \n to? \n unknown \n Defined in \n animation.d.ts:5 \n Methods \n active \n ▸  active ():  boolean \n Returns \n boolean \n Defined in \n animation.d.ts:6 \n cancel \n ▸  cancel ():  void \n Returns \n void \n Defined in \n animation.d.ts:8 \n tick \n ▸  tick ( date ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n date \n number \n Returns \n void \n Defined in \n animation.d.ts:9 \n update \n ▸  update ( cfg ,  to ,  date ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n cfg \n AnyObject \n \n \n to \n unknown \n \n \n date \n number \n Returns \n void \n Defined in \n animation.d.ts:7 \n"},{title:"Chart.js - v3.9.1",frontmatter:{},regularPath:"/api/",relativePath:"api/README.md",key:"v-38665300",path:"/api/",headers:[{level:2,title:"Enumerations",slug:"enumerations"},{level:2,title:"Classes",slug:"classes"},{level:2,title:"Interfaces",slug:"interfaces"},{level:2,title:"Type aliases",slug:"type-aliases"},{level:3,title:"Align",slug:"align"},{level:3,title:"AnimationOptions",slug:"animationoptions"},{level:3,title:"AnimationSpec",slug:"animationspec"},{level:3,title:"AnimationsSpec",slug:"animationsspec"},{level:3,title:"BarController",slug:"barcontroller"},{level:3,title:"BubbleController",slug:"bubblecontroller"},{level:3,title:"CartesianTickOptions",slug:"cartesiantickoptions"},{level:3,title:"CategoryScale",slug:"categoryscale"},{level:3,title:"CategoryScaleOptions",slug:"categoryscaleoptions"},{level:3,title:"ChartComponentLike",slug:"chartcomponentlike"},{level:3,title:"ChartDataset",slug:"chartdataset"},{level:3,title:"ChartDatasetCustomTypesPerDataset",slug:"chartdatasetcustomtypesperdataset"},{level:3,title:"ChartItem",slug:"chartitem"},{level:3,title:"ChartMeta",slug:"chartmeta"},{level:3,title:"ChartOptions",slug:"chartoptions"},{level:3,title:"ChartType",slug:"charttype"},{level:3,title:"Color",slug:"color"},{level:3,title:"DatasetChartOptions",slug:"datasetchartoptions"},{level:3,title:"DecimationOptions",slug:"decimationoptions"},{level:3,title:"DefaultDataPoint",slug:"defaultdatapoint"},{level:3,title:"DoughnutDataPoint",slug:"doughnutdatapoint"},{level:3,title:"EasingFunction",slug:"easingfunction"},{level:3,title:"ElementChartOptions",slug:"elementchartoptions"},{level:3,title:"FillTarget",slug:"filltarget"},{level:3,title:"InteractionAxis",slug:"interactionaxis"},{level:3,title:"InteractionMode",slug:"interactionmode"},{level:3,title:"InteractionModeFunction",slug:"interactionmodefunction"},{level:3,title:"LayoutPosition",slug:"layoutposition"},{level:3,title:"LineController",slug:"linecontroller"},{level:3,title:"LinearScale",slug:"linearscale"},{level:3,title:"LinearScaleOptions",slug:"linearscaleoptions"},{level:3,title:"LogarithmicScale",slug:"logarithmicscale"},{level:3,title:"LogarithmicScaleOptions",slug:"logarithmicscaleoptions"},{level:3,title:"Overrides",slug:"overrides"},{level:3,title:"ParsedDataType",slug:"parseddatatype"},{level:3,title:"PieAnimationOptions",slug:"pieanimationoptions"},{level:3,title:"PieController",slug:"piecontroller"},{level:3,title:"PieControllerChartOptions",slug:"piecontrollerchartoptions"},{level:3,title:"PieControllerDatasetOptions",slug:"piecontrollerdatasetoptions"},{level:3,title:"PieDataPoint",slug:"piedatapoint"},{level:3,title:"PieMetaExtensions",slug:"piemetaextensions"},{level:3,title:"PointStyle",slug:"pointstyle"},{level:3,title:"PolarAreaAnimationOptions",slug:"polarareaanimationoptions"},{level:3,title:"RadarController",slug:"radarcontroller"},{level:3,title:"RadarControllerChartOptions",slug:"radarcontrollerchartoptions"},{level:3,title:"RadialLinearScaleOptions",slug:"radiallinearscaleoptions"},{level:3,title:"RadialTickOptions",slug:"radialtickoptions"},{level:3,title:"ScaleChartOptions",slug:"scalechartoptions"},{level:3,title:"ScaleOptions",slug:"scaleoptions"},{level:3,title:"ScaleOptionsByType",slug:"scaleoptionsbytype"},{level:3,title:"ScaleType",slug:"scaletype"},{level:3,title:"ScatterController",slug:"scattercontroller"},{level:3,title:"ScatterControllerChartOptions",slug:"scattercontrollerchartoptions"},{level:3,title:"ScatterControllerDatasetOptions",slug:"scattercontrollerdatasetoptions"},{level:3,title:"Scriptable",slug:"scriptable"},{level:3,title:"ScriptableAndArray",slug:"scriptableandarray"},{level:3,title:"ScriptableAndArrayOptions",slug:"scriptableandarrayoptions"},{level:3,title:"ScriptableAndScriptableOptions",slug:"scriptableandscriptableoptions"},{level:3,title:"ScriptableOptions",slug:"scriptableoptions"},{level:3,title:"TextAlign",slug:"textalign"},{level:3,title:"TimeScaleOptions",slug:"timescaleoptions"},{level:3,title:"TimeSeriesScale",slug:"timeseriesscale"},{level:3,title:"TimeUnit",slug:"timeunit"},{level:3,title:"TooltipPositioner",slug:"tooltippositioner"},{level:3,title:"TooltipPositionerFunction",slug:"tooltippositionerfunction"},{level:3,title:"TooltipXAlignment",slug:"tooltipxalignment"},{level:3,title:"TooltipYAlignment",slug:"tooltipyalignment"},{level:3,title:"TransitionSpec",slug:"transitionspec"},{level:3,title:"TransitionsSpec",slug:"transitionsspec"},{level:3,title:"UpdateMode",slug:"updatemode"},{level:2,title:"Variables",slug:"variables"},{level:3,title:"ArcElement",slug:"arcelement"},{level:3,title:"BarController",slug:"barcontroller-2"},{level:3,title:"BarElement",slug:"barelement"},{level:3,title:"BubbleController",slug:"bubblecontroller-2"},{level:3,title:"CategoryScale",slug:"categoryscale-2"},{level:3,title:"Decimation",slug:"decimation"},{level:3,title:"DoughnutController",slug:"doughnutcontroller"},{level:3,title:"Element",slug:"element"},{level:3,title:"Filler",slug:"filler"},{level:3,title:"Interaction",slug:"interaction"},{level:3,title:"Legend",slug:"legend"},{level:3,title:"LineController",slug:"linecontroller-2"},{level:3,title:"LineElement",slug:"lineelement"},{level:3,title:"LinearScale",slug:"linearscale-2"},{level:3,title:"LogarithmicScale",slug:"logarithmicscale-2"},{level:3,title:"PieController",slug:"piecontroller-2"},{level:3,title:"PointElement",slug:"pointelement"},{level:3,title:"PolarAreaController",slug:"polarareacontroller"},{level:3,title:"RadarController",slug:"radarcontroller-2"},{level:3,title:"RadialLinearScale",slug:"radiallinearscale"},{level:3,title:"ScatterController",slug:"scattercontroller-2"},{level:3,title:"SubTitle",slug:"subtitle"},{level:3,title:"Ticks",slug:"ticks"},{level:3,title:"TimeScale",slug:"timescale"},{level:3,title:"TimeSeriesScale",slug:"timeseriesscale-2"},{level:3,title:"Title",slug:"title"},{level:3,title:"Tooltip",slug:"tooltip"},{level:3,title:"_adapters",slug:"adapters"},{level:3,title:"defaults",slug:"defaults"},{level:3,title:"layouts",slug:"layouts"},{level:3,title:"registerables",slug:"registerables"},{level:3,title:"registry",slug:"registry"}],content:' Chart.js - v3.9.1 \n Enumerations \n \n DecimationAlgorithm \n UpdateModeEnum \n Classes \n \n Animation \n Animations \n Animator \n BasePlatform \n BasicPlatform \n Chart \n DatasetController \n DomPlatform \n Scale \n Interfaces \n \n ActiveDataPoint \n ActiveElement \n AnimationEvent \n ArcBorderRadius \n ArcElement \n ArcHoverOptions \n ArcOptions \n ArcProps \n BarControllerChartOptions \n BarControllerDatasetOptions \n BarElement \n BarHoverOptions \n BarOptions \n BarProps \n BorderRadius \n BubbleControllerDatasetOptions \n BubbleDataPoint \n CartesianScaleOptions \n CartesianScaleTypeRegistry \n ChartArea \n ChartComponent \n ChartConfiguration \n ChartConfigurationCustomTypesPerDataset \n ChartData \n ChartDataCustomTypesPerDataset \n ChartDatasetProperties \n ChartDatasetPropertiesCustomTypesPerDataset \n ChartEvent \n ChartTypeRegistry \n CommonElementOptions \n CommonHoverOptions \n ComplexFillTarget \n ControllerDatasetOptions \n CoreChartOptions \n CoreInteractionOptions \n CoreScaleOptions \n DatasetControllerChartComponent \n DateAdapter \n Defaults \n DoughnutAnimationOptions \n DoughnutController \n DoughnutControllerChartOptions \n DoughnutControllerDatasetOptions \n DoughnutMetaExtensions \n Element \n ElementOptionsByType \n ExtendedPlugin \n FillerControllerDatasetOptions \n FillerOptions \n FontSpec \n GridLineOptions \n InteractionItem \n InteractionModeMap \n InteractionOptions \n LayoutItem \n LegendElement \n LegendItem \n LegendOptions \n LineControllerChartOptions \n LineControllerDatasetOptions \n LineElement \n LineHoverOptions \n LineOptions \n LineProps \n ParsingOptions \n Plugin \n PluginChartOptions \n PluginOptionsByType \n Point \n PointElement \n PointHoverOptions \n PointOptions \n PointPrefixedHoverOptions \n PointPrefixedOptions \n PointProps \n PolarAreaController \n PolarAreaControllerChartOptions \n PolarAreaControllerDatasetOptions \n RadarControllerDatasetOptions \n RadialLinearScale \n RadialScaleTypeRegistry \n Registry \n ScaleTypeRegistry \n ScatterDataPoint \n ScriptableCartesianScaleContext \n ScriptableChartContext \n ScriptableContext \n ScriptableLineSegmentContext \n ScriptableScaleContext \n ScriptableScalePointLabelContext \n ScriptableTooltipContext \n Segment \n Tick \n TickOptions \n TimeScale \n TitleOptions \n Tooltip \n TooltipCallbacks \n TooltipItem \n TooltipLabelStyle \n TooltipModel \n TooltipOptions \n TooltipPosition \n TooltipPositionerMap \n TypedRegistry \n VisualElement \n Type aliases \n Align \n Ƭ  Align :  "start"  |  "center"  |  "end" \n Defined in \n index.esm.d.ts:1682 \n AnimationOptions \n Ƭ  AnimationOptions < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n animation \n false  |  AnimationSpec < TType > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n \n \n animations \n AnimationsSpec < TType > \n \n \n transitions \n TransitionsSpec < TType > \n Defined in \n index.esm.d.ts:1639 \n AnimationSpec \n Ƭ  AnimationSpec < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Type declaration \n \n \n \n Name \n Type \n Description \n \n \n \n \n delay? \n Scriptable < number ,  ScriptableContext < TType >> \n Delay before starting the animations.   default  0 \n \n \n duration? \n Scriptable < number ,  ScriptableContext < TType >> \n The number of milliseconds an animation takes.   default  1000 \n \n \n easing? \n Scriptable < EasingFunction ,  ScriptableContext < TType >> \n Easing function to use   default  \'easeOutQuart\' \n \n \n loop? \n Scriptable < boolean ,  ScriptableContext < TType >> \n If set to true, the animations loop endlessly.   default  false \n Defined in \n index.esm.d.ts:1583 \n AnimationsSpec \n Ƭ  AnimationsSpec < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Index signature \n ▪ [name:  string ]:  false  |  AnimationSpec < TType > & {  from :  Scriptable < Color  |  number  |  boolean ,  ScriptableContext < TType >> ;  properties :  string [] ;  to :  Scriptable < Color  |  number  |  boolean ,  ScriptableContext < TType >> ;  type :  "color"  |  "number"  |  "boolean"  ;  fn : <T>( from :  T ,  to :  T ,  factor :  number ) =>  T   } \n Defined in \n index.esm.d.ts:1608 \n BarController \n Ƭ  BarController :  DatasetController \n Defined in \n index.esm.d.ts:145 \n BubbleController \n Ƭ  BubbleController :  DatasetController \n Defined in \n index.esm.d.ts:173 \n CartesianTickOptions \n Ƭ  CartesianTickOptions :  TickOptions  & {  align :  Align  |  "inner"  ;  autoSkip :  boolean  ;  autoSkipPadding :  number  ;  crossAlign :  "near"  |  "center"  |  "far"  ;  includeBounds :  boolean  ;  labelOffset :  number  ;  maxRotation :  number  ;  maxTicksLimit :  number  ;  minRotation :  number  ;  mirror :  boolean  ;  padding :  number  ;  sampleSize :  number   } \n Defined in \n index.esm.d.ts:2982 \n CategoryScale \n Ƭ  CategoryScale < O >:  Scale < O > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  CategoryScaleOptions  =  CategoryScaleOptions \n Defined in \n index.esm.d.ts:3147 \n CategoryScaleOptions \n Ƭ  CategoryScaleOptions :  Omit < CartesianScaleOptions ,  "min"  |  "max" > & {  labels :  string [] |  string [][] ;  max :  string  |  number  ;  min :  string  |  number   } \n Defined in \n index.esm.d.ts:3141 \n ChartComponentLike \n Ƭ  ChartComponentLike :  ChartComponent  |  ChartComponent [] | { [key: string]:  ChartComponent ;  } |  Plugin  |  Plugin [] \n Defined in \n index.esm.d.ts:1113 \n ChartDataset \n Ƭ  ChartDataset < TType ,  TData >:  DeepPartial <{ [key in ChartType]: Object & ChartTypeRegistry[key]["datasetOptions"] }[ TType ]> &  ChartDatasetProperties < TType ,  TData > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n Defined in \n index.esm.d.ts:3659 \n ChartDatasetCustomTypesPerDataset \n Ƭ  ChartDatasetCustomTypesPerDataset < TType ,  TData >:  DeepPartial <{ [key in ChartType]: Object & ChartTypeRegistry[key]["datasetOptions"] }[ TType ]> &  ChartDatasetPropertiesCustomTypesPerDataset < TType ,  TData > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n Defined in \n index.esm.d.ts:3666 \n ChartItem \n Ƭ  ChartItem :  string  |  CanvasRenderingContext2D  |  HTMLCanvasElement  | {  canvas :  HTMLCanvasElement   } |  ArrayLike < CanvasRenderingContext2D  |  HTMLCanvasElement > \n Defined in \n index.esm.d.ts:554 \n ChartMeta \n Ƭ  ChartMeta < TElement ,  TDatasetElement ,  TType >:  DeepPartial <{ [key in ChartType]: ChartTypeRegistry[key]["metaExtensions"] }[ TType ]> &  ChartMetaCommon < TElement ,  TDatasetElement > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TElement \n extends  Element  =  Element \n \n \n TDatasetElement \n extends  Element  =  Element \n \n \n TType \n extends  ChartType  =  ChartType \n Defined in \n index.esm.d.ts:460 \n ChartOptions \n Ƭ  ChartOptions < TType >:  DeepPartial < CoreChartOptions < TType > &  ElementChartOptions < TType > &  PluginChartOptions < TType > &  DatasetChartOptions < TType > &  ScaleChartOptions < TType > &  ChartTypeRegistry [ TType ][ "chartOptions" ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Defined in \n index.esm.d.ts:3636 \n ChartType \n Ƭ  ChartType : keyof  ChartTypeRegistry \n Defined in \n index.esm.d.ts:3615 \n Color \n Ƭ  Color :  string  |  CanvasGradient  |  CanvasPattern \n Defined in \n color.d.ts:1 \n DatasetChartOptions \n Ƭ  DatasetChartOptions < TType >: { [key in TType]: Object } \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Defined in \n index.esm.d.ts:3624 \n DecimationOptions \n Ƭ  DecimationOptions :  LttbDecimationOptions  |  MinMaxDecimationOptions \n Defined in \n index.esm.d.ts:2130 \n DefaultDataPoint \n Ƭ  DefaultDataPoint < TType >:  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Defined in \n index.esm.d.ts:3645 \n DoughnutDataPoint \n Ƭ  DoughnutDataPoint :  number \n Defined in \n index.esm.d.ts:331 \n EasingFunction \n Ƭ  EasingFunction :  "linear"  |  "easeInQuad"  |  "easeOutQuad"  |  "easeInOutQuad"  |  "easeInCubic"  |  "easeOutCubic"  |  "easeInOutCubic"  |  "easeInQuart"  |  "easeOutQuart"  |  "easeInOutQuart"  |  "easeInQuint"  |  "easeOutQuint"  |  "easeInOutQuint"  |  "easeInSine"  |  "easeOutSine"  |  "easeInOutSine"  |  "easeInExpo"  |  "easeOutExpo"  |  "easeInOutExpo"  |  "easeInCirc"  |  "easeOutCirc"  |  "easeInOutCirc"  |  "easeInElastic"  |  "easeOutElastic"  |  "easeInOutElastic"  |  "easeInBack"  |  "easeOutBack"  |  "easeInOutBack"  |  "easeInBounce"  |  "easeOutBounce"  |  "easeInOutBounce" \n Defined in \n index.esm.d.ts:1550 \n ElementChartOptions \n Ƭ  ElementChartOptions < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n elements \n ElementOptionsByType < TType > \n Defined in \n index.esm.d.ts:2046 \n FillTarget \n Ƭ  FillTarget :  number  |  string  | {  value :  number   } |  "start"  |  "end"  |  "origin"  |  "stack"  |  "shape"  |  boolean \n Defined in \n index.esm.d.ts:2138 \n InteractionAxis \n Ƭ  InteractionAxis :  "x"  |  "y"  |  "xy"  |  "r" \n Defined in \n index.esm.d.ts:1422 \n InteractionMode \n Ƭ  InteractionMode : keyof  InteractionModeMap \n Defined in \n index.esm.d.ts:752 \n InteractionModeFunction \n Ƭ  InteractionModeFunction : ( chart :  Chart ,  e :  ChartEvent ,  options :  InteractionOptions ,  useFinalPosition? :  boolean ) =>  InteractionItem [] \n Type declaration \n ▸ ( chart ,  e ,  options ,  useFinalPosition? ):  InteractionItem [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart \n \n \n e \n ChartEvent \n \n \n options \n InteractionOptions \n \n \n useFinalPosition? \n boolean \n Returns \n InteractionItem [] \n Defined in \n index.esm.d.ts:714 \n LayoutPosition \n Ƭ  LayoutPosition :  "left"  |  "top"  |  "right"  |  "bottom"  |  "center"  |  "chartArea"  | { [scaleId: string]:  number ;  } \n Defined in \n layout.d.ts:3 \n LineController \n Ƭ  LineController :  DatasetController \n Defined in \n index.esm.d.ts:219 \n LinearScale \n Ƭ  LinearScale < O >:  Scale < O > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  LinearScaleOptions  =  LinearScaleOptions \n Defined in \n index.esm.d.ts:3196 \n LinearScaleOptions \n Ƭ  LinearScaleOptions :  CartesianScaleOptions  & {  beginAtZero :  boolean  ;  grace? :  string  |  number  ;  suggestedMax? :  number  ;  suggestedMin? :  number  ;  ticks : {  count :  number  ;  format :  Intl.NumberFormatOptions  ;  precision :  number  ;  stepSize :  number   }  } \n Defined in \n index.esm.d.ts:3153 \n LogarithmicScale \n Ƭ  LogarithmicScale < O >:  Scale < O > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  LogarithmicScaleOptions  =  LogarithmicScaleOptions \n Defined in \n index.esm.d.ts:3220 \n LogarithmicScaleOptions \n Ƭ  LogarithmicScaleOptions :  CartesianScaleOptions  & {  suggestedMax? :  number  ;  suggestedMin? :  number  ;  ticks : {  format :  Intl.NumberFormatOptions   }  } \n Defined in \n index.esm.d.ts:3202 \n Overrides \n Ƭ  Overrides : { [key in ChartType]: CoreChartOptions<key> & ElementChartOptions<key> & PluginChartOptions<key> & DatasetChartOptions<ChartType> & ScaleChartOptions<key> & ChartTypeRegistry[key]["chartOptions"] } \n Defined in \n index.esm.d.ts:691 \n ParsedDataType \n Ƭ  ParsedDataType < TType >:  ChartTypeRegistry [ TType ][ "parsedDataType" ] \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Defined in \n index.esm.d.ts:3647 \n PieAnimationOptions \n Ƭ  PieAnimationOptions :  DoughnutAnimationOptions \n Defined in \n index.esm.d.ts:354 \n PieController \n Ƭ  PieController :  DoughnutController \n Defined in \n index.esm.d.ts:359 \n PieControllerChartOptions \n Ƭ  PieControllerChartOptions :  DoughnutControllerChartOptions \n Defined in \n index.esm.d.ts:353 \n PieControllerDatasetOptions \n Ƭ  PieControllerDatasetOptions :  DoughnutControllerDatasetOptions \n Defined in \n index.esm.d.ts:352 \n PieDataPoint \n Ƭ  PieDataPoint :  DoughnutDataPoint \n Defined in \n index.esm.d.ts:356 \n PieMetaExtensions \n Ƭ  PieMetaExtensions :  DoughnutMetaExtensions \n Defined in \n index.esm.d.ts:357 \n PointStyle \n Ƭ  PointStyle :  "circle"  |  "cross"  |  "crossRot"  |  "dash"  |  "line"  |  "rect"  |  "rectRounded"  |  "rectRot"  |  "star"  |  "triangle"  |  HTMLImageElement  |  HTMLCanvasElement \n Defined in \n index.esm.d.ts:1865 \n PolarAreaAnimationOptions \n Ƭ  PolarAreaAnimationOptions :  DoughnutAnimationOptions \n Defined in \n index.esm.d.ts:373 \n RadarController \n Ƭ  RadarController :  DatasetController \n Defined in \n index.esm.d.ts:420 \n RadarControllerChartOptions \n Ƭ  RadarControllerChartOptions :  LineControllerChartOptions \n Defined in \n index.esm.d.ts:418 \n RadialLinearScaleOptions \n Ƭ  RadialLinearScaleOptions :  CoreScaleOptions  & {  angleLines : {  borderDash :  Scriptable < number [],  ScriptableScaleContext > ;  borderDashOffset :  Scriptable < number ,  ScriptableScaleContext > ;  color :  Scriptable < Color ,  ScriptableScaleContext > ;  display :  boolean  ;  lineWidth :  Scriptable < number ,  ScriptableScaleContext >  } ;  animate :  boolean  ;  beginAtZero :  boolean  ;  grid :  GridLineOptions  ;  max :  number  ;  min :  number  ;  pointLabels : {  backdropColor :  Scriptable < Color ,  ScriptableScalePointLabelContext > ;  backdropPadding :  Scriptable < number  |  ChartArea ,  ScriptableScalePointLabelContext > ;  borderRadius :  Scriptable < number  |  BorderRadius ,  ScriptableScalePointLabelContext > ;  centerPointLabels :  boolean  ;  color :  Scriptable < Color ,  ScriptableScalePointLabelContext > ;  display :  boolean  ;  font :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableScalePointLabelContext > ;  padding :  Scriptable < number ,  ScriptableScalePointLabelContext > ;  callback : ( label :  string ,  index :  number ) =>  string  |  number  |  string [] |  number []  } ;  startAngle :  number  ;  suggestedMax :  number  ;  suggestedMin :  number  ;  ticks :  RadialTickOptions   } \n Defined in \n index.esm.d.ts:3356 \n RadialTickOptions \n Ƭ  RadialTickOptions :  TickOptions  & {  count :  number  ;  format :  Intl.NumberFormatOptions  ;  maxTicksLimit :  number  ;  precision :  number  ;  stepSize :  number   } \n Defined in \n index.esm.d.ts:3328 \n ScaleChartOptions \n Ƭ  ScaleChartOptions < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n scales \n Object \n Defined in \n index.esm.d.ts:3630 \n ScaleOptions \n Ƭ  ScaleOptions < TScale >:  DeepPartial < ScaleOptionsByType < TScale >> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TScale \n extends  ScaleType  =  ScaleType \n Defined in \n index.esm.d.ts:3622 \n ScaleOptionsByType \n Ƭ  ScaleOptionsByType < TScale >: { [key in ScaleType]: Object & ScaleTypeRegistry[key]["options"] }[ TScale ] \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TScale \n extends  ScaleType  =  ScaleType \n Defined in \n index.esm.d.ts:3617 \n ScaleType \n Ƭ  ScaleType : keyof  ScaleTypeRegistry \n Defined in \n index.esm.d.ts:3511 \n ScatterController \n Ƭ  ScatterController :  LineController \n Defined in \n index.esm.d.ts:234 \n ScatterControllerChartOptions \n Ƭ  ScatterControllerChartOptions :  LineControllerChartOptions \n Defined in \n index.esm.d.ts:232 \n ScatterControllerDatasetOptions \n Ƭ  ScatterControllerDatasetOptions :  LineControllerDatasetOptions \n Defined in \n index.esm.d.ts:225 \n Scriptable \n Ƭ  Scriptable < T ,  TContext >:  T  | ( ctx :  TContext ,  options :  AnyObject ) =>  T  |  undefined \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n \n \n TContext \n Defined in \n index.esm.d.ts:39 \n ScriptableAndArray \n Ƭ  ScriptableAndArray < T ,  TContext >: readonly  T [] |  Scriptable < T ,  TContext > \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n \n \n TContext \n Defined in \n index.esm.d.ts:42 \n ScriptableAndArrayOptions \n Ƭ  ScriptableAndArrayOptions < T ,  TContext >: { [P in keyof T]: ScriptableAndArray<T[P], TContext> } \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n \n \n TContext \n Defined in \n index.esm.d.ts:43 \n ScriptableAndScriptableOptions \n Ƭ  ScriptableAndScriptableOptions < T ,  TContext >:  Scriptable < T ,  TContext > |  ScriptableOptions < T ,  TContext > \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n \n \n TContext \n Defined in \n index.esm.d.ts:41 \n ScriptableOptions \n Ƭ  ScriptableOptions < T ,  TContext >: { [P in keyof T]: Scriptable<T[P], TContext> } \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n \n \n TContext \n Defined in \n index.esm.d.ts:40 \n TextAlign \n Ƭ  TextAlign :  "left"  |  "center"  |  "right" \n Defined in \n index.esm.d.ts:1681 \n TimeScaleOptions \n Ƭ  TimeScaleOptions :  Omit < CartesianScaleOptions ,  "min"  |  "max" > & {  adapters : {  date :  unknown   } ;  bounds :  "ticks"  |  "data"  ;  max :  string  |  number  ;  min :  string  |  number  ;  offsetAfterAutoskip :  boolean  ;  suggestedMax :  string  |  number  ;  suggestedMin :  string  |  number  ;  ticks : {  source :  "labels"  |  "auto"  |  "data"   } ;  time : {  displayFormats : { [key: string]:  string ;  } ;  isoWeekday :  boolean  |  number  ;  minUnit :  TimeUnit  ;  parser :  string  | ( v :  unknown ) =>  number  ;  round :  false  |  TimeUnit  ;  stepSize :  number  ;  tooltipFormat :  string  ;  unit :  false  |  TimeUnit   }  } \n Defined in \n index.esm.d.ts:3226 \n TimeSeriesScale \n Ƭ  TimeSeriesScale < O >:  TimeScale < O > \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  TimeScaleOptions  =  TimeScaleOptions \n Defined in \n index.esm.d.ts:3322 \n TimeUnit \n Ƭ  TimeUnit :  "millisecond"  |  "second"  |  "minute"  |  "hour"  |  "day"  |  "week"  |  "month"  |  "quarter"  |  "year" \n Defined in \n adapters.d.ts:3 \n TooltipPositioner \n Ƭ  TooltipPositioner : keyof  TooltipPositionerMap \n Defined in \n index.esm.d.ts:2546 \n TooltipPositionerFunction \n Ƭ  TooltipPositionerFunction < TType >: ( this :  TooltipModel < TType >,  items : readonly  ActiveElement [],  eventPosition :  Point ) =>  TooltipPosition  |  false \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Type declaration \n ▸ ( this ,  items ,  eventPosition ):  TooltipPosition  |  false \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n this \n TooltipModel < TType > \n \n \n items \n readonly  ActiveElement [] \n \n \n eventPosition \n Point \n Returns \n TooltipPosition  |  false \n Defined in \n index.esm.d.ts:2535 \n TooltipXAlignment \n Ƭ  TooltipXAlignment :  "left"  |  "center"  |  "right" \n Defined in \n index.esm.d.ts:2444 \n TooltipYAlignment \n Ƭ  TooltipYAlignment :  "top"  |  "center"  |  "bottom" \n Defined in \n index.esm.d.ts:2445 \n TransitionSpec \n Ƭ  TransitionSpec < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n animation \n AnimationSpec < TType > \n \n \n animations \n AnimationsSpec < TType > \n Defined in \n index.esm.d.ts:1630 \n TransitionsSpec \n Ƭ  TransitionsSpec < TType >:  Object \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Index signature \n ▪ [mode:  string ]:  TransitionSpec < TType > \n Defined in \n index.esm.d.ts:1635 \n UpdateMode \n Ƭ  UpdateMode : keyof typeof  UpdateModeEnum \n Defined in \n index.esm.d.ts:571 \n Variables \n ArcElement \n •  ArcElement :  ChartComponent  & {  prototype :  ArcElement < ArcProps ,  ArcOptions >  } \n Defined in \n index.esm.d.ts:1765 \n BarController \n •  BarController :  ChartComponent  & {  prototype :  BarController   } \n Defined in \n index.esm.d.ts:146 \n BarElement \n •  BarElement :  ChartComponent  & {  prototype :  BarElement < BarProps ,  BarOptions >  } \n Defined in \n index.esm.d.ts:2034 \n BubbleController \n •  BubbleController :  ChartComponent  & {  prototype :  BubbleController   } \n Defined in \n index.esm.d.ts:174 \n CategoryScale \n •  CategoryScale :  ChartComponent  & {  prototype :  CategoryScale < CategoryScaleOptions >  } \n Defined in \n index.esm.d.ts:3148 \n Decimation \n •  Decimation :  Plugin \n Defined in \n index.esm.d.ts:2110 \n DoughnutController \n •  DoughnutController :  ChartComponent  & {  prototype :  DoughnutController   } \n Defined in \n index.esm.d.ts:343 \n Element \n •  Element :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n prototype \n Element < AnyObject ,  AnyObject > \n Defined in \n element.d.ts:14 \n Filler \n •  Filler :  Plugin \n Defined in \n index.esm.d.ts:2132 \n Interaction \n •  Interaction :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n modes \n InteractionModeMap \n \n \n evaluateInteractionItems \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >,  axis :  InteractionAxis ,  position :  Point ,  handler : ( element :  Element < AnyObject ,  AnyObject > &  VisualElement ,  datasetIndex :  number ,  index :  number ) =>  void ,  intersect? :  boolean ) =>  InteractionItem [] \n Defined in \n index.esm.d.ts:754 \n Legend \n •  Legend :  Plugin \n Defined in \n index.esm.d.ts:2162 \n LineController \n •  LineController :  ChartComponent  & {  prototype :  LineController   } \n Defined in \n index.esm.d.ts:220 \n LineElement \n •  LineElement :  ChartComponent  & {  prototype :  LineElement < LineProps ,  LineOptions >  } \n Defined in \n index.esm.d.ts:1855 \n LinearScale \n •  LinearScale :  ChartComponent  & {  prototype :  LinearScale < LinearScaleOptions >  } \n Defined in \n index.esm.d.ts:3197 \n LogarithmicScale \n •  LogarithmicScale :  ChartComponent  & {  prototype :  LogarithmicScale < LogarithmicScaleOptions >  } \n Defined in \n index.esm.d.ts:3221 \n PieController \n •  PieController :  ChartComponent  & {  prototype :  DoughnutController   } \n Defined in \n index.esm.d.ts:360 \n PointElement \n •  PointElement :  ChartComponent  & {  prototype :  PointElement < PointProps ,  PointOptions >  } \n Defined in \n index.esm.d.ts:1972 \n PolarAreaController \n •  PolarAreaController :  ChartComponent  & {  prototype :  PolarAreaController   } \n Defined in \n index.esm.d.ts:388 \n RadarController \n •  RadarController :  ChartComponent  & {  prototype :  RadarController   } \n Defined in \n index.esm.d.ts:421 \n RadialLinearScale \n •  RadialLinearScale :  ChartComponent  & {  prototype :  RadialLinearScale < RadialLinearScaleOptions >  } \n Defined in \n index.esm.d.ts:3479 \n ScatterController \n •  ScatterController :  ChartComponent  & {  prototype :  LineController   } \n Defined in \n index.esm.d.ts:235 \n SubTitle \n •  SubTitle :  Plugin \n Defined in \n index.esm.d.ts:2402 \n Ticks \n •  Ticks :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n formatters \n Object \n \n \n formatters.logarithmic \n [object Object] \n \n \n formatters.numeric \n [object Object] \n \n \n formatters.values \n [object Object] \n Defined in \n index.esm.d.ts:1356 \n TimeScale \n •  TimeScale :  ChartComponent  & {  prototype :  TimeScale < TimeScaleOptions >  } \n Defined in \n index.esm.d.ts:3317 \n TimeSeriesScale \n •  TimeSeriesScale :  ChartComponent  & {  prototype :  TimeSeriesScale < TimeScaleOptions >  } \n Defined in \n index.esm.d.ts:3323 \n Title \n •  Title :  Plugin \n Defined in \n index.esm.d.ts:2403 \n Tooltip \n •  Tooltip :  Tooltip \n Defined in \n index.esm.d.ts:2552 \n _adapters \n •  _adapters :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n _date \n DateAdapter \n Defined in \n adapters.d.ts:68 \n defaults \n •  defaults :  Defaults \n Defined in \n index.esm.d.ts:701 \n layouts \n •  layouts :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n addBox \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >,  item :  LayoutItem ) =>  void \n \n \n configure \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >,  item :  LayoutItem ,  options : {  fullSize? :  number  ;  position? :  LayoutPosition  ;  weight? :  number   }) =>  void \n \n \n removeBox \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >,  layoutItem :  LayoutItem ) =>  void \n \n \n update \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >,  width :  number ,  height :  number ) =>  void \n Defined in \n index.esm.d.ts:769 \n registerables \n •  registerables : readonly  ChartComponentLike [] \n Defined in \n index.esm.d.ts:552 \n registry \n •  registry :  Registry \n Defined in \n index.esm.d.ts:1139 \n'},{title:"Class: Animations",frontmatter:{},regularPath:"/api/classes/Animations.html",relativePath:"api/classes/Animations.md",key:"v-a67dbfd2",path:"/api/classes/Animations.html",headers:[{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"configure",slug:"configure"},{level:3,title:"update",slug:"update"}],content:" Class: Animations \n Constructors \n constructor \n •  new Animations ( chart ,  animations ) \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n animations \n AnyObject \n Defined in \n animation.d.ts:30 \n Methods \n configure \n ▸  configure ( animations ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n animations \n AnyObject \n Returns \n void \n Defined in \n animation.d.ts:31 \n update \n ▸  update ( target ,  values ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n target \n AnyObject \n \n \n values \n AnyObject \n Returns \n boolean \n Defined in \n animation.d.ts:32 \n"},{title:"Class: Animator",frontmatter:{},regularPath:"/api/classes/Animator.html",relativePath:"api/classes/Animator.md",key:"v-2a8da932",path:"/api/classes/Animator.html",headers:[{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"add",slug:"add"},{level:3,title:"has",slug:"has"},{level:3,title:"listen",slug:"listen"},{level:3,title:"remove",slug:"remove"},{level:3,title:"running",slug:"running"},{level:3,title:"start",slug:"start"},{level:3,title:"stop",slug:"stop"}],content:' Class: Animator \n Constructors \n constructor \n •  new Animator () \n Methods \n add \n ▸  add ( chart ,  items ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n items \n readonly  Animation [] \n Returns \n void \n Defined in \n animation.d.ts:21 \n has \n ▸  has ( chart ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n boolean \n Defined in \n animation.d.ts:22 \n listen \n ▸  listen ( chart ,  event ,  cb ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n event \n "progress"  |  "complete" \n \n \n cb \n ( event :  AnimationEvent ) =>  void \n Returns \n void \n Defined in \n animation.d.ts:20 \n remove \n ▸  remove ( chart ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n boolean \n Defined in \n animation.d.ts:26 \n running \n ▸  running ( chart ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n boolean \n Defined in \n animation.d.ts:24 \n start \n ▸  start ( chart ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Defined in \n animation.d.ts:23 \n stop \n ▸  stop ( chart ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Defined in \n animation.d.ts:25 \n'},{title:"Class: BasePlatform",frontmatter:{},regularPath:"/api/classes/BasePlatform.html",relativePath:"api/classes/BasePlatform.md",key:"v-51e101ad",path:"/api/classes/BasePlatform.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"acquireContext",slug:"acquirecontext"},{level:3,title:"addEventListener",slug:"addeventlistener"},{level:3,title:"getDevicePixelRatio",slug:"getdevicepixelratio"},{level:3,title:"getMaximumSize",slug:"getmaximumsize"},{level:3,title:"isAttached",slug:"isattached"},{level:3,title:"releaseContext",slug:"releasecontext"},{level:3,title:"removeEventListener",slug:"removeeventlistener"},{level:3,title:"updateConfig",slug:"updateconfig"}],content:" Class: BasePlatform \n Hierarchy \n \n \n BasePlatform \n ↳  BasicPlatform \n ↳  DomPlatform \n Constructors \n constructor \n •  new BasePlatform () \n Methods \n acquireContext \n ▸  acquireContext ( canvas ,  options? ):  CanvasRenderingContext2D \n Called at chart construction time, returns a context2d instance implementing\nthe  W3C Canvas 2D Context API standard . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas from which to acquire context (platform specific) \n \n \n options? \n CanvasRenderingContext2DSettings \n The chart options \n Returns \n CanvasRenderingContext2D \n Defined in \n index.esm.d.ts:2057 \n addEventListener \n ▸  addEventListener ( chart ,  type ,  listener ):  void \n Registers the specified listener on the given chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to listen for event \n \n \n type \n string \n The ( ChartEvent ) type to listen for \n \n \n listener \n ( e :  ChartEvent ) =>  void \n Receives a notification (an object that implements the  ChartEvent  interface) when an event of the specified type occurs. \n Returns \n void \n Defined in \n index.esm.d.ts:2075 \n getDevicePixelRatio \n ▸  getDevicePixelRatio ():  number \n Returns \n number \n the current devicePixelRatio of the device this platform is connected to. \n Defined in \n index.esm.d.ts:2086 \n getMaximumSize \n ▸  getMaximumSize ( canvas ,  width? ,  height? ,  aspectRatio? ):  Object \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas for which to calculate the maximum size \n \n \n width? \n number \n - \n \n \n height? \n number \n - \n \n \n aspectRatio? \n number \n - \n Returns \n Object \n the maximum size available. \n \n \n \n Name \n Type \n \n \n \n \n height \n number \n \n \n width \n number \n Defined in \n index.esm.d.ts:2094 \n isAttached \n ▸  isAttached ( canvas ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canvas \n HTMLCanvasElement \n Returns \n boolean \n true if the canvas is attached to the platform, false if not. \n Defined in \n index.esm.d.ts:2099 \n releaseContext \n ▸  releaseContext ( context ):  boolean \n Called at chart destruction time, releases any resources associated to the context\npreviously returned by the acquireContext() method. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n context \n CanvasRenderingContext2D \n The context2d instance \n Returns \n boolean \n true if the method succeeded, else false \n Defined in \n index.esm.d.ts:2067 \n removeEventListener \n ▸  removeEventListener ( chart ,  type ,  listener ):  void \n Removes the specified listener previously registered with addEventListener. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to remove the listener \n \n \n type \n string \n The ( ChartEvent ) type to remove \n \n \n listener \n ( e :  ChartEvent ) =>  void \n The listener function to remove from the event target. \n Returns \n void \n Defined in \n index.esm.d.ts:2082 \n updateConfig \n ▸  updateConfig ( config ):  void \n Updates config with platform specific requirements \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n config \n ChartConfiguration <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > |  ChartConfigurationCustomTypesPerDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Defined in \n index.esm.d.ts:2104 \n"},{title:"Class: BasicPlatform",frontmatter:{},regularPath:"/api/classes/BasicPlatform.html",relativePath:"api/classes/BasicPlatform.md",key:"v-4afbfd36",path:"/api/classes/BasicPlatform.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"acquireContext",slug:"acquirecontext"},{level:3,title:"addEventListener",slug:"addeventlistener"},{level:3,title:"getDevicePixelRatio",slug:"getdevicepixelratio"},{level:3,title:"getMaximumSize",slug:"getmaximumsize"},{level:3,title:"isAttached",slug:"isattached"},{level:3,title:"releaseContext",slug:"releasecontext"},{level:3,title:"removeEventListener",slug:"removeeventlistener"},{level:3,title:"updateConfig",slug:"updateconfig"}],content:" Class: BasicPlatform \n Hierarchy \n \n \n BasePlatform \n ↳  BasicPlatform \n Constructors \n constructor \n •  new BasicPlatform () \n Inherited from \n BasePlatform . constructor \n Methods \n acquireContext \n ▸  acquireContext ( canvas ,  options? ):  CanvasRenderingContext2D \n Called at chart construction time, returns a context2d instance implementing\nthe  W3C Canvas 2D Context API standard . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas from which to acquire context (platform specific) \n \n \n options? \n CanvasRenderingContext2DSettings \n The chart options \n Returns \n CanvasRenderingContext2D \n Inherited from \n BasePlatform . acquireContext \n Defined in \n index.esm.d.ts:2057 \n addEventListener \n ▸  addEventListener ( chart ,  type ,  listener ):  void \n Registers the specified listener on the given chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to listen for event \n \n \n type \n string \n The ( ChartEvent ) type to listen for \n \n \n listener \n ( e :  ChartEvent ) =>  void \n Receives a notification (an object that implements the  ChartEvent  interface) when an event of the specified type occurs. \n Returns \n void \n Inherited from \n BasePlatform . addEventListener \n Defined in \n index.esm.d.ts:2075 \n getDevicePixelRatio \n ▸  getDevicePixelRatio ():  number \n Returns \n number \n the current devicePixelRatio of the device this platform is connected to. \n Inherited from \n BasePlatform . getDevicePixelRatio \n Defined in \n index.esm.d.ts:2086 \n getMaximumSize \n ▸  getMaximumSize ( canvas ,  width? ,  height? ,  aspectRatio? ):  Object \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas for which to calculate the maximum size \n \n \n width? \n number \n - \n \n \n height? \n number \n - \n \n \n aspectRatio? \n number \n - \n Returns \n Object \n the maximum size available. \n \n \n \n Name \n Type \n \n \n \n \n height \n number \n \n \n width \n number \n Inherited from \n BasePlatform . getMaximumSize \n Defined in \n index.esm.d.ts:2094 \n isAttached \n ▸  isAttached ( canvas ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canvas \n HTMLCanvasElement \n Returns \n boolean \n true if the canvas is attached to the platform, false if not. \n Inherited from \n BasePlatform . isAttached \n Defined in \n index.esm.d.ts:2099 \n releaseContext \n ▸  releaseContext ( context ):  boolean \n Called at chart destruction time, releases any resources associated to the context\npreviously returned by the acquireContext() method. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n context \n CanvasRenderingContext2D \n The context2d instance \n Returns \n boolean \n true if the method succeeded, else false \n Inherited from \n BasePlatform . releaseContext \n Defined in \n index.esm.d.ts:2067 \n removeEventListener \n ▸  removeEventListener ( chart ,  type ,  listener ):  void \n Removes the specified listener previously registered with addEventListener. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to remove the listener \n \n \n type \n string \n The ( ChartEvent ) type to remove \n \n \n listener \n ( e :  ChartEvent ) =>  void \n The listener function to remove from the event target. \n Returns \n void \n Inherited from \n BasePlatform . removeEventListener \n Defined in \n index.esm.d.ts:2082 \n updateConfig \n ▸  updateConfig ( config ):  void \n Updates config with platform specific requirements \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n config \n ChartConfiguration <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > |  ChartConfigurationCustomTypesPerDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Inherited from \n BasePlatform . updateConfig \n Defined in \n index.esm.d.ts:2104 \n"},{title:"Class: Chart",frontmatter:{},regularPath:"/api/classes/Chart.html",relativePath:"api/classes/Chart.md",key:"v-bf041b76",path:"/api/classes/Chart.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"aspectRatio",slug:"aspectratio"},{level:3,title:"attached",slug:"attached"},{level:3,title:"boxes",slug:"boxes"},{level:3,title:"canvas",slug:"canvas"},{level:3,title:"chartArea",slug:"chartarea"},{level:3,title:"config",slug:"config"},{level:3,title:"ctx",slug:"ctx"},{level:3,title:"currentDevicePixelRatio",slug:"currentdevicepixelratio"},{level:3,title:"data",slug:"data"},{level:3,title:"height",slug:"height"},{level:3,title:"id",slug:"id"},{level:3,title:"legend",slug:"legend"},{level:3,title:"options",slug:"options"},{level:3,title:"platform",slug:"platform"},{level:3,title:"scales",slug:"scales"},{level:3,title:"tooltip",slug:"tooltip"},{level:3,title:"width",slug:"width"},{level:3,title:"defaults",slug:"defaults"},{level:3,title:"instances",slug:"instances"},{level:3,title:"overrides",slug:"overrides"},{level:3,title:"registry",slug:"registry"},{level:3,title:"version",slug:"version"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"bindEvents",slug:"bindevents"},{level:3,title:"buildOrUpdateControllers",slug:"buildorupdatecontrollers"},{level:3,title:"buildOrUpdateScales",slug:"buildorupdatescales"},{level:3,title:"clear",slug:"clear"},{level:3,title:"destroy",slug:"destroy"},{level:3,title:"draw",slug:"draw"},{level:3,title:"ensureScalesHaveIDs",slug:"ensurescaleshaveids"},{level:3,title:"getActiveElements",slug:"getactiveelements"},{level:3,title:"getDataVisibility",slug:"getdatavisibility"},{level:3,title:"getDatasetMeta",slug:"getdatasetmeta"},{level:3,title:"getElementsAtEventForMode",slug:"getelementsateventformode"},{level:3,title:"getSortedVisibleDatasetMetas",slug:"getsortedvisibledatasetmetas"},{level:3,title:"getVisibleDatasetCount",slug:"getvisibledatasetcount"},{level:3,title:"hide",slug:"hide"},{level:3,title:"isDatasetVisible",slug:"isdatasetvisible"},{level:3,title:"isPointInArea",slug:"ispointinarea"},{level:3,title:"notifyPlugins",slug:"notifyplugins"},{level:3,title:"render",slug:"render"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resize",slug:"resize"},{level:3,title:"setActiveElements",slug:"setactiveelements"},{level:3,title:"setDatasetVisibility",slug:"setdatasetvisibility"},{level:3,title:"show",slug:"show"},{level:3,title:"stop",slug:"stop"},{level:3,title:"toBase64Image",slug:"tobase64image"},{level:3,title:"toggleDataVisibility",slug:"toggledatavisibility"},{level:3,title:"unbindEvents",slug:"unbindevents"},{level:3,title:"update",slug:"update"},{level:3,title:"updateHoverStyle",slug:"updatehoverstyle"},{level:3,title:"getChart",slug:"getchart"},{level:3,title:"register",slug:"register"},{level:3,title:"unregister",slug:"unregister"}],content:' Class: Chart<TType, TData, TLabel> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n \n \n TLabel \n unknown \n Constructors \n constructor \n •  new Chart < TType ,  TData ,  TLabel >( item ,  config ) \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends keyof  ChartTypeRegistry  = keyof  ChartTypeRegistry \n \n \n TData \n DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]> \n \n \n TLabel \n unknown \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n item \n ChartItem \n \n \n config \n ChartConfiguration < TType ,  TData ,  TLabel > |  ChartConfigurationCustomTypesPerDataset < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:504 \n Properties \n aspectRatio \n •  Readonly   aspectRatio :  number \n Defined in \n index.esm.d.ts:491 \n attached \n •  Readonly   attached :  boolean \n Defined in \n index.esm.d.ts:496 \n boxes \n •  Readonly   boxes :  LayoutItem [] \n Defined in \n index.esm.d.ts:492 \n canvas \n •  Readonly   canvas :  HTMLCanvasElement \n Defined in \n index.esm.d.ts:486 \n chartArea \n •  Readonly   chartArea :  ChartArea \n Defined in \n index.esm.d.ts:494 \n config \n •  Readonly   config :  ChartConfiguration < TType ,  TData ,  TLabel > |  ChartConfigurationCustomTypesPerDataset < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:488 \n ctx \n •  Readonly   ctx :  CanvasRenderingContext2D \n Defined in \n index.esm.d.ts:487 \n currentDevicePixelRatio \n •  Readonly   currentDevicePixelRatio :  number \n Defined in \n index.esm.d.ts:493 \n data \n •  data :  ChartData < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:501 \n height \n •  Readonly   height :  number \n Defined in \n index.esm.d.ts:490 \n id \n •  Readonly   id :  string \n Defined in \n index.esm.d.ts:485 \n legend \n •  Optional   Readonly   legend :  LegendElement < TType > \n Defined in \n index.esm.d.ts:498 \n options \n •  options :  DeepPartial < CoreChartOptions < TType > &  ElementChartOptions < TType > &  PluginChartOptions < TType > &  DatasetChartOptions < TType > &  ScaleChartOptions < TType > &  ChartTypeRegistry [ TType ][ "chartOptions" ]> \n Defined in \n index.esm.d.ts:502 \n platform \n •  Readonly   platform :  BasePlatform \n Defined in \n index.esm.d.ts:484 \n scales \n •  Readonly   scales :  Object \n Index signature \n ▪ [key:  string ]:  Scale \n Defined in \n index.esm.d.ts:495 \n tooltip \n •  Optional   Readonly   tooltip :  TooltipModel < TType > \n Defined in \n index.esm.d.ts:499 \n width \n •  Readonly   width :  number \n Defined in \n index.esm.d.ts:489 \n defaults \n ▪  Static   Readonly   defaults :  Defaults \n Defined in \n index.esm.d.ts:542 \n instances \n ▪  Static   Readonly   instances :  Object \n Index signature \n ▪ [key:  string ]:  Chart \n Defined in \n index.esm.d.ts:545 \n overrides \n ▪  Static   Readonly   overrides :  Overrides \n Defined in \n index.esm.d.ts:543 \n registry \n ▪  Static   Readonly   registry :  Registry \n Defined in \n index.esm.d.ts:546 \n version \n ▪  Static   Readonly   version :  string \n Defined in \n index.esm.d.ts:544 \n Methods \n bindEvents \n ▸  bindEvents ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:536 \n buildOrUpdateControllers \n ▸  buildOrUpdateControllers ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:512 \n buildOrUpdateScales \n ▸  buildOrUpdateScales ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:511 \n clear \n ▸  clear ():  Chart < TType ,  TData ,  TLabel > \n Returns \n Chart < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:506 \n destroy \n ▸  destroy ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:534 \n draw \n ▸  draw ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:516 \n ensureScalesHaveIDs \n ▸  ensureScalesHaveIDs ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:510 \n getActiveElements \n ▸  getActiveElements ():  ActiveElement [] \n Returns \n ActiveElement [] \n Defined in \n index.esm.d.ts:531 \n getDataVisibility \n ▸  getDataVisibility ( index ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n boolean \n Defined in \n index.esm.d.ts:527 \n getDatasetMeta \n ▸  getDatasetMeta ( datasetIndex ):  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Defined in \n index.esm.d.ts:522 \n getElementsAtEventForMode \n ▸  getElementsAtEventForMode ( e ,  mode ,  options ,  useFinalPosition ):  InteractionItem [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n e \n Event \n \n \n mode \n string \n \n \n options \n InteractionOptions \n \n \n useFinalPosition \n boolean \n Returns \n InteractionItem [] \n Defined in \n index.esm.d.ts:519 \n getSortedVisibleDatasetMetas \n ▸  getSortedVisibleDatasetMetas ():  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Defined in \n index.esm.d.ts:521 \n getVisibleDatasetCount \n ▸  getVisibleDatasetCount ():  number \n Returns \n number \n Defined in \n index.esm.d.ts:523 \n hide \n ▸  hide ( datasetIndex ,  dataIndex? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n \n \n dataIndex? \n number \n Returns \n void \n Defined in \n index.esm.d.ts:528 \n isDatasetVisible \n ▸  isDatasetVisible ( datasetIndex ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n Returns \n boolean \n Defined in \n index.esm.d.ts:524 \n isPointInArea \n ▸  isPointInArea ( point ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n point \n Point \n Returns \n boolean \n Defined in \n index.esm.d.ts:518 \n notifyPlugins \n ▸  notifyPlugins ( hook ,  args? ):  boolean  |  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n hook \n string \n \n \n args? \n AnyObject \n Returns \n boolean  |  void \n Defined in \n index.esm.d.ts:540 \n render \n ▸  render ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:515 \n reset \n ▸  reset ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:513 \n resize \n ▸  resize ( width? ,  height? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width? \n number \n \n \n height? \n number \n Returns \n void \n Defined in \n index.esm.d.ts:509 \n setActiveElements \n ▸  setActiveElements ( active ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n active \n ActiveDataPoint [] \n Returns \n void \n Defined in \n index.esm.d.ts:532 \n setDatasetVisibility \n ▸  setDatasetVisibility ( datasetIndex ,  visible ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n \n \n visible \n boolean \n Returns \n void \n Defined in \n index.esm.d.ts:525 \n show \n ▸  show ( datasetIndex ,  dataIndex? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n \n \n dataIndex? \n number \n Returns \n void \n Defined in \n index.esm.d.ts:529 \n stop \n ▸  stop ():  Chart < TType ,  TData ,  TLabel > \n Returns \n Chart < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:507 \n toBase64Image \n ▸  toBase64Image ( type? ,  quality? ):  string \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n type? \n string \n \n \n quality? \n unknown \n Returns \n string \n Defined in \n index.esm.d.ts:535 \n toggleDataVisibility \n ▸  toggleDataVisibility ( index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n void \n Defined in \n index.esm.d.ts:526 \n unbindEvents \n ▸  unbindEvents ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:537 \n update \n ▸  update ( mode? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode? \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Defined in \n index.esm.d.ts:514 \n updateHoverStyle \n ▸  updateHoverStyle ( items ,  mode ,  enabled ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n items \n InteractionItem [] \n \n \n mode \n "dataset" \n \n \n enabled \n boolean \n Returns \n void \n Defined in \n index.esm.d.ts:538 \n getChart \n ▸  Static   getChart ( key ):  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n key \n string  |  HTMLCanvasElement  |  CanvasRenderingContext2D \n Returns \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:547 \n register \n ▸  Static   register (... items ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...items \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:548 \n unregister \n ▸  Static   unregister (... items ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...items \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:549 \n'},{title:"Class: DatasetController",frontmatter:{},regularPath:"/api/classes/DatasetController.html",relativePath:"api/classes/DatasetController.md",key:"v-0d019285",path:"/api/classes/DatasetController.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"_cachedMeta",slug:"cachedmeta"},{level:3,title:"chart",slug:"chart"},{level:3,title:"enableOptionSharing",slug:"enableoptionsharing"},{level:3,title:"index",slug:"index"},{level:3,title:"supportsDecimation",slug:"supportsdecimation"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"addElements",slug:"addelements"},{level:3,title:"applyStack",slug:"applystack"},{level:3,title:"buildOrUpdateElements",slug:"buildorupdateelements"},{level:3,title:"configure",slug:"configure"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getAllParsedValues",slug:"getallparsedvalues"},{level:3,title:"getDataset",slug:"getdataset"},{level:3,title:"getLabelAndValue",slug:"getlabelandvalue"},{level:3,title:"getMaxOverflow",slug:"getmaxoverflow"},{level:3,title:"getMeta",slug:"getmeta"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getParsed",slug:"getparsed"},{level:3,title:"getScaleForId",slug:"getscaleforid"},{level:3,title:"getSharedOptions",slug:"getsharedoptions"},{level:3,title:"getStyle",slug:"getstyle"},{level:3,title:"includeOptions",slug:"includeoptions"},{level:3,title:"initialize",slug:"initialize"},{level:3,title:"linkScales",slug:"linkscales"},{level:3,title:"parse",slug:"parse"},{level:3,title:"parseArrayData",slug:"parsearraydata"},{level:3,title:"parseObjectData",slug:"parseobjectdata"},{level:3,title:"parsePrimitiveData",slug:"parseprimitivedata"},{level:3,title:"removeHoverStyle",slug:"removehoverstyle"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resolveDataElementOptions",slug:"resolvedataelementoptions"},{level:3,title:"resolveDatasetElementOptions",slug:"resolvedatasetelementoptions"},{level:3,title:"setHoverStyle",slug:"sethoverstyle"},{level:3,title:"update",slug:"update"},{level:3,title:"updateElement",slug:"updateelement"},{level:3,title:"updateElements",slug:"updateelements"},{level:3,title:"updateIndex",slug:"updateindex"},{level:3,title:"updateRangeFromParsed",slug:"updaterangefromparsed"},{level:3,title:"updateSharedOptions",slug:"updatesharedoptions"}],content:' Class: DatasetController<TType, TElement, TDatasetElement, TParsedData> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TElement \n extends  Element  =  Element \n \n \n TDatasetElement \n extends  Element  =  Element \n \n \n TParsedData \n ParsedDataType < TType > \n Hierarchy \n \n \n DatasetController \n ↳  DoughnutController \n Constructors \n constructor \n •  new DatasetController < TType ,  TElement ,  TDatasetElement ,  TParsedData >( chart ,  datasetIndex ) \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends keyof  ChartTypeRegistry  = keyof  ChartTypeRegistry \n \n \n TElement \n extends  Element < AnyObject ,  AnyObject ,  TElement > =  Element < AnyObject ,  AnyObject > \n \n \n TDatasetElement \n extends  Element < AnyObject ,  AnyObject ,  TDatasetElement > =  Element < AnyObject ,  AnyObject > \n \n \n TParsedData \n ParsedDataType < TType > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n datasetIndex \n number \n Defined in \n index.esm.d.ts:579 \n Properties \n _cachedMeta \n •  Readonly   _cachedMeta :  ChartMeta < TElement ,  TDatasetElement ,  TType > \n Defined in \n index.esm.d.ts:583 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:581 \n enableOptionSharing \n •  enableOptionSharing :  boolean \n Defined in \n index.esm.d.ts:584 \n index \n •  Readonly   index :  number \n Defined in \n index.esm.d.ts:582 \n supportsDecimation \n •  supportsDecimation :  boolean \n Defined in \n index.esm.d.ts:588 \n Methods \n addElements \n ▸  addElements ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:604 \n applyStack \n ▸  Protected   applyStack ( scale ,  parsed ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n Returns \n number \n Defined in \n index.esm.d.ts:640 \n buildOrUpdateElements \n ▸  buildOrUpdateElements ( resetNewElements? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n resetNewElements? \n boolean \n Returns \n void \n Defined in \n index.esm.d.ts:605 \n configure \n ▸  configure ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:602 \n draw \n ▸  draw ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:597 \n getAllParsedValues \n ▸  getAllParsedValues ( scale ):  number [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n Returns \n number [] \n Defined in \n index.esm.d.ts:591 \n getDataset \n ▸  getDataset ():  ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Returns \n ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Defined in \n index.esm.d.ts:599 \n getLabelAndValue \n ▸  Protected   getLabelAndValue ( index ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n label \n string \n \n \n value \n string \n Defined in \n index.esm.d.ts:592 \n getMaxOverflow \n ▸  Protected   getMaxOverflow ():  number  |  boolean \n Returns \n number  |  boolean \n Defined in \n index.esm.d.ts:596 \n getMeta \n ▸  getMeta ():  ChartMeta < TElement ,  TDatasetElement ,  TType > \n Returns \n ChartMeta < TElement ,  TDatasetElement ,  TType > \n Defined in \n index.esm.d.ts:600 \n getMinMax \n ▸  Protected   getMinMax ( scale ,  canStack? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n canStack? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Defined in \n index.esm.d.ts:647 \n getParsed \n ▸  Protected   getParsed ( index ):  TParsedData \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n TParsedData \n Defined in \n index.esm.d.ts:639 \n getScaleForId \n ▸  getScaleForId ( scaleID ):  Scale < CoreScaleOptions > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scaleID \n string \n Returns \n Scale < CoreScaleOptions > \n Defined in \n index.esm.d.ts:601 \n getSharedOptions \n ▸  Protected   getSharedOptions ( options ):  AnyObject \n Utility for checking if the options are shared and should be animated separately. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n AnyObject \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:614 \n getStyle \n ▸  getStyle ( index ,  active ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n active \n boolean \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:607 \n includeOptions \n ▸  Protected   includeOptions ( mode ,  sharedOptions ):  boolean \n Utility for determining if  options  should be included in the updated properties \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n sharedOptions \n AnyObject \n Returns \n boolean \n Defined in \n index.esm.d.ts:619 \n initialize \n ▸  initialize ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:603 \n linkScales \n ▸  linkScales ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:590 \n parse \n ▸  parse ( start ,  count ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n start \n number \n \n \n count \n number \n Returns \n void \n Defined in \n index.esm.d.ts:635 \n parseArrayData \n ▸  Protected   parseArrayData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < TElement ,  TDatasetElement ,  TType > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Defined in \n index.esm.d.ts:637 \n parseObjectData \n ▸  Protected   parseObjectData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < TElement ,  TDatasetElement ,  TType > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Defined in \n index.esm.d.ts:638 \n parsePrimitiveData \n ▸  Protected   parsePrimitiveData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < TElement ,  TDatasetElement ,  TType > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Defined in \n index.esm.d.ts:636 \n removeHoverStyle \n ▸  removeHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n TElement \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Defined in \n index.esm.d.ts:632 \n reset \n ▸  reset ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:598 \n resolveDataElementOptions \n ▸  Protected   resolveDataElementOptions ( index ,  mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:609 \n resolveDatasetElementOptions \n ▸  Protected   resolveDatasetElementOptions ( mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:608 \n setHoverStyle \n ▸  setHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n TElement \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Defined in \n index.esm.d.ts:633 \n update \n ▸  update ( mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Defined in \n index.esm.d.ts:594 \n updateElement \n ▸  Protected   updateElement ( element ,  index ,  properties ,  mode ):  void \n Utility for updating an element with new properties, using animations when appropriate. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n TElement  |  TDatasetElement \n \n \n index \n number \n \n \n properties \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Defined in \n index.esm.d.ts:625 \n updateElements \n ▸  updateElements ( elements ,  start ,  count ,  mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n elements \n TElement [] \n \n \n start \n number \n \n \n count \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Defined in \n index.esm.d.ts:593 \n updateIndex \n ▸  updateIndex ( datasetIndex ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n Returns \n void \n Defined in \n index.esm.d.ts:595 \n updateRangeFromParsed \n ▸  Protected   updateRangeFromParsed ( range ,  scale ,  parsed ,  stack ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n range \n Object \n \n \n range.max \n number \n \n \n range.min \n number \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n \n \n stack \n string  |  boolean \n Returns \n void \n Defined in \n index.esm.d.ts:641 \n updateSharedOptions \n ▸  Protected   updateSharedOptions ( sharedOptions ,  mode ,  newOptions ):  void \n Utility to animate the shared options, that are potentially affecting multiple elements. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n sharedOptions \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n newOptions \n AnyObject \n Returns \n void \n Defined in \n index.esm.d.ts:631 \n'},{title:"Class: DomPlatform",frontmatter:{},regularPath:"/api/classes/DomPlatform.html",relativePath:"api/classes/DomPlatform.md",key:"v-198663b6",path:"/api/classes/DomPlatform.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"acquireContext",slug:"acquirecontext"},{level:3,title:"addEventListener",slug:"addeventlistener"},{level:3,title:"getDevicePixelRatio",slug:"getdevicepixelratio"},{level:3,title:"getMaximumSize",slug:"getmaximumsize"},{level:3,title:"isAttached",slug:"isattached"},{level:3,title:"releaseContext",slug:"releasecontext"},{level:3,title:"removeEventListener",slug:"removeeventlistener"},{level:3,title:"updateConfig",slug:"updateconfig"}],content:" Class: DomPlatform \n Hierarchy \n \n \n BasePlatform \n ↳  DomPlatform \n Constructors \n constructor \n •  new DomPlatform () \n Inherited from \n BasePlatform . constructor \n Methods \n acquireContext \n ▸  acquireContext ( canvas ,  options? ):  CanvasRenderingContext2D \n Called at chart construction time, returns a context2d instance implementing\nthe  W3C Canvas 2D Context API standard . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas from which to acquire context (platform specific) \n \n \n options? \n CanvasRenderingContext2DSettings \n The chart options \n Returns \n CanvasRenderingContext2D \n Inherited from \n BasePlatform . acquireContext \n Defined in \n index.esm.d.ts:2057 \n addEventListener \n ▸  addEventListener ( chart ,  type ,  listener ):  void \n Registers the specified listener on the given chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to listen for event \n \n \n type \n string \n The ( ChartEvent ) type to listen for \n \n \n listener \n ( e :  ChartEvent ) =>  void \n Receives a notification (an object that implements the  ChartEvent  interface) when an event of the specified type occurs. \n Returns \n void \n Inherited from \n BasePlatform . addEventListener \n Defined in \n index.esm.d.ts:2075 \n getDevicePixelRatio \n ▸  getDevicePixelRatio ():  number \n Returns \n number \n the current devicePixelRatio of the device this platform is connected to. \n Inherited from \n BasePlatform . getDevicePixelRatio \n Defined in \n index.esm.d.ts:2086 \n getMaximumSize \n ▸  getMaximumSize ( canvas ,  width? ,  height? ,  aspectRatio? ):  Object \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n canvas \n HTMLCanvasElement \n The canvas for which to calculate the maximum size \n \n \n width? \n number \n - \n \n \n height? \n number \n - \n \n \n aspectRatio? \n number \n - \n Returns \n Object \n the maximum size available. \n \n \n \n Name \n Type \n \n \n \n \n height \n number \n \n \n width \n number \n Inherited from \n BasePlatform . getMaximumSize \n Defined in \n index.esm.d.ts:2094 \n isAttached \n ▸  isAttached ( canvas ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canvas \n HTMLCanvasElement \n Returns \n boolean \n true if the canvas is attached to the platform, false if not. \n Inherited from \n BasePlatform . isAttached \n Defined in \n index.esm.d.ts:2099 \n releaseContext \n ▸  releaseContext ( context ):  boolean \n Called at chart destruction time, releases any resources associated to the context\npreviously returned by the acquireContext() method. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n context \n CanvasRenderingContext2D \n The context2d instance \n Returns \n boolean \n true if the method succeeded, else false \n Inherited from \n BasePlatform . releaseContext \n Defined in \n index.esm.d.ts:2067 \n removeEventListener \n ▸  removeEventListener ( chart ,  type ,  listener ):  void \n Removes the specified listener previously registered with addEventListener. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Chart from which to remove the listener \n \n \n type \n string \n The ( ChartEvent ) type to remove \n \n \n listener \n ( e :  ChartEvent ) =>  void \n The listener function to remove from the event target. \n Returns \n void \n Inherited from \n BasePlatform . removeEventListener \n Defined in \n index.esm.d.ts:2082 \n updateConfig \n ▸  updateConfig ( config ):  void \n Updates config with platform specific requirements \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n config \n ChartConfiguration <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > |  ChartConfigurationCustomTypesPerDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Inherited from \n BasePlatform . updateConfig \n Defined in \n index.esm.d.ts:2104 \n"},{title:"Class: Scale",frontmatter:{},regularPath:"/api/classes/Scale.html",relativePath:"api/classes/Scale.md",key:"v-19707276",path:"/api/classes/Scale.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Constructors",slug:"constructors"},{level:3,title:"constructor",slug:"constructor"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"axis",slug:"axis"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"chart",slug:"chart"},{level:3,title:"ctx",slug:"ctx"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"height",slug:"height"},{level:3,title:"id",slug:"id"},{level:3,title:"labelRotation",slug:"labelrotation"},{level:3,title:"left",slug:"left"},{level:3,title:"max",slug:"max"},{level:3,title:"maxHeight",slug:"maxheight"},{level:3,title:"maxWidth",slug:"maxwidth"},{level:3,title:"min",slug:"min"},{level:3,title:"options",slug:"options"},{level:3,title:"paddingBottom",slug:"paddingbottom"},{level:3,title:"paddingLeft",slug:"paddingleft"},{level:3,title:"paddingRight",slug:"paddingright"},{level:3,title:"paddingTop",slug:"paddingtop"},{level:3,title:"position",slug:"position"},{level:3,title:"right",slug:"right"},{level:3,title:"ticks",slug:"ticks"},{level:3,title:"top",slug:"top"},{level:3,title:"type",slug:"type"},{level:3,title:"weight",slug:"weight"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterCalculateLabelRotation",slug:"aftercalculatelabelrotation"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterFit",slug:"afterfit"},{level:3,title:"afterSetDimensions",slug:"aftersetdimensions"},{level:3,title:"afterTickToLabelConversion",slug:"afterticktolabelconversion"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeCalculateLabelRotation",slug:"beforecalculatelabelrotation"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeFit",slug:"beforefit"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"beforeSetDimensions",slug:"beforesetdimensions"},{level:3,title:"beforeTickToLabelConversion",slug:"beforeticktolabelconversion"},{level:3,title:"beforeUpdate",slug:"beforeupdate"},{level:3,title:"buildTicks",slug:"buildticks"},{level:3,title:"calculateLabelRotation",slug:"calculatelabelrotation"},{level:3,title:"configure",slug:"configure"},{level:3,title:"determineDataLimits",slug:"determinedatalimits"},{level:3,title:"draw",slug:"draw"},{level:3,title:"drawGrid",slug:"drawgrid"},{level:3,title:"drawLabels",slug:"drawlabels"},{level:3,title:"drawTitle",slug:"drawtitle"},{level:3,title:"fit",slug:"fit"},{level:3,title:"generateTickLabels",slug:"generateticklabels"},{level:3,title:"getBasePixel",slug:"getbasepixel"},{level:3,title:"getBaseValue",slug:"getbasevalue"},{level:3,title:"getDecimalForPixel",slug:"getdecimalforpixel"},{level:3,title:"getLabelForValue",slug:"getlabelforvalue"},{level:3,title:"getLabels",slug:"getlabels"},{level:3,title:"getLineWidthForValue",slug:"getlinewidthforvalue"},{level:3,title:"getMatchingVisibleMetas",slug:"getmatchingvisiblemetas"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getPadding",slug:"getpadding"},{level:3,title:"getPixelForDecimal",slug:"getpixelfordecimal"},{level:3,title:"getPixelForTick",slug:"getpixelfortick"},{level:3,title:"getPixelForValue",slug:"getpixelforvalue"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getTicks",slug:"getticks"},{level:3,title:"getUserBounds",slug:"getuserbounds"},{level:3,title:"getValueForPixel",slug:"getvalueforpixel"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"init",slug:"init"},{level:3,title:"isFullSize",slug:"isfullsize"},{level:3,title:"isHorizontal",slug:"ishorizontal"},{level:3,title:"parse",slug:"parse"},{level:3,title:"setDimensions",slug:"setdimensions"},{level:3,title:"tooltipPosition",slug:"tooltipposition"},{level:3,title:"update",slug:"update"}],content:" Class: Scale<O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  CoreScaleOptions  =  CoreScaleOptions \n Hierarchy \n \n \n Element < unknown ,  O > \n \n \n LayoutItem \n ↳  Scale \n ↳↳  TimeScale \n ↳↳  RadialLinearScale \n Constructors \n constructor \n •  new Scale < O >( cfg ) \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  CoreScaleOptions  =  CoreScaleOptions \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n cfg \n Object \n \n \n cfg.chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n cfg.ctx \n CanvasRenderingContext2D \n \n \n cfg.id \n string \n \n \n cfg.type \n string \n Inherited from \n Element<unknown, O>.constructor \n Defined in \n index.esm.d.ts:1337 \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n axis \n •  axis :  string \n Defined in \n index.esm.d.ts:1239 \n bottom \n •  bottom :  number \n Bottom edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . bottom \n Defined in \n layout.d.ts:41 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:1229 \n ctx \n •  Readonly   ctx :  CanvasRenderingContext2D \n Defined in \n index.esm.d.ts:1228 \n fullSize \n •  fullSize :  boolean \n if true, and the item is horizontal, then push vertical boxes down \n Inherited from \n LayoutItem . fullSize \n Defined in \n layout.d.ts:17 \n height \n •  height :  number \n Height of item. Must be valid after update() \n Inherited from \n LayoutItem . height \n Defined in \n layout.d.ts:25 \n id \n •  Readonly   id :  string \n Defined in \n index.esm.d.ts:1226 \n labelRotation \n •  labelRotation :  number \n Defined in \n index.esm.d.ts:1240 \n left \n •  left :  number \n Left edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . left \n Defined in \n layout.d.ts:29 \n max \n •  max :  number \n Defined in \n index.esm.d.ts:1242 \n maxHeight \n •  maxHeight :  number \n Defined in \n index.esm.d.ts:1232 \n maxWidth \n •  maxWidth :  number \n Defined in \n index.esm.d.ts:1231 \n min \n •  min :  number \n Defined in \n index.esm.d.ts:1241 \n options \n •  Readonly   options :  O \n Inherited from \n Element.options \n Defined in \n element.d.ts:8 \n paddingBottom \n •  paddingBottom :  number \n Defined in \n index.esm.d.ts:1235 \n paddingLeft \n •  paddingLeft :  number \n Defined in \n index.esm.d.ts:1236 \n paddingRight \n •  paddingRight :  number \n Defined in \n index.esm.d.ts:1237 \n paddingTop \n •  paddingTop :  number \n Defined in \n index.esm.d.ts:1234 \n position \n •  position :  LayoutPosition \n The position of the item in the chart layout. Possible values are \n Inherited from \n LayoutItem . position \n Defined in \n layout.d.ts:9 \n right \n •  right :  number \n Right edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . right \n Defined in \n layout.d.ts:37 \n ticks \n •  ticks :  Tick [] \n Defined in \n index.esm.d.ts:1243 \n top \n •  top :  number \n Top edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . top \n Defined in \n layout.d.ts:33 \n type \n •  Readonly   type :  string \n Defined in \n index.esm.d.ts:1227 \n weight \n •  weight :  number \n The weight used to sort the item. Higher weights are further away from the chart area \n Inherited from \n LayoutItem . weight \n Defined in \n layout.d.ts:13 \n width \n •  width :  number \n Width of item. Must be valid after update() \n Inherited from \n LayoutItem . width \n Defined in \n layout.d.ts:21 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n afterBuildTicks \n ▸  afterBuildTicks ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1323 \n afterCalculateLabelRotation \n ▸  afterCalculateLabelRotation ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1329 \n afterDataLimits \n ▸  afterDataLimits ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1320 \n afterFit \n ▸  afterFit ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1332 \n afterSetDimensions \n ▸  afterSetDimensions ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1317 \n afterTickToLabelConversion \n ▸  afterTickToLabelConversion ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1326 \n afterUpdate \n ▸  afterUpdate ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1314 \n beforeBuildTicks \n ▸  beforeBuildTicks ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1321 \n beforeCalculateLabelRotation \n ▸  beforeCalculateLabelRotation ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1327 \n beforeDataLimits \n ▸  beforeDataLimits ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1318 \n beforeFit \n ▸  beforeFit ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1330 \n beforeLayout \n ▸  Optional   beforeLayout ():  void \n Called before the layout process starts \n Returns \n void \n Inherited from \n LayoutItem . beforeLayout \n Defined in \n layout.d.ts:46 \n beforeSetDimensions \n ▸  beforeSetDimensions ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1315 \n beforeTickToLabelConversion \n ▸  beforeTickToLabelConversion ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1324 \n beforeUpdate \n ▸  beforeUpdate ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1312 \n buildTicks \n ▸  buildTicks ():  Tick [] \n Returns \n Tick [] \n Defined in \n index.esm.d.ts:1322 \n calculateLabelRotation \n ▸  calculateLabelRotation ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1328 \n configure \n ▸  configure ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1313 \n determineDataLimits \n ▸  determineDataLimits ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1319 \n draw \n ▸  draw ( chartArea ):  void \n Draws the element \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n LayoutItem . draw \n Defined in \n layout.d.ts:50 \n drawGrid \n ▸  drawGrid ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Defined in \n index.esm.d.ts:1248 \n drawLabels \n ▸  drawLabels ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Defined in \n index.esm.d.ts:1247 \n drawTitle \n ▸  drawTitle ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Defined in \n index.esm.d.ts:1246 \n fit \n ▸  fit ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1331 \n generateTickLabels \n ▸  generateTickLabels ( ticks ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ticks \n Tick [] \n Returns \n void \n Defined in \n index.esm.d.ts:1325 \n getBasePixel \n ▸  getBasePixel ():  number \n Returns the pixel for the minimum chart value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Returns \n number \n Defined in \n index.esm.d.ts:1304 \n getBaseValue \n ▸  getBaseValue ():  number \n Returns \n number \n Defined in \n index.esm.d.ts:1298 \n getDecimalForPixel \n ▸  getDecimalForPixel ( pixel ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1254 \n getLabelForValue \n ▸  getLabelForValue ( value ):  string \n Used to get the label to display in the tooltip for the given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n string \n Defined in \n index.esm.d.ts:1274 \n getLabels \n ▸  getLabels ():  string [] \n Returns \n string [] \n Defined in \n index.esm.d.ts:1311 \n getLineWidthForValue \n ▸  getLineWidthForValue ( value ):  number \n Returns the grid line width at given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1279 \n getMatchingVisibleMetas \n ▸  getMatchingVisibleMetas ( type? ):  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n type? \n string \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Defined in \n index.esm.d.ts:1244 \n getMinMax \n ▸  getMinMax ( canStack ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canStack \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Defined in \n index.esm.d.ts:1309 \n getPadding \n ▸  Optional   getPadding ():  ChartArea \n Returns an object with padding on the edges \n Returns \n ChartArea \n Inherited from \n LayoutItem . getPadding \n Defined in \n layout.d.ts:54 \n getPixelForDecimal \n ▸  getPixelForDecimal ( decimal ):  number \n Utility for getting the pixel location of a percentage of scale\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n decimal \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1261 \n getPixelForTick \n ▸  getPixelForTick ( index ):  number \n Returns the location of the tick at the given index\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1268 \n getPixelForValue \n ▸  getPixelForValue ( value ,  index? ):  number \n Returns the location of the given data point. Value can either be an index or a numerical value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n \n \n index? \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1288 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < unknown ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends  never [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < unknown ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n getTicks \n ▸  getTicks ():  Tick [] \n Returns \n Tick [] \n Defined in \n index.esm.d.ts:1310 \n getUserBounds \n ▸  getUserBounds ():  Object \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n maxDefined \n boolean \n \n \n min \n number \n \n \n minDefined \n boolean \n Defined in \n index.esm.d.ts:1308 \n getValueForPixel \n ▸  getValueForPixel ( pixel ):  number \n Used to get the data value from a given pixel. This is the inverse of getPixelForValue\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Defined in \n index.esm.d.ts:1296 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n init \n ▸  init ( options ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n O \n Returns \n void \n Defined in \n index.esm.d.ts:1306 \n isFullSize \n ▸  isFullSize ():  boolean \n Returns \n boolean \n Defined in \n index.esm.d.ts:1334 \n isHorizontal \n ▸  isHorizontal ():  boolean \n returns true if the layout item is horizontal (ie. top or bottom) \n Returns \n boolean \n Inherited from \n LayoutItem . isHorizontal \n Defined in \n layout.d.ts:58 \n parse \n ▸  parse ( raw ,  index ):  unknown \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n raw \n unknown \n \n \n index \n number \n Returns \n unknown \n Defined in \n index.esm.d.ts:1307 \n setDimensions \n ▸  setDimensions ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1316 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n update \n ▸  update ( width ,  height ,  margins? ):  void \n Takes two parameters: width and height. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width \n number \n \n \n height \n number \n \n \n margins? \n ChartArea \n Returns \n void \n Inherited from \n LayoutItem . update \n Defined in \n layout.d.ts:64 \n"},{title:"Enumeration: DecimationAlgorithm",frontmatter:{},regularPath:"/api/enums/DecimationAlgorithm.html",relativePath:"api/enums/DecimationAlgorithm.md",key:"v-03f2ff85",path:"/api/enums/DecimationAlgorithm.html",headers:[{level:2,title:"Enumeration members",slug:"enumeration-members"},{level:3,title:"lttb",slug:"lttb"},{level:3,title:"minmax",slug:"minmax"}],content:' Enumeration: DecimationAlgorithm \n Enumeration members \n lttb \n •  lttb  =  "lttb" \n Defined in \n index.esm.d.ts:2113 \n minmax \n •  minmax  =  "min-max" \n Defined in \n index.esm.d.ts:2114 \n'},{title:"Enumeration: UpdateModeEnum",frontmatter:{},regularPath:"/api/enums/UpdateModeEnum.html",relativePath:"api/enums/UpdateModeEnum.md",key:"v-9eee279a",path:"/api/enums/UpdateModeEnum.html",headers:[{level:2,title:"Enumeration members",slug:"enumeration-members"},{level:3,title:"active",slug:"active"},{level:3,title:"hide",slug:"hide"},{level:3,title:"none",slug:"none"},{level:3,title:"normal",slug:"normal"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resize",slug:"resize"},{level:3,title:"show",slug:"show"}],content:' Enumeration: UpdateModeEnum \n Enumeration members \n active \n •  active  =  "active" \n Defined in \n index.esm.d.ts:568 \n hide \n •  hide  =  "hide" \n Defined in \n index.esm.d.ts:565 \n none \n •  none  =  "none" \n Defined in \n index.esm.d.ts:564 \n normal \n •  normal  =  "normal" \n Defined in \n index.esm.d.ts:567 \n reset \n •  reset  =  "reset" \n Defined in \n index.esm.d.ts:563 \n resize \n •  resize  =  "resize" \n Defined in \n index.esm.d.ts:562 \n show \n •  show  =  "show" \n Defined in \n index.esm.d.ts:566 \n'},{title:"Interface: ActiveDataPoint",frontmatter:{},regularPath:"/api/interfaces/ActiveDataPoint.html",relativePath:"api/interfaces/ActiveDataPoint.md",key:"v-38a45c31",path:"/api/interfaces/ActiveDataPoint.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"index",slug:"index"}],content:" Interface: ActiveDataPoint \n Hierarchy \n \n \n ActiveDataPoint \n ↳  ActiveElement \n Properties \n datasetIndex \n •  datasetIndex :  number \n Defined in \n index.esm.d.ts:471 \n index \n •  index :  number \n Defined in \n index.esm.d.ts:472 \n"},{title:"Interface: ActiveElement",frontmatter:{},regularPath:"/api/interfaces/ActiveElement.html",relativePath:"api/interfaces/ActiveElement.md",key:"v-5348cb45",path:"/api/interfaces/ActiveElement.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"element",slug:"element"},{level:3,title:"index",slug:"index"}],content:" Interface: ActiveElement \n Hierarchy \n \n \n ActiveDataPoint \n ↳  ActiveElement \n Properties \n datasetIndex \n •  datasetIndex :  number \n Inherited from \n ActiveDataPoint . datasetIndex \n Defined in \n index.esm.d.ts:471 \n element \n •  element :  Element < AnyObject ,  AnyObject > \n Defined in \n index.esm.d.ts:476 \n index \n •  index :  number \n Inherited from \n ActiveDataPoint . index \n Defined in \n index.esm.d.ts:472 \n"},{title:"Interface: AnimationEvent",frontmatter:{},regularPath:"/api/interfaces/AnimationEvent.html",relativePath:"api/interfaces/AnimationEvent.md",key:"v-06876285",path:"/api/interfaces/AnimationEvent.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"currentStep",slug:"currentstep"},{level:3,title:"initial",slug:"initial"},{level:3,title:"numSteps",slug:"numsteps"}],content:" Interface: AnimationEvent \n Properties \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n animation.d.ts:13 \n currentStep \n •  currentStep :  number \n Defined in \n animation.d.ts:16 \n initial \n •  initial :  boolean \n Defined in \n animation.d.ts:15 \n numSteps \n •  numSteps :  number \n Defined in \n animation.d.ts:14 \n"},{title:"Interface: ArcBorderRadius",frontmatter:{},regularPath:"/api/interfaces/ArcBorderRadius.html",relativePath:"api/interfaces/ArcBorderRadius.md",key:"v-3ff754d1",path:"/api/interfaces/ArcBorderRadius.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"innerEnd",slug:"innerend"},{level:3,title:"innerStart",slug:"innerstart"},{level:3,title:"outerEnd",slug:"outerend"},{level:3,title:"outerStart",slug:"outerstart"}],content:" Interface: ArcBorderRadius \n Properties \n innerEnd \n •  innerEnd :  number \n Defined in \n index.esm.d.ts:1725 \n innerStart \n •  innerStart :  number \n Defined in \n index.esm.d.ts:1724 \n outerEnd \n •  outerEnd :  number \n Defined in \n index.esm.d.ts:1723 \n outerStart \n •  outerStart :  number \n Defined in \n index.esm.d.ts:1722 \n"},{title:"Interface: ArcElement",frontmatter:{},regularPath:"/api/interfaces/ArcElement.html",relativePath:"api/interfaces/ArcElement.md",key:"v-588697f6",path:"/api/interfaces/ArcElement.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"options",slug:"options"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getCenterPoint",slug:"getcenterpoint"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getRange",slug:"getrange"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"inRange",slug:"inrange"},{level:3,title:"inXRange",slug:"inxrange"},{level:3,title:"inYRange",slug:"inyrange"},{level:3,title:"tooltipPosition",slug:"tooltipposition"}],content:' Interface: ArcElement<T, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n T \n extends  ArcProps  =  ArcProps \n \n \n O \n extends  ArcOptions  =  ArcOptions \n Hierarchy \n \n \n Element < T ,  O > \n \n \n VisualElement \n ↳  ArcElement \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n options \n •  Readonly   options :  O \n Inherited from \n Element.options \n Defined in \n element.d.ts:8 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n draw \n ▸  draw ( ctx ,  area? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n area? \n ChartArea \n Returns \n void \n Inherited from \n VisualElement . draw \n Defined in \n index.esm.d.ts:1685 \n getCenterPoint \n ▸  getCenterPoint ( useFinalPosition? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n x \n number \n \n \n y \n number \n Inherited from \n VisualElement . getCenterPoint \n Defined in \n index.esm.d.ts:1689 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < T ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends keyof  T [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < T ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n getRange \n ▸  Optional   getRange ( axis ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n "x"  |  "y" \n Returns \n number \n Inherited from \n VisualElement . getRange \n Defined in \n index.esm.d.ts:1690 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n inRange \n ▸  inRange ( mouseX ,  mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inRange \n Defined in \n index.esm.d.ts:1686 \n inXRange \n ▸  inXRange ( mouseX ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inXRange \n Defined in \n index.esm.d.ts:1687 \n inYRange \n ▸  inYRange ( mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inYRange \n Defined in \n index.esm.d.ts:1688 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n'},{title:"Interface: ArcHoverOptions",frontmatter:{},regularPath:"/api/interfaces/ArcHoverOptions.html",relativePath:"api/interfaces/ArcHoverOptions.md",key:"v-7e3661ee",path:"/api/interfaces/ArcHoverOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverOffset",slug:"hoveroffset"}],content:" Interface: ArcHoverOptions \n Hierarchy \n \n \n CommonHoverOptions \n ↳  ArcHoverOptions \n Properties \n hoverBackgroundColor \n •  hoverBackgroundColor :  Color \n Inherited from \n CommonHoverOptions . hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  Color \n Inherited from \n CommonHoverOptions . hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  number \n Inherited from \n CommonHoverOptions . hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverOffset \n •  hoverOffset :  number \n Defined in \n index.esm.d.ts:1758 \n"},{title:"Interface: ArcOptions",frontmatter:{},regularPath:"/api/interfaces/ArcOptions.html",relativePath:"api/interfaces/ArcOptions.md",key:"v-0a747e76",path:"/api/interfaces/ArcOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderAlign",slug:"borderalign"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"circular",slug:"circular"},{level:3,title:"offset",slug:"offset"}],content:" Interface: ArcOptions \n Hierarchy \n \n \n CommonElementOptions \n ↳  ArcOptions \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Inherited from \n CommonElementOptions . backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderAlign \n •  borderAlign :  \"center\"  |  \"inner\" \n Arc stroke alignment. \n Defined in \n index.esm.d.ts:1732 \n borderColor \n •  borderColor :  Color \n Inherited from \n CommonElementOptions . borderColor \n Defined in \n index.esm.d.ts:1695 \n borderJoinStyle \n •  borderJoinStyle :  CanvasLineJoin \n Line join style. See MDN. Default is 'round' when  borderAlign  is 'inner', else 'bevel'. \n Defined in \n index.esm.d.ts:1737 \n borderRadius \n •  borderRadius :  number  |  ArcBorderRadius \n Sets the border radius for arcs \n default  0 \n Defined in \n index.esm.d.ts:1743 \n borderWidth \n •  borderWidth :  number \n Inherited from \n CommonElementOptions . borderWidth \n Defined in \n index.esm.d.ts:1694 \n circular \n •  circular :  boolean \n If false, Arc will be flat. \n default  true \n Defined in \n index.esm.d.ts:1754 \n offset \n •  offset :  number \n Arc offset (in pixels). \n Defined in \n index.esm.d.ts:1748 \n"},{title:"Interface: ArcProps",frontmatter:{},regularPath:"/api/interfaces/ArcProps.html",relativePath:"api/interfaces/ArcProps.md",key:"v-134e5af6",path:"/api/interfaces/ArcProps.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"circumference",slug:"circumference"},{level:3,title:"endAngle",slug:"endangle"},{level:3,title:"innerRadius",slug:"innerradius"},{level:3,title:"outerRadius",slug:"outerradius"},{level:3,title:"startAngle",slug:"startangle"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: ArcProps \n Properties \n circumference \n •  circumference :  number \n Defined in \n index.esm.d.ts:1718 \n endAngle \n •  endAngle :  number \n Defined in \n index.esm.d.ts:1715 \n innerRadius \n •  innerRadius :  number \n Defined in \n index.esm.d.ts:1716 \n outerRadius \n •  outerRadius :  number \n Defined in \n index.esm.d.ts:1717 \n startAngle \n •  startAngle :  number \n Defined in \n index.esm.d.ts:1714 \n x \n •  x :  number \n Defined in \n index.esm.d.ts:1712 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:1713 \n"},{title:"Interface: BarControllerChartOptions",frontmatter:{},regularPath:"/api/interfaces/BarControllerChartOptions.html",relativePath:"api/interfaces/BarControllerChartOptions.md",key:"v-75b2bb13",path:"/api/interfaces/BarControllerChartOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"skipNull",slug:"skipnull"}],content:" Interface: BarControllerChartOptions \n Properties \n skipNull \n •  Optional   skipNull :  boolean \n Should null or undefined values be omitted from drawing \n Defined in \n index.esm.d.ts:142 \n"},{title:"Interface: BarControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/BarControllerDatasetOptions.html",relativePath:"api/interfaces/BarControllerDatasetOptions.md",key:"v-20a23187",path:"/api/interfaces/BarControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"barPercentage",slug:"barpercentage"},{level:3,title:"barThickness",slug:"barthickness"},{level:3,title:"base",slug:"base"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderSkipped",slug:"borderskipped"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"categoryPercentage",slug:"categorypercentage"},{level:3,title:"clip",slug:"clip"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"inflateAmount",slug:"inflateamount"},{level:3,title:"label",slug:"label"},{level:3,title:"maxBarThickness",slug:"maxbarthickness"},{level:3,title:"minBarLength",slug:"minbarlength"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"stack",slug:"stack"},{level:3,title:"transitions",slug:"transitions"},{level:3,title:"xAxisID",slug:"xaxisid"},{level:3,title:"yAxisID",slug:"yaxisid"}],content:' Interface: BarControllerDatasetOptions \n Hierarchy \n \n \n ControllerDatasetOptions \n \n \n ScriptableAndArrayOptions < BarOptions ,  ScriptableContext < "bar" >> \n \n \n ScriptableAndArrayOptions < CommonHoverOptions ,  ScriptableContext < "bar" >> \n \n \n AnimationOptions < "bar" > \n ↳  BarControllerDatasetOptions \n Properties \n animation \n •  animation :  false  |  AnimationSpec < "bar" > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n AnimationOptions.animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < "bar" > \n Inherited from \n AnimationOptions.animations \n Defined in \n index.esm.d.ts:1650 \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "bar" >> \n Inherited from \n ScriptableAndArrayOptions.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n barPercentage \n •  barPercentage :  number \n Percent (0-1) of the available width each bar should be within the category width. 1.0 will take the whole category width and put the bars right next to each other. \n default  0.9 \n Defined in \n index.esm.d.ts:109 \n barThickness \n •  barThickness :  number  |  "flex" \n Manually set width of each bar in pixels. If set to \'flex\', it computes "optimal" sample widths that globally arrange bars side by side. If not set (default), bars are equally sized based on the smallest interval. \n Defined in \n index.esm.d.ts:119 \n base \n •  base :  ScriptableAndArray < number ,  ScriptableContext < "bar" >> \n The base value for the bar in data units along the value axis. \n Inherited from \n ScriptableAndArrayOptions.base \n Defined in \n index.esm.d.ts:1990 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "bar" >> \n Inherited from \n ScriptableAndArrayOptions.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderRadius \n •  borderRadius :  ScriptableAndArray < number  |  BorderRadius ,  ScriptableContext < "bar" >> \n Border radius \n default  0 \n Inherited from \n ScriptableAndArrayOptions.borderRadius \n Defined in \n index.esm.d.ts:2002 \n borderSkipped \n •  borderSkipped :  ScriptableAndArray < boolean  |  "start"  |  "end"  |  "left"  |  "right"  |  "bottom"  |  "top"  |  "middle" ,  ScriptableContext < "bar" >> \n Skipped (excluded) border: \'start\', \'end\', \'left\',  \'right\', \'bottom\', \'top\', \'middle\', false (none) or true (all). \n default  \'start\' \n Inherited from \n ScriptableAndArrayOptions.borderSkipped \n Defined in \n index.esm.d.ts:1996 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number  | {  bottom? :  number  ;  left? :  number  ;  right? :  number  ;  top? :  number   },  ScriptableContext < "bar" >> \n Width of the border, number for all sides, object to specify width for each side specifically \n default  0 \n Inherited from \n ScriptableAndArrayOptions.borderWidth \n Defined in \n index.esm.d.ts:2015 \n categoryPercentage \n •  categoryPercentage :  number \n Percent (0-1) of the available width each category should be within the sample width. \n default  0.8 \n Defined in \n index.esm.d.ts:114 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n ControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n ControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "bar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "bar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "bar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n ControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n inflateAmount \n •  inflateAmount :  ScriptableAndArray < number  |  "auto" ,  ScriptableContext < "bar" >> \n Amount to inflate the rectangle(s). This can be used to hide artifacts between bars.\nUnit is pixels. \'auto\' translates to 0.33 pixels when barPercentage * categoryPercentage is 1, else 0. \n default  \'auto\' \n Inherited from \n ScriptableAndArrayOptions.inflateAmount \n Defined in \n index.esm.d.ts:2009 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n ControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n maxBarThickness \n •  maxBarThickness :  number \n Set this to ensure that bars are not sized thicker than this. \n Defined in \n index.esm.d.ts:124 \n minBarLength \n •  minBarLength :  number \n Set this to ensure that bars have a minimum length in pixels. \n Defined in \n index.esm.d.ts:129 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n ControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n pointStyle \n •  pointStyle :  PointStyle \n Point style for the legend \n default  \'circle; \n Defined in \n index.esm.d.ts:135 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n ControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n transitions \n •  transitions :  TransitionsSpec < "bar" > \n Inherited from \n AnimationOptions.transitions \n Defined in \n index.esm.d.ts:1651 \n xAxisID \n •  xAxisID :  string \n The ID of the x axis to plot this dataset on. \n Defined in \n index.esm.d.ts:99 \n yAxisID \n •  yAxisID :  string \n The ID of the y axis to plot this dataset on. \n Defined in \n index.esm.d.ts:103 \n'},{title:"Interface: BarElement",frontmatter:{},regularPath:"/api/interfaces/BarElement.html",relativePath:"api/interfaces/BarElement.md",key:"v-200d47a5",path:"/api/interfaces/BarElement.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"options",slug:"options"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getCenterPoint",slug:"getcenterpoint"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getRange",slug:"getrange"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"inRange",slug:"inrange"},{level:3,title:"inXRange",slug:"inxrange"},{level:3,title:"inYRange",slug:"inyrange"},{level:3,title:"tooltipPosition",slug:"tooltipposition"}],content:' Interface: BarElement<T, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n T \n extends  BarProps  =  BarProps \n \n \n O \n extends  BarOptions  =  BarOptions \n Hierarchy \n \n \n Element < T ,  O > \n \n \n VisualElement \n ↳  BarElement \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n options \n •  Readonly   options :  O \n Inherited from \n Element.options \n Defined in \n element.d.ts:8 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n draw \n ▸  draw ( ctx ,  area? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n area? \n ChartArea \n Returns \n void \n Inherited from \n VisualElement . draw \n Defined in \n index.esm.d.ts:1685 \n getCenterPoint \n ▸  getCenterPoint ( useFinalPosition? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n x \n number \n \n \n y \n number \n Inherited from \n VisualElement . getCenterPoint \n Defined in \n index.esm.d.ts:1689 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < T ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends keyof  T [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < T ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n getRange \n ▸  Optional   getRange ( axis ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n "x"  |  "y" \n Returns \n number \n Inherited from \n VisualElement . getRange \n Defined in \n index.esm.d.ts:1690 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n inRange \n ▸  inRange ( mouseX ,  mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inRange \n Defined in \n index.esm.d.ts:1686 \n inXRange \n ▸  inXRange ( mouseX ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inXRange \n Defined in \n index.esm.d.ts:1687 \n inYRange \n ▸  inYRange ( mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inYRange \n Defined in \n index.esm.d.ts:1688 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n'},{title:"Interface: BarHoverOptions",frontmatter:{},regularPath:"/api/interfaces/BarHoverOptions.html",relativePath:"api/interfaces/BarHoverOptions.md",key:"v-24adaff2",path:"/api/interfaces/BarHoverOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderRadius",slug:"hoverborderradius"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"}],content:" Interface: BarHoverOptions \n Hierarchy \n \n \n CommonHoverOptions \n ↳  BarHoverOptions \n Properties \n hoverBackgroundColor \n •  hoverBackgroundColor :  Color \n Inherited from \n CommonHoverOptions . hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  Color \n Inherited from \n CommonHoverOptions . hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderRadius \n •  hoverBorderRadius :  number  |  BorderRadius \n Defined in \n index.esm.d.ts:2026 \n hoverBorderWidth \n •  hoverBorderWidth :  number \n Inherited from \n CommonHoverOptions . hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n"},{title:"Interface: BarOptions",frontmatter:{},regularPath:"/api/interfaces/BarOptions.html",relativePath:"api/interfaces/BarOptions.md",key:"v-47165465",path:"/api/interfaces/BarOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"base",slug:"base"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderSkipped",slug:"borderskipped"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"inflateAmount",slug:"inflateamount"}],content:" Interface: BarOptions \n Hierarchy \n \n \n Omit < CommonElementOptions ,  \"borderWidth\" > \n ↳  BarOptions \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Inherited from \n Omit.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n base \n •  base :  number \n The base value for the bar in data units along the value axis. \n Defined in \n index.esm.d.ts:1990 \n borderColor \n •  borderColor :  Color \n Inherited from \n Omit.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderRadius \n •  borderRadius :  number  |  BorderRadius \n Border radius \n default  0 \n Defined in \n index.esm.d.ts:2002 \n borderSkipped \n •  borderSkipped :  boolean  |  \"start\"  |  \"end\"  |  \"left\"  |  \"right\"  |  \"bottom\"  |  \"top\"  |  \"middle\" \n Skipped (excluded) border: 'start', 'end', 'left',  'right', 'bottom', 'top', 'middle', false (none) or true (all). \n default  'start' \n Defined in \n index.esm.d.ts:1996 \n borderWidth \n •  borderWidth :  number  | {  bottom? :  number  ;  left? :  number  ;  right? :  number  ;  top? :  number   } \n Width of the border, number for all sides, object to specify width for each side specifically \n default  0 \n Defined in \n index.esm.d.ts:2015 \n inflateAmount \n •  inflateAmount :  number  |  \"auto\" \n Amount to inflate the rectangle(s). This can be used to hide artifacts between bars.\nUnit is pixels. 'auto' translates to 0.33 pixels when barPercentage * categoryPercentage is 1, else 0. \n default  'auto' \n Defined in \n index.esm.d.ts:2009 \n"},{title:"Interface: BarProps",frontmatter:{},regularPath:"/api/interfaces/BarProps.html",relativePath:"api/interfaces/BarProps.md",key:"v-6549ec36",path:"/api/interfaces/BarProps.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"base",slug:"base"},{level:3,title:"height",slug:"height"},{level:3,title:"horizontal",slug:"horizontal"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: BarProps \n Properties \n base \n •  base :  number \n Defined in \n index.esm.d.ts:1980 \n height \n •  height :  number \n Defined in \n index.esm.d.ts:1983 \n horizontal \n •  horizontal :  boolean \n Defined in \n index.esm.d.ts:1981 \n width \n •  width :  number \n Defined in \n index.esm.d.ts:1982 \n x \n •  x :  number \n Defined in \n index.esm.d.ts:1978 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:1979 \n"},{title:"Interface: BorderRadius",frontmatter:{},regularPath:"/api/interfaces/BorderRadius.html",relativePath:"api/interfaces/BorderRadius.md",key:"v-74068085",path:"/api/interfaces/BorderRadius.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"bottomLeft",slug:"bottomleft"},{level:3,title:"bottomRight",slug:"bottomright"},{level:3,title:"topLeft",slug:"topleft"},{level:3,title:"topRight",slug:"topright"}],content:" Interface: BorderRadius \n Properties \n bottomLeft \n •  bottomLeft :  number \n Defined in \n index.esm.d.ts:2021 \n bottomRight \n •  bottomRight :  number \n Defined in \n index.esm.d.ts:2022 \n topLeft \n •  topLeft :  number \n Defined in \n index.esm.d.ts:2019 \n topRight \n •  topRight :  number \n Defined in \n index.esm.d.ts:2020 \n"},{title:"Interface: BubbleControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/BubbleControllerDatasetOptions.html",relativePath:"api/interfaces/BubbleControllerDatasetOptions.md",key:"v-238a68f6",path:"/api/interfaces/BubbleControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"clip",slug:"clip"},{level:3,title:"drawActiveElementsOnTop",slug:"drawactiveelementsontop"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hitRadius",slug:"hitradius"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverRadius",slug:"hoverradius"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"radius",slug:"radius"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"stack",slug:"stack"}],content:' Interface: BubbleControllerDatasetOptions \n Hierarchy \n \n \n ControllerDatasetOptions \n \n \n ScriptableAndArrayOptions < PointOptions ,  ScriptableContext < "bubble" >> \n \n \n ScriptableAndArrayOptions < PointHoverOptions ,  ScriptableContext < "bubble" >> \n ↳  BubbleControllerDatasetOptions \n Properties \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.borderWidth \n Defined in \n index.esm.d.ts:1694 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n ControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n drawActiveElementsOnTop \n •  drawActiveElementsOnTop :  ScriptableAndArray < boolean ,  ScriptableContext < "bubble" >> \n Draw the active elements over the other elements of the dataset, \n default  true \n Inherited from \n ScriptableAndArrayOptions.drawActiveElementsOnTop \n Defined in \n index.esm.d.ts:1904 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n ControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hitRadius \n •  hitRadius :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Extra radius added to point radius for hit detection. \n default  1 \n Inherited from \n ScriptableAndArrayOptions.hitRadius \n Defined in \n index.esm.d.ts:1889 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverRadius \n •  hoverRadius :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Point radius when hovered. \n default  4 \n Inherited from \n ScriptableAndArrayOptions.hoverRadius \n Defined in \n index.esm.d.ts:1912 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n ControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n ControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n ControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n pointStyle \n •  pointStyle :  ScriptableAndArray < PointStyle ,  ScriptableContext < "bubble" >> \n Point style \n default  \'circle; \n Inherited from \n ScriptableAndArrayOptions.pointStyle \n Defined in \n index.esm.d.ts:1894 \n radius \n •  radius :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Point radius \n default  3 \n Inherited from \n ScriptableAndArrayOptions.radius \n Defined in \n index.esm.d.ts:1884 \n rotation \n •  rotation :  ScriptableAndArray < number ,  ScriptableContext < "bubble" >> \n Point rotation (in degrees). \n default  0 \n Inherited from \n ScriptableAndArrayOptions.rotation \n Defined in \n index.esm.d.ts:1899 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n ControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n'},{title:"Interface: BubbleDataPoint",frontmatter:{},regularPath:"/api/interfaces/BubbleDataPoint.html",relativePath:"api/interfaces/BubbleDataPoint.md",key:"v-453a40bd",path:"/api/interfaces/BubbleDataPoint.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"r",slug:"r"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: BubbleDataPoint \n Properties \n r \n •  r :  number \n Bubble radius in pixels (not scaled). \n Defined in \n index.esm.d.ts:170 \n x \n •  x :  number \n X Value \n Defined in \n index.esm.d.ts:160 \n y \n •  y :  number \n Y Value \n Defined in \n index.esm.d.ts:165 \n"},{title:"Interface: CartesianScaleOptions",frontmatter:{},regularPath:"/api/interfaces/CartesianScaleOptions.html",relativePath:"api/interfaces/CartesianScaleOptions.md",key:"v-0b172339",path:"/api/interfaces/CartesianScaleOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"alignToPixels",slug:"aligntopixels"},{level:3,title:"axis",slug:"axis"},{level:3,title:"bounds",slug:"bounds"},{level:3,title:"display",slug:"display"},{level:3,title:"grid",slug:"grid"},{level:3,title:"max",slug:"max"},{level:3,title:"min",slug:"min"},{level:3,title:"offset",slug:"offset"},{level:3,title:"position",slug:"position"},{level:3,title:"reverse",slug:"reverse"},{level:3,title:"stack",slug:"stack"},{level:3,title:"stackWeight",slug:"stackweight"},{level:3,title:"stacked",slug:"stacked"},{level:3,title:"ticks",slug:"ticks"},{level:3,title:"title",slug:"title"},{level:3,title:"weight",slug:"weight"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterCalculateLabelRotation",slug:"aftercalculatelabelrotation"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterFit",slug:"afterfit"},{level:3,title:"afterSetDimensions",slug:"aftersetdimensions"},{level:3,title:"afterTickToLabelConversion",slug:"afterticktolabelconversion"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeCalculateLabelRotation",slug:"beforecalculatelabelrotation"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeFit",slug:"beforefit"},{level:3,title:"beforeSetDimensions",slug:"beforesetdimensions"},{level:3,title:"beforeTickToLabelConversion",slug:"beforeticktolabelconversion"},{level:3,title:"beforeUpdate",slug:"beforeupdate"}],content:' Interface: CartesianScaleOptions \n Hierarchy \n \n \n CoreScaleOptions \n ↳  CartesianScaleOptions \n Properties \n alignToPixels \n •  alignToPixels :  boolean \n Align pixel values to device pixels \n Inherited from \n CoreScaleOptions . alignToPixels \n Defined in \n index.esm.d.ts:1156 \n axis \n •  axis :  "x"  |  "y" \n Which type of axis this is. Possible values are: \'x\', \'y\'. If not set, this is inferred from the first character of the ID which should be \'x\' or \'y\'. \n Defined in \n index.esm.d.ts:3089 \n bounds \n •  bounds :  "data"  |  "ticks" \n Scale boundary strategy (bypassed by min/max time options) \n \n data : make sure data are fully visible, ticks outside are removed \n ticks : make sure ticks are fully visible, data outside are truncated \n \n since  2.7.0 \n default  \'ticks\' \n Defined in \n index.esm.d.ts:3068 \n display \n •  display :  boolean  |  "auto" \n Controls the axis global visibility (visible when true, hidden when false). When display: \'auto\', the axis is visible only if at least one associated dataset is visible. \n default  true \n Inherited from \n CoreScaleOptions . display \n Defined in \n index.esm.d.ts:1152 \n grid \n •  grid :  GridLineOptions \n Defined in \n index.esm.d.ts:3107 \n max \n •  max :  number \n User defined maximum value for the scale, overrides maximum value from data. \n Defined in \n index.esm.d.ts:3099 \n min \n •  min :  number \n User defined minimum value for the scale, overrides minimum value from data. \n Defined in \n index.esm.d.ts:3094 \n offset \n •  offset :  boolean \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to true for a bar chart by default. \n default  false \n Defined in \n index.esm.d.ts:3105 \n position \n •  position :  "left"  |  "right"  |  "bottom"  |  "top"  |  "center"  | { [scale: string]:  number ;  } \n Position of the axis. \n Defined in \n index.esm.d.ts:3073 \n reverse \n •  reverse :  boolean \n Reverse the scale. \n default  false \n Inherited from \n CoreScaleOptions . reverse \n Defined in \n index.esm.d.ts:1161 \n stack \n •  Optional   stack :  string \n Stack group. Axes at the same  position  with same  stack  are stacked. \n Defined in \n index.esm.d.ts:3078 \n stackWeight \n •  Optional   stackWeight :  number \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n default  1 \n Defined in \n index.esm.d.ts:3084 \n stacked \n •  Optional   stacked :  boolean  |  "single" \n If true, data will be comprised between datasets of data \n default  false \n Defined in \n index.esm.d.ts:3136 \n ticks \n •  ticks :  CartesianTickOptions \n Defined in \n index.esm.d.ts:3138 \n title \n •  title :  Object \n Options for the scale title. \n Type declaration \n \n \n \n Name \n Type \n Description \n \n \n \n \n align \n Align \n Alignment of the axis title. \n \n \n color \n Color \n Color of the axis label. \n \n \n display \n boolean \n If true, displays the axis title. \n \n \n font \n ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableCartesianScaleContext > \n Information about the axis title font. \n \n \n padding \n number  | {  bottom :  number  ;  top :  number  ;  y :  number   } \n Padding to apply around scale labels. \n \n \n text \n string  |  string [] \n The text for the title, e.g. "# of People" or "Response Choices". \n Defined in \n index.esm.d.ts:3110 \n weight \n •  weight :  number \n The weight used to sort the axis. Higher weights are further away from the chart area. \n default  true \n Inherited from \n CoreScaleOptions . weight \n Defined in \n index.esm.d.ts:1166 \n Methods \n afterBuildTicks \n ▸  afterBuildTicks ( axis ):  void \n Callback that runs after ticks are created. Useful for filtering ticks. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterBuildTicks \n Defined in \n index.esm.d.ts:1194 \n afterCalculateLabelRotation \n ▸  afterCalculateLabelRotation ( axis ):  void \n Callback that runs after tick rotation is determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterCalculateLabelRotation \n Defined in \n index.esm.d.ts:1210 \n afterDataLimits \n ▸  afterDataLimits ( axis ):  void \n Callback that runs after data limits are determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterDataLimits \n Defined in \n index.esm.d.ts:1186 \n afterFit \n ▸  afterFit ( axis ):  void \n Callback that runs after the scale fits to the canvas. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterFit \n Defined in \n index.esm.d.ts:1218 \n afterSetDimensions \n ▸  afterSetDimensions ( axis ):  void \n Callback that runs after dimensions are set. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterSetDimensions \n Defined in \n index.esm.d.ts:1178 \n afterTickToLabelConversion \n ▸  afterTickToLabelConversion ( axis ):  void \n Callback that runs after ticks are converted into strings. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterTickToLabelConversion \n Defined in \n index.esm.d.ts:1202 \n afterUpdate \n ▸  afterUpdate ( axis ):  void \n Callback that runs at the end of the update process. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . afterUpdate \n Defined in \n index.esm.d.ts:1222 \n beforeBuildTicks \n ▸  beforeBuildTicks ( axis ):  void \n Callback that runs before ticks are created. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeBuildTicks \n Defined in \n index.esm.d.ts:1190 \n beforeCalculateLabelRotation \n ▸  beforeCalculateLabelRotation ( axis ):  void \n Callback that runs before tick rotation is determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeCalculateLabelRotation \n Defined in \n index.esm.d.ts:1206 \n beforeDataLimits \n ▸  beforeDataLimits ( axis ):  void \n Callback that runs before data limits are determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeDataLimits \n Defined in \n index.esm.d.ts:1182 \n beforeFit \n ▸  beforeFit ( axis ):  void \n Callback that runs before the scale fits to the canvas. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeFit \n Defined in \n index.esm.d.ts:1214 \n beforeSetDimensions \n ▸  beforeSetDimensions ( axis ):  void \n Callback that runs before dimensions are set. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeSetDimensions \n Defined in \n index.esm.d.ts:1174 \n beforeTickToLabelConversion \n ▸  beforeTickToLabelConversion ( axis ):  void \n Callback that runs before ticks are converted into strings. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeTickToLabelConversion \n Defined in \n index.esm.d.ts:1198 \n beforeUpdate \n ▸  beforeUpdate ( axis ):  void \n Callback called before the update process starts. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Inherited from \n CoreScaleOptions . beforeUpdate \n Defined in \n index.esm.d.ts:1170 \n'},{title:"Interface: CartesianScaleTypeRegistry",frontmatter:{},regularPath:"/api/interfaces/CartesianScaleTypeRegistry.html",relativePath:"api/interfaces/CartesianScaleTypeRegistry.md",key:"v-de6b88b6",path:"/api/interfaces/CartesianScaleTypeRegistry.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"category",slug:"category"},{level:3,title:"linear",slug:"linear"},{level:3,title:"logarithmic",slug:"logarithmic"},{level:3,title:"time",slug:"time"},{level:3,title:"timeseries",slug:"timeseries"}],content:" Interface: CartesianScaleTypeRegistry \n Hierarchy \n \n \n CartesianScaleTypeRegistry \n ↳  ScaleTypeRegistry \n Properties \n category \n •  category :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n CategoryScaleOptions \n Defined in \n index.esm.d.ts:3491 \n linear \n •  linear :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n LinearScaleOptions \n Defined in \n index.esm.d.ts:3485 \n logarithmic \n •  logarithmic :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n LogarithmicScaleOptions \n Defined in \n index.esm.d.ts:3488 \n time \n •  time :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n TimeScaleOptions \n Defined in \n index.esm.d.ts:3494 \n timeseries \n •  timeseries :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n TimeScaleOptions \n Defined in \n index.esm.d.ts:3497 \n"},{title:"Interface: ChartArea",frontmatter:{},regularPath:"/api/interfaces/ChartArea.html",relativePath:"api/interfaces/ChartArea.md",key:"v-1ddd101b",path:"/api/interfaces/ChartArea.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"height",slug:"height"},{level:3,title:"left",slug:"left"},{level:3,title:"right",slug:"right"},{level:3,title:"top",slug:"top"},{level:3,title:"width",slug:"width"}],content:" Interface: ChartArea \n Properties \n bottom \n •  bottom :  number \n Defined in \n geometric.d.ts:5 \n height \n •  height :  number \n Defined in \n geometric.d.ts:7 \n left \n •  left :  number \n Defined in \n geometric.d.ts:3 \n right \n •  right :  number \n Defined in \n geometric.d.ts:4 \n top \n •  top :  number \n Defined in \n geometric.d.ts:2 \n width \n •  width :  number \n Defined in \n geometric.d.ts:6 \n"},{title:"Interface: ChartComponent",frontmatter:{},regularPath:"/api/interfaces/ChartComponent.html",relativePath:"api/interfaces/ChartComponent.md",key:"v-e8b9ed36",path:"/api/interfaces/ChartComponent.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"defaultRoutes",slug:"defaultroutes"},{level:3,title:"defaults",slug:"defaults"},{level:3,title:"id",slug:"id"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterRegister",slug:"afterregister"},{level:3,title:"afterUnregister",slug:"afterunregister"},{level:3,title:"beforeRegister",slug:"beforeregister"},{level:3,title:"beforeUnregister",slug:"beforeunregister"}],content:" Interface: ChartComponent \n Hierarchy \n \n \n ChartComponent \n ↳  DatasetControllerChartComponent \n Properties \n defaultRoutes \n •  Optional   defaultRoutes :  Object \n Index signature \n ▪ [property:  string ]:  string \n Defined in \n index.esm.d.ts:1414 \n defaults \n •  Optional   defaults :  AnyObject \n Defined in \n index.esm.d.ts:1413 \n id \n •  id :  string \n Defined in \n index.esm.d.ts:1412 \n Methods \n afterRegister \n ▸  Optional   afterRegister ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1417 \n afterUnregister \n ▸  Optional   afterUnregister ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1419 \n beforeRegister \n ▸  Optional   beforeRegister ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1416 \n beforeUnregister \n ▸  Optional   beforeUnregister ():  void \n Returns \n void \n Defined in \n index.esm.d.ts:1418 \n"},{title:"Interface: ChartConfiguration",frontmatter:{},regularPath:"/api/interfaces/ChartConfiguration.html",relativePath:"api/interfaces/ChartConfiguration.md",key:"v-16b1e745",path:"/api/interfaces/ChartConfiguration.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"data",slug:"data"},{level:3,title:"options",slug:"options"},{level:3,title:"plugins",slug:"plugins"},{level:3,title:"type",slug:"type"}],content:' Interface: ChartConfiguration<TType, TData, TLabel> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n \n \n TLabel \n unknown \n Properties \n data \n •  data :  ChartData < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:3702 \n options \n •  Optional   options :  DeepPartial < CoreChartOptions < TType > &  ElementChartOptions < TType > &  PluginChartOptions < TType > &  DatasetChartOptions < TType > &  ScaleChartOptions < TType > &  ChartTypeRegistry [ TType ][ "chartOptions" ]> \n Defined in \n index.esm.d.ts:3703 \n plugins \n •  Optional   plugins :  Plugin < TType ,  AnyObject >[] \n Defined in \n index.esm.d.ts:3704 \n type \n •  type :  TType \n Defined in \n index.esm.d.ts:3701 \n'},{title:"Interface: ChartConfigurationCustomTypesPerDataset",frontmatter:{},regularPath:"/api/interfaces/ChartConfigurationCustomTypesPerDataset.html",relativePath:"api/interfaces/ChartConfigurationCustomTypesPerDataset.md",key:"v-35dcbfca",path:"/api/interfaces/ChartConfigurationCustomTypesPerDataset.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"data",slug:"data"},{level:3,title:"options",slug:"options"},{level:3,title:"plugins",slug:"plugins"}],content:' Interface: ChartConfigurationCustomTypesPerDataset<TType, TData, TLabel> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n \n \n TLabel \n unknown \n Properties \n data \n •  data :  ChartDataCustomTypesPerDataset < TType ,  TData ,  TLabel > \n Defined in \n index.esm.d.ts:3712 \n options \n •  Optional   options :  DeepPartial < CoreChartOptions < TType > &  ElementChartOptions < TType > &  PluginChartOptions < TType > &  DatasetChartOptions < TType > &  ScaleChartOptions < TType > &  ChartTypeRegistry [ TType ][ "chartOptions" ]> \n Defined in \n index.esm.d.ts:3713 \n plugins \n •  Optional   plugins :  Plugin < TType ,  AnyObject >[] \n Defined in \n index.esm.d.ts:3714 \n'},{title:"Interface: ChartData",frontmatter:{},regularPath:"/api/interfaces/ChartData.html",relativePath:"api/interfaces/ChartData.md",key:"v-d0a858be",path:"/api/interfaces/ChartData.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasets",slug:"datasets"},{level:3,title:"labels",slug:"labels"}],content:" Interface: ChartData<TType, TData, TLabel> \n TData represents the data point type. If unspecified, a default is provided\nbased on the chart type.\nTLabel represents the label type \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n \n \n TLabel \n unknown \n Properties \n datasets \n •  datasets :  ChartDataset < TType ,  TData >[] \n Defined in \n index.esm.d.ts:3684 \n labels \n •  Optional   labels :  TLabel [] \n Defined in \n index.esm.d.ts:3683 \n"},{title:"Interface: ChartDataCustomTypesPerDataset",frontmatter:{},regularPath:"/api/interfaces/ChartDataCustomTypesPerDataset.html",relativePath:"api/interfaces/ChartDataCustomTypesPerDataset.md",key:"v-3b10c036",path:"/api/interfaces/ChartDataCustomTypesPerDataset.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasets",slug:"datasets"},{level:3,title:"labels",slug:"labels"}],content:" Interface: ChartDataCustomTypesPerDataset<TType, TData, TLabel> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n TData \n DefaultDataPoint < TType > \n \n \n TLabel \n unknown \n Properties \n datasets \n •  datasets :  ChartDatasetCustomTypesPerDataset < TType ,  TData >[] \n Defined in \n index.esm.d.ts:3693 \n labels \n •  Optional   labels :  TLabel [] \n Defined in \n index.esm.d.ts:3692 \n"},{title:"Interface: ChartDatasetProperties",frontmatter:{},regularPath:"/api/interfaces/ChartDatasetProperties.html",relativePath:"api/interfaces/ChartDatasetProperties.md",key:"v-4741c4a5",path:"/api/interfaces/ChartDatasetProperties.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"data",slug:"data"},{level:3,title:"type",slug:"type"}],content:" Interface: ChartDatasetProperties<TType, TData> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n \n \n TData \n TData \n Properties \n data \n •  data :  TData \n Defined in \n index.esm.d.ts:3651 \n type \n •  Optional   type :  TType \n Defined in \n index.esm.d.ts:3650 \n"},{title:"Interface: ChartDatasetPropertiesCustomTypesPerDataset",frontmatter:{},regularPath:"/api/interfaces/ChartDatasetPropertiesCustomTypesPerDataset.html",relativePath:"api/interfaces/ChartDatasetPropertiesCustomTypesPerDataset.md",key:"v-2caf25f6",path:"/api/interfaces/ChartDatasetPropertiesCustomTypesPerDataset.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"data",slug:"data"},{level:3,title:"type",slug:"type"}],content:" Interface: ChartDatasetPropertiesCustomTypesPerDataset<TType, TData> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n \n \n TData \n TData \n Properties \n data \n •  data :  TData \n Defined in \n index.esm.d.ts:3656 \n type \n •  type :  TType \n Defined in \n index.esm.d.ts:3655 \n"},{title:"Interface: ChartEvent",frontmatter:{},regularPath:"/api/interfaces/ChartEvent.html",relativePath:"api/interfaces/ChartEvent.md",key:"v-74866a76",path:"/api/interfaces/ChartEvent.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"native",slug:"native"},{level:3,title:"type",slug:"type"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:' Interface: ChartEvent \n Properties \n native \n •  native :  Event \n Defined in \n index.esm.d.ts:1407 \n type \n •  type :  "resize"  |  "click"  |  "contextmenu"  |  "dblclick"  |  "keydown"  |  "keypress"  |  "keyup"  |  "mousedown"  |  "mouseenter"  |  "mousemove"  |  "mouseout"  |  "mouseup" \n Defined in \n index.esm.d.ts:1394 \n x \n •  x :  number \n Defined in \n index.esm.d.ts:1408 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:1409 \n'},{title:"Interface: ChartTypeRegistry",frontmatter:{},regularPath:"/api/interfaces/ChartTypeRegistry.html",relativePath:"api/interfaces/ChartTypeRegistry.md",key:"v-1108a487",path:"/api/interfaces/ChartTypeRegistry.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"bar",slug:"bar"},{level:3,title:"bubble",slug:"bubble"},{level:3,title:"doughnut",slug:"doughnut"},{level:3,title:"line",slug:"line"},{level:3,title:"pie",slug:"pie"},{level:3,title:"polarArea",slug:"polararea"},{level:3,title:"radar",slug:"radar"},{level:3,title:"scatter",slug:"scatter"}],content:' Interface: ChartTypeRegistry \n Properties \n bar \n •  bar :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n BarControllerChartOptions \n \n \n datasetOptions \n BarControllerDatasetOptions \n \n \n defaultDataPoint \n number \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n BarParsedData \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3549 \n bubble \n •  bubble :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n unknown \n \n \n datasetOptions \n BubbleControllerDatasetOptions \n \n \n defaultDataPoint \n BubbleDataPoint \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n BubbleParsedData \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3573 \n doughnut \n •  doughnut :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n DoughnutControllerChartOptions \n \n \n datasetOptions \n DoughnutControllerDatasetOptions \n \n \n defaultDataPoint \n number \n \n \n metaExtensions \n DoughnutMetaExtensions \n \n \n parsedDataType \n number \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3589 \n line \n •  line :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n LineControllerChartOptions \n \n \n datasetOptions \n LineControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n defaultDataPoint \n number  |  ScatterDataPoint \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n CartesianParsedData \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3557 \n pie \n •  pie :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n DoughnutControllerChartOptions \n \n \n datasetOptions \n DoughnutControllerDatasetOptions \n \n \n defaultDataPoint \n number \n \n \n metaExtensions \n DoughnutMetaExtensions \n \n \n parsedDataType \n number \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3581 \n polarArea \n •  polarArea :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n PolarAreaControllerChartOptions \n \n \n datasetOptions \n PolarAreaControllerDatasetOptions \n \n \n defaultDataPoint \n number \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n RadialParsedData \n \n \n scales \n "radialLinear" \n Defined in \n index.esm.d.ts:3597 \n radar \n •  radar :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n LineControllerChartOptions \n \n \n datasetOptions \n RadarControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n defaultDataPoint \n number \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n RadialParsedData \n \n \n scales \n "radialLinear" \n Defined in \n index.esm.d.ts:3605 \n scatter \n •  scatter :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n LineControllerChartOptions \n \n \n datasetOptions \n LineControllerDatasetOptions \n \n \n defaultDataPoint \n number  |  ScatterDataPoint \n \n \n metaExtensions \n Object \n \n \n parsedDataType \n CartesianParsedData \n \n \n scales \n keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3565 \n'},{title:"Interface: CommonElementOptions",frontmatter:{},regularPath:"/api/interfaces/CommonElementOptions.html",relativePath:"api/interfaces/CommonElementOptions.md",key:"v-6ef86765",path:"/api/interfaces/CommonElementOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderWidth",slug:"borderwidth"}],content:" Interface: CommonElementOptions \n Hierarchy \n \n \n CommonElementOptions \n ↳  ArcOptions \n ↳  LineOptions \n ↳  PointOptions \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Defined in \n index.esm.d.ts:1696 \n borderColor \n •  borderColor :  Color \n Defined in \n index.esm.d.ts:1695 \n borderWidth \n •  borderWidth :  number \n Defined in \n index.esm.d.ts:1694 \n"},{title:"Interface: CommonHoverOptions",frontmatter:{},regularPath:"/api/interfaces/CommonHoverOptions.html",relativePath:"api/interfaces/CommonHoverOptions.md",key:"v-3367d225",path:"/api/interfaces/CommonHoverOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"}],content:" Interface: CommonHoverOptions \n Hierarchy \n \n \n CommonHoverOptions \n ↳  ArcHoverOptions \n ↳  LineHoverOptions \n ↳  PointHoverOptions \n ↳  BarHoverOptions \n Properties \n hoverBackgroundColor \n •  hoverBackgroundColor :  Color \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  Color \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  number \n Defined in \n index.esm.d.ts:1700 \n"},{title:"Interface: ComplexFillTarget",frontmatter:{},regularPath:"/api/interfaces/ComplexFillTarget.html",relativePath:"api/interfaces/ComplexFillTarget.md",key:"v-f267ef2e",path:"/api/interfaces/ComplexFillTarget.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"above",slug:"above"},{level:3,title:"below",slug:"below"},{level:3,title:"target",slug:"target"}],content:" Interface: ComplexFillTarget \n Properties \n above \n •  above :  Color \n If no color is set, the default color will be the background color of the chart. \n Defined in \n index.esm.d.ts:2148 \n below \n •  below :  Color \n Same as the above. \n Defined in \n index.esm.d.ts:2152 \n target \n •  target :  FillTarget \n The accepted values are the same as the filling mode values, so you may use absolute and relative dataset indexes and/or boundaries. \n Defined in \n index.esm.d.ts:2144 \n"},{title:"Interface: ControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/ControllerDatasetOptions.html",relativePath:"api/interfaces/ControllerDatasetOptions.md",key:"v-d15d95f6",path:"/api/interfaces/ControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"clip",slug:"clip"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"stack",slug:"stack"}],content:" Interface: ControllerDatasetOptions \n Hierarchy \n \n \n ParsingOptions \n ↳  ControllerDatasetOptions \n ↳↳  BarControllerDatasetOptions \n ↳↳  BubbleControllerDatasetOptions \n ↳↳  LineControllerDatasetOptions \n ↳↳  DoughnutControllerDatasetOptions \n ↳↳  RadarControllerDatasetOptions \n Properties \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Defined in \n index.esm.d.ts:70 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Defined in \n index.esm.d.ts:88 \n indexAxis \n •  indexAxis :  \"x\"  |  \"y\" \n The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts. \n default  'x' \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ParsingOptions . normalized \n Defined in \n index.esm.d.ts:58 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ParsingOptions . parsing \n Defined in \n index.esm.d.ts:49 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Defined in \n index.esm.d.ts:83 \n"},{title:"Interface: CoreChartOptions",frontmatter:{},regularPath:"/api/interfaces/CoreChartOptions.html",relativePath:"api/interfaces/CoreChartOptions.md",key:"v-0fdcd625",path:"/api/interfaces/CoreChartOptions.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"aspectRatio",slug:"aspectratio"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"clip",slug:"clip"},{level:3,title:"color",slug:"color"},{level:3,title:"datasets",slug:"datasets"},{level:3,title:"devicePixelRatio",slug:"devicepixelratio"},{level:3,title:"events",slug:"events"},{level:3,title:"font",slug:"font"},{level:3,title:"hover",slug:"hover"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"interaction",slug:"interaction"},{level:3,title:"layout",slug:"layout"},{level:3,title:"locale",slug:"locale"},{level:3,title:"maintainAspectRatio",slug:"maintainaspectratio"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"resizeDelay",slug:"resizedelay"},{level:3,title:"responsive",slug:"responsive"},{level:3,title:"transitions",slug:"transitions"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"onClick",slug:"onclick"},{level:3,title:"onHover",slug:"onhover"},{level:3,title:"onResize",slug:"onresize"}],content:" Interface: CoreChartOptions<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Hierarchy \n \n \n ParsingOptions \n \n \n AnimationOptions < TType > \n ↳  CoreChartOptions \n ↳↳  Defaults \n Properties \n animation \n •  animation :  false  |  AnimationSpec < TType > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n AnimationOptions.animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < TType > \n Inherited from \n AnimationOptions.animations \n Defined in \n index.esm.d.ts:1650 \n aspectRatio \n •  aspectRatio :  number \n Canvas aspect ratio (i.e. width / height, a value of 1 representing a square canvas). Note that this option is ignored if the height is explicitly defined either as attribute or via the style. \n default  2 \n Defined in \n index.esm.d.ts:1505 \n backgroundColor \n •  backgroundColor :  Scriptable < Color ,  ScriptableContext < TType >> \n base background color \n see  Defaults.backgroundColor \n Defined in \n index.esm.d.ts:1474 \n borderColor \n •  borderColor :  Scriptable < Color ,  ScriptableContext < TType >> \n base border color \n see  Defaults.borderColor \n Defined in \n index.esm.d.ts:1479 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Defined in \n index.esm.d.ts:1463 \n color \n •  color :  Scriptable < Color ,  ScriptableContext < TType >> \n base color \n see  Defaults.color \n Defined in \n index.esm.d.ts:1469 \n datasets \n •  datasets :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n bar \n BarControllerDatasetOptions \n \n \n bubble \n BubbleControllerDatasetOptions \n \n \n doughnut \n DoughnutControllerDatasetOptions \n \n \n line \n LineControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n pie \n DoughnutControllerDatasetOptions \n \n \n polarArea \n PolarAreaControllerDatasetOptions \n \n \n radar \n RadarControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n scatter \n LineControllerDatasetOptions \n Defined in \n index.esm.d.ts:1450 \n devicePixelRatio \n •  devicePixelRatio :  number \n Override the window's default devicePixelRatio. \n default  window.devicePixelRatio \n Defined in \n index.esm.d.ts:1522 \n events \n •  events : keyof  HTMLElementEventMap [] \n The events option defines the browser events that the chart should listen to for tooltips and hovering. \n default  ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'] \n Defined in \n index.esm.d.ts:1532 \n font \n •  font :  Partial < FontSpec > \n base font \n see  Defaults.font \n Defined in \n index.esm.d.ts:1484 \n hover \n •  hover :  CoreInteractionOptions \n Defined in \n index.esm.d.ts:1526 \n indexAxis \n •  indexAxis :  \"x\"  |  \"y\" \n The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts. \n default  'x' \n Defined in \n index.esm.d.ts:1458 \n interaction \n •  interaction :  CoreInteractionOptions \n Defined in \n index.esm.d.ts:1524 \n layout \n •  layout :  Partial <{  autoPadding :  boolean  ;  padding :  Scriptable < number  |  Partial < ChartArea >,  ScriptableContext < TType >>  }> \n Defined in \n index.esm.d.ts:1544 \n locale \n •  locale :  string \n Locale used for number formatting (using  Intl.NumberFormat ). \n default  user's browser setting \n Defined in \n index.esm.d.ts:1511 \n maintainAspectRatio \n •  maintainAspectRatio :  boolean \n Maintain the original canvas aspect ratio (width / height) when resizing. \n default  true \n Defined in \n index.esm.d.ts:1494 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ParsingOptions . normalized \n Defined in \n index.esm.d.ts:58 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ParsingOptions . parsing \n Defined in \n index.esm.d.ts:49 \n resizeDelay \n •  resizeDelay :  number \n Delay the resize update by give amount of milliseconds. This can ease the resize process by debouncing update of the elements. \n default  0 \n Defined in \n index.esm.d.ts:1499 \n responsive \n •  responsive :  boolean \n Resizes the chart canvas when its container does (important note...). \n default  true \n Defined in \n index.esm.d.ts:1489 \n transitions \n •  transitions :  TransitionsSpec < TType > \n Inherited from \n AnimationOptions.transitions \n Defined in \n index.esm.d.ts:1651 \n Methods \n onClick \n ▸  onClick ( event ,  elements ,  chart ):  void \n Called if the event is of type 'mouseup' or 'click'. Passed the event, an array of active elements, and the chart. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n event \n ChartEvent \n \n \n elements \n ActiveElement [] \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Defined in \n index.esm.d.ts:1542 \n onHover \n ▸  onHover ( event ,  elements ,  chart ):  void \n Called when any of the events fire. Passed the event, an array of active elements (bars, points, etc), and the chart. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n event \n ChartEvent \n \n \n elements \n ActiveElement [] \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Defined in \n index.esm.d.ts:1537 \n onResize \n ▸  onResize ( chart ,  size ):  void \n Called when a resize occurs. Gets passed two arguments: the chart instance and the new size. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n size \n Object \n \n \n size.height \n number \n \n \n size.width \n number \n Returns \n void \n Defined in \n index.esm.d.ts:1516 \n"},{title:"Interface: CoreInteractionOptions",frontmatter:{},regularPath:"/api/interfaces/CoreInteractionOptions.html",relativePath:"api/interfaces/CoreInteractionOptions.md",key:"v-6d36d2e5",path:"/api/interfaces/CoreInteractionOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"axis",slug:"axis"},{level:3,title:"includeInvisible",slug:"includeinvisible"},{level:3,title:"intersect",slug:"intersect"},{level:3,title:"mode",slug:"mode"}],content:" Interface: CoreInteractionOptions \n Hierarchy \n \n \n CoreInteractionOptions \n ↳  TooltipOptions \n Properties \n axis \n •  axis :  InteractionAxis \n Defines which directions are used in calculating distances. Defaults to 'x' for 'index' mode and 'xy' in dataset and 'nearest' modes. \n Defined in \n index.esm.d.ts:1439 \n includeInvisible \n •  includeInvisible :  boolean \n if true, the invisible points that are outside of the chart area will also be included when evaluating interactions. \n default  false \n Defined in \n index.esm.d.ts:1445 \n intersect \n •  intersect :  boolean \n if true, the hover mode only applies when the mouse position intersects an item on the chart. \n default  true \n Defined in \n index.esm.d.ts:1434 \n mode \n •  mode : keyof  InteractionModeMap \n Sets which elements appear in the tooltip. See Interaction Modes for details. \n default  'nearest' \n Defined in \n index.esm.d.ts:1429 \n"},{title:"Interface: CoreScaleOptions",frontmatter:{},regularPath:"/api/interfaces/CoreScaleOptions.html",relativePath:"api/interfaces/CoreScaleOptions.md",key:"v-cd0b82b6",path:"/api/interfaces/CoreScaleOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"alignToPixels",slug:"aligntopixels"},{level:3,title:"display",slug:"display"},{level:3,title:"reverse",slug:"reverse"},{level:3,title:"weight",slug:"weight"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterCalculateLabelRotation",slug:"aftercalculatelabelrotation"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterFit",slug:"afterfit"},{level:3,title:"afterSetDimensions",slug:"aftersetdimensions"},{level:3,title:"afterTickToLabelConversion",slug:"afterticktolabelconversion"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeCalculateLabelRotation",slug:"beforecalculatelabelrotation"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeFit",slug:"beforefit"},{level:3,title:"beforeSetDimensions",slug:"beforesetdimensions"},{level:3,title:"beforeTickToLabelConversion",slug:"beforeticktolabelconversion"},{level:3,title:"beforeUpdate",slug:"beforeupdate"}],content:" Interface: CoreScaleOptions \n Hierarchy \n \n \n CoreScaleOptions \n ↳  CartesianScaleOptions \n Properties \n alignToPixels \n •  alignToPixels :  boolean \n Align pixel values to device pixels \n Defined in \n index.esm.d.ts:1156 \n display \n •  display :  boolean  |  \"auto\" \n Controls the axis global visibility (visible when true, hidden when false). When display: 'auto', the axis is visible only if at least one associated dataset is visible. \n default  true \n Defined in \n index.esm.d.ts:1152 \n reverse \n •  reverse :  boolean \n Reverse the scale. \n default  false \n Defined in \n index.esm.d.ts:1161 \n weight \n •  weight :  number \n The weight used to sort the axis. Higher weights are further away from the chart area. \n default  true \n Defined in \n index.esm.d.ts:1166 \n Methods \n afterBuildTicks \n ▸  afterBuildTicks ( axis ):  void \n Callback that runs after ticks are created. Useful for filtering ticks. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1194 \n afterCalculateLabelRotation \n ▸  afterCalculateLabelRotation ( axis ):  void \n Callback that runs after tick rotation is determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1210 \n afterDataLimits \n ▸  afterDataLimits ( axis ):  void \n Callback that runs after data limits are determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1186 \n afterFit \n ▸  afterFit ( axis ):  void \n Callback that runs after the scale fits to the canvas. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1218 \n afterSetDimensions \n ▸  afterSetDimensions ( axis ):  void \n Callback that runs after dimensions are set. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1178 \n afterTickToLabelConversion \n ▸  afterTickToLabelConversion ( axis ):  void \n Callback that runs after ticks are converted into strings. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1202 \n afterUpdate \n ▸  afterUpdate ( axis ):  void \n Callback that runs at the end of the update process. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1222 \n beforeBuildTicks \n ▸  beforeBuildTicks ( axis ):  void \n Callback that runs before ticks are created. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1190 \n beforeCalculateLabelRotation \n ▸  beforeCalculateLabelRotation ( axis ):  void \n Callback that runs before tick rotation is determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1206 \n beforeDataLimits \n ▸  beforeDataLimits ( axis ):  void \n Callback that runs before data limits are determined. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1182 \n beforeFit \n ▸  beforeFit ( axis ):  void \n Callback that runs before the scale fits to the canvas. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1214 \n beforeSetDimensions \n ▸  beforeSetDimensions ( axis ):  void \n Callback that runs before dimensions are set. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1174 \n beforeTickToLabelConversion \n ▸  beforeTickToLabelConversion ( axis ):  void \n Callback that runs before ticks are converted into strings. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1198 \n beforeUpdate \n ▸  beforeUpdate ( axis ):  void \n Callback called before the update process starts. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n Scale < CoreScaleOptions > \n Returns \n void \n Defined in \n index.esm.d.ts:1170 \n"},{title:"Interface: DatasetControllerChartComponent",frontmatter:{},regularPath:"/api/interfaces/DatasetControllerChartComponent.html",relativePath:"api/interfaces/DatasetControllerChartComponent.md",key:"v-2dd725cb",path:"/api/interfaces/DatasetControllerChartComponent.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"defaultRoutes",slug:"defaultroutes"},{level:3,title:"defaults",slug:"defaults"},{level:3,title:"id",slug:"id"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterRegister",slug:"afterregister"},{level:3,title:"afterUnregister",slug:"afterunregister"},{level:3,title:"beforeRegister",slug:"beforeregister"},{level:3,title:"beforeUnregister",slug:"beforeunregister"}],content:" Interface: DatasetControllerChartComponent \n Hierarchy \n \n \n ChartComponent \n ↳  DatasetControllerChartComponent \n Properties \n defaultRoutes \n •  Optional   defaultRoutes :  Object \n Index signature \n ▪ [property:  string ]:  string \n Inherited from \n ChartComponent . defaultRoutes \n Defined in \n index.esm.d.ts:1414 \n defaults \n •  defaults :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n dataElementType? \n string  |  false \n \n \n datasetElementType? \n string  |  false \n Overrides \n ChartComponent . defaults \n Defined in \n index.esm.d.ts:651 \n id \n •  id :  string \n Inherited from \n ChartComponent . id \n Defined in \n index.esm.d.ts:1412 \n Methods \n afterRegister \n ▸  Optional   afterRegister ():  void \n Returns \n void \n Inherited from \n ChartComponent . afterRegister \n Defined in \n index.esm.d.ts:1417 \n afterUnregister \n ▸  Optional   afterUnregister ():  void \n Returns \n void \n Inherited from \n ChartComponent . afterUnregister \n Defined in \n index.esm.d.ts:1419 \n beforeRegister \n ▸  Optional   beforeRegister ():  void \n Returns \n void \n Inherited from \n ChartComponent . beforeRegister \n Defined in \n index.esm.d.ts:1416 \n beforeUnregister \n ▸  Optional   beforeUnregister ():  void \n Returns \n void \n Inherited from \n ChartComponent . beforeUnregister \n Defined in \n index.esm.d.ts:1418 \n"},{title:"Interface: DateAdapter",frontmatter:{},regularPath:"/api/interfaces/DateAdapter.html",relativePath:"api/interfaces/DateAdapter.md",key:"v-6f02c1ef",path:"/api/interfaces/DateAdapter.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"options",slug:"options"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"add",slug:"add"},{level:3,title:"diff",slug:"diff"},{level:3,title:"endOf",slug:"endof"},{level:3,title:"format",slug:"format"},{level:3,title:"formats",slug:"formats"},{level:3,title:"init",slug:"init"},{level:3,title:"override",slug:"override"},{level:3,title:"parse",slug:"parse"},{level:3,title:"startOf",slug:"startof"}],content:' Interface: DateAdapter \n Properties \n options \n •  Readonly   options :  unknown \n Defined in \n adapters.d.ts:8 \n Methods \n add \n ▸  add ( timestamp ,  amount ,  unit ):  number \n Adds the specified  amount  of  unit  to the given  timestamp . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n timestamp \n number \n the input timestamp \n \n \n amount \n number \n the amount to add \n \n \n unit \n TimeUnit \n the unit as string \n Returns \n number \n Defined in \n adapters.d.ts:41 \n diff \n ▸  diff ( a ,  b ,  unit ):  number \n Returns the number of  unit  between the given timestamps. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n a \n number \n the input timestamp (reference) \n \n \n b \n number \n the timestamp to subtract \n \n \n unit \n TimeUnit \n the unit as string \n Returns \n number \n Defined in \n adapters.d.ts:49 \n endOf \n ▸  endOf ( timestamp ,  unit ):  number \n Returns end of  unit  for the given  timestamp . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n timestamp \n number \n the input timestamp \n \n \n unit \n TimeUnit  |  "isoWeek" \n the unit as string \n Returns \n number \n Defined in \n adapters.d.ts:65 \n format \n ▸  format ( timestamp ,  format ):  string \n Returns the formatted date in the specified  format  for a given  timestamp . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n timestamp \n number \n the timestamp to format \n \n \n format \n TimeUnit \n the date/time token \n Returns \n string \n Defined in \n adapters.d.ts:33 \n formats \n ▸  formats ():  Object \n Returns a map of time formats for the supported formatting units defined\nin Unit as well as \'datetime\' representing a detailed date/time string. \n Returns \n Object \n Defined in \n adapters.d.ts:20 \n init \n ▸  init ( chartOptions ):  void \n Will called with chart options after adapter creation. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartOptions \n _DeepPartialObject < CoreChartOptions <keyof  ChartTypeRegistry > &  ElementChartOptions <keyof  ChartTypeRegistry > &  PluginChartOptions <keyof  ChartTypeRegistry > &  DatasetChartOptions <keyof  ChartTypeRegistry > &  ScaleChartOptions <keyof  ChartTypeRegistry >> \n Returns \n void \n Defined in \n adapters.d.ts:14 \n override \n ▸  override ( members ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n members \n Partial < DateAdapter > \n Returns \n void \n Defined in \n adapters.d.ts:7 \n parse \n ▸  parse ( value ,  format? ):  number \n Parses the given  value  and return the associated timestamp. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n value \n unknown \n the value to parse (usually comes from the data) \n \n \n format? \n TimeUnit \n - \n Returns \n number \n Defined in \n adapters.d.ts:26 \n startOf \n ▸  startOf ( timestamp ,  unit ,  weekday? ):  number \n Returns start of  unit  for the given  timestamp . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n timestamp \n number \n the input timestamp \n \n \n unit \n TimeUnit  |  "isoWeek" \n the unit as string \n \n \n weekday? \n number \n - \n Returns \n number \n Defined in \n adapters.d.ts:58 \n'},{title:"Interface: Defaults",frontmatter:{},regularPath:"/api/interfaces/Defaults.html",relativePath:"api/interfaces/Defaults.md",key:"v-0d4a6f05",path:"/api/interfaces/Defaults.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"aspectRatio",slug:"aspectratio"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"clip",slug:"clip"},{level:3,title:"color",slug:"color"},{level:3,title:"datasets",slug:"datasets"},{level:3,title:"devicePixelRatio",slug:"devicepixelratio"},{level:3,title:"elements",slug:"elements"},{level:3,title:"events",slug:"events"},{level:3,title:"font",slug:"font"},{level:3,title:"hover",slug:"hover"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"interaction",slug:"interaction"},{level:3,title:"layout",slug:"layout"},{level:3,title:"locale",slug:"locale"},{level:3,title:"maintainAspectRatio",slug:"maintainaspectratio"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"plugins",slug:"plugins"},{level:3,title:"resizeDelay",slug:"resizedelay"},{level:3,title:"responsive",slug:"responsive"},{level:3,title:"scale",slug:"scale"},{level:3,title:"scales",slug:"scales"},{level:3,title:"transitions",slug:"transitions"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"describe",slug:"describe"},{level:3,title:"get",slug:"get"},{level:3,title:"onClick",slug:"onclick"},{level:3,title:"onHover",slug:"onhover"},{level:3,title:"onResize",slug:"onresize"},{level:3,title:"override",slug:"override"},{level:3,title:"route",slug:"route"},{level:3,title:"set",slug:"set"}],content:' Interface: Defaults \n Hierarchy \n \n \n CoreChartOptions < ChartType > \n \n \n ElementChartOptions < ChartType > \n \n \n PluginChartOptions < ChartType > \n ↳  Defaults \n Properties \n animation \n •  animation :  false  |  AnimationSpec <keyof  ChartTypeRegistry > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n CoreChartOptions . animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec <keyof  ChartTypeRegistry > \n Inherited from \n CoreChartOptions . animations \n Defined in \n index.esm.d.ts:1650 \n aspectRatio \n •  aspectRatio :  number \n Canvas aspect ratio (i.e. width / height, a value of 1 representing a square canvas). Note that this option is ignored if the height is explicitly defined either as attribute or via the style. \n default  2 \n Inherited from \n CoreChartOptions . aspectRatio \n Defined in \n index.esm.d.ts:1505 \n backgroundColor \n •  backgroundColor :  Scriptable < Color ,  ScriptableContext <keyof  ChartTypeRegistry >> \n base background color \n see  Defaults.backgroundColor \n Inherited from \n CoreChartOptions . backgroundColor \n Defined in \n index.esm.d.ts:1474 \n borderColor \n •  borderColor :  Scriptable < Color ,  ScriptableContext <keyof  ChartTypeRegistry >> \n base border color \n see  Defaults.borderColor \n Inherited from \n CoreChartOptions . borderColor \n Defined in \n index.esm.d.ts:1479 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n CoreChartOptions . clip \n Defined in \n index.esm.d.ts:1463 \n color \n •  color :  Scriptable < Color ,  ScriptableContext <keyof  ChartTypeRegistry >> \n base color \n see  Defaults.color \n Inherited from \n CoreChartOptions . color \n Defined in \n index.esm.d.ts:1469 \n datasets \n •  datasets :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n bar \n BarControllerDatasetOptions \n \n \n bubble \n BubbleControllerDatasetOptions \n \n \n doughnut \n DoughnutControllerDatasetOptions \n \n \n line \n LineControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n pie \n DoughnutControllerDatasetOptions \n \n \n polarArea \n PolarAreaControllerDatasetOptions \n \n \n radar \n RadarControllerDatasetOptions  &  FillerControllerDatasetOptions \n \n \n scatter \n LineControllerDatasetOptions \n Inherited from \n CoreChartOptions . datasets \n Defined in \n index.esm.d.ts:1450 \n devicePixelRatio \n •  devicePixelRatio :  number \n Override the window\'s default devicePixelRatio. \n default  window.devicePixelRatio \n Inherited from \n CoreChartOptions . devicePixelRatio \n Defined in \n index.esm.d.ts:1522 \n elements \n •  elements :  ElementOptionsByType <keyof  ChartTypeRegistry > \n Inherited from \n ElementChartOptions.elements \n Defined in \n index.esm.d.ts:2047 \n events \n •  events : keyof  HTMLElementEventMap [] \n The events option defines the browser events that the chart should listen to for tooltips and hovering. \n default  [\'mousemove\', \'mouseout\', \'click\', \'touchstart\', \'touchmove\'] \n Inherited from \n CoreChartOptions . events \n Defined in \n index.esm.d.ts:1532 \n font \n •  font :  Partial < FontSpec > \n base font \n see  Defaults.font \n Inherited from \n CoreChartOptions . font \n Defined in \n index.esm.d.ts:1484 \n hover \n •  hover :  CoreInteractionOptions \n Inherited from \n CoreChartOptions . hover \n Defined in \n index.esm.d.ts:1526 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n CoreChartOptions . indexAxis \n Defined in \n index.esm.d.ts:1458 \n interaction \n •  interaction :  CoreInteractionOptions \n Inherited from \n CoreChartOptions . interaction \n Defined in \n index.esm.d.ts:1524 \n layout \n •  layout :  Partial <{  autoPadding :  boolean  ;  padding :  Scriptable < number  |  Partial < ChartArea >,  ScriptableContext <keyof  ChartTypeRegistry >>  }> \n Inherited from \n CoreChartOptions . layout \n Defined in \n index.esm.d.ts:1544 \n locale \n •  locale :  string \n Locale used for number formatting (using  Intl.NumberFormat ). \n default  user\'s browser setting \n Inherited from \n CoreChartOptions . locale \n Defined in \n index.esm.d.ts:1511 \n maintainAspectRatio \n •  maintainAspectRatio :  boolean \n Maintain the original canvas aspect ratio (width / height) when resizing. \n default  true \n Inherited from \n CoreChartOptions . maintainAspectRatio \n Defined in \n index.esm.d.ts:1494 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n CoreChartOptions . normalized \n Defined in \n index.esm.d.ts:58 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n CoreChartOptions . parsing \n Defined in \n index.esm.d.ts:49 \n plugins \n •  plugins :  PluginOptionsByType <keyof  ChartTypeRegistry > \n Inherited from \n PluginChartOptions . plugins \n Defined in \n index.esm.d.ts:2845 \n resizeDelay \n •  resizeDelay :  number \n Delay the resize update by give amount of milliseconds. This can ease the resize process by debouncing update of the elements. \n default  0 \n Inherited from \n CoreChartOptions . resizeDelay \n Defined in \n index.esm.d.ts:1499 \n responsive \n •  responsive :  boolean \n Resizes the chart canvas when its container does (important note...). \n default  true \n Inherited from \n CoreChartOptions . responsive \n Defined in \n index.esm.d.ts:1489 \n scale \n •  scale :  ScaleOptionsByType <keyof  ScaleTypeRegistry > \n Defined in \n index.esm.d.ts:659 \n scales \n •  scales :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n category \n {  type :  "category"   } &  Omit < CartesianScaleOptions ,  "min"  |  "max" > & {  labels :  string [] |  string [][] ;  max :  string  |  number  ;  min :  string  |  number   } \n \n \n linear \n {  type :  "linear"   } &  CartesianScaleOptions  & {  beginAtZero :  boolean  ;  grace? :  string  |  number  ;  suggestedMax? :  number  ;  suggestedMin? :  number  ;  ticks : {  count :  number  ;  format :  NumberFormatOptions  ;  precision :  number  ;  stepSize :  number   }  } \n \n \n logarithmic \n {  type :  "logarithmic"   } &  CartesianScaleOptions  & {  suggestedMax? :  number  ;  suggestedMin? :  number  ;  ticks : {  format :  NumberFormatOptions   }  } \n \n \n radialLinear \n {  type :  "radialLinear"   } &  CoreScaleOptions  & {  angleLines : {  borderDash :  Scriptable < number [],  ScriptableScaleContext > ;  borderDashOffset :  Scriptable < number ,  ScriptableScaleContext > ;  color :  Scriptable < Color ,  ScriptableScaleContext > ;  display :  boolean  ;  lineWidth :  Scriptable < number ,  ScriptableScaleContext >  } ;  animate :  boolean  ;  beginAtZero :  boolean  ;  grid :  GridLineOptions  ;  max :  number  ;  min :  number  ;  pointLabels : {  backdropColor :  Scriptable < Color ,  ScriptableScalePointLabelContext > ;  backdropPadding :  Scriptable < number  |  ChartArea ,  ScriptableScalePointLabelContext > ;  borderRadius :  Scriptable < number  |  BorderRadius ,  ScriptableScalePointLabelContext > ;  centerPointLabels :  boolean  ;  color :  Scriptable < Color ,  ScriptableScalePointLabelContext > ;  display :  boolean  ;  font :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableScalePointLabelContext > ;  padding :  Scriptable < number ,  ScriptableScalePointLabelContext > ;  callback : ( label :  string ,  index :  number ) =>  string  |  number  |  string [] |  number []  } ;  startAngle :  number  ;  suggestedMax :  number  ;  suggestedMin :  number  ;  ticks :  RadialTickOptions   } \n \n \n time \n {  type :  "time"   } &  Omit < CartesianScaleOptions ,  "min"  |  "max" > & {  adapters : {  date :  unknown   } ;  bounds :  "data"  |  "ticks"  ;  max :  string  |  number  ;  min :  string  |  number  ;  offsetAfterAutoskip :  boolean  ;  suggestedMax :  string  |  number  ;  suggestedMin :  string  |  number  ;  ticks : {  source :  "auto"  |  "data"  |  "labels"   } ;  time : {  displayFormats : { [key: string]:  string ;  } ;  isoWeekday :  number  |  boolean  ;  minUnit :  TimeUnit  ;  parser :  string  | ( v :  unknown ) =>  number  ;  round :  false  |  TimeUnit  ;  stepSize :  number  ;  tooltipFormat :  string  ;  unit :  false  |  TimeUnit   }  } \n \n \n timeseries \n {  type :  "timeseries"   } &  Omit < CartesianScaleOptions ,  "min"  |  "max" > & {  adapters : {  date :  unknown   } ;  bounds :  "data"  |  "ticks"  ;  max :  string  |  number  ;  min :  string  |  number  ;  offsetAfterAutoskip :  boolean  ;  suggestedMax :  string  |  number  ;  suggestedMin :  string  |  number  ;  ticks : {  source :  "auto"  |  "data"  |  "labels"   } ;  time : {  displayFormats : { [key: string]:  string ;  } ;  isoWeekday :  number  |  boolean  ;  minUnit :  TimeUnit  ;  parser :  string  | ( v :  unknown ) =>  number  ;  round :  false  |  TimeUnit  ;  stepSize :  number  ;  tooltipFormat :  string  ;  unit :  false  |  TimeUnit   }  } \n Defined in \n index.esm.d.ts:660 \n transitions \n •  transitions :  TransitionsSpec <keyof  ChartTypeRegistry > \n Inherited from \n CoreChartOptions . transitions \n Defined in \n index.esm.d.ts:1651 \n Methods \n describe \n ▸  describe ( scope ,  values ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scope \n string \n \n \n values \n AnyObject \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:668 \n get \n ▸  get ( scope ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scope \n string \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:666 \n onClick \n ▸  onClick ( event ,  elements ,  chart ):  void \n Called if the event is of type \'mouseup\' or \'click\'. Passed the event, an array of active elements, and the chart. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n event \n ChartEvent \n \n \n elements \n ActiveElement [] \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Inherited from \n CoreChartOptions . onClick \n Defined in \n index.esm.d.ts:1542 \n onHover \n ▸  onHover ( event ,  elements ,  chart ):  void \n Called when any of the events fire. Passed the event, an array of active elements (bars, points, etc), and the chart. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n event \n ChartEvent \n \n \n elements \n ActiveElement [] \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n void \n Inherited from \n CoreChartOptions . onHover \n Defined in \n index.esm.d.ts:1537 \n onResize \n ▸  onResize ( chart ,  size ):  void \n Called when a resize occurs. Gets passed two arguments: the chart instance and the new size. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n size \n Object \n \n \n size.height \n number \n \n \n size.width \n number \n Returns \n void \n Inherited from \n CoreChartOptions . onResize \n Defined in \n index.esm.d.ts:1516 \n override \n ▸  override ( scope ,  values ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scope \n string \n \n \n values \n AnyObject \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:669 \n route \n ▸  route ( scope ,  name ,  targetScope ,  targetName ):  void \n Routes the named defaults to fallback to another scope/name.\nThis routing is useful when those target values, like defaults.color, are changed runtime.\nIf the values would be copied, the runtime change would not take effect. By routing, the\nfallback is evaluated at each access, so its always up to date. \n Example: \n defaults.route(\'elements.arc\', \'backgroundColor\', \'\', \'color\') \n \n reads the backgroundColor from defaults.color when undefined locally \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n scope \n string \n Scope this route applies to. \n \n \n name \n string \n Property name that should be routed to different namespace when not defined here. \n \n \n targetScope \n string \n The namespace where those properties should be routed to. Empty string (\'\') is the root of defaults. \n \n \n targetName \n string \n The target name in the target scope the property should be routed to. \n Returns \n void \n Defined in \n index.esm.d.ts:688 \n set \n ▸  set ( values ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n values \n AnyObject \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:664 \n ▸  set ( scope ,  values ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scope \n string \n \n \n values \n AnyObject \n Returns \n AnyObject \n Defined in \n index.esm.d.ts:665 \n'},{title:"Interface: DoughnutAnimationOptions",frontmatter:{},regularPath:"/api/interfaces/DoughnutAnimationOptions.html",relativePath:"api/interfaces/DoughnutAnimationOptions.md",key:"v-3c815145",path:"/api/interfaces/DoughnutAnimationOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"animateRotate",slug:"animaterotate"},{level:3,title:"animateScale",slug:"animatescale"}],content:" Interface: DoughnutAnimationOptions \n Properties \n animateRotate \n •  animateRotate :  boolean \n If true, the chart will animate in with a rotation animation. This property is in the options.animation object. \n default  true \n Defined in \n index.esm.d.ts:282 \n animateScale \n •  animateScale :  boolean \n If true, will animate scaling the chart from the center outwards. \n default  false \n Defined in \n index.esm.d.ts:288 \n"},{title:"Interface: DoughnutController",frontmatter:{},regularPath:"/api/interfaces/DoughnutController.html",relativePath:"api/interfaces/DoughnutController.md",key:"v-100be385",path:"/api/interfaces/DoughnutController.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"_cachedMeta",slug:"cachedmeta"},{level:3,title:"chart",slug:"chart"},{level:3,title:"enableOptionSharing",slug:"enableoptionsharing"},{level:3,title:"index",slug:"index"},{level:3,title:"innerRadius",slug:"innerradius"},{level:3,title:"offsetX",slug:"offsetx"},{level:3,title:"offsetY",slug:"offsety"},{level:3,title:"outerRadius",slug:"outerradius"},{level:3,title:"supportsDecimation",slug:"supportsdecimation"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"addElements",slug:"addelements"},{level:3,title:"applyStack",slug:"applystack"},{level:3,title:"buildOrUpdateElements",slug:"buildorupdateelements"},{level:3,title:"calculateCircumference",slug:"calculatecircumference"},{level:3,title:"calculateTotal",slug:"calculatetotal"},{level:3,title:"configure",slug:"configure"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getAllParsedValues",slug:"getallparsedvalues"},{level:3,title:"getDataset",slug:"getdataset"},{level:3,title:"getLabelAndValue",slug:"getlabelandvalue"},{level:3,title:"getMaxOverflow",slug:"getmaxoverflow"},{level:3,title:"getMeta",slug:"getmeta"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getParsed",slug:"getparsed"},{level:3,title:"getScaleForId",slug:"getscaleforid"},{level:3,title:"getSharedOptions",slug:"getsharedoptions"},{level:3,title:"getStyle",slug:"getstyle"},{level:3,title:"includeOptions",slug:"includeoptions"},{level:3,title:"initialize",slug:"initialize"},{level:3,title:"linkScales",slug:"linkscales"},{level:3,title:"parse",slug:"parse"},{level:3,title:"parseArrayData",slug:"parsearraydata"},{level:3,title:"parseObjectData",slug:"parseobjectdata"},{level:3,title:"parsePrimitiveData",slug:"parseprimitivedata"},{level:3,title:"removeHoverStyle",slug:"removehoverstyle"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resolveDataElementOptions",slug:"resolvedataelementoptions"},{level:3,title:"resolveDatasetElementOptions",slug:"resolvedatasetelementoptions"},{level:3,title:"setHoverStyle",slug:"sethoverstyle"},{level:3,title:"update",slug:"update"},{level:3,title:"updateElement",slug:"updateelement"},{level:3,title:"updateElements",slug:"updateelements"},{level:3,title:"updateIndex",slug:"updateindex"},{level:3,title:"updateRangeFromParsed",slug:"updaterangefromparsed"},{level:3,title:"updateSharedOptions",slug:"updatesharedoptions"}],content:' Interface: DoughnutController \n Hierarchy \n \n \n DatasetController \n ↳  DoughnutController \n Properties \n _cachedMeta \n •  Readonly   _cachedMeta :  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Inherited from \n DatasetController . _cachedMeta \n Defined in \n index.esm.d.ts:583 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Inherited from \n DatasetController . chart \n Defined in \n index.esm.d.ts:581 \n enableOptionSharing \n •  enableOptionSharing :  boolean \n Inherited from \n DatasetController . enableOptionSharing \n Defined in \n index.esm.d.ts:584 \n index \n •  Readonly   index :  number \n Inherited from \n DatasetController . index \n Defined in \n index.esm.d.ts:582 \n innerRadius \n •  Readonly   innerRadius :  number \n Defined in \n index.esm.d.ts:334 \n offsetX \n •  Readonly   offsetX :  number \n Defined in \n index.esm.d.ts:336 \n offsetY \n •  Readonly   offsetY :  number \n Defined in \n index.esm.d.ts:337 \n outerRadius \n •  Readonly   outerRadius :  number \n Defined in \n index.esm.d.ts:335 \n supportsDecimation \n •  supportsDecimation :  boolean \n Inherited from \n DatasetController . supportsDecimation \n Defined in \n index.esm.d.ts:588 \n Methods \n addElements \n ▸  addElements ():  void \n Returns \n void \n Inherited from \n DatasetController . addElements \n Defined in \n index.esm.d.ts:604 \n applyStack \n ▸  Protected   applyStack ( scale ,  parsed ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n Returns \n number \n Inherited from \n DatasetController . applyStack \n Defined in \n index.esm.d.ts:640 \n buildOrUpdateElements \n ▸  buildOrUpdateElements ( resetNewElements? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n resetNewElements? \n boolean \n Returns \n void \n Inherited from \n DatasetController . buildOrUpdateElements \n Defined in \n index.esm.d.ts:605 \n calculateCircumference \n ▸  calculateCircumference ( value ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Defined in \n index.esm.d.ts:340 \n calculateTotal \n ▸  calculateTotal ():  number \n Returns \n number \n Defined in \n index.esm.d.ts:339 \n configure \n ▸  configure ():  void \n Returns \n void \n Inherited from \n DatasetController . configure \n Defined in \n index.esm.d.ts:602 \n draw \n ▸  draw ():  void \n Returns \n void \n Inherited from \n DatasetController . draw \n Defined in \n index.esm.d.ts:597 \n getAllParsedValues \n ▸  getAllParsedValues ( scale ):  number [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n Returns \n number [] \n Inherited from \n DatasetController . getAllParsedValues \n Defined in \n index.esm.d.ts:591 \n getDataset \n ▸  getDataset ():  ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Returns \n ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Inherited from \n DatasetController . getDataset \n Defined in \n index.esm.d.ts:599 \n getLabelAndValue \n ▸  Protected   getLabelAndValue ( index ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n label \n string \n \n \n value \n string \n Inherited from \n DatasetController . getLabelAndValue \n Defined in \n index.esm.d.ts:592 \n getMaxOverflow \n ▸  Protected   getMaxOverflow ():  number  |  boolean \n Returns \n number  |  boolean \n Inherited from \n DatasetController . getMaxOverflow \n Defined in \n index.esm.d.ts:596 \n getMeta \n ▸  getMeta ():  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Inherited from \n DatasetController . getMeta \n Defined in \n index.esm.d.ts:600 \n getMinMax \n ▸  Protected   getMinMax ( scale ,  canStack? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n canStack? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Inherited from \n DatasetController . getMinMax \n Defined in \n index.esm.d.ts:647 \n getParsed \n ▸  Protected   getParsed ( index ):  number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData \n Inherited from \n DatasetController . getParsed \n Defined in \n index.esm.d.ts:639 \n getScaleForId \n ▸  getScaleForId ( scaleID ):  Scale < CoreScaleOptions > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scaleID \n string \n Returns \n Scale < CoreScaleOptions > \n Inherited from \n DatasetController . getScaleForId \n Defined in \n index.esm.d.ts:601 \n getSharedOptions \n ▸  Protected   getSharedOptions ( options ):  AnyObject \n Utility for checking if the options are shared and should be animated separately. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n AnyObject \n Returns \n AnyObject \n Inherited from \n DatasetController . getSharedOptions \n Defined in \n index.esm.d.ts:614 \n getStyle \n ▸  getStyle ( index ,  active ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n active \n boolean \n Returns \n AnyObject \n Inherited from \n DatasetController . getStyle \n Defined in \n index.esm.d.ts:607 \n includeOptions \n ▸  Protected   includeOptions ( mode ,  sharedOptions ):  boolean \n Utility for determining if  options  should be included in the updated properties \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n sharedOptions \n AnyObject \n Returns \n boolean \n Inherited from \n DatasetController . includeOptions \n Defined in \n index.esm.d.ts:619 \n initialize \n ▸  initialize ():  void \n Returns \n void \n Inherited from \n DatasetController . initialize \n Defined in \n index.esm.d.ts:603 \n linkScales \n ▸  linkScales ():  void \n Returns \n void \n Inherited from \n DatasetController . linkScales \n Defined in \n index.esm.d.ts:590 \n parse \n ▸  parse ( start ,  count ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n start \n number \n \n \n count \n number \n Returns \n void \n Inherited from \n DatasetController . parse \n Defined in \n index.esm.d.ts:635 \n parseArrayData \n ▸  Protected   parseArrayData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DatasetController . parseArrayData \n Defined in \n index.esm.d.ts:637 \n parseObjectData \n ▸  Protected   parseObjectData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DatasetController . parseObjectData \n Defined in \n index.esm.d.ts:638 \n parsePrimitiveData \n ▸  Protected   parsePrimitiveData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DatasetController . parsePrimitiveData \n Defined in \n index.esm.d.ts:636 \n removeHoverStyle \n ▸  removeHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Inherited from \n DatasetController . removeHoverStyle \n Defined in \n index.esm.d.ts:632 \n reset \n ▸  reset ():  void \n Returns \n void \n Inherited from \n DatasetController . reset \n Defined in \n index.esm.d.ts:598 \n resolveDataElementOptions \n ▸  Protected   resolveDataElementOptions ( index ,  mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Inherited from \n DatasetController . resolveDataElementOptions \n Defined in \n index.esm.d.ts:609 \n resolveDatasetElementOptions \n ▸  Protected   resolveDatasetElementOptions ( mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Inherited from \n DatasetController . resolveDatasetElementOptions \n Defined in \n index.esm.d.ts:608 \n setHoverStyle \n ▸  setHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Inherited from \n DatasetController . setHoverStyle \n Defined in \n index.esm.d.ts:633 \n update \n ▸  update ( mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DatasetController . update \n Defined in \n index.esm.d.ts:594 \n updateElement \n ▸  Protected   updateElement ( element ,  index ,  properties ,  mode ):  void \n Utility for updating an element with new properties, using animations when appropriate. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n index \n number \n \n \n properties \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DatasetController . updateElement \n Defined in \n index.esm.d.ts:625 \n updateElements \n ▸  updateElements ( elements ,  start ,  count ,  mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n elements \n Element < AnyObject ,  AnyObject >[] \n \n \n start \n number \n \n \n count \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DatasetController . updateElements \n Defined in \n index.esm.d.ts:593 \n updateIndex \n ▸  updateIndex ( datasetIndex ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n Returns \n void \n Inherited from \n DatasetController . updateIndex \n Defined in \n index.esm.d.ts:595 \n updateRangeFromParsed \n ▸  Protected   updateRangeFromParsed ( range ,  scale ,  parsed ,  stack ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n range \n Object \n \n \n range.max \n number \n \n \n range.min \n number \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n \n \n stack \n string  |  boolean \n Returns \n void \n Inherited from \n DatasetController . updateRangeFromParsed \n Defined in \n index.esm.d.ts:641 \n updateSharedOptions \n ▸  Protected   updateSharedOptions ( sharedOptions ,  mode ,  newOptions ):  void \n Utility to animate the shared options, that are potentially affecting multiple elements. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n sharedOptions \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n newOptions \n AnyObject \n Returns \n void \n Inherited from \n DatasetController . updateSharedOptions \n Defined in \n index.esm.d.ts:631 \n'},{title:"Interface: DoughnutControllerChartOptions",frontmatter:{},regularPath:"/api/interfaces/DoughnutControllerChartOptions.html",relativePath:"api/interfaces/DoughnutControllerChartOptions.md",key:"v-56d15cf6",path:"/api/interfaces/DoughnutControllerChartOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"circumference",slug:"circumference"},{level:3,title:"cutout",slug:"cutout"},{level:3,title:"offset",slug:"offset"},{level:3,title:"radius",slug:"radius"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"spacing",slug:"spacing"}],content:" Interface: DoughnutControllerChartOptions \n Properties \n animation \n •  animation :  false  |  DoughnutAnimationOptions \n Defined in \n index.esm.d.ts:328 \n circumference \n •  circumference :  number \n Sweep to allow arcs to cover. \n default  360 \n Defined in \n index.esm.d.ts:296 \n cutout \n •  cutout :  Scriptable < string  |  number ,  ScriptableContext < \"doughnut\" >> \n The portion of the chart that is cut out of the middle. ('50%' - for doughnut, 0 - for pie)\nString ending with '%' means percentage, number means pixels. \n default  50 \n Defined in \n index.esm.d.ts:303 \n offset \n •  offset :  number \n Arc offset (in pixels). \n Defined in \n index.esm.d.ts:308 \n radius \n •  radius :  Scriptable < string  |  number ,  ScriptableContext < \"doughnut\" >> \n The outer radius of the chart. String ending with '%' means percentage of maximum radius, number means pixels. \n default  '100%' \n Defined in \n index.esm.d.ts:314 \n rotation \n •  rotation :  number \n Starting angle to draw arcs from. \n default  0 \n Defined in \n index.esm.d.ts:320 \n spacing \n •  spacing :  number \n Spacing between the arcs \n default  0 \n Defined in \n index.esm.d.ts:326 \n"},{title:"Interface: DoughnutControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/DoughnutControllerDatasetOptions.html",relativePath:"api/interfaces/DoughnutControllerDatasetOptions.md",key:"v-197c1c45",path:"/api/interfaces/DoughnutControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderAlign",slug:"borderalign"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"circular",slug:"circular"},{level:3,title:"circumference",slug:"circumference"},{level:3,title:"clip",slug:"clip"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverOffset",slug:"hoveroffset"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"offset",slug:"offset"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"spacing",slug:"spacing"},{level:3,title:"stack",slug:"stack"},{level:3,title:"transitions",slug:"transitions"},{level:3,title:"weight",slug:"weight"}],content:' Interface: DoughnutControllerDatasetOptions \n Hierarchy \n \n \n ControllerDatasetOptions \n \n \n ScriptableAndArrayOptions < ArcOptions ,  ScriptableContext < "doughnut" >> \n \n \n ScriptableAndArrayOptions < ArcHoverOptions ,  ScriptableContext < "doughnut" >> \n \n \n AnimationOptions < "doughnut" > \n ↳  DoughnutControllerDatasetOptions \n ↳↳  PolarAreaControllerDatasetOptions \n Properties \n animation \n •  animation :  false  |  AnimationSpec < "doughnut" > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n AnimationOptions.animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < "doughnut" > \n Inherited from \n AnimationOptions.animations \n Defined in \n index.esm.d.ts:1650 \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderAlign \n •  borderAlign :  ScriptableAndArray < "center"  |  "inner" ,  ScriptableContext < "doughnut" >> \n Arc stroke alignment. \n Inherited from \n ScriptableAndArrayOptions.borderAlign \n Defined in \n index.esm.d.ts:1732 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderJoinStyle \n •  borderJoinStyle :  ScriptableAndArray < CanvasLineJoin ,  ScriptableContext < "doughnut" >> \n Line join style. See MDN. Default is \'round\' when  borderAlign  is \'inner\', else \'bevel\'. \n Inherited from \n ScriptableAndArrayOptions.borderJoinStyle \n Defined in \n index.esm.d.ts:1737 \n borderRadius \n •  borderRadius :  ScriptableAndArray < number  |  ArcBorderRadius ,  ScriptableContext < "doughnut" >> \n Sets the border radius for arcs \n default  0 \n Inherited from \n ScriptableAndArrayOptions.borderRadius \n Defined in \n index.esm.d.ts:1743 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.borderWidth \n Defined in \n index.esm.d.ts:1694 \n circular \n •  circular :  ScriptableAndArray < boolean ,  ScriptableContext < "doughnut" >> \n If false, Arc will be flat. \n default  true \n Inherited from \n ScriptableAndArrayOptions.circular \n Defined in \n index.esm.d.ts:1754 \n circumference \n •  circumference :  number \n Sweep to allow arcs to cover. \n default  360 \n Defined in \n index.esm.d.ts:250 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n ControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n ControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverOffset \n •  hoverOffset :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n ScriptableAndArrayOptions.hoverOffset \n Defined in \n index.esm.d.ts:1758 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n ControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n ControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n offset \n •  offset :  number \n Arc offset (in pixels). \n Overrides \n ScriptableAndArrayOptions.offset \n Defined in \n index.esm.d.ts:255 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n ControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n rotation \n •  rotation :  number \n Starting angle to draw this dataset from. \n default  0 \n Defined in \n index.esm.d.ts:261 \n spacing \n •  spacing :  number \n Similar to the  offset  option, but applies to all arcs. This can be used to to add spaces\nbetween arcs \n default  0 \n Defined in \n index.esm.d.ts:274 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n ControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n transitions \n •  transitions :  TransitionsSpec < "doughnut" > \n Inherited from \n AnimationOptions.transitions \n Defined in \n index.esm.d.ts:1651 \n weight \n •  weight :  number \n The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values. \n default  1 \n Defined in \n index.esm.d.ts:267 \n'},{title:"Interface: DoughnutMetaExtensions",frontmatter:{},regularPath:"/api/interfaces/DoughnutMetaExtensions.html",relativePath:"api/interfaces/DoughnutMetaExtensions.md",key:"v-5e97d636",path:"/api/interfaces/DoughnutMetaExtensions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"total",slug:"total"}],content:" Interface: DoughnutMetaExtensions \n Properties \n total \n •  total :  number \n Defined in \n index.esm.d.ts:349 \n"},{title:"Interface: Element",frontmatter:{},regularPath:"/api/interfaces/Element.html",relativePath:"api/interfaces/Element.md",key:"v-12b65579",path:"/api/interfaces/Element.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"options",slug:"options"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"tooltipPosition",slug:"tooltipposition"}],content:" Interface: Element<T, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n T \n AnyObject \n \n \n O \n AnyObject \n Properties \n active \n •  Readonly   active :  boolean \n Defined in \n element.d.ts:7 \n options \n •  Readonly   options :  O \n Defined in \n element.d.ts:8 \n x \n •  Readonly   x :  number \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Defined in \n element.d.ts:6 \n Methods \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < T ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends keyof  T [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < T ,  P [ number ]> \n Defined in \n element.d.ts:12 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Defined in \n element.d.ts:11 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Defined in \n element.d.ts:10 \n"},{title:"Interface: ElementOptionsByType",frontmatter:{},regularPath:"/api/interfaces/ElementOptionsByType.html",relativePath:"api/interfaces/ElementOptionsByType.md",key:"v-9cffebb6",path:"/api/interfaces/ElementOptionsByType.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"arc",slug:"arc"},{level:3,title:"bar",slug:"bar"},{level:3,title:"line",slug:"line"},{level:3,title:"point",slug:"point"}],content:" Interface: ElementOptionsByType<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n arc \n •  arc :  ScriptableAndArrayOptions < ArcOptions  &  ArcHoverOptions ,  ScriptableContext < TType >> \n Defined in \n index.esm.d.ts:2040 \n bar \n •  bar :  ScriptableAndArrayOptions < BarOptions  &  BarHoverOptions ,  ScriptableContext < TType >> \n Defined in \n index.esm.d.ts:2041 \n line \n •  line :  ScriptableAndArrayOptions < LineOptions  &  LineHoverOptions ,  ScriptableContext < TType >> \n Defined in \n index.esm.d.ts:2042 \n point \n •  point :  ScriptableAndArrayOptions < PointOptions  &  PointHoverOptions ,  ScriptableContext < TType >> \n Defined in \n index.esm.d.ts:2043 \n"},{title:"Interface: ExtendedPlugin",frontmatter:{},regularPath:"/api/interfaces/ExtendedPlugin.html",relativePath:"api/interfaces/ExtendedPlugin.md",key:"v-319337c5",path:"/api/interfaces/ExtendedPlugin.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterTooltipDraw",slug:"aftertooltipdraw"},{level:3,title:"beforeTooltipDraw",slug:"beforetooltipdraw"}],content:" Interface: ExtendedPlugin<TType, O, Model> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n \n \n O \n AnyObject \n \n \n Model \n TooltipModel < TType > \n Hierarchy \n \n \n ExtendedPlugin \n ↳  Plugin \n Methods \n afterTooltipDraw \n ▸  Optional   afterTooltipDraw ( chart ,  args ,  options ):  void \n desc  Called after drawing the  tooltip . Note that this hook will not\nbe called if the tooltip drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n Model \n The tooltip. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:2601 \n beforeTooltipDraw \n ▸  Optional   beforeTooltipDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  tooltip . If any plugin returns  false ,\nthe tooltip drawing is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n Model \n The tooltip. \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart tooltip drawing. \n Defined in \n index.esm.d.ts:2592 \n"},{title:"Interface: FillerControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/FillerControllerDatasetOptions.html",relativePath:"api/interfaces/FillerControllerDatasetOptions.md",key:"v-efc3b1f6",path:"/api/interfaces/FillerControllerDatasetOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"fill",slug:"fill"}],content:" Interface: FillerControllerDatasetOptions \n Properties \n fill \n •  fill :  FillTarget  |  ComplexFillTarget \n Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end \n Defined in \n index.esm.d.ts:2159 \n"},{title:"Interface: FillerOptions",frontmatter:{},regularPath:"/api/interfaces/FillerOptions.html",relativePath:"api/interfaces/FillerOptions.md",key:"v-1e488555",path:"/api/interfaces/FillerOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"drawTime",slug:"drawtime"},{level:3,title:"propagate",slug:"propagate"}],content:' Interface: FillerOptions \n Properties \n drawTime \n •  drawTime :  "beforeDatasetDraw"  |  "beforeDatasetsDraw" \n Defined in \n index.esm.d.ts:2134 \n propagate \n •  propagate :  boolean \n Defined in \n index.esm.d.ts:2135 \n'},{title:"Interface: FontSpec",frontmatter:{},regularPath:"/api/interfaces/FontSpec.html",relativePath:"api/interfaces/FontSpec.md",key:"v-7a714605",path:"/api/interfaces/FontSpec.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"family",slug:"family"},{level:3,title:"lineHeight",slug:"lineheight"},{level:3,title:"size",slug:"size"},{level:3,title:"style",slug:"style"},{level:3,title:"weight",slug:"weight"}],content:' Interface: FontSpec \n Properties \n family \n •  family :  string \n Default font family for all text, follows CSS font-family options. \n default  "\'Helvetica Neue\', \'Helvetica\', \'Arial\', sans-serif" \n Defined in \n index.esm.d.ts:1659 \n lineHeight \n •  lineHeight :  string  |  number \n Height of an individual line of text (see MDN). \n default  1.2 \n Defined in \n index.esm.d.ts:1678 \n size \n •  size :  number \n Default font size (in px) for text. Does not apply to radialLinear scale point labels. \n default  12 \n Defined in \n index.esm.d.ts:1664 \n style \n •  style :  "normal"  |  "italic"  |  "oblique"  |  "initial"  |  "inherit" \n Default font style. Does not apply to tooltip title or footer. Does not apply to chart title. Follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit) \n default  \'normal\' \n Defined in \n index.esm.d.ts:1669 \n weight \n •  weight :  string \n Default font weight (boldness). (see MDN). \n Defined in \n index.esm.d.ts:1673 \n'},{title:"Interface: GridLineOptions",frontmatter:{},regularPath:"/api/interfaces/GridLineOptions.html",relativePath:"api/interfaces/GridLineOptions.md",key:"v-296b7fa9",path:"/api/interfaces/GridLineOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderDash",slug:"borderdash"},{level:3,title:"borderDashOffset",slug:"borderdashoffset"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"circular",slug:"circular"},{level:3,title:"color",slug:"color"},{level:3,title:"display",slug:"display"},{level:3,title:"drawBorder",slug:"drawborder"},{level:3,title:"drawOnChartArea",slug:"drawonchartarea"},{level:3,title:"drawTicks",slug:"drawticks"},{level:3,title:"lineWidth",slug:"linewidth"},{level:3,title:"offset",slug:"offset"},{level:3,title:"tickBorderDash",slug:"tickborderdash"},{level:3,title:"tickBorderDashOffset",slug:"tickborderdashoffset"},{level:3,title:"tickColor",slug:"tickcolor"},{level:3,title:"tickLength",slug:"ticklength"},{level:3,title:"tickWidth",slug:"tickwidth"},{level:3,title:"z",slug:"z"}],content:" Interface: GridLineOptions \n Properties \n borderColor \n •  borderColor :  Color \n Defined in \n index.esm.d.ts:2853 \n borderDash \n •  borderDash :  Scriptable < number [],  ScriptableScaleContext > \n default  [] \n Defined in \n index.esm.d.ts:2866 \n borderDashOffset \n •  borderDashOffset :  Scriptable < number ,  ScriptableScaleContext > \n default  0 \n Defined in \n index.esm.d.ts:2870 \n borderWidth \n •  borderWidth :  number \n Defined in \n index.esm.d.ts:2854 \n circular \n •  circular :  boolean \n default  false \n Defined in \n index.esm.d.ts:2858 \n color \n •  color :  ScriptableAndArray < Color ,  ScriptableScaleContext > \n default  'rgba(0, 0, 0, 0.1)' \n Defined in \n index.esm.d.ts:2862 \n display \n •  display :  boolean \n default  true \n Defined in \n index.esm.d.ts:2852 \n drawBorder \n •  drawBorder :  boolean \n default  true \n Defined in \n index.esm.d.ts:2879 \n drawOnChartArea \n •  drawOnChartArea :  boolean \n default  true \n Defined in \n index.esm.d.ts:2883 \n drawTicks \n •  drawTicks :  boolean \n default  true \n Defined in \n index.esm.d.ts:2887 \n lineWidth \n •  lineWidth :  ScriptableAndArray < number ,  ScriptableScaleContext > \n default  1 \n Defined in \n index.esm.d.ts:2874 \n offset \n •  offset :  boolean \n default  false \n Defined in \n index.esm.d.ts:2911 \n tickBorderDash \n •  tickBorderDash :  number [] \n default  [] \n Defined in \n index.esm.d.ts:2891 \n tickBorderDashOffset \n •  tickBorderDashOffset :  Scriptable < number ,  ScriptableScaleContext > \n default  0 \n Defined in \n index.esm.d.ts:2895 \n tickColor \n •  tickColor :  ScriptableAndArray < Color ,  ScriptableScaleContext > \n default  'rgba(0, 0, 0, 0.1)' \n Defined in \n index.esm.d.ts:2899 \n tickLength \n •  tickLength :  number \n default  10 \n Defined in \n index.esm.d.ts:2903 \n tickWidth \n •  tickWidth :  number \n default  1 \n Defined in \n index.esm.d.ts:2907 \n z \n •  z :  number \n default  0 \n Defined in \n index.esm.d.ts:2915 \n"},{title:"Interface: InteractionItem",frontmatter:{},regularPath:"/api/interfaces/InteractionItem.html",relativePath:"api/interfaces/InteractionItem.md",key:"v-37c12267",path:"/api/interfaces/InteractionItem.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"element",slug:"element"},{level:3,title:"index",slug:"index"}],content:" Interface: InteractionItem \n Properties \n datasetIndex \n •  datasetIndex :  number \n Defined in \n index.esm.d.ts:710 \n element \n •  element :  Element < AnyObject ,  AnyObject > \n Defined in \n index.esm.d.ts:709 \n index \n •  index :  number \n Defined in \n index.esm.d.ts:711 \n"},{title:"Interface: InteractionModeMap",frontmatter:{},regularPath:"/api/interfaces/InteractionModeMap.html",relativePath:"api/interfaces/InteractionModeMap.md",key:"v-67767436",path:"/api/interfaces/InteractionModeMap.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"dataset",slug:"dataset"},{level:3,title:"index",slug:"index"},{level:3,title:"nearest",slug:"nearest"},{level:3,title:"point",slug:"point"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: InteractionModeMap \n Properties \n dataset \n •  dataset :  InteractionModeFunction \n Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\nIf the options.intersect is false, we find the nearest item and return the items in that dataset \n Defined in \n index.esm.d.ts:732 \n index \n •  index :  InteractionModeFunction \n Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\nIf the options.intersect mode is false, we find the nearest item and return the items at the same index as that item \n Defined in \n index.esm.d.ts:726 \n nearest \n •  nearest :  InteractionModeFunction \n nearest mode returns the element closest to the point \n Defined in \n index.esm.d.ts:741 \n point \n •  point :  InteractionModeFunction \n Point mode returns all elements that hit test based on the event position\nof the event \n Defined in \n index.esm.d.ts:737 \n x \n •  x :  InteractionModeFunction \n x mode returns the elements that hit-test at the current x coordinate \n Defined in \n index.esm.d.ts:745 \n y \n •  y :  InteractionModeFunction \n y mode returns the elements that hit-test at the current y coordinate \n Defined in \n index.esm.d.ts:749 \n"},{title:"Interface: InteractionOptions",frontmatter:{},regularPath:"/api/interfaces/InteractionOptions.html",relativePath:"api/interfaces/InteractionOptions.md",key:"v-1c6afec5",path:"/api/interfaces/InteractionOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"axis",slug:"axis"},{level:3,title:"includeInvisible",slug:"includeinvisible"},{level:3,title:"intersect",slug:"intersect"}],content:" Interface: InteractionOptions \n Properties \n axis \n •  Optional   axis :  string \n Defined in \n index.esm.d.ts:703 \n includeInvisible \n •  Optional   includeInvisible :  boolean \n Defined in \n index.esm.d.ts:705 \n intersect \n •  Optional   intersect :  boolean \n Defined in \n index.esm.d.ts:704 \n"},{title:"Interface: LayoutItem",frontmatter:{},regularPath:"/api/interfaces/LayoutItem.html",relativePath:"api/interfaces/LayoutItem.md",key:"v-d0a339b6",path:"/api/interfaces/LayoutItem.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"height",slug:"height"},{level:3,title:"left",slug:"left"},{level:3,title:"position",slug:"position"},{level:3,title:"right",slug:"right"},{level:3,title:"top",slug:"top"},{level:3,title:"weight",slug:"weight"},{level:3,title:"width",slug:"width"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getPadding",slug:"getpadding"},{level:3,title:"isHorizontal",slug:"ishorizontal"},{level:3,title:"update",slug:"update"}],content:" Interface: LayoutItem \n Hierarchy \n \n \n LayoutItem \n ↳  Scale \n ↳  LegendElement \n Properties \n bottom \n •  bottom :  number \n Bottom edge of the item. Set by layout system and cannot be used in update \n Defined in \n layout.d.ts:41 \n fullSize \n •  fullSize :  boolean \n if true, and the item is horizontal, then push vertical boxes down \n Defined in \n layout.d.ts:17 \n height \n •  height :  number \n Height of item. Must be valid after update() \n Defined in \n layout.d.ts:25 \n left \n •  left :  number \n Left edge of the item. Set by layout system and cannot be used in update \n Defined in \n layout.d.ts:29 \n position \n •  position :  LayoutPosition \n The position of the item in the chart layout. Possible values are \n Defined in \n layout.d.ts:9 \n right \n •  right :  number \n Right edge of the item. Set by layout system and cannot be used in update \n Defined in \n layout.d.ts:37 \n top \n •  top :  number \n Top edge of the item. Set by layout system and cannot be used in update \n Defined in \n layout.d.ts:33 \n weight \n •  weight :  number \n The weight used to sort the item. Higher weights are further away from the chart area \n Defined in \n layout.d.ts:13 \n width \n •  width :  number \n Width of item. Must be valid after update() \n Defined in \n layout.d.ts:21 \n Methods \n beforeLayout \n ▸  Optional   beforeLayout ():  void \n Called before the layout process starts \n Returns \n void \n Defined in \n layout.d.ts:46 \n draw \n ▸  draw ( chartArea ):  void \n Draws the element \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Defined in \n layout.d.ts:50 \n getPadding \n ▸  Optional   getPadding ():  ChartArea \n Returns an object with padding on the edges \n Returns \n ChartArea \n Defined in \n layout.d.ts:54 \n isHorizontal \n ▸  isHorizontal ():  boolean \n returns true if the layout item is horizontal (ie. top or bottom) \n Returns \n boolean \n Defined in \n layout.d.ts:58 \n update \n ▸  update ( width ,  height ,  margins? ):  void \n Takes two parameters: width and height. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width \n number \n \n \n height \n number \n \n \n margins? \n ChartArea \n Returns \n void \n Defined in \n layout.d.ts:64 \n"},{title:"Interface: LegendElement",frontmatter:{},regularPath:"/api/interfaces/LegendElement.html",relativePath:"api/interfaces/LegendElement.md",key:"v-7931575a",path:"/api/interfaces/LegendElement.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"chart",slug:"chart"},{level:3,title:"ctx",slug:"ctx"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"height",slug:"height"},{level:3,title:"left",slug:"left"},{level:3,title:"legendItems",slug:"legenditems"},{level:3,title:"options",slug:"options"},{level:3,title:"position",slug:"position"},{level:3,title:"right",slug:"right"},{level:3,title:"top",slug:"top"},{level:3,title:"weight",slug:"weight"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getPadding",slug:"getpadding"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"isHorizontal",slug:"ishorizontal"},{level:3,title:"tooltipPosition",slug:"tooltipposition"},{level:3,title:"update",slug:"update"}],content:' Interface: LegendElement<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Hierarchy \n \n \n Element < AnyObject ,  LegendOptions < TType >> \n \n \n LayoutItem \n ↳  LegendElement \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n bottom \n •  bottom :  number \n Bottom edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . bottom \n Defined in \n layout.d.ts:41 \n chart \n •  chart :  Chart < TType ,  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]>,  unknown > \n Defined in \n index.esm.d.ts:2253 \n ctx \n •  ctx :  CanvasRenderingContext2D \n Defined in \n index.esm.d.ts:2254 \n fullSize \n •  fullSize :  boolean \n if true, and the item is horizontal, then push vertical boxes down \n Inherited from \n LayoutItem . fullSize \n Defined in \n layout.d.ts:17 \n height \n •  height :  number \n Height of item. Must be valid after update() \n Inherited from \n LayoutItem . height \n Defined in \n layout.d.ts:25 \n left \n •  left :  number \n Left edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . left \n Defined in \n layout.d.ts:29 \n legendItems \n •  Optional   legendItems :  LegendItem [] \n Defined in \n index.esm.d.ts:2255 \n options \n •  options :  LegendOptions < TType > \n Overrides \n Element.options \n Defined in \n index.esm.d.ts:2256 \n position \n •  position :  LayoutPosition \n The position of the item in the chart layout. Possible values are \n Inherited from \n LayoutItem . position \n Defined in \n layout.d.ts:9 \n right \n •  right :  number \n Right edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . right \n Defined in \n layout.d.ts:37 \n top \n •  top :  number \n Top edge of the item. Set by layout system and cannot be used in update \n Inherited from \n LayoutItem . top \n Defined in \n layout.d.ts:33 \n weight \n •  weight :  number \n The weight used to sort the item. Higher weights are further away from the chart area \n Inherited from \n LayoutItem . weight \n Defined in \n layout.d.ts:13 \n width \n •  width :  number \n Width of item. Must be valid after update() \n Inherited from \n LayoutItem . width \n Defined in \n layout.d.ts:21 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n beforeLayout \n ▸  Optional   beforeLayout ():  void \n Called before the layout process starts \n Returns \n void \n Inherited from \n LayoutItem . beforeLayout \n Defined in \n layout.d.ts:46 \n draw \n ▸  draw ( chartArea ):  void \n Draws the element \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n LayoutItem . draw \n Defined in \n layout.d.ts:50 \n getPadding \n ▸  Optional   getPadding ():  ChartArea \n Returns an object with padding on the edges \n Returns \n ChartArea \n Inherited from \n LayoutItem . getPadding \n Defined in \n layout.d.ts:54 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < AnyObject ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < AnyObject ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n isHorizontal \n ▸  isHorizontal ():  boolean \n returns true if the layout item is horizontal (ie. top or bottom) \n Returns \n boolean \n Inherited from \n LayoutItem . isHorizontal \n Defined in \n layout.d.ts:58 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n update \n ▸  update ( width ,  height ,  margins? ):  void \n Takes two parameters: width and height. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width \n number \n \n \n height \n number \n \n \n margins? \n ChartArea \n Returns \n void \n Inherited from \n LayoutItem . update \n Defined in \n layout.d.ts:64 \n'},{title:"Interface: LegendItem",frontmatter:{},regularPath:"/api/interfaces/LegendItem.html",relativePath:"api/interfaces/LegendItem.md",key:"v-55ebf045",path:"/api/interfaces/LegendItem.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"fillStyle",slug:"fillstyle"},{level:3,title:"fontColor",slug:"fontcolor"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"index",slug:"index"},{level:3,title:"lineCap",slug:"linecap"},{level:3,title:"lineDash",slug:"linedash"},{level:3,title:"lineDashOffset",slug:"linedashoffset"},{level:3,title:"lineJoin",slug:"linejoin"},{level:3,title:"lineWidth",slug:"linewidth"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"strokeStyle",slug:"strokestyle"},{level:3,title:"text",slug:"text"},{level:3,title:"textAlign",slug:"textalign"}],content:" Interface: LegendItem \n Properties \n borderRadius \n •  Optional   borderRadius :  number  |  BorderRadius \n Border radius of the legend box \n since  3.1.0 \n Defined in \n index.esm.d.ts:2174 \n datasetIndex \n •  Optional   datasetIndex :  number \n Index of the associated dataset \n Defined in \n index.esm.d.ts:2179 \n fillStyle \n •  Optional   fillStyle :  Color \n Fill style of the legend box \n Defined in \n index.esm.d.ts:2189 \n fontColor \n •  Optional   fontColor :  Color \n Font color for the text\nDefaults to LegendOptions.labels.color \n Defined in \n index.esm.d.ts:2195 \n hidden \n •  Optional   hidden :  boolean \n If true, this item represents a hidden dataset. Label will be rendered with a strike-through effect \n Defined in \n index.esm.d.ts:2200 \n index \n •  Optional   index :  number \n Index the associated label in the labels array \n Defined in \n index.esm.d.ts:2184 \n lineCap \n •  Optional   lineCap :  CanvasLineCap \n For box border. \n see  https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap \n Defined in \n index.esm.d.ts:2206 \n lineDash \n •  Optional   lineDash :  number [] \n For box border. \n see  https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash \n Defined in \n index.esm.d.ts:2212 \n lineDashOffset \n •  Optional   lineDashOffset :  number \n For box border. \n see  https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset \n Defined in \n index.esm.d.ts:2218 \n lineJoin \n •  Optional   lineJoin :  CanvasLineJoin \n For box border. \n see  https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin \n Defined in \n index.esm.d.ts:2224 \n lineWidth \n •  Optional   lineWidth :  number \n Width of box border \n Defined in \n index.esm.d.ts:2229 \n pointStyle \n •  Optional   pointStyle :  PointStyle \n Point style of the legend box (only used if usePointStyle is true) \n Defined in \n index.esm.d.ts:2239 \n rotation \n •  Optional   rotation :  number \n Rotation of the point in degrees (only used if usePointStyle is true) \n Defined in \n index.esm.d.ts:2244 \n strokeStyle \n •  Optional   strokeStyle :  Color \n Stroke style of the legend box \n Defined in \n index.esm.d.ts:2234 \n text \n •  text :  string \n Label that will be displayed \n Defined in \n index.esm.d.ts:2168 \n textAlign \n •  Optional   textAlign :  TextAlign \n Text alignment \n Defined in \n index.esm.d.ts:2249 \n"},{title:"Interface: LegendOptions",frontmatter:{},regularPath:"/api/interfaces/LegendOptions.html",relativePath:"api/interfaces/LegendOptions.md",key:"v-367510e2",path:"/api/interfaces/LegendOptions.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"align",slug:"align"},{level:3,title:"display",slug:"display"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"labels",slug:"labels"},{level:3,title:"maxHeight",slug:"maxheight"},{level:3,title:"maxWidth",slug:"maxwidth"},{level:3,title:"position",slug:"position"},{level:3,title:"reverse",slug:"reverse"},{level:3,title:"rtl",slug:"rtl"},{level:3,title:"textDirection",slug:"textdirection"},{level:3,title:"title",slug:"title"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"onClick",slug:"onclick"},{level:3,title:"onHover",slug:"onhover"},{level:3,title:"onLeave",slug:"onleave"}],content:" Interface: LegendOptions<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n align \n •  align :  Align \n Alignment of the legend. \n default  'center' \n Defined in \n index.esm.d.ts:2274 \n display \n •  display :  boolean \n Is the legend shown? \n default  true \n Defined in \n index.esm.d.ts:2264 \n fullSize \n •  fullSize :  boolean \n Marks that this box should take the full width/height of the canvas (moving other boxes). This is unlikely to need to be changed in day-to-day use. \n default  true \n Defined in \n index.esm.d.ts:2287 \n labels \n •  labels :  Object \n Type declaration \n \n \n \n Name \n Type \n Description \n \n \n \n \n boxHeight \n number \n Height of the coloured box.   default  fontSize \n \n \n boxPadding \n number \n Padding between the color box and the text   default  1 \n \n \n boxWidth \n number \n Width of colored box.   default  40 \n \n \n color \n Color \n Color of label   see  Defaults.color \n \n \n font \n ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableChartContext > \n Font of label   see  Defaults.font \n \n \n padding \n number \n Padding between rows of colored boxes.   default  10 \n \n \n pointStyle \n PointStyle \n Override point style for the legend. Only applies if usePointStyle is true \n \n \n textAlign? \n TextAlign \n Text alignment \n \n \n usePointStyle \n boolean \n Label style will match corresponding point style (size is based on the minimum value between boxWidth and font.size).   default  false \n \n \n filter \n ( item :  LegendItem ,  data :  ChartData <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >) =>  boolean \n - \n \n \n generateLabels \n ( chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >) =>  LegendItem [] \n - \n \n \n sort \n ( a :  LegendItem ,  b :  LegendItem ,  data :  ChartData <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown >) =>  number \n - \n Defined in \n index.esm.d.ts:2306 \n maxHeight \n •  maxHeight :  number \n Maximum height of the legend, in pixels \n Defined in \n index.esm.d.ts:2278 \n maxWidth \n •  maxWidth :  number \n Maximum width of the legend, in pixels \n Defined in \n index.esm.d.ts:2282 \n position \n •  position :  LayoutPosition \n Position of the legend. \n default  'top' \n Defined in \n index.esm.d.ts:2269 \n reverse \n •  reverse :  boolean \n Legend will show datasets in reverse order. \n default  false \n Defined in \n index.esm.d.ts:2292 \n rtl \n •  rtl :  boolean \n true for rendering the legends from right to left. \n Defined in \n index.esm.d.ts:2371 \n textDirection \n •  textDirection :  string \n This will force the text direction 'rtl' or 'ltr' on the canvas for rendering the legend, regardless of the css specified on the canvas \n default  canvas' default \n Defined in \n index.esm.d.ts:2376 \n title \n •  title :  Object \n Type declaration \n \n \n \n Name \n Type \n Description \n \n \n \n \n color \n Color \n Color of title   see  Defaults.color \n \n \n display \n boolean \n Is the legend title displayed.   default  false \n \n \n font \n ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableChartContext > \n see Fonts \n \n \n padding? \n number  |  ChartArea \n - \n \n \n position \n \"start\"  |  \"end\"  |  \"center\" \n - \n \n \n text \n string \n The string title. \n Defined in \n index.esm.d.ts:2378 \n Methods \n onClick \n ▸  onClick ( e ,  legendItem ,  legend ):  void \n A callback that is called when a click event is registered on a label item. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n e \n ChartEvent \n \n \n legendItem \n LegendItem \n \n \n legend \n LegendElement < TType > \n Returns \n void \n Defined in \n index.esm.d.ts:2296 \n onHover \n ▸  onHover ( e ,  legendItem ,  legend ):  void \n A callback that is called when a 'mousemove' event is registered on top of a label item \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n e \n ChartEvent \n \n \n legendItem \n LegendItem \n \n \n legend \n LegendElement < TType > \n Returns \n void \n Defined in \n index.esm.d.ts:2300 \n onLeave \n ▸  onLeave ( e ,  legendItem ,  legend ):  void \n A callback that is called when a 'mousemove' event is registered outside of a previously hovered label item. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n e \n ChartEvent \n \n \n legendItem \n LegendItem \n \n \n legend \n LegendElement < TType > \n Returns \n void \n Defined in \n index.esm.d.ts:2304 \n"},{title:"Interface: LineControllerChartOptions",frontmatter:{},regularPath:"/api/interfaces/LineControllerChartOptions.html",relativePath:"api/interfaces/LineControllerChartOptions.md",key:"v-7ab66376",path:"/api/interfaces/LineControllerChartOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"showLine",slug:"showline"},{level:3,title:"spanGaps",slug:"spangaps"}],content:" Interface: LineControllerChartOptions \n Properties \n showLine \n •  showLine :  boolean \n If false, the lines between points are not drawn. \n default  true \n Defined in \n index.esm.d.ts:216 \n spanGaps \n •  spanGaps :  number  |  boolean \n If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used. \n default  false \n Defined in \n index.esm.d.ts:211 \n"},{title:"Interface: LineControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/LineControllerDatasetOptions.html",relativePath:"api/interfaces/LineControllerDatasetOptions.md",key:"v-b2e2d0f6",path:"/api/interfaces/LineControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderCapStyle",slug:"bordercapstyle"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderDash",slug:"borderdash"},{level:3,title:"borderDashOffset",slug:"borderdashoffset"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"capBezierPoints",slug:"capbezierpoints"},{level:3,title:"clip",slug:"clip"},{level:3,title:"cubicInterpolationMode",slug:"cubicinterpolationmode"},{level:3,title:"fill",slug:"fill"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderCapStyle",slug:"hoverbordercapstyle"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderDash",slug:"hoverborderdash"},{level:3,title:"hoverBorderDashOffset",slug:"hoverborderdashoffset"},{level:3,title:"hoverBorderJoinStyle",slug:"hoverborderjoinstyle"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"pointBackgroundColor",slug:"pointbackgroundcolor"},{level:3,title:"pointBorderColor",slug:"pointbordercolor"},{level:3,title:"pointBorderWidth",slug:"pointborderwidth"},{level:3,title:"pointHitRadius",slug:"pointhitradius"},{level:3,title:"pointHoverBackgroundColor",slug:"pointhoverbackgroundcolor"},{level:3,title:"pointHoverBorderColor",slug:"pointhoverbordercolor"},{level:3,title:"pointHoverBorderWidth",slug:"pointhoverborderwidth"},{level:3,title:"pointHoverRadius",slug:"pointhoverradius"},{level:3,title:"pointRadius",slug:"pointradius"},{level:3,title:"pointRotation",slug:"pointrotation"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"segment",slug:"segment"},{level:3,title:"showLine",slug:"showline"},{level:3,title:"spanGaps",slug:"spangaps"},{level:3,title:"stack",slug:"stack"},{level:3,title:"stepped",slug:"stepped"},{level:3,title:"tension",slug:"tension"},{level:3,title:"transitions",slug:"transitions"},{level:3,title:"xAxisID",slug:"xaxisid"},{level:3,title:"yAxisID",slug:"yaxisid"}],content:' Interface: LineControllerDatasetOptions \n Hierarchy \n \n \n ControllerDatasetOptions \n \n \n ScriptableAndArrayOptions < PointPrefixedOptions ,  ScriptableContext < "line" >> \n \n \n ScriptableAndArrayOptions < PointPrefixedHoverOptions ,  ScriptableContext < "line" >> \n \n \n ScriptableOptions < Omit < LineOptions , keyof  CommonElementOptions >,  ScriptableContext < "line" >> \n \n \n ScriptableAndArrayOptions < CommonElementOptions ,  ScriptableContext < "line" >> \n \n \n ScriptableOptions < Omit < LineHoverOptions , keyof  CommonHoverOptions >,  ScriptableContext < "line" >> \n \n \n ScriptableAndArrayOptions < CommonHoverOptions ,  ScriptableContext < "line" >> \n \n \n AnimationOptions < "line" > \n ↳  LineControllerDatasetOptions \n Properties \n animation \n •  animation :  false  |  AnimationSpec < "line" > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n AnimationOptions.animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < "line" > \n Inherited from \n AnimationOptions.animations \n Defined in \n index.esm.d.ts:1650 \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderCapStyle \n •  borderCapStyle :  Scriptable < CanvasLineCap ,  ScriptableContext < "line" >> \n Line cap style. See MDN. \n default  \'butt\' \n Inherited from \n ScriptableOptions.borderCapStyle \n Defined in \n index.esm.d.ts:1779 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderDash \n •  borderDash :  Scriptable < number [],  ScriptableContext < "line" >> \n Line dash. See MDN. \n default  [] \n Inherited from \n ScriptableOptions.borderDash \n Defined in \n index.esm.d.ts:1784 \n borderDashOffset \n •  borderDashOffset :  Scriptable < number ,  ScriptableContext < "line" >> \n Line dash offset. See MDN. \n default  0.0 \n Inherited from \n ScriptableOptions.borderDashOffset \n Defined in \n index.esm.d.ts:1789 \n borderJoinStyle \n •  borderJoinStyle :  Scriptable < CanvasLineJoin ,  ScriptableContext < "line" >> \n Line join style. See MDN. \n default  \'miter\' \n Inherited from \n ScriptableOptions.borderJoinStyle \n Defined in \n index.esm.d.ts:1794 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.borderWidth \n Defined in \n index.esm.d.ts:1694 \n capBezierPoints \n •  capBezierPoints :  Scriptable < boolean ,  ScriptableContext < "line" >> \n true to keep Bézier control inside the chart, false for no restriction. \n default  true \n Inherited from \n ScriptableOptions.capBezierPoints \n Defined in \n index.esm.d.ts:1799 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n ControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n cubicInterpolationMode \n •  cubicInterpolationMode :  Scriptable < "default"  |  "monotone" ,  ScriptableContext < "line" >> \n Interpolation mode to apply. \n default  \'default\' \n Inherited from \n ScriptableOptions.cubicInterpolationMode \n Defined in \n index.esm.d.ts:1804 \n fill \n •  fill :  Scriptable < FillTarget  |  ComplexFillTarget ,  ScriptableContext < "line" >> \n Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end \n Inherited from \n ScriptableOptions.fill \n Defined in \n index.esm.d.ts:1818 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n ControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderCapStyle \n •  hoverBorderCapStyle :  Scriptable < CanvasLineCap ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableOptions.hoverBorderCapStyle \n Defined in \n index.esm.d.ts:1836 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderDash \n •  hoverBorderDash :  Scriptable < number [],  ScriptableContext < "line" >> \n Inherited from \n ScriptableOptions.hoverBorderDash \n Defined in \n index.esm.d.ts:1837 \n hoverBorderDashOffset \n •  hoverBorderDashOffset :  Scriptable < number ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableOptions.hoverBorderDashOffset \n Defined in \n index.esm.d.ts:1838 \n hoverBorderJoinStyle \n •  hoverBorderJoinStyle :  Scriptable < CanvasLineJoin ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableOptions.hoverBorderJoinStyle \n Defined in \n index.esm.d.ts:1839 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n ControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n ControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n ControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n pointBackgroundColor \n •  pointBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n The fill color for points. \n Inherited from \n ScriptableAndArrayOptions.pointBackgroundColor \n Defined in \n index.esm.d.ts:1919 \n pointBorderColor \n •  pointBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n The border color for points. \n Inherited from \n ScriptableAndArrayOptions.pointBorderColor \n Defined in \n index.esm.d.ts:1923 \n pointBorderWidth \n •  pointBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n The width of the point border in pixels. \n Inherited from \n ScriptableAndArrayOptions.pointBorderWidth \n Defined in \n index.esm.d.ts:1927 \n pointHitRadius \n •  pointHitRadius :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n The pixel size of the non-displayed point that reacts to mouse events. \n Inherited from \n ScriptableAndArrayOptions.pointHitRadius \n Defined in \n index.esm.d.ts:1931 \n pointHoverBackgroundColor \n •  pointHoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Point background color when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBackgroundColor \n Defined in \n index.esm.d.ts:1950 \n pointHoverBorderColor \n •  pointHoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "line" >> \n Point border color when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBorderColor \n Defined in \n index.esm.d.ts:1954 \n pointHoverBorderWidth \n •  pointHoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n Border width of point when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBorderWidth \n Defined in \n index.esm.d.ts:1958 \n pointHoverRadius \n •  pointHoverRadius :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n The radius of the point when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverRadius \n Defined in \n index.esm.d.ts:1962 \n pointRadius \n •  pointRadius :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n The radius of the point shape. If set to 0, the point is not rendered. \n Inherited from \n ScriptableAndArrayOptions.pointRadius \n Defined in \n index.esm.d.ts:1935 \n pointRotation \n •  pointRotation :  ScriptableAndArray < number ,  ScriptableContext < "line" >> \n The rotation of the point in degrees. \n Inherited from \n ScriptableAndArrayOptions.pointRotation \n Defined in \n index.esm.d.ts:1939 \n pointStyle \n •  pointStyle :  ScriptableAndArray < PointStyle ,  ScriptableContext < "line" >> \n Style of the point. \n Inherited from \n ScriptableAndArrayOptions.pointStyle \n Defined in \n index.esm.d.ts:1943 \n segment \n •  segment :  Scriptable <{  backgroundColor :  Scriptable < Color ,  ScriptableLineSegmentContext > ;  borderCapStyle :  Scriptable < CanvasLineCap ,  ScriptableLineSegmentContext > ;  borderColor :  Scriptable < Color ,  ScriptableLineSegmentContext > ;  borderDash :  Scriptable < number [],  ScriptableLineSegmentContext > ;  borderDashOffset :  Scriptable < number ,  ScriptableLineSegmentContext > ;  borderJoinStyle :  Scriptable < CanvasLineJoin ,  ScriptableLineSegmentContext > ;  borderWidth :  Scriptable < number ,  ScriptableLineSegmentContext >  },  ScriptableContext < "line" >> \n Inherited from \n ScriptableOptions.segment \n Defined in \n index.esm.d.ts:1824 \n showLine \n •  showLine :  boolean \n Defined in \n index.esm.d.ts:203 \n spanGaps \n •  spanGaps :  number  |  boolean \n If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used. \n default  false \n Overrides \n ScriptableOptions.spanGaps \n Defined in \n index.esm.d.ts:201 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n ControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n stepped \n •  stepped :  Scriptable < boolean  |  "middle"  |  "before"  |  "after" ,  ScriptableContext < "line" >> \n true to show the line as a stepped line (tension will be ignored). \n default  false \n Inherited from \n ScriptableOptions.stepped \n Defined in \n index.esm.d.ts:1814 \n tension \n •  tension :  Scriptable < number ,  ScriptableContext < "line" >> \n Bézier curve tension (0 for no Bézier curves). \n default  0 \n Inherited from \n ScriptableOptions.tension \n Defined in \n index.esm.d.ts:1809 \n transitions \n •  transitions :  TransitionsSpec < "line" > \n Inherited from \n AnimationOptions.transitions \n Defined in \n index.esm.d.ts:1651 \n xAxisID \n •  xAxisID :  string \n The ID of the x axis to plot this dataset on. \n Defined in \n index.esm.d.ts:191 \n yAxisID \n •  yAxisID :  string \n The ID of the y axis to plot this dataset on. \n Defined in \n index.esm.d.ts:195 \n'},{title:"Interface: LineElement",frontmatter:{},regularPath:"/api/interfaces/LineElement.html",relativePath:"api/interfaces/LineElement.md",key:"v-1b9fd7a1",path:"/api/interfaces/LineElement.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"options",slug:"options"},{level:3,title:"points",slug:"points"},{level:3,title:"segments",slug:"segments"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"draw",slug:"draw"},{level:3,title:"first",slug:"first"},{level:3,title:"getCenterPoint",slug:"getcenterpoint"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getRange",slug:"getrange"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"inRange",slug:"inrange"},{level:3,title:"inXRange",slug:"inxrange"},{level:3,title:"inYRange",slug:"inyrange"},{level:3,title:"interpolate",slug:"interpolate"},{level:3,title:"last",slug:"last"},{level:3,title:"path",slug:"path"},{level:3,title:"pathSegment",slug:"pathsegment"},{level:3,title:"tooltipPosition",slug:"tooltipposition"},{level:3,title:"updateControlPoints",slug:"updatecontrolpoints"}],content:' Interface: LineElement<T, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n T \n extends  LineProps  =  LineProps \n \n \n O \n extends  LineOptions  =  LineOptions \n Hierarchy \n \n \n Element < T ,  O > \n \n \n VisualElement \n ↳  LineElement \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n options \n •  Readonly   options :  O \n Inherited from \n Element.options \n Defined in \n element.d.ts:8 \n points \n •  points :  Point [] \n Defined in \n index.esm.d.ts:1846 \n segments \n •  Readonly   segments :  Segment [] \n Defined in \n index.esm.d.ts:1847 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n draw \n ▸  draw ( ctx ,  area? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n area? \n ChartArea \n Returns \n void \n Inherited from \n VisualElement . draw \n Defined in \n index.esm.d.ts:1685 \n first \n ▸  first ():  false  |  Point \n Returns \n false  |  Point \n Defined in \n index.esm.d.ts:1848 \n getCenterPoint \n ▸  getCenterPoint ( useFinalPosition? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n x \n number \n \n \n y \n number \n Inherited from \n VisualElement . getCenterPoint \n Defined in \n index.esm.d.ts:1689 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < T ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends keyof  T [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < T ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n getRange \n ▸  Optional   getRange ( axis ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n "x"  |  "y" \n Returns \n number \n Inherited from \n VisualElement . getRange \n Defined in \n index.esm.d.ts:1690 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n inRange \n ▸  inRange ( mouseX ,  mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inRange \n Defined in \n index.esm.d.ts:1686 \n inXRange \n ▸  inXRange ( mouseX ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inXRange \n Defined in \n index.esm.d.ts:1687 \n inYRange \n ▸  inYRange ( mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inYRange \n Defined in \n index.esm.d.ts:1688 \n interpolate \n ▸  interpolate ( point ,  property ):  Point  |  Point [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n point \n Point \n \n \n property \n "x"  |  "y" \n Returns \n Point  |  Point [] \n Defined in \n index.esm.d.ts:1850 \n last \n ▸  last ():  false  |  Point \n Returns \n false  |  Point \n Defined in \n index.esm.d.ts:1849 \n path \n ▸  path ( ctx ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n Returns \n boolean \n Defined in \n index.esm.d.ts:1852 \n pathSegment \n ▸  pathSegment ( ctx ,  segment ,  params ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n segment \n Segment \n \n \n params \n AnyObject \n Returns \n boolean \n Defined in \n index.esm.d.ts:1851 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n updateControlPoints \n ▸  updateControlPoints ( chartArea ,  indexAxis? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n \n \n indexAxis? \n "x"  |  "y" \n Returns \n void \n Defined in \n index.esm.d.ts:1845 \n'},{title:"Interface: LineHoverOptions",frontmatter:{},regularPath:"/api/interfaces/LineHoverOptions.html",relativePath:"api/interfaces/LineHoverOptions.md",key:"v-72b00d85",path:"/api/interfaces/LineHoverOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderCapStyle",slug:"hoverbordercapstyle"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderDash",slug:"hoverborderdash"},{level:3,title:"hoverBorderDashOffset",slug:"hoverborderdashoffset"},{level:3,title:"hoverBorderJoinStyle",slug:"hoverborderjoinstyle"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"}],content:" Interface: LineHoverOptions \n Hierarchy \n \n \n CommonHoverOptions \n ↳  LineHoverOptions \n Properties \n hoverBackgroundColor \n •  hoverBackgroundColor :  Color \n Inherited from \n CommonHoverOptions . hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderCapStyle \n •  hoverBorderCapStyle :  CanvasLineCap \n Defined in \n index.esm.d.ts:1836 \n hoverBorderColor \n •  hoverBorderColor :  Color \n Inherited from \n CommonHoverOptions . hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderDash \n •  hoverBorderDash :  number [] \n Defined in \n index.esm.d.ts:1837 \n hoverBorderDashOffset \n •  hoverBorderDashOffset :  number \n Defined in \n index.esm.d.ts:1838 \n hoverBorderJoinStyle \n •  hoverBorderJoinStyle :  CanvasLineJoin \n Defined in \n index.esm.d.ts:1839 \n hoverBorderWidth \n •  hoverBorderWidth :  number \n Inherited from \n CommonHoverOptions . hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n"},{title:"Interface: LineOptions",frontmatter:{},regularPath:"/api/interfaces/LineOptions.html",relativePath:"api/interfaces/LineOptions.md",key:"v-d6ba6b46",path:"/api/interfaces/LineOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderCapStyle",slug:"bordercapstyle"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderDash",slug:"borderdash"},{level:3,title:"borderDashOffset",slug:"borderdashoffset"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"capBezierPoints",slug:"capbezierpoints"},{level:3,title:"cubicInterpolationMode",slug:"cubicinterpolationmode"},{level:3,title:"fill",slug:"fill"},{level:3,title:"segment",slug:"segment"},{level:3,title:"spanGaps",slug:"spangaps"},{level:3,title:"stepped",slug:"stepped"},{level:3,title:"tension",slug:"tension"}],content:' Interface: LineOptions \n Hierarchy \n \n \n CommonElementOptions \n ↳  LineOptions \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Inherited from \n CommonElementOptions . backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderCapStyle \n •  borderCapStyle :  CanvasLineCap \n Line cap style. See MDN. \n default  \'butt\' \n Defined in \n index.esm.d.ts:1779 \n borderColor \n •  borderColor :  Color \n Inherited from \n CommonElementOptions . borderColor \n Defined in \n index.esm.d.ts:1695 \n borderDash \n •  borderDash :  number [] \n Line dash. See MDN. \n default  [] \n Defined in \n index.esm.d.ts:1784 \n borderDashOffset \n •  borderDashOffset :  number \n Line dash offset. See MDN. \n default  0.0 \n Defined in \n index.esm.d.ts:1789 \n borderJoinStyle \n •  borderJoinStyle :  CanvasLineJoin \n Line join style. See MDN. \n default  \'miter\' \n Defined in \n index.esm.d.ts:1794 \n borderWidth \n •  borderWidth :  number \n Inherited from \n CommonElementOptions . borderWidth \n Defined in \n index.esm.d.ts:1694 \n capBezierPoints \n •  capBezierPoints :  boolean \n true to keep Bézier control inside the chart, false for no restriction. \n default  true \n Defined in \n index.esm.d.ts:1799 \n cubicInterpolationMode \n •  cubicInterpolationMode :  "default"  |  "monotone" \n Interpolation mode to apply. \n default  \'default\' \n Defined in \n index.esm.d.ts:1804 \n fill \n •  fill :  FillTarget  |  ComplexFillTarget \n Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end \n Defined in \n index.esm.d.ts:1818 \n segment \n •  segment :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n backgroundColor \n Scriptable < Color ,  ScriptableLineSegmentContext > \n \n \n borderCapStyle \n Scriptable < CanvasLineCap ,  ScriptableLineSegmentContext > \n \n \n borderColor \n Scriptable < Color ,  ScriptableLineSegmentContext > \n \n \n borderDash \n Scriptable < number [],  ScriptableLineSegmentContext > \n \n \n borderDashOffset \n Scriptable < number ,  ScriptableLineSegmentContext > \n \n \n borderJoinStyle \n Scriptable < CanvasLineJoin ,  ScriptableLineSegmentContext > \n \n \n borderWidth \n Scriptable < number ,  ScriptableLineSegmentContext > \n Defined in \n index.esm.d.ts:1824 \n spanGaps \n •  spanGaps :  number  |  boolean \n If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used. \n Defined in \n index.esm.d.ts:1822 \n stepped \n •  stepped :  boolean  |  "middle"  |  "before"  |  "after" \n true to show the line as a stepped line (tension will be ignored). \n default  false \n Defined in \n index.esm.d.ts:1814 \n tension \n •  tension :  number \n Bézier curve tension (0 for no Bézier curves). \n default  0 \n Defined in \n index.esm.d.ts:1809 \n'},{title:"Interface: LineProps",frontmatter:{},regularPath:"/api/interfaces/LineProps.html",relativePath:"api/interfaces/LineProps.md",key:"v-7a49a039",path:"/api/interfaces/LineProps.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"points",slug:"points"}],content:" Interface: LineProps \n Properties \n points \n •  points :  Point [] \n Defined in \n index.esm.d.ts:1771 \n"},{title:"Interface: ParsingOptions",frontmatter:{},regularPath:"/api/interfaces/ParsingOptions.html",relativePath:"api/interfaces/ParsingOptions.md",key:"v-6709d785",path:"/api/interfaces/ParsingOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"parsing",slug:"parsing"}],content:" Interface: ParsingOptions \n Hierarchy \n \n \n ParsingOptions \n ↳  ControllerDatasetOptions \n ↳  CoreChartOptions \n Properties \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Defined in \n index.esm.d.ts:58 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Defined in \n index.esm.d.ts:49 \n"},{title:"Interface: Plugin",frontmatter:{},regularPath:"/api/interfaces/Plugin.html",relativePath:"api/interfaces/Plugin.md",key:"v-185c4be5",path:"/api/interfaces/Plugin.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"id",slug:"id"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterDatasetDraw",slug:"afterdatasetdraw"},{level:3,title:"afterDatasetUpdate",slug:"afterdatasetupdate"},{level:3,title:"afterDatasetsDraw",slug:"afterdatasetsdraw"},{level:3,title:"afterDatasetsUpdate",slug:"afterdatasetsupdate"},{level:3,title:"afterDestroy",slug:"afterdestroy"},{level:3,title:"afterDraw",slug:"afterdraw"},{level:3,title:"afterEvent",slug:"afterevent"},{level:3,title:"afterInit",slug:"afterinit"},{level:3,title:"afterLayout",slug:"afterlayout"},{level:3,title:"afterRender",slug:"afterrender"},{level:3,title:"afterTooltipDraw",slug:"aftertooltipdraw"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeDatasetDraw",slug:"beforedatasetdraw"},{level:3,title:"beforeDatasetUpdate",slug:"beforedatasetupdate"},{level:3,title:"beforeDatasetsDraw",slug:"beforedatasetsdraw"},{level:3,title:"beforeDatasetsUpdate",slug:"beforedatasetsupdate"},{level:3,title:"beforeDestroy",slug:"beforedestroy"},{level:3,title:"beforeDraw",slug:"beforedraw"},{level:3,title:"beforeElementsUpdate",slug:"beforeelementsupdate"},{level:3,title:"beforeEvent",slug:"beforeevent"},{level:3,title:"beforeInit",slug:"beforeinit"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"beforeRender",slug:"beforerender"},{level:3,title:"beforeTooltipDraw",slug:"beforetooltipdraw"},{level:3,title:"beforeUpdate",slug:"beforeupdate"},{level:3,title:"destroy",slug:"destroy"},{level:3,title:"install",slug:"install"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resize",slug:"resize"},{level:3,title:"start",slug:"start"},{level:3,title:"stop",slug:"stop"},{level:3,title:"uninstall",slug:"uninstall"}],content:' Interface: Plugin<TType, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n \n \n O \n AnyObject \n Hierarchy \n \n \n ExtendedPlugin < TType ,  O > \n ↳  Plugin \n ↳↳  Tooltip \n Properties \n id \n •  id :  string \n Defined in \n index.esm.d.ts:808 \n Methods \n afterBuildTicks \n ▸  Optional   afterBuildTicks ( chart ,  args ,  options ):  void \n desc  Called after scale has build its ticks. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:967 \n afterDataLimits \n ▸  Optional   afterDataLimits ( chart ,  args ,  options ):  void \n desc  Called after scale data limits are calculated. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:951 \n afterDatasetDraw \n ▸  Optional   afterDatasetDraw ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets at the given  args.index  have been drawn\n(datasets are drawn in the reverse order). Note that this hook will not be called\nif the datasets drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1049 \n afterDatasetUpdate \n ▸  Optional   afterDatasetUpdate ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets at the given  args.index  has been updated. Note\nthat this hook will not be called if the datasets update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n false \n - \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:926 \n afterDatasetsDraw \n ▸  Optional   afterDatasetsDraw ( chart ,  args ,  options ,  cancelable ):  void \n desc  Called after the  chart  datasets have been drawn. Note that this hook\nwill not be called if the datasets drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n \n \n cancelable \n false \n - \n Returns \n void \n Defined in \n index.esm.d.ts:1026 \n afterDatasetsUpdate \n ▸  Optional   afterDatasetsUpdate ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets have been updated. Note that this hook\nwill not be called if the datasets update has been previously cancelled. \n since  version 2.1.5 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:903 \n afterDestroy \n ▸  Optional   afterDestroy ( chart ,  args ,  options ):  void \n Called after the chart has been destroyed. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1102 \n afterDraw \n ▸  Optional   afterDraw ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been drawn. Note that this hook will not be called\nif the drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1009 \n afterEvent \n ▸  Optional   afterEvent ( chart ,  args ,  options ):  void \n desc  Called after the  event  has been consumed. Note that this hook\nwill not be called if the  event  has been previously discarded. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n false \n - \n \n \n args.changed? \n boolean \n - \n \n \n args.event \n ChartEvent \n The event object. \n \n \n args.inChartArea \n boolean \n The event position is inside chartArea \n \n \n args.replay \n boolean \n True if this event is replayed from  Chart.update \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1072 \n afterInit \n ▸  Optional   afterInit ( chart ,  args ,  options ):  void \n desc  Called after  chart  has been initialized and before the first update. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:847 \n afterLayout \n ▸  Optional   afterLayout ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been laid out. Note that this hook will not\nbe called if the layout update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:975 \n afterRender \n ▸  Optional   afterRender ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been fully rendered (and animation completed). Note\nthat this hook will not be called if the rendering has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:992 \n afterTooltipDraw \n ▸  Optional   afterTooltipDraw ( chart ,  args ,  options ):  void \n desc  Called after drawing the  tooltip . Note that this hook will not\nbe called if the tooltip drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n TooltipModel < TType > \n The tooltip. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Inherited from \n ExtendedPlugin . afterTooltipDraw \n Defined in \n index.esm.d.ts:2601 \n afterUpdate \n ▸  Optional   afterUpdate ( chart ,  args ,  options ):  void \n desc  Called after  chart  has been updated and before rendering. Note that this\nhook will not be called if the chart update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:866 \n beforeBuildTicks \n ▸  Optional   beforeBuildTicks ( chart ,  args ,  options ):  void \n desc  Called before scale builds its ticks. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:959 \n beforeDataLimits \n ▸  Optional   beforeDataLimits ( chart ,  args ,  options ):  void \n desc  Called before scale data limits are calculated. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:943 \n beforeDatasetDraw \n ▸  Optional   beforeDatasetDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  chart  dataset at the given  args.index  (datasets\nare drawn in the reverse order). If any plugin returns  false , the datasets drawing\nis cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Defined in \n index.esm.d.ts:1038 \n beforeDatasetUpdate \n ▸  Optional   beforeDatasetUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating the  chart  dataset at the given  args.index . If any plugin\nreturns  false , the datasets update is cancelled until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Defined in \n index.esm.d.ts:915 \n beforeDatasetsDraw \n ▸  Optional   beforeDatasetsDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  chart  datasets. If any plugin returns  false ,\nthe datasets drawing is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Defined in \n index.esm.d.ts:1018 \n beforeDatasetsUpdate \n ▸  Optional   beforeDatasetsUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating the  chart  datasets. If any plugin returns  false ,\nthe datasets update is cancelled until another  update  is triggered. \n since  version 2.1.5 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false to cancel the datasets update. \n Defined in \n index.esm.d.ts:893 \n beforeDestroy \n ▸  Optional   beforeDestroy ( chart ,  args ,  options ):  void \n Called before the chart is being destroyed. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1087 \n beforeDraw \n ▸  Optional   beforeDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing  chart  at every animation frame. If any plugin returns  false ,\nthe frame drawing is cancelled untilanother  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart drawing. \n Defined in \n index.esm.d.ts:1001 \n beforeElementsUpdate \n ▸  Optional   beforeElementsUpdate ( chart ,  args ,  options ):  void \n desc  Called during the update process, before any chart elements have been created.\nThis can be used for data decimation by changing the data array inside a dataset. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:874 \n beforeEvent \n ▸  Optional   beforeEvent ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before processing the specified  event . If any plugin returns  false ,\nthe event will be discarded. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.event \n ChartEvent \n The event object. \n \n \n args.inChartArea \n boolean \n The event position is inside chartArea \n \n \n args.replay \n boolean \n True if this event is replayed from  Chart.update \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n Defined in \n index.esm.d.ts:1060 \n beforeInit \n ▸  Optional   beforeInit ( chart ,  args ,  options ):  void \n desc  Called before initializing  chart . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:840 \n beforeLayout \n ▸  Optional   beforeLayout ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before laying out  chart . If any plugin returns  false ,\nthe layout update is cancelled until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart layout. \n Defined in \n index.esm.d.ts:935 \n beforeRender \n ▸  Optional   beforeRender ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before rendering  chart . If any plugin returns  false ,\nthe rendering is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart rendering. \n Defined in \n index.esm.d.ts:984 \n beforeTooltipDraw \n ▸  Optional   beforeTooltipDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  tooltip . If any plugin returns  false ,\nthe tooltip drawing is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n TooltipModel < TType > \n The tooltip. \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart tooltip drawing. \n Inherited from \n ExtendedPlugin . beforeTooltipDraw \n Defined in \n index.esm.d.ts:2592 \n beforeUpdate \n ▸  Optional   beforeUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating  chart . If any plugin returns  false , the update\nis cancelled (and thus subsequent render(s)) until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode \n \n \n options \n O \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart update. \n Defined in \n index.esm.d.ts:857 \n destroy \n ▸  Optional   destroy ( chart ,  args ,  options ):  void \n Called after the chart has been destroyed. \n deprecated  since version 3.7.0 in favour of afterDestroy \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1095 \n install \n ▸  Optional   install ( chart ,  args ,  options ):  void \n desc  Called when plugin is installed for this chart instance. This hook is also invoked for disabled plugins (options === false). \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:817 \n reset \n ▸  Optional   reset ( chart ,  args ,  options ):  void \n desc  Called during chart reset \n since  version 3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:882 \n resize \n ▸  Optional   resize ( chart ,  args ,  options ):  void \n desc  Called after the chart as been resized. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.size \n Object \n The new canvas display size (eq. canvas.style width & height). \n \n \n args.size.height \n number \n - \n \n \n args.size.width \n number \n - \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1080 \n start \n ▸  Optional   start ( chart ,  args ,  options ):  void \n desc  Called when a plugin is starting. This happens when chart is created or plugin is enabled. \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:825 \n stop \n ▸  Optional   stop ( chart ,  args ,  options ):  void \n desc  Called when a plugin stopping. This happens when chart is destroyed or plugin is disabled. \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:833 \n uninstall \n ▸  Optional   uninstall ( chart ,  args ,  options ):  void \n Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false). \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n O \n The plugin options. \n Returns \n void \n Defined in \n index.esm.d.ts:1110 \n'},{title:"Interface: PluginChartOptions",frontmatter:{},regularPath:"/api/interfaces/PluginChartOptions.html",relativePath:"api/interfaces/PluginChartOptions.md",key:"v-e8eb7b36",path:"/api/interfaces/PluginChartOptions.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"plugins",slug:"plugins"}],content:" Interface: PluginChartOptions<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Hierarchy \n \n \n PluginChartOptions \n ↳  Defaults \n Properties \n plugins \n •  plugins :  PluginOptionsByType < TType > \n Defined in \n index.esm.d.ts:2845 \n"},{title:"Interface: PluginOptionsByType",frontmatter:{},regularPath:"/api/interfaces/PluginOptionsByType.html",relativePath:"api/interfaces/PluginOptionsByType.md",key:"v-62852e79",path:"/api/interfaces/PluginOptionsByType.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"decimation",slug:"decimation"},{level:3,title:"filler",slug:"filler"},{level:3,title:"legend",slug:"legend"},{level:3,title:"subtitle",slug:"subtitle"},{level:3,title:"title",slug:"title"},{level:3,title:"tooltip",slug:"tooltip"}],content:" Interface: PluginOptionsByType<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n decimation \n •  decimation :  DecimationOptions \n Defined in \n index.esm.d.ts:2837 \n filler \n •  filler :  FillerOptions \n Defined in \n index.esm.d.ts:2838 \n legend \n •  legend :  LegendOptions < TType > \n Defined in \n index.esm.d.ts:2839 \n subtitle \n •  subtitle :  TitleOptions \n Defined in \n index.esm.d.ts:2840 \n title \n •  title :  TitleOptions \n Defined in \n index.esm.d.ts:2841 \n tooltip \n •  tooltip :  TooltipOptions < TType > \n Defined in \n index.esm.d.ts:2842 \n"},{title:"Interface: Point",frontmatter:{},regularPath:"/api/interfaces/Point.html",relativePath:"api/interfaces/Point.md",key:"v-588b94d1",path:"/api/interfaces/Point.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: Point \n Properties \n x \n •  x :  number \n Defined in \n geometric.d.ts:11 \n y \n •  y :  number \n Defined in \n geometric.d.ts:12 \n"},{title:"Interface: PointElement",frontmatter:{},regularPath:"/api/interfaces/PointElement.html",relativePath:"api/interfaces/PointElement.md",key:"v-541cd645",path:"/api/interfaces/PointElement.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"options",slug:"options"},{level:3,title:"parsed",slug:"parsed"},{level:3,title:"skip",slug:"skip"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getCenterPoint",slug:"getcenterpoint"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getRange",slug:"getrange"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"inRange",slug:"inrange"},{level:3,title:"inXRange",slug:"inxrange"},{level:3,title:"inYRange",slug:"inyrange"},{level:3,title:"tooltipPosition",slug:"tooltipposition"}],content:' Interface: PointElement<T, O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n T \n extends  PointProps  =  PointProps \n \n \n O \n extends  PointOptions  =  PointOptions \n Hierarchy \n \n \n Element < T ,  O > \n \n \n VisualElement \n ↳  PointElement \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n options \n •  Readonly   options :  O \n Inherited from \n Element.options \n Defined in \n element.d.ts:8 \n parsed \n •  Readonly   parsed :  CartesianParsedData \n Defined in \n index.esm.d.ts:1969 \n skip \n •  Readonly   skip :  boolean \n Defined in \n index.esm.d.ts:1968 \n x \n •  Readonly   x :  number \n Inherited from \n Element.x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Element.y \n Defined in \n element.d.ts:6 \n Methods \n draw \n ▸  draw ( ctx ,  area? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n area? \n ChartArea \n Returns \n void \n Inherited from \n VisualElement . draw \n Defined in \n index.esm.d.ts:1685 \n getCenterPoint \n ▸  getCenterPoint ( useFinalPosition? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n x \n number \n \n \n y \n number \n Inherited from \n VisualElement . getCenterPoint \n Defined in \n index.esm.d.ts:1689 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < T ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends keyof  T [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < T ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n getRange \n ▸  Optional   getRange ( axis ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n "x"  |  "y" \n Returns \n number \n Inherited from \n VisualElement . getRange \n Defined in \n index.esm.d.ts:1690 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n inRange \n ▸  inRange ( mouseX ,  mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inRange \n Defined in \n index.esm.d.ts:1686 \n inXRange \n ▸  inXRange ( mouseX ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inXRange \n Defined in \n index.esm.d.ts:1687 \n inYRange \n ▸  inYRange ( mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Inherited from \n VisualElement . inYRange \n Defined in \n index.esm.d.ts:1688 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n'},{title:"Interface: PointHoverOptions",frontmatter:{},regularPath:"/api/interfaces/PointHoverOptions.html",relativePath:"api/interfaces/PointHoverOptions.md",key:"v-32ba1d8d",path:"/api/interfaces/PointHoverOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverRadius",slug:"hoverradius"}],content:" Interface: PointHoverOptions \n Hierarchy \n \n \n CommonHoverOptions \n ↳  PointHoverOptions \n Properties \n hoverBackgroundColor \n •  hoverBackgroundColor :  Color \n Inherited from \n CommonHoverOptions . hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  Color \n Inherited from \n CommonHoverOptions . hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  number \n Inherited from \n CommonHoverOptions . hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverRadius \n •  hoverRadius :  number \n Point radius when hovered. \n default  4 \n Defined in \n index.esm.d.ts:1912 \n"},{title:"Interface: PointOptions",frontmatter:{},regularPath:"/api/interfaces/PointOptions.html",relativePath:"api/interfaces/PointOptions.md",key:"v-8b3abaf6",path:"/api/interfaces/PointOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"drawActiveElementsOnTop",slug:"drawactiveelementsontop"},{level:3,title:"hitRadius",slug:"hitradius"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"radius",slug:"radius"},{level:3,title:"rotation",slug:"rotation"}],content:" Interface: PointOptions \n Hierarchy \n \n \n CommonElementOptions \n ↳  PointOptions \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Inherited from \n CommonElementOptions . backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderColor \n •  borderColor :  Color \n Inherited from \n CommonElementOptions . borderColor \n Defined in \n index.esm.d.ts:1695 \n borderWidth \n •  borderWidth :  number \n Inherited from \n CommonElementOptions . borderWidth \n Defined in \n index.esm.d.ts:1694 \n drawActiveElementsOnTop \n •  drawActiveElementsOnTop :  boolean \n Draw the active elements over the other elements of the dataset, \n default  true \n Defined in \n index.esm.d.ts:1904 \n hitRadius \n •  hitRadius :  number \n Extra radius added to point radius for hit detection. \n default  1 \n Defined in \n index.esm.d.ts:1889 \n pointStyle \n •  pointStyle :  PointStyle \n Point style \n default  'circle; \n Defined in \n index.esm.d.ts:1894 \n radius \n •  radius :  number \n Point radius \n default  3 \n Defined in \n index.esm.d.ts:1884 \n rotation \n •  rotation :  number \n Point rotation (in degrees). \n default  0 \n Defined in \n index.esm.d.ts:1899 \n"},{title:"Interface: PointPrefixedHoverOptions",frontmatter:{},regularPath:"/api/interfaces/PointPrefixedHoverOptions.html",relativePath:"api/interfaces/PointPrefixedHoverOptions.md",key:"v-020834aa",path:"/api/interfaces/PointPrefixedHoverOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"pointHoverBackgroundColor",slug:"pointhoverbackgroundcolor"},{level:3,title:"pointHoverBorderColor",slug:"pointhoverbordercolor"},{level:3,title:"pointHoverBorderWidth",slug:"pointhoverborderwidth"},{level:3,title:"pointHoverRadius",slug:"pointhoverradius"}],content:" Interface: PointPrefixedHoverOptions \n Properties \n pointHoverBackgroundColor \n •  pointHoverBackgroundColor :  Color \n Point background color when hovered. \n Defined in \n index.esm.d.ts:1950 \n pointHoverBorderColor \n •  pointHoverBorderColor :  Color \n Point border color when hovered. \n Defined in \n index.esm.d.ts:1954 \n pointHoverBorderWidth \n •  pointHoverBorderWidth :  number \n Border width of point when hovered. \n Defined in \n index.esm.d.ts:1958 \n pointHoverRadius \n •  pointHoverRadius :  number \n The radius of the point when hovered. \n Defined in \n index.esm.d.ts:1962 \n"},{title:"Interface: PointPrefixedOptions",frontmatter:{},regularPath:"/api/interfaces/PointPrefixedOptions.html",relativePath:"api/interfaces/PointPrefixedOptions.md",key:"v-33fa7d65",path:"/api/interfaces/PointPrefixedOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"pointBackgroundColor",slug:"pointbackgroundcolor"},{level:3,title:"pointBorderColor",slug:"pointbordercolor"},{level:3,title:"pointBorderWidth",slug:"pointborderwidth"},{level:3,title:"pointHitRadius",slug:"pointhitradius"},{level:3,title:"pointRadius",slug:"pointradius"},{level:3,title:"pointRotation",slug:"pointrotation"},{level:3,title:"pointStyle",slug:"pointstyle"}],content:" Interface: PointPrefixedOptions \n Properties \n pointBackgroundColor \n •  pointBackgroundColor :  Color \n The fill color for points. \n Defined in \n index.esm.d.ts:1919 \n pointBorderColor \n •  pointBorderColor :  Color \n The border color for points. \n Defined in \n index.esm.d.ts:1923 \n pointBorderWidth \n •  pointBorderWidth :  number \n The width of the point border in pixels. \n Defined in \n index.esm.d.ts:1927 \n pointHitRadius \n •  pointHitRadius :  number \n The pixel size of the non-displayed point that reacts to mouse events. \n Defined in \n index.esm.d.ts:1931 \n pointRadius \n •  pointRadius :  number \n The radius of the point shape. If set to 0, the point is not rendered. \n Defined in \n index.esm.d.ts:1935 \n pointRotation \n •  pointRotation :  number \n The rotation of the point in degrees. \n Defined in \n index.esm.d.ts:1939 \n pointStyle \n •  pointStyle :  PointStyle \n Style of the point. \n Defined in \n index.esm.d.ts:1943 \n"},{title:"Interface: PointProps",frontmatter:{},regularPath:"/api/interfaces/PointProps.html",relativePath:"api/interfaces/PointProps.md",key:"v-14a55045",path:"/api/interfaces/PointProps.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: PointProps \n Properties \n x \n •  x :  number \n Defined in \n index.esm.d.ts:1861 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:1862 \n"},{title:"Interface: PolarAreaController",frontmatter:{},regularPath:"/api/interfaces/PolarAreaController.html",relativePath:"api/interfaces/PolarAreaController.md",key:"v-432826a3",path:"/api/interfaces/PolarAreaController.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"_cachedMeta",slug:"cachedmeta"},{level:3,title:"chart",slug:"chart"},{level:3,title:"enableOptionSharing",slug:"enableoptionsharing"},{level:3,title:"index",slug:"index"},{level:3,title:"innerRadius",slug:"innerradius"},{level:3,title:"offsetX",slug:"offsetx"},{level:3,title:"offsetY",slug:"offsety"},{level:3,title:"outerRadius",slug:"outerradius"},{level:3,title:"supportsDecimation",slug:"supportsdecimation"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"addElements",slug:"addelements"},{level:3,title:"applyStack",slug:"applystack"},{level:3,title:"buildOrUpdateElements",slug:"buildorupdateelements"},{level:3,title:"calculateCircumference",slug:"calculatecircumference"},{level:3,title:"calculateTotal",slug:"calculatetotal"},{level:3,title:"configure",slug:"configure"},{level:3,title:"countVisibleElements",slug:"countvisibleelements"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getAllParsedValues",slug:"getallparsedvalues"},{level:3,title:"getDataset",slug:"getdataset"},{level:3,title:"getLabelAndValue",slug:"getlabelandvalue"},{level:3,title:"getMaxOverflow",slug:"getmaxoverflow"},{level:3,title:"getMeta",slug:"getmeta"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getParsed",slug:"getparsed"},{level:3,title:"getScaleForId",slug:"getscaleforid"},{level:3,title:"getSharedOptions",slug:"getsharedoptions"},{level:3,title:"getStyle",slug:"getstyle"},{level:3,title:"includeOptions",slug:"includeoptions"},{level:3,title:"initialize",slug:"initialize"},{level:3,title:"linkScales",slug:"linkscales"},{level:3,title:"parse",slug:"parse"},{level:3,title:"parseArrayData",slug:"parsearraydata"},{level:3,title:"parseObjectData",slug:"parseobjectdata"},{level:3,title:"parsePrimitiveData",slug:"parseprimitivedata"},{level:3,title:"removeHoverStyle",slug:"removehoverstyle"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resolveDataElementOptions",slug:"resolvedataelementoptions"},{level:3,title:"resolveDatasetElementOptions",slug:"resolvedatasetelementoptions"},{level:3,title:"setHoverStyle",slug:"sethoverstyle"},{level:3,title:"update",slug:"update"},{level:3,title:"updateElement",slug:"updateelement"},{level:3,title:"updateElements",slug:"updateelements"},{level:3,title:"updateIndex",slug:"updateindex"},{level:3,title:"updateRangeFromParsed",slug:"updaterangefromparsed"},{level:3,title:"updateSharedOptions",slug:"updatesharedoptions"}],content:' Interface: PolarAreaController \n Hierarchy \n \n \n DoughnutController \n ↳  PolarAreaController \n Properties \n _cachedMeta \n •  Readonly   _cachedMeta :  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Inherited from \n DoughnutController._cachedMeta \n Defined in \n index.esm.d.ts:583 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Inherited from \n DoughnutController.chart \n Defined in \n index.esm.d.ts:581 \n enableOptionSharing \n •  enableOptionSharing :  boolean \n Inherited from \n DoughnutController.enableOptionSharing \n Defined in \n index.esm.d.ts:584 \n index \n •  Readonly   index :  number \n Inherited from \n DoughnutController.index \n Defined in \n index.esm.d.ts:582 \n innerRadius \n •  Readonly   innerRadius :  number \n Inherited from \n DoughnutController.innerRadius \n Defined in \n index.esm.d.ts:334 \n offsetX \n •  Readonly   offsetX :  number \n Inherited from \n DoughnutController.offsetX \n Defined in \n index.esm.d.ts:336 \n offsetY \n •  Readonly   offsetY :  number \n Inherited from \n DoughnutController.offsetY \n Defined in \n index.esm.d.ts:337 \n outerRadius \n •  Readonly   outerRadius :  number \n Inherited from \n DoughnutController.outerRadius \n Defined in \n index.esm.d.ts:335 \n supportsDecimation \n •  supportsDecimation :  boolean \n Inherited from \n DoughnutController.supportsDecimation \n Defined in \n index.esm.d.ts:588 \n Methods \n addElements \n ▸  addElements ():  void \n Returns \n void \n Inherited from \n DoughnutController.addElements \n Defined in \n index.esm.d.ts:604 \n applyStack \n ▸  Protected   applyStack ( scale ,  parsed ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n Returns \n number \n Inherited from \n DoughnutController.applyStack \n Defined in \n index.esm.d.ts:640 \n buildOrUpdateElements \n ▸  buildOrUpdateElements ( resetNewElements? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n resetNewElements? \n boolean \n Returns \n void \n Inherited from \n DoughnutController.buildOrUpdateElements \n Defined in \n index.esm.d.ts:605 \n calculateCircumference \n ▸  calculateCircumference ( value ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Inherited from \n DoughnutController.calculateCircumference \n Defined in \n index.esm.d.ts:340 \n calculateTotal \n ▸  calculateTotal ():  number \n Returns \n number \n Inherited from \n DoughnutController.calculateTotal \n Defined in \n index.esm.d.ts:339 \n configure \n ▸  configure ():  void \n Returns \n void \n Inherited from \n DoughnutController.configure \n Defined in \n index.esm.d.ts:602 \n countVisibleElements \n ▸  countVisibleElements ():  number \n Returns \n number \n Defined in \n index.esm.d.ts:386 \n draw \n ▸  draw ():  void \n Returns \n void \n Inherited from \n DoughnutController.draw \n Defined in \n index.esm.d.ts:597 \n getAllParsedValues \n ▸  getAllParsedValues ( scale ):  number [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n Returns \n number [] \n Inherited from \n DoughnutController.getAllParsedValues \n Defined in \n index.esm.d.ts:591 \n getDataset \n ▸  getDataset ():  ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Returns \n ChartDataset <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[]> \n Inherited from \n DoughnutController.getDataset \n Defined in \n index.esm.d.ts:599 \n getLabelAndValue \n ▸  Protected   getLabelAndValue ( index ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n label \n string \n \n \n value \n string \n Inherited from \n DoughnutController.getLabelAndValue \n Defined in \n index.esm.d.ts:592 \n getMaxOverflow \n ▸  Protected   getMaxOverflow ():  number  |  boolean \n Returns \n number  |  boolean \n Inherited from \n DoughnutController.getMaxOverflow \n Defined in \n index.esm.d.ts:596 \n getMeta \n ▸  getMeta ():  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n Inherited from \n DoughnutController.getMeta \n Defined in \n index.esm.d.ts:600 \n getMinMax \n ▸  Protected   getMinMax ( scale ,  canStack? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n canStack? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Inherited from \n DoughnutController.getMinMax \n Defined in \n index.esm.d.ts:647 \n getParsed \n ▸  Protected   getParsed ( index ):  number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData \n Inherited from \n DoughnutController.getParsed \n Defined in \n index.esm.d.ts:639 \n getScaleForId \n ▸  getScaleForId ( scaleID ):  Scale < CoreScaleOptions > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n scaleID \n string \n Returns \n Scale < CoreScaleOptions > \n Inherited from \n DoughnutController.getScaleForId \n Defined in \n index.esm.d.ts:601 \n getSharedOptions \n ▸  Protected   getSharedOptions ( options ):  AnyObject \n Utility for checking if the options are shared and should be animated separately. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n AnyObject \n Returns \n AnyObject \n Inherited from \n DoughnutController.getSharedOptions \n Defined in \n index.esm.d.ts:614 \n getStyle \n ▸  getStyle ( index ,  active ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n active \n boolean \n Returns \n AnyObject \n Inherited from \n DoughnutController.getStyle \n Defined in \n index.esm.d.ts:607 \n includeOptions \n ▸  Protected   includeOptions ( mode ,  sharedOptions ):  boolean \n Utility for determining if  options  should be included in the updated properties \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n sharedOptions \n AnyObject \n Returns \n boolean \n Inherited from \n DoughnutController.includeOptions \n Defined in \n index.esm.d.ts:619 \n initialize \n ▸  initialize ():  void \n Returns \n void \n Inherited from \n DoughnutController.initialize \n Defined in \n index.esm.d.ts:603 \n linkScales \n ▸  linkScales ():  void \n Returns \n void \n Inherited from \n DoughnutController.linkScales \n Defined in \n index.esm.d.ts:590 \n parse \n ▸  parse ( start ,  count ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n start \n number \n \n \n count \n number \n Returns \n void \n Inherited from \n DoughnutController.parse \n Defined in \n index.esm.d.ts:635 \n parseArrayData \n ▸  Protected   parseArrayData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DoughnutController.parseArrayData \n Defined in \n index.esm.d.ts:637 \n parseObjectData \n ▸  Protected   parseObjectData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DoughnutController.parseObjectData \n Defined in \n index.esm.d.ts:638 \n parsePrimitiveData \n ▸  Protected   parsePrimitiveData ( meta ,  data ,  start ,  count ):  AnyObject [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n \n \n data \n AnyObject [] \n \n \n start \n number \n \n \n count \n number \n Returns \n AnyObject [] \n Inherited from \n DoughnutController.parsePrimitiveData \n Defined in \n index.esm.d.ts:636 \n removeHoverStyle \n ▸  removeHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Inherited from \n DoughnutController.removeHoverStyle \n Defined in \n index.esm.d.ts:632 \n reset \n ▸  reset ():  void \n Returns \n void \n Inherited from \n DoughnutController.reset \n Defined in \n index.esm.d.ts:598 \n resolveDataElementOptions \n ▸  Protected   resolveDataElementOptions ( index ,  mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Inherited from \n DoughnutController.resolveDataElementOptions \n Defined in \n index.esm.d.ts:609 \n resolveDatasetElementOptions \n ▸  Protected   resolveDatasetElementOptions ( mode ):  AnyObject \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n AnyObject \n Inherited from \n DoughnutController.resolveDatasetElementOptions \n Defined in \n index.esm.d.ts:608 \n setHoverStyle \n ▸  setHoverStyle ( element ,  datasetIndex ,  index ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n datasetIndex \n number \n \n \n index \n number \n Returns \n void \n Inherited from \n DoughnutController.setHoverStyle \n Defined in \n index.esm.d.ts:633 \n update \n ▸  update ( mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DoughnutController.update \n Defined in \n index.esm.d.ts:594 \n updateElement \n ▸  Protected   updateElement ( element ,  index ,  properties ,  mode ):  void \n Utility for updating an element with new properties, using animations when appropriate. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n element \n Element < AnyObject ,  AnyObject > \n \n \n index \n number \n \n \n properties \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DoughnutController.updateElement \n Defined in \n index.esm.d.ts:625 \n updateElements \n ▸  updateElements ( elements ,  start ,  count ,  mode ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n elements \n Element < AnyObject ,  AnyObject >[] \n \n \n start \n number \n \n \n count \n number \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n Returns \n void \n Inherited from \n DoughnutController.updateElements \n Defined in \n index.esm.d.ts:593 \n updateIndex \n ▸  updateIndex ( datasetIndex ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n datasetIndex \n number \n Returns \n void \n Inherited from \n DoughnutController.updateIndex \n Defined in \n index.esm.d.ts:595 \n updateRangeFromParsed \n ▸  Protected   updateRangeFromParsed ( range ,  scale ,  parsed ,  stack ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n range \n Object \n \n \n range.max \n number \n \n \n range.min \n number \n \n \n scale \n Scale < CoreScaleOptions > \n \n \n parsed \n unknown [] \n \n \n stack \n string  |  boolean \n Returns \n void \n Inherited from \n DoughnutController.updateRangeFromParsed \n Defined in \n index.esm.d.ts:641 \n updateSharedOptions \n ▸  Protected   updateSharedOptions ( sharedOptions ,  mode ,  newOptions ):  void \n Utility to animate the shared options, that are potentially affecting multiple elements. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n sharedOptions \n AnyObject \n \n \n mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n \n \n newOptions \n AnyObject \n Returns \n void \n Inherited from \n DoughnutController.updateSharedOptions \n Defined in \n index.esm.d.ts:631 \n'},{title:"Interface: PolarAreaControllerChartOptions",frontmatter:{},regularPath:"/api/interfaces/PolarAreaControllerChartOptions.html",relativePath:"api/interfaces/PolarAreaControllerChartOptions.md",key:"v-93cee5ba",path:"/api/interfaces/PolarAreaControllerChartOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"startAngle",slug:"startangle"}],content:" Interface: PolarAreaControllerChartOptions \n Properties \n animation \n •  animation :  false  |  DoughnutAnimationOptions \n Defined in \n index.esm.d.ts:382 \n startAngle \n •  startAngle :  number \n Starting angle to draw arcs for the first item in a dataset. In degrees, 0 is at top. \n default  0 \n Defined in \n index.esm.d.ts:380 \n"},{title:"Interface: PolarAreaControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/PolarAreaControllerDatasetOptions.html",relativePath:"api/interfaces/PolarAreaControllerDatasetOptions.md",key:"v-6f194a17",path:"/api/interfaces/PolarAreaControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"angle",slug:"angle"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderAlign",slug:"borderalign"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"circular",slug:"circular"},{level:3,title:"circumference",slug:"circumference"},{level:3,title:"clip",slug:"clip"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverOffset",slug:"hoveroffset"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"offset",slug:"offset"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"spacing",slug:"spacing"},{level:3,title:"stack",slug:"stack"},{level:3,title:"transitions",slug:"transitions"},{level:3,title:"weight",slug:"weight"}],content:' Interface: PolarAreaControllerDatasetOptions \n Hierarchy \n \n \n DoughnutControllerDatasetOptions \n ↳  PolarAreaControllerDatasetOptions \n Properties \n angle \n •  angle :  number \n Arc angle to cover. - for polar only \n default  circumference / (arc count) \n Defined in \n index.esm.d.ts:370 \n animation \n •  animation :  false  |  AnimationSpec < "doughnut" > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n DoughnutControllerDatasetOptions . animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < "doughnut" > \n Inherited from \n DoughnutControllerDatasetOptions . animations \n Defined in \n index.esm.d.ts:1650 \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderAlign \n •  borderAlign :  ScriptableAndArray < "center"  |  "inner" ,  ScriptableContext < "doughnut" >> \n Arc stroke alignment. \n Inherited from \n DoughnutControllerDatasetOptions . borderAlign \n Defined in \n index.esm.d.ts:1732 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . borderColor \n Defined in \n index.esm.d.ts:1695 \n borderJoinStyle \n •  borderJoinStyle :  ScriptableAndArray < CanvasLineJoin ,  ScriptableContext < "doughnut" >> \n Line join style. See MDN. Default is \'round\' when  borderAlign  is \'inner\', else \'bevel\'. \n Inherited from \n DoughnutControllerDatasetOptions . borderJoinStyle \n Defined in \n index.esm.d.ts:1737 \n borderRadius \n •  borderRadius :  ScriptableAndArray < number  |  ArcBorderRadius ,  ScriptableContext < "doughnut" >> \n Sets the border radius for arcs \n default  0 \n Inherited from \n DoughnutControllerDatasetOptions . borderRadius \n Defined in \n index.esm.d.ts:1743 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . borderWidth \n Defined in \n index.esm.d.ts:1694 \n circular \n •  circular :  ScriptableAndArray < boolean ,  ScriptableContext < "doughnut" >> \n If false, Arc will be flat. \n default  true \n Inherited from \n DoughnutControllerDatasetOptions . circular \n Defined in \n index.esm.d.ts:1754 \n circumference \n •  circumference :  number \n Sweep to allow arcs to cover. \n default  360 \n Inherited from \n DoughnutControllerDatasetOptions . circumference \n Defined in \n index.esm.d.ts:250 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n DoughnutControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n DoughnutControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverOffset \n •  hoverOffset :  ScriptableAndArray < number ,  ScriptableContext < "doughnut" >> \n Inherited from \n DoughnutControllerDatasetOptions . hoverOffset \n Defined in \n index.esm.d.ts:1758 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n DoughnutControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n DoughnutControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n DoughnutControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n offset \n •  offset :  number \n Arc offset (in pixels). \n Inherited from \n DoughnutControllerDatasetOptions . offset \n Defined in \n index.esm.d.ts:255 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n DoughnutControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n DoughnutControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n rotation \n •  rotation :  number \n Starting angle to draw this dataset from. \n default  0 \n Inherited from \n DoughnutControllerDatasetOptions . rotation \n Defined in \n index.esm.d.ts:261 \n spacing \n •  spacing :  number \n Similar to the  offset  option, but applies to all arcs. This can be used to to add spaces\nbetween arcs \n default  0 \n Inherited from \n DoughnutControllerDatasetOptions . spacing \n Defined in \n index.esm.d.ts:274 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n DoughnutControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n transitions \n •  transitions :  TransitionsSpec < "doughnut" > \n Inherited from \n DoughnutControllerDatasetOptions . transitions \n Defined in \n index.esm.d.ts:1651 \n weight \n •  weight :  number \n The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values. \n default  1 \n Inherited from \n DoughnutControllerDatasetOptions . weight \n Defined in \n index.esm.d.ts:267 \n'},{title:"Interface: RadarControllerDatasetOptions",frontmatter:{},regularPath:"/api/interfaces/RadarControllerDatasetOptions.html",relativePath:"api/interfaces/RadarControllerDatasetOptions.md",key:"v-067c5bbe",path:"/api/interfaces/RadarControllerDatasetOptions.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderCapStyle",slug:"bordercapstyle"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderDash",slug:"borderdash"},{level:3,title:"borderDashOffset",slug:"borderdashoffset"},{level:3,title:"borderJoinStyle",slug:"borderjoinstyle"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"capBezierPoints",slug:"capbezierpoints"},{level:3,title:"clip",slug:"clip"},{level:3,title:"cubicInterpolationMode",slug:"cubicinterpolationmode"},{level:3,title:"drawActiveElementsOnTop",slug:"drawactiveelementsontop"},{level:3,title:"fill",slug:"fill"},{level:3,title:"hidden",slug:"hidden"},{level:3,title:"hitRadius",slug:"hitradius"},{level:3,title:"hoverBackgroundColor",slug:"hoverbackgroundcolor"},{level:3,title:"hoverBorderCapStyle",slug:"hoverbordercapstyle"},{level:3,title:"hoverBorderColor",slug:"hoverbordercolor"},{level:3,title:"hoverBorderDash",slug:"hoverborderdash"},{level:3,title:"hoverBorderDashOffset",slug:"hoverborderdashoffset"},{level:3,title:"hoverBorderJoinStyle",slug:"hoverborderjoinstyle"},{level:3,title:"hoverBorderWidth",slug:"hoverborderwidth"},{level:3,title:"hoverRadius",slug:"hoverradius"},{level:3,title:"indexAxis",slug:"indexaxis"},{level:3,title:"label",slug:"label"},{level:3,title:"normalized",slug:"normalized"},{level:3,title:"order",slug:"order"},{level:3,title:"parsing",slug:"parsing"},{level:3,title:"pointBackgroundColor",slug:"pointbackgroundcolor"},{level:3,title:"pointBorderColor",slug:"pointbordercolor"},{level:3,title:"pointBorderWidth",slug:"pointborderwidth"},{level:3,title:"pointHitRadius",slug:"pointhitradius"},{level:3,title:"pointHoverBackgroundColor",slug:"pointhoverbackgroundcolor"},{level:3,title:"pointHoverBorderColor",slug:"pointhoverbordercolor"},{level:3,title:"pointHoverBorderWidth",slug:"pointhoverborderwidth"},{level:3,title:"pointHoverRadius",slug:"pointhoverradius"},{level:3,title:"pointRadius",slug:"pointradius"},{level:3,title:"pointRotation",slug:"pointrotation"},{level:3,title:"pointStyle",slug:"pointstyle"},{level:3,title:"radius",slug:"radius"},{level:3,title:"rotation",slug:"rotation"},{level:3,title:"segment",slug:"segment"},{level:3,title:"showLine",slug:"showline"},{level:3,title:"spanGaps",slug:"spangaps"},{level:3,title:"stack",slug:"stack"},{level:3,title:"stepped",slug:"stepped"},{level:3,title:"tension",slug:"tension"},{level:3,title:"transitions",slug:"transitions"},{level:3,title:"xAxisID",slug:"xaxisid"},{level:3,title:"yAxisID",slug:"yaxisid"}],content:' Interface: RadarControllerDatasetOptions \n Hierarchy \n \n \n ControllerDatasetOptions \n \n \n ScriptableAndArrayOptions < PointOptions  &  PointHoverOptions  &  PointPrefixedOptions  &  PointPrefixedHoverOptions ,  ScriptableContext < "radar" >> \n \n \n ScriptableAndArrayOptions < LineOptions  &  LineHoverOptions ,  ScriptableContext < "radar" >> \n \n \n AnimationOptions < "radar" > \n ↳  RadarControllerDatasetOptions \n Properties \n animation \n •  animation :  false  |  AnimationSpec < "radar" > & {  onComplete? : ( event :  AnimationEvent ) =>  void  ;  onProgress? : ( event :  AnimationEvent ) =>  void   } \n Inherited from \n AnimationOptions.animation \n Defined in \n index.esm.d.ts:1640 \n animations \n •  animations :  AnimationsSpec < "radar" > \n Inherited from \n AnimationOptions.animations \n Defined in \n index.esm.d.ts:1650 \n backgroundColor \n •  backgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.backgroundColor \n Defined in \n index.esm.d.ts:1696 \n borderCapStyle \n •  borderCapStyle :  ScriptableAndArray < CanvasLineCap ,  ScriptableContext < "radar" >> \n Line cap style. See MDN. \n default  \'butt\' \n Inherited from \n ScriptableAndArrayOptions.borderCapStyle \n Defined in \n index.esm.d.ts:1779 \n borderColor \n •  borderColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.borderColor \n Defined in \n index.esm.d.ts:1695 \n borderDash \n •  borderDash :  ScriptableAndArray < number [],  ScriptableContext < "radar" >> \n Line dash. See MDN. \n default  [] \n Inherited from \n ScriptableAndArrayOptions.borderDash \n Defined in \n index.esm.d.ts:1784 \n borderDashOffset \n •  borderDashOffset :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Line dash offset. See MDN. \n default  0.0 \n Inherited from \n ScriptableAndArrayOptions.borderDashOffset \n Defined in \n index.esm.d.ts:1789 \n borderJoinStyle \n •  borderJoinStyle :  ScriptableAndArray < CanvasLineJoin ,  ScriptableContext < "radar" >> \n Line join style. See MDN. \n default  \'miter\' \n Inherited from \n ScriptableAndArrayOptions.borderJoinStyle \n Defined in \n index.esm.d.ts:1794 \n borderWidth \n •  borderWidth :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.borderWidth \n Defined in \n index.esm.d.ts:1694 \n capBezierPoints \n •  capBezierPoints :  ScriptableAndArray < boolean ,  ScriptableContext < "radar" >> \n true to keep Bézier control inside the chart, false for no restriction. \n default  true \n Inherited from \n ScriptableAndArrayOptions.capBezierPoints \n Defined in \n index.esm.d.ts:1799 \n clip \n •  clip :  number  |  false  |  ChartArea \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n Inherited from \n ControllerDatasetOptions . clip \n Defined in \n index.esm.d.ts:70 \n cubicInterpolationMode \n •  cubicInterpolationMode :  ScriptableAndArray < "default"  |  "monotone" ,  ScriptableContext < "radar" >> \n Interpolation mode to apply. \n default  \'default\' \n Inherited from \n ScriptableAndArrayOptions.cubicInterpolationMode \n Defined in \n index.esm.d.ts:1804 \n drawActiveElementsOnTop \n •  drawActiveElementsOnTop :  ScriptableAndArray < boolean ,  ScriptableContext < "radar" >> \n Draw the active elements over the other elements of the dataset, \n default  true \n Inherited from \n ScriptableAndArrayOptions.drawActiveElementsOnTop \n Defined in \n index.esm.d.ts:1904 \n fill \n •  fill :  ScriptableAndArray < FillTarget  |  ComplexFillTarget ,  ScriptableContext < "radar" >> \n Both line and radar charts support a fill option on the dataset object which can be used to create area between two datasets or a dataset and a boundary, i.e. the scale origin, start or end \n Inherited from \n ScriptableAndArrayOptions.fill \n Defined in \n index.esm.d.ts:1818 \n hidden \n •  hidden :  boolean \n Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. \n default  false \n Inherited from \n ControllerDatasetOptions . hidden \n Defined in \n index.esm.d.ts:88 \n hitRadius \n •  hitRadius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Extra radius added to point radius for hit detection. \n default  1 \n Inherited from \n ScriptableAndArrayOptions.hitRadius \n Defined in \n index.esm.d.ts:1889 \n hoverBackgroundColor \n •  hoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBackgroundColor \n Defined in \n index.esm.d.ts:1702 \n hoverBorderCapStyle \n •  hoverBorderCapStyle :  ScriptableAndArray < CanvasLineCap ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderCapStyle \n Defined in \n index.esm.d.ts:1836 \n hoverBorderColor \n •  hoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderColor \n Defined in \n index.esm.d.ts:1701 \n hoverBorderDash \n •  hoverBorderDash :  ScriptableAndArray < number [],  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderDash \n Defined in \n index.esm.d.ts:1837 \n hoverBorderDashOffset \n •  hoverBorderDashOffset :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderDashOffset \n Defined in \n index.esm.d.ts:1838 \n hoverBorderJoinStyle \n •  hoverBorderJoinStyle :  ScriptableAndArray < CanvasLineJoin ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderJoinStyle \n Defined in \n index.esm.d.ts:1839 \n hoverBorderWidth \n •  hoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.hoverBorderWidth \n Defined in \n index.esm.d.ts:1700 \n hoverRadius \n •  hoverRadius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Point radius when hovered. \n default  4 \n Inherited from \n ScriptableAndArrayOptions.hoverRadius \n Defined in \n index.esm.d.ts:1912 \n indexAxis \n •  indexAxis :  "x"  |  "y" \n The base axis of the chart. \'x\' for vertical charts and \'y\' for horizontal charts. \n default  \'x\' \n Inherited from \n ControllerDatasetOptions . indexAxis \n Defined in \n index.esm.d.ts:66 \n label \n •  label :  string \n The label for the dataset which appears in the legend and tooltips. \n Inherited from \n ControllerDatasetOptions . label \n Defined in \n index.esm.d.ts:74 \n normalized \n •  normalized :  boolean \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the normalized: true option to let Chart.js know that you have done so. \n Inherited from \n ControllerDatasetOptions . normalized \n Defined in \n index.esm.d.ts:58 \n order \n •  order :  number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n Inherited from \n ControllerDatasetOptions . order \n Defined in \n index.esm.d.ts:78 \n parsing \n •  parsing :  false  | { [key: string]:  string ;  } \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n Inherited from \n ControllerDatasetOptions . parsing \n Defined in \n index.esm.d.ts:49 \n pointBackgroundColor \n •  pointBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n The fill color for points. \n Inherited from \n ScriptableAndArrayOptions.pointBackgroundColor \n Defined in \n index.esm.d.ts:1919 \n pointBorderColor \n •  pointBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n The border color for points. \n Inherited from \n ScriptableAndArrayOptions.pointBorderColor \n Defined in \n index.esm.d.ts:1923 \n pointBorderWidth \n •  pointBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n The width of the point border in pixels. \n Inherited from \n ScriptableAndArrayOptions.pointBorderWidth \n Defined in \n index.esm.d.ts:1927 \n pointHitRadius \n •  pointHitRadius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n The pixel size of the non-displayed point that reacts to mouse events. \n Inherited from \n ScriptableAndArrayOptions.pointHitRadius \n Defined in \n index.esm.d.ts:1931 \n pointHoverBackgroundColor \n •  pointHoverBackgroundColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Point background color when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBackgroundColor \n Defined in \n index.esm.d.ts:1950 \n pointHoverBorderColor \n •  pointHoverBorderColor :  ScriptableAndArray < Color ,  ScriptableContext < "radar" >> \n Point border color when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBorderColor \n Defined in \n index.esm.d.ts:1954 \n pointHoverBorderWidth \n •  pointHoverBorderWidth :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Border width of point when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverBorderWidth \n Defined in \n index.esm.d.ts:1958 \n pointHoverRadius \n •  pointHoverRadius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n The radius of the point when hovered. \n Inherited from \n ScriptableAndArrayOptions.pointHoverRadius \n Defined in \n index.esm.d.ts:1962 \n pointRadius \n •  pointRadius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n The radius of the point shape. If set to 0, the point is not rendered. \n Inherited from \n ScriptableAndArrayOptions.pointRadius \n Defined in \n index.esm.d.ts:1935 \n pointRotation \n •  pointRotation :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n The rotation of the point in degrees. \n Inherited from \n ScriptableAndArrayOptions.pointRotation \n Defined in \n index.esm.d.ts:1939 \n pointStyle \n •  pointStyle :  ScriptableAndArray < PointStyle ,  ScriptableContext < "radar" >> \n Point style \n default  \'circle; \n Inherited from \n ScriptableAndArrayOptions.pointStyle \n Defined in \n index.esm.d.ts:1894 \n radius \n •  radius :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Point radius \n default  3 \n Inherited from \n ScriptableAndArrayOptions.radius \n Defined in \n index.esm.d.ts:1884 \n rotation \n •  rotation :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Point rotation (in degrees). \n default  0 \n Inherited from \n ScriptableAndArrayOptions.rotation \n Defined in \n index.esm.d.ts:1899 \n segment \n •  segment :  ScriptableAndArray <{  backgroundColor :  Scriptable < Color ,  ScriptableLineSegmentContext > ;  borderCapStyle :  Scriptable < CanvasLineCap ,  ScriptableLineSegmentContext > ;  borderColor :  Scriptable < Color ,  ScriptableLineSegmentContext > ;  borderDash :  Scriptable < number [],  ScriptableLineSegmentContext > ;  borderDashOffset :  Scriptable < number ,  ScriptableLineSegmentContext > ;  borderJoinStyle :  Scriptable < CanvasLineJoin ,  ScriptableLineSegmentContext > ;  borderWidth :  Scriptable < number ,  ScriptableLineSegmentContext >  },  ScriptableContext < "radar" >> \n Inherited from \n ScriptableAndArrayOptions.segment \n Defined in \n index.esm.d.ts:1824 \n showLine \n •  showLine :  boolean \n If false, the line is not drawn for this dataset. \n Defined in \n index.esm.d.ts:415 \n spanGaps \n •  spanGaps :  number  |  boolean \n If true, lines will be drawn between points with no or null data. If false, points with NaN data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used. \n Overrides \n ScriptableAndArrayOptions.spanGaps \n Defined in \n index.esm.d.ts:410 \n stack \n •  stack :  string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). \n Inherited from \n ControllerDatasetOptions . stack \n Defined in \n index.esm.d.ts:83 \n stepped \n •  stepped :  ScriptableAndArray < boolean  |  "middle"  |  "before"  |  "after" ,  ScriptableContext < "radar" >> \n true to show the line as a stepped line (tension will be ignored). \n default  false \n Inherited from \n ScriptableAndArrayOptions.stepped \n Defined in \n index.esm.d.ts:1814 \n tension \n •  tension :  ScriptableAndArray < number ,  ScriptableContext < "radar" >> \n Bézier curve tension (0 for no Bézier curves). \n default  0 \n Inherited from \n ScriptableAndArrayOptions.tension \n Defined in \n index.esm.d.ts:1809 \n transitions \n •  transitions :  TransitionsSpec < "radar" > \n Inherited from \n AnimationOptions.transitions \n Defined in \n index.esm.d.ts:1651 \n xAxisID \n •  xAxisID :  string \n The ID of the x axis to plot this dataset on. \n Defined in \n index.esm.d.ts:401 \n yAxisID \n •  yAxisID :  string \n The ID of the y axis to plot this dataset on. \n Defined in \n index.esm.d.ts:405 \n'},{title:"Interface: RadialLinearScale",frontmatter:{},regularPath:"/api/interfaces/RadialLinearScale.html",relativePath:"api/interfaces/RadialLinearScale.md",key:"v-4dd94c65",path:"/api/interfaces/RadialLinearScale.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"axis",slug:"axis"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"chart",slug:"chart"},{level:3,title:"ctx",slug:"ctx"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"height",slug:"height"},{level:3,title:"id",slug:"id"},{level:3,title:"labelRotation",slug:"labelrotation"},{level:3,title:"left",slug:"left"},{level:3,title:"max",slug:"max"},{level:3,title:"maxHeight",slug:"maxheight"},{level:3,title:"maxWidth",slug:"maxwidth"},{level:3,title:"min",slug:"min"},{level:3,title:"options",slug:"options"},{level:3,title:"paddingBottom",slug:"paddingbottom"},{level:3,title:"paddingLeft",slug:"paddingleft"},{level:3,title:"paddingRight",slug:"paddingright"},{level:3,title:"paddingTop",slug:"paddingtop"},{level:3,title:"position",slug:"position"},{level:3,title:"right",slug:"right"},{level:3,title:"ticks",slug:"ticks"},{level:3,title:"top",slug:"top"},{level:3,title:"type",slug:"type"},{level:3,title:"weight",slug:"weight"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterCalculateLabelRotation",slug:"aftercalculatelabelrotation"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterFit",slug:"afterfit"},{level:3,title:"afterSetDimensions",slug:"aftersetdimensions"},{level:3,title:"afterTickToLabelConversion",slug:"afterticktolabelconversion"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeCalculateLabelRotation",slug:"beforecalculatelabelrotation"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeFit",slug:"beforefit"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"beforeSetDimensions",slug:"beforesetdimensions"},{level:3,title:"beforeTickToLabelConversion",slug:"beforeticktolabelconversion"},{level:3,title:"beforeUpdate",slug:"beforeupdate"},{level:3,title:"buildTicks",slug:"buildticks"},{level:3,title:"calculateLabelRotation",slug:"calculatelabelrotation"},{level:3,title:"configure",slug:"configure"},{level:3,title:"determineDataLimits",slug:"determinedatalimits"},{level:3,title:"draw",slug:"draw"},{level:3,title:"drawGrid",slug:"drawgrid"},{level:3,title:"drawLabels",slug:"drawlabels"},{level:3,title:"drawTitle",slug:"drawtitle"},{level:3,title:"fit",slug:"fit"},{level:3,title:"generateTickLabels",slug:"generateticklabels"},{level:3,title:"getBasePixel",slug:"getbasepixel"},{level:3,title:"getBasePosition",slug:"getbaseposition"},{level:3,title:"getBaseValue",slug:"getbasevalue"},{level:3,title:"getDecimalForPixel",slug:"getdecimalforpixel"},{level:3,title:"getDistanceFromCenterForValue",slug:"getdistancefromcenterforvalue"},{level:3,title:"getIndexAngle",slug:"getindexangle"},{level:3,title:"getLabelForValue",slug:"getlabelforvalue"},{level:3,title:"getLabels",slug:"getlabels"},{level:3,title:"getLineWidthForValue",slug:"getlinewidthforvalue"},{level:3,title:"getMatchingVisibleMetas",slug:"getmatchingvisiblemetas"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getPadding",slug:"getpadding"},{level:3,title:"getPixelForDecimal",slug:"getpixelfordecimal"},{level:3,title:"getPixelForTick",slug:"getpixelfortick"},{level:3,title:"getPixelForValue",slug:"getpixelforvalue"},{level:3,title:"getPointLabelPosition",slug:"getpointlabelposition"},{level:3,title:"getPointPosition",slug:"getpointposition"},{level:3,title:"getPointPositionForValue",slug:"getpointpositionforvalue"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getTicks",slug:"getticks"},{level:3,title:"getUserBounds",slug:"getuserbounds"},{level:3,title:"getValueForDistanceFromCenter",slug:"getvaluefordistancefromcenter"},{level:3,title:"getValueForPixel",slug:"getvalueforpixel"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"init",slug:"init"},{level:3,title:"isFullSize",slug:"isfullsize"},{level:3,title:"isHorizontal",slug:"ishorizontal"},{level:3,title:"parse",slug:"parse"},{level:3,title:"setCenterPoint",slug:"setcenterpoint"},{level:3,title:"setDimensions",slug:"setdimensions"},{level:3,title:"tooltipPosition",slug:"tooltipposition"},{level:3,title:"update",slug:"update"}],content:" Interface: RadialLinearScale<O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  RadialLinearScaleOptions  =  RadialLinearScaleOptions \n Hierarchy \n \n \n Scale < O > \n ↳  RadialLinearScale \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Scale . active \n Defined in \n element.d.ts:7 \n axis \n •  axis :  string \n Inherited from \n Scale . axis \n Defined in \n index.esm.d.ts:1239 \n bottom \n •  bottom :  number \n Bottom edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . bottom \n Defined in \n layout.d.ts:41 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Inherited from \n Scale . chart \n Defined in \n index.esm.d.ts:1229 \n ctx \n •  Readonly   ctx :  CanvasRenderingContext2D \n Inherited from \n Scale . ctx \n Defined in \n index.esm.d.ts:1228 \n fullSize \n •  fullSize :  boolean \n if true, and the item is horizontal, then push vertical boxes down \n Inherited from \n Scale . fullSize \n Defined in \n layout.d.ts:17 \n height \n •  height :  number \n Height of item. Must be valid after update() \n Inherited from \n Scale . height \n Defined in \n layout.d.ts:25 \n id \n •  Readonly   id :  string \n Inherited from \n Scale . id \n Defined in \n index.esm.d.ts:1226 \n labelRotation \n •  labelRotation :  number \n Inherited from \n Scale . labelRotation \n Defined in \n index.esm.d.ts:1240 \n left \n •  left :  number \n Left edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . left \n Defined in \n layout.d.ts:29 \n max \n •  max :  number \n Inherited from \n Scale . max \n Defined in \n index.esm.d.ts:1242 \n maxHeight \n •  maxHeight :  number \n Inherited from \n Scale . maxHeight \n Defined in \n index.esm.d.ts:1232 \n maxWidth \n •  maxWidth :  number \n Inherited from \n Scale . maxWidth \n Defined in \n index.esm.d.ts:1231 \n min \n •  min :  number \n Inherited from \n Scale . min \n Defined in \n index.esm.d.ts:1241 \n options \n •  Readonly   options :  O \n Inherited from \n Scale . options \n Defined in \n element.d.ts:8 \n paddingBottom \n •  paddingBottom :  number \n Inherited from \n Scale . paddingBottom \n Defined in \n index.esm.d.ts:1235 \n paddingLeft \n •  paddingLeft :  number \n Inherited from \n Scale . paddingLeft \n Defined in \n index.esm.d.ts:1236 \n paddingRight \n •  paddingRight :  number \n Inherited from \n Scale . paddingRight \n Defined in \n index.esm.d.ts:1237 \n paddingTop \n •  paddingTop :  number \n Inherited from \n Scale . paddingTop \n Defined in \n index.esm.d.ts:1234 \n position \n •  position :  LayoutPosition \n The position of the item in the chart layout. Possible values are \n Inherited from \n Scale . position \n Defined in \n layout.d.ts:9 \n right \n •  right :  number \n Right edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . right \n Defined in \n layout.d.ts:37 \n ticks \n •  ticks :  Tick [] \n Inherited from \n Scale . ticks \n Defined in \n index.esm.d.ts:1243 \n top \n •  top :  number \n Top edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . top \n Defined in \n layout.d.ts:33 \n type \n •  Readonly   type :  string \n Inherited from \n Scale . type \n Defined in \n index.esm.d.ts:1227 \n weight \n •  weight :  number \n The weight used to sort the item. Higher weights are further away from the chart area \n Inherited from \n Scale . weight \n Defined in \n layout.d.ts:13 \n width \n •  width :  number \n Width of item. Must be valid after update() \n Inherited from \n Scale . width \n Defined in \n layout.d.ts:21 \n x \n •  Readonly   x :  number \n Inherited from \n Scale . x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Scale . y \n Defined in \n element.d.ts:6 \n Methods \n afterBuildTicks \n ▸  afterBuildTicks ():  void \n Returns \n void \n Inherited from \n Scale . afterBuildTicks \n Defined in \n index.esm.d.ts:1323 \n afterCalculateLabelRotation \n ▸  afterCalculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . afterCalculateLabelRotation \n Defined in \n index.esm.d.ts:1329 \n afterDataLimits \n ▸  afterDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . afterDataLimits \n Defined in \n index.esm.d.ts:1320 \n afterFit \n ▸  afterFit ():  void \n Returns \n void \n Inherited from \n Scale . afterFit \n Defined in \n index.esm.d.ts:1332 \n afterSetDimensions \n ▸  afterSetDimensions ():  void \n Returns \n void \n Inherited from \n Scale . afterSetDimensions \n Defined in \n index.esm.d.ts:1317 \n afterTickToLabelConversion \n ▸  afterTickToLabelConversion ():  void \n Returns \n void \n Inherited from \n Scale . afterTickToLabelConversion \n Defined in \n index.esm.d.ts:1326 \n afterUpdate \n ▸  afterUpdate ():  void \n Returns \n void \n Inherited from \n Scale . afterUpdate \n Defined in \n index.esm.d.ts:1314 \n beforeBuildTicks \n ▸  beforeBuildTicks ():  void \n Returns \n void \n Inherited from \n Scale . beforeBuildTicks \n Defined in \n index.esm.d.ts:1321 \n beforeCalculateLabelRotation \n ▸  beforeCalculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . beforeCalculateLabelRotation \n Defined in \n index.esm.d.ts:1327 \n beforeDataLimits \n ▸  beforeDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . beforeDataLimits \n Defined in \n index.esm.d.ts:1318 \n beforeFit \n ▸  beforeFit ():  void \n Returns \n void \n Inherited from \n Scale . beforeFit \n Defined in \n index.esm.d.ts:1330 \n beforeLayout \n ▸  Optional   beforeLayout ():  void \n Called before the layout process starts \n Returns \n void \n Inherited from \n Scale . beforeLayout \n Defined in \n layout.d.ts:46 \n beforeSetDimensions \n ▸  beforeSetDimensions ():  void \n Returns \n void \n Inherited from \n Scale . beforeSetDimensions \n Defined in \n index.esm.d.ts:1315 \n beforeTickToLabelConversion \n ▸  beforeTickToLabelConversion ():  void \n Returns \n void \n Inherited from \n Scale . beforeTickToLabelConversion \n Defined in \n index.esm.d.ts:1324 \n beforeUpdate \n ▸  beforeUpdate ():  void \n Returns \n void \n Inherited from \n Scale . beforeUpdate \n Defined in \n index.esm.d.ts:1312 \n buildTicks \n ▸  buildTicks ():  Tick [] \n Returns \n Tick [] \n Inherited from \n Scale . buildTicks \n Defined in \n index.esm.d.ts:1322 \n calculateLabelRotation \n ▸  calculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . calculateLabelRotation \n Defined in \n index.esm.d.ts:1328 \n configure \n ▸  configure ():  void \n Returns \n void \n Inherited from \n Scale . configure \n Defined in \n index.esm.d.ts:1313 \n determineDataLimits \n ▸  determineDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . determineDataLimits \n Defined in \n index.esm.d.ts:1319 \n draw \n ▸  draw ( chartArea ):  void \n Draws the element \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . draw \n Defined in \n layout.d.ts:50 \n drawGrid \n ▸  drawGrid ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawGrid \n Defined in \n index.esm.d.ts:1248 \n drawLabels \n ▸  drawLabels ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawLabels \n Defined in \n index.esm.d.ts:1247 \n drawTitle \n ▸  drawTitle ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawTitle \n Defined in \n index.esm.d.ts:1246 \n fit \n ▸  fit ():  void \n Returns \n void \n Inherited from \n Scale . fit \n Defined in \n index.esm.d.ts:1331 \n generateTickLabels \n ▸  generateTickLabels ( ticks ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ticks \n Tick [] \n Returns \n void \n Inherited from \n Scale . generateTickLabels \n Defined in \n index.esm.d.ts:1325 \n getBasePixel \n ▸  getBasePixel ():  number \n Returns the pixel for the minimum chart value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Returns \n number \n Inherited from \n Scale . getBasePixel \n Defined in \n index.esm.d.ts:1304 \n getBasePosition \n ▸  getBasePosition ( index ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n angle \n number \n \n \n x \n number \n \n \n y \n number \n Defined in \n index.esm.d.ts:3477 \n getBaseValue \n ▸  getBaseValue ():  number \n Returns \n number \n Inherited from \n Scale . getBaseValue \n Defined in \n index.esm.d.ts:1298 \n getDecimalForPixel \n ▸  getDecimalForPixel ( pixel ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Inherited from \n Scale . getDecimalForPixel \n Defined in \n index.esm.d.ts:1254 \n getDistanceFromCenterForValue \n ▸  getDistanceFromCenterForValue ( value ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Defined in \n index.esm.d.ts:3472 \n getIndexAngle \n ▸  getIndexAngle ( index ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number \n Defined in \n index.esm.d.ts:3471 \n getLabelForValue \n ▸  getLabelForValue ( value ):  string \n Used to get the label to display in the tooltip for the given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n string \n Inherited from \n Scale . getLabelForValue \n Defined in \n index.esm.d.ts:1274 \n getLabels \n ▸  getLabels ():  string [] \n Returns \n string [] \n Inherited from \n Scale . getLabels \n Defined in \n index.esm.d.ts:1311 \n getLineWidthForValue \n ▸  getLineWidthForValue ( value ):  number \n Returns the grid line width at given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Inherited from \n Scale . getLineWidthForValue \n Defined in \n index.esm.d.ts:1279 \n getMatchingVisibleMetas \n ▸  getMatchingVisibleMetas ( type? ):  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n type? \n string \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Inherited from \n Scale . getMatchingVisibleMetas \n Defined in \n index.esm.d.ts:1244 \n getMinMax \n ▸  getMinMax ( canStack ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canStack \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Inherited from \n Scale . getMinMax \n Defined in \n index.esm.d.ts:1309 \n getPadding \n ▸  Optional   getPadding ():  ChartArea \n Returns an object with padding on the edges \n Returns \n ChartArea \n Inherited from \n Scale . getPadding \n Defined in \n layout.d.ts:54 \n getPixelForDecimal \n ▸  getPixelForDecimal ( decimal ):  number \n Utility for getting the pixel location of a percentage of scale\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n decimal \n number \n Returns \n number \n Inherited from \n Scale . getPixelForDecimal \n Defined in \n index.esm.d.ts:1261 \n getPixelForTick \n ▸  getPixelForTick ( index ):  number \n Returns the location of the tick at the given index\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number \n Inherited from \n Scale . getPixelForTick \n Defined in \n index.esm.d.ts:1268 \n getPixelForValue \n ▸  getPixelForValue ( value ,  index? ):  number \n Returns the location of the given data point. Value can either be an index or a numerical value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n \n \n index? \n number \n Returns \n number \n Inherited from \n Scale . getPixelForValue \n Defined in \n index.esm.d.ts:1288 \n getPointLabelPosition \n ▸  getPointLabelPosition ( index ):  ChartArea \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n ChartArea \n Defined in \n index.esm.d.ts:3476 \n getPointPosition \n ▸  getPointPosition ( index ,  distanceFromCenter ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n distanceFromCenter \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n angle \n number \n \n \n x \n number \n \n \n y \n number \n Defined in \n index.esm.d.ts:3474 \n getPointPositionForValue \n ▸  getPointPositionForValue ( index ,  value ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n \n \n value \n number \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n angle \n number \n \n \n x \n number \n \n \n y \n number \n Defined in \n index.esm.d.ts:3475 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < unknown ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends  never [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < unknown ,  P [ number ]> \n Inherited from \n Scale . getProps \n Defined in \n element.d.ts:12 \n getTicks \n ▸  getTicks ():  Tick [] \n Returns \n Tick [] \n Inherited from \n Scale . getTicks \n Defined in \n index.esm.d.ts:1310 \n getUserBounds \n ▸  getUserBounds ():  Object \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n maxDefined \n boolean \n \n \n min \n number \n \n \n minDefined \n boolean \n Inherited from \n Scale . getUserBounds \n Defined in \n index.esm.d.ts:1308 \n getValueForDistanceFromCenter \n ▸  getValueForDistanceFromCenter ( distance ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n distance \n number \n Returns \n number \n Defined in \n index.esm.d.ts:3473 \n getValueForPixel \n ▸  getValueForPixel ( pixel ):  number \n Used to get the data value from a given pixel. This is the inverse of getPixelForValue\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Inherited from \n Scale . getValueForPixel \n Defined in \n index.esm.d.ts:1296 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Scale . hasValue \n Defined in \n element.d.ts:11 \n init \n ▸  init ( options ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n O \n Returns \n void \n Inherited from \n Scale . init \n Defined in \n index.esm.d.ts:1306 \n isFullSize \n ▸  isFullSize ():  boolean \n Returns \n boolean \n Inherited from \n Scale . isFullSize \n Defined in \n index.esm.d.ts:1334 \n isHorizontal \n ▸  isHorizontal ():  boolean \n returns true if the layout item is horizontal (ie. top or bottom) \n Returns \n boolean \n Inherited from \n Scale . isHorizontal \n Defined in \n layout.d.ts:58 \n parse \n ▸  parse ( raw ,  index ):  unknown \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n raw \n unknown \n \n \n index \n number \n Returns \n unknown \n Inherited from \n Scale . parse \n Defined in \n index.esm.d.ts:1307 \n setCenterPoint \n ▸  setCenterPoint ( leftMovement ,  rightMovement ,  topMovement ,  bottomMovement ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n leftMovement \n number \n \n \n rightMovement \n number \n \n \n topMovement \n number \n \n \n bottomMovement \n number \n Returns \n void \n Defined in \n index.esm.d.ts:3470 \n setDimensions \n ▸  setDimensions ():  void \n Returns \n void \n Inherited from \n Scale . setDimensions \n Defined in \n index.esm.d.ts:1316 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Scale . tooltipPosition \n Defined in \n element.d.ts:10 \n update \n ▸  update ( width ,  height ,  margins? ):  void \n Takes two parameters: width and height. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width \n number \n \n \n height \n number \n \n \n margins? \n ChartArea \n Returns \n void \n Inherited from \n Scale . update \n Defined in \n layout.d.ts:64 \n"},{title:"Interface: RadialScaleTypeRegistry",frontmatter:{},regularPath:"/api/interfaces/RadialScaleTypeRegistry.html",relativePath:"api/interfaces/RadialScaleTypeRegistry.md",key:"v-d2ac71a6",path:"/api/interfaces/RadialScaleTypeRegistry.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"radialLinear",slug:"radiallinear"}],content:" Interface: RadialScaleTypeRegistry \n Hierarchy \n \n \n RadialScaleTypeRegistry \n ↳  ScaleTypeRegistry \n Properties \n radialLinear \n •  radialLinear :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n RadialLinearScaleOptions \n Defined in \n index.esm.d.ts:3503 \n"},{title:"Interface: Registry",frontmatter:{},regularPath:"/api/interfaces/Registry.html",relativePath:"api/interfaces/Registry.md",key:"v-e03e0436",path:"/api/interfaces/Registry.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"controllers",slug:"controllers"},{level:3,title:"elements",slug:"elements"},{level:3,title:"plugins",slug:"plugins"},{level:3,title:"scales",slug:"scales"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"add",slug:"add"},{level:3,title:"addControllers",slug:"addcontrollers"},{level:3,title:"addElements",slug:"addelements"},{level:3,title:"addPlugins",slug:"addplugins"},{level:3,title:"addScales",slug:"addscales"},{level:3,title:"getController",slug:"getcontroller"},{level:3,title:"getElement",slug:"getelement"},{level:3,title:"getPlugin",slug:"getplugin"},{level:3,title:"getScale",slug:"getscale"},{level:3,title:"remove",slug:"remove"}],content:" Interface: Registry \n Please use the module's default export which provides a singleton instance\nNote: class is exported for typedoc \n Properties \n controllers \n •  Readonly   controllers :  TypedRegistry < DatasetController <keyof  ChartTypeRegistry ,  Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >,  number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData >> \n Defined in \n index.esm.d.ts:1120 \n elements \n •  Readonly   elements :  TypedRegistry < Element < AnyObject ,  AnyObject >> \n Defined in \n index.esm.d.ts:1121 \n plugins \n •  Readonly   plugins :  TypedRegistry < Plugin <keyof  ChartTypeRegistry ,  AnyObject >> \n Defined in \n index.esm.d.ts:1122 \n scales \n •  Readonly   scales :  TypedRegistry < Scale < CoreScaleOptions >> \n Defined in \n index.esm.d.ts:1123 \n Methods \n add \n ▸  add (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1125 \n addControllers \n ▸  addControllers (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1128 \n addElements \n ▸  addElements (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1129 \n addPlugins \n ▸  addPlugins (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1130 \n addScales \n ▸  addScales (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1131 \n getController \n ▸  getController ( id ):  DatasetController <keyof  ChartTypeRegistry ,  Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >,  number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n id \n string \n Returns \n DatasetController <keyof  ChartTypeRegistry ,  Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >,  number  |  BarParsedData  |  CartesianParsedData  |  BubbleParsedData  |  RadialParsedData > \n Defined in \n index.esm.d.ts:1133 \n getElement \n ▸  getElement ( id ):  Element < AnyObject ,  AnyObject > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n id \n string \n Returns \n Element < AnyObject ,  AnyObject > \n Defined in \n index.esm.d.ts:1134 \n getPlugin \n ▸  getPlugin ( id ):  Plugin <keyof  ChartTypeRegistry ,  AnyObject > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n id \n string \n Returns \n Plugin <keyof  ChartTypeRegistry ,  AnyObject > \n Defined in \n index.esm.d.ts:1135 \n getScale \n ▸  getScale ( id ):  Scale < CoreScaleOptions > \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n id \n string \n Returns \n Scale < CoreScaleOptions > \n Defined in \n index.esm.d.ts:1136 \n remove \n ▸  remove (... args ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ...args \n ChartComponentLike [] \n Returns \n void \n Defined in \n index.esm.d.ts:1126 \n"},{title:"Interface: ScaleTypeRegistry",frontmatter:{},regularPath:"/api/interfaces/ScaleTypeRegistry.html",relativePath:"api/interfaces/ScaleTypeRegistry.md",key:"v-7733d2af",path:"/api/interfaces/ScaleTypeRegistry.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"category",slug:"category"},{level:3,title:"linear",slug:"linear"},{level:3,title:"logarithmic",slug:"logarithmic"},{level:3,title:"radialLinear",slug:"radiallinear"},{level:3,title:"time",slug:"time"},{level:3,title:"timeseries",slug:"timeseries"}],content:" Interface: ScaleTypeRegistry \n Hierarchy \n \n \n CartesianScaleTypeRegistry \n \n \n RadialScaleTypeRegistry \n ↳  ScaleTypeRegistry \n Properties \n category \n •  category :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n CategoryScaleOptions \n Inherited from \n CartesianScaleTypeRegistry . category \n Defined in \n index.esm.d.ts:3491 \n linear \n •  linear :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n LinearScaleOptions \n Inherited from \n CartesianScaleTypeRegistry . linear \n Defined in \n index.esm.d.ts:3485 \n logarithmic \n •  logarithmic :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n LogarithmicScaleOptions \n Inherited from \n CartesianScaleTypeRegistry . logarithmic \n Defined in \n index.esm.d.ts:3488 \n radialLinear \n •  radialLinear :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n RadialLinearScaleOptions \n Inherited from \n RadialScaleTypeRegistry . radialLinear \n Defined in \n index.esm.d.ts:3503 \n time \n •  time :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n TimeScaleOptions \n Inherited from \n CartesianScaleTypeRegistry . time \n Defined in \n index.esm.d.ts:3494 \n timeseries \n •  timeseries :  Object \n Type declaration \n \n \n \n Name \n Type \n \n \n \n \n options \n TimeScaleOptions \n Inherited from \n CartesianScaleTypeRegistry . timeseries \n Defined in \n index.esm.d.ts:3497 \n"},{title:"Interface: ScatterDataPoint",frontmatter:{},regularPath:"/api/interfaces/ScatterDataPoint.html",relativePath:"api/interfaces/ScatterDataPoint.md",key:"v-06e8aec5",path:"/api/interfaces/ScatterDataPoint.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"}],content:" Interface: ScatterDataPoint \n Properties \n x \n •  x :  number \n Defined in \n index.esm.d.ts:228 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:229 \n"},{title:"Interface: ScriptableCartesianScaleContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableCartesianScaleContext.html",relativePath:"api/interfaces/ScriptableCartesianScaleContext.md",key:"v-ba437e3e",path:"/api/interfaces/ScriptableCartesianScaleContext.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"scale",slug:"scale"},{level:3,title:"type",slug:"type"}],content:" Interface: ScriptableCartesianScaleContext \n Properties \n scale \n •  scale : keyof  CartesianScaleTypeRegistry \n Defined in \n index.esm.d.ts:3051 \n type \n •  type :  string \n Defined in \n index.esm.d.ts:3052 \n"},{title:"Interface: ScriptableChartContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableChartContext.html",relativePath:"api/interfaces/ScriptableChartContext.md",key:"v-68fa6685",path:"/api/interfaces/ScriptableChartContext.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"type",slug:"type"}],content:" Interface: ScriptableChartContext \n Properties \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:3056 \n type \n •  type :  string \n Defined in \n index.esm.d.ts:3057 \n"},{title:"Interface: ScriptableContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableContext.html",relativePath:"api/interfaces/ScriptableContext.md",key:"v-43b7a846",path:"/api/interfaces/ScriptableContext.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"chart",slug:"chart"},{level:3,title:"dataIndex",slug:"dataindex"},{level:3,title:"dataset",slug:"dataset"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"mode",slug:"mode"},{level:3,title:"parsed",slug:"parsed"},{level:3,title:"raw",slug:"raw"},{level:3,title:"type",slug:"type"}],content:' Interface: ScriptableContext<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n active \n •  active :  boolean \n Defined in \n index.esm.d.ts:19 \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:20 \n dataIndex \n •  dataIndex :  number \n Defined in \n index.esm.d.ts:21 \n dataset \n •  dataset :  UnionToIntersection < ChartDataset < TType ,  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]>>> \n Defined in \n index.esm.d.ts:22 \n datasetIndex \n •  datasetIndex :  number \n Defined in \n index.esm.d.ts:23 \n mode \n •  mode :  string \n Defined in \n index.esm.d.ts:25 \n parsed \n •  parsed :  UnionToIntersection < ParsedDataType < TType >> \n Defined in \n index.esm.d.ts:26 \n raw \n •  raw :  unknown \n Defined in \n index.esm.d.ts:27 \n type \n •  type :  string \n Defined in \n index.esm.d.ts:24 \n'},{title:"Interface: ScriptableLineSegmentContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableLineSegmentContext.html",relativePath:"api/interfaces/ScriptableLineSegmentContext.md",key:"v-23ea0565",path:"/api/interfaces/ScriptableLineSegmentContext.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"p0",slug:"p0"},{level:3,title:"p0DataIndex",slug:"p0dataindex"},{level:3,title:"p1",slug:"p1"},{level:3,title:"p1DataIndex",slug:"p1dataindex"},{level:3,title:"type",slug:"type"}],content:' Interface: ScriptableLineSegmentContext \n Properties \n datasetIndex \n •  datasetIndex :  number \n Defined in \n index.esm.d.ts:36 \n p0 \n •  p0 :  PointElement < PointProps ,  PointOptions > \n Defined in \n index.esm.d.ts:32 \n p0DataIndex \n •  p0DataIndex :  number \n Defined in \n index.esm.d.ts:34 \n p1 \n •  p1 :  PointElement < PointProps ,  PointOptions > \n Defined in \n index.esm.d.ts:33 \n p1DataIndex \n •  p1DataIndex :  number \n Defined in \n index.esm.d.ts:35 \n type \n •  type :  "segment" \n Defined in \n index.esm.d.ts:31 \n'},{title:"Interface: ScriptableScaleContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableScaleContext.html",relativePath:"api/interfaces/ScriptableScaleContext.md",key:"v-5a35b005",path:"/api/interfaces/ScriptableScaleContext.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"index",slug:"index"},{level:3,title:"scale",slug:"scale"},{level:3,title:"tick",slug:"tick"}],content:" Interface: ScriptableScaleContext \n Properties \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:1341 \n index \n •  index :  number \n Defined in \n index.esm.d.ts:1343 \n scale \n •  scale :  Scale < CoreScaleOptions > \n Defined in \n index.esm.d.ts:1342 \n tick \n •  tick :  Tick \n Defined in \n index.esm.d.ts:1344 \n"},{title:"Interface: ScriptableScalePointLabelContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableScalePointLabelContext.html",relativePath:"api/interfaces/ScriptableScalePointLabelContext.md",key:"v-49df9785",path:"/api/interfaces/ScriptableScalePointLabelContext.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"index",slug:"index"},{level:3,title:"label",slug:"label"},{level:3,title:"scale",slug:"scale"},{level:3,title:"type",slug:"type"}],content:" Interface: ScriptableScalePointLabelContext \n Properties \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Defined in \n index.esm.d.ts:1348 \n index \n •  index :  number \n Defined in \n index.esm.d.ts:1350 \n label \n •  label :  string \n Defined in \n index.esm.d.ts:1351 \n scale \n •  scale :  Scale < CoreScaleOptions > \n Defined in \n index.esm.d.ts:1349 \n type \n •  type :  string \n Defined in \n index.esm.d.ts:1352 \n"},{title:"Interface: ScriptableTooltipContext",frontmatter:{},regularPath:"/api/interfaces/ScriptableTooltipContext.html",relativePath:"api/interfaces/ScriptableTooltipContext.md",key:"v-7ee82865",path:"/api/interfaces/ScriptableTooltipContext.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"tooltip",slug:"tooltip"},{level:3,title:"tooltipItems",slug:"tooltipitems"}],content:' Interface: ScriptableTooltipContext<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n chart \n •  chart :  Chart < TType ,  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]>,  unknown > \n Defined in \n index.esm.d.ts:2605 \n tooltip \n •  tooltip :  TooltipModel < TType > \n Defined in \n index.esm.d.ts:2606 \n tooltipItems \n •  tooltipItems :  TooltipItem < TType >[] \n Defined in \n index.esm.d.ts:2607 \n'},{title:"Interface: Segment",frontmatter:{},regularPath:"/api/interfaces/Segment.html",relativePath:"api/interfaces/Segment.md",key:"v-062b988b",path:"/api/interfaces/Segment.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"end",slug:"end"},{level:3,title:"loop",slug:"loop"},{level:3,title:"start",slug:"start"}],content:" Interface: Segment \n Properties \n end \n •  end :  number \n Defined in \n index.esm.d.ts:1707 \n loop \n •  loop :  boolean \n Defined in \n index.esm.d.ts:1708 \n start \n •  start :  number \n Defined in \n index.esm.d.ts:1706 \n"},{title:"Interface: Tick",frontmatter:{},regularPath:"/api/interfaces/Tick.html",relativePath:"api/interfaces/Tick.md",key:"v-b4763136",path:"/api/interfaces/Tick.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"label",slug:"label"},{level:3,title:"major",slug:"major"},{level:3,title:"value",slug:"value"}],content:" Interface: Tick \n Properties \n label \n •  Optional   label :  string  |  string [] \n Defined in \n index.esm.d.ts:1143 \n major \n •  Optional   major :  boolean \n Defined in \n index.esm.d.ts:1144 \n value \n •  value :  number \n Defined in \n index.esm.d.ts:1142 \n"},{title:"Interface: TickOptions",frontmatter:{},regularPath:"/api/interfaces/TickOptions.html",relativePath:"api/interfaces/TickOptions.md",key:"v-4ed8b4ef",path:"/api/interfaces/TickOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"backdropColor",slug:"backdropcolor"},{level:3,title:"backdropPadding",slug:"backdroppadding"},{level:3,title:"color",slug:"color"},{level:3,title:"display",slug:"display"},{level:3,title:"font",slug:"font"},{level:3,title:"major",slug:"major"},{level:3,title:"padding",slug:"padding"},{level:3,title:"showLabelBackdrop",slug:"showlabelbackdrop"},{level:3,title:"textStrokeColor",slug:"textstrokecolor"},{level:3,title:"textStrokeWidth",slug:"textstrokewidth"},{level:3,title:"z",slug:"z"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"callback",slug:"callback"}],content:" Interface: TickOptions \n Properties \n backdropColor \n •  backdropColor :  Scriptable < Color ,  ScriptableScaleContext > \n Color of label backdrops. \n default  'rgba(255, 255, 255, 0.75)' \n Defined in \n index.esm.d.ts:2923 \n backdropPadding \n •  backdropPadding :  number  |  ChartArea \n Padding of tick backdrop. \n default  2 \n Defined in \n index.esm.d.ts:2928 \n color \n •  color :  ScriptableAndArray < Color ,  ScriptableScaleContext > \n Color of tick \n see  Defaults.color \n Defined in \n index.esm.d.ts:2943 \n display \n •  display :  boolean \n If true, show tick labels. \n default  true \n Defined in \n index.esm.d.ts:2938 \n font \n •  font :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableScaleContext > \n see Fonts \n Defined in \n index.esm.d.ts:2947 \n major \n •  major :  Object \n Type declaration \n \n \n \n Name \n Type \n Description \n \n \n \n \n enabled \n boolean \n If true, major ticks are generated. A major tick will affect autoskipping and major will be defined on ticks in the scriptable options context.   default  false \n Defined in \n index.esm.d.ts:2973 \n padding \n •  padding :  number \n Sets the offset of the tick labels from the axis \n Defined in \n index.esm.d.ts:2951 \n showLabelBackdrop \n •  showLabelBackdrop :  Scriptable < boolean ,  ScriptableScaleContext > \n If true, draw a background behind the tick labels. \n default  false \n Defined in \n index.esm.d.ts:2956 \n textStrokeColor \n •  textStrokeColor :  Scriptable < Color ,  ScriptableScaleContext > \n The color of the stroke around the text. \n default  undefined \n Defined in \n index.esm.d.ts:2961 \n textStrokeWidth \n •  textStrokeWidth :  Scriptable < number ,  ScriptableScaleContext > \n Stroke width around the text. \n default  0 \n Defined in \n index.esm.d.ts:2966 \n z \n •  z :  number \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n default  0 \n Defined in \n index.esm.d.ts:2971 \n Methods \n callback \n ▸  callback ( tickValue ,  index ,  ticks ):  string  |  number  |  string [] |  number [] \n Returns the string representation of the tick value as it should be displayed on the chart. See callback. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tickValue \n string  |  number \n \n \n index \n number \n \n \n ticks \n Tick [] \n Returns \n string  |  number  |  string [] |  number [] \n Defined in \n index.esm.d.ts:2933 \n"},{title:"Interface: TimeScale",frontmatter:{},regularPath:"/api/interfaces/TimeScale.html",relativePath:"api/interfaces/TimeScale.md",key:"v-b1a78892",path:"/api/interfaces/TimeScale.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"axis",slug:"axis"},{level:3,title:"bottom",slug:"bottom"},{level:3,title:"chart",slug:"chart"},{level:3,title:"ctx",slug:"ctx"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"height",slug:"height"},{level:3,title:"id",slug:"id"},{level:3,title:"labelRotation",slug:"labelrotation"},{level:3,title:"left",slug:"left"},{level:3,title:"max",slug:"max"},{level:3,title:"maxHeight",slug:"maxheight"},{level:3,title:"maxWidth",slug:"maxwidth"},{level:3,title:"min",slug:"min"},{level:3,title:"options",slug:"options"},{level:3,title:"paddingBottom",slug:"paddingbottom"},{level:3,title:"paddingLeft",slug:"paddingleft"},{level:3,title:"paddingRight",slug:"paddingright"},{level:3,title:"paddingTop",slug:"paddingtop"},{level:3,title:"position",slug:"position"},{level:3,title:"right",slug:"right"},{level:3,title:"ticks",slug:"ticks"},{level:3,title:"top",slug:"top"},{level:3,title:"type",slug:"type"},{level:3,title:"weight",slug:"weight"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterCalculateLabelRotation",slug:"aftercalculatelabelrotation"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterFit",slug:"afterfit"},{level:3,title:"afterSetDimensions",slug:"aftersetdimensions"},{level:3,title:"afterTickToLabelConversion",slug:"afterticktolabelconversion"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeCalculateLabelRotation",slug:"beforecalculatelabelrotation"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeFit",slug:"beforefit"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"beforeSetDimensions",slug:"beforesetdimensions"},{level:3,title:"beforeTickToLabelConversion",slug:"beforeticktolabelconversion"},{level:3,title:"beforeUpdate",slug:"beforeupdate"},{level:3,title:"buildTicks",slug:"buildticks"},{level:3,title:"calculateLabelRotation",slug:"calculatelabelrotation"},{level:3,title:"configure",slug:"configure"},{level:3,title:"determineDataLimits",slug:"determinedatalimits"},{level:3,title:"draw",slug:"draw"},{level:3,title:"drawGrid",slug:"drawgrid"},{level:3,title:"drawLabels",slug:"drawlabels"},{level:3,title:"drawTitle",slug:"drawtitle"},{level:3,title:"fit",slug:"fit"},{level:3,title:"generateTickLabels",slug:"generateticklabels"},{level:3,title:"getBasePixel",slug:"getbasepixel"},{level:3,title:"getBaseValue",slug:"getbasevalue"},{level:3,title:"getDataTimestamps",slug:"getdatatimestamps"},{level:3,title:"getDecimalForPixel",slug:"getdecimalforpixel"},{level:3,title:"getLabelForValue",slug:"getlabelforvalue"},{level:3,title:"getLabelTimestamps",slug:"getlabeltimestamps"},{level:3,title:"getLabels",slug:"getlabels"},{level:3,title:"getLineWidthForValue",slug:"getlinewidthforvalue"},{level:3,title:"getMatchingVisibleMetas",slug:"getmatchingvisiblemetas"},{level:3,title:"getMinMax",slug:"getminmax"},{level:3,title:"getPadding",slug:"getpadding"},{level:3,title:"getPixelForDecimal",slug:"getpixelfordecimal"},{level:3,title:"getPixelForTick",slug:"getpixelfortick"},{level:3,title:"getPixelForValue",slug:"getpixelforvalue"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"getTicks",slug:"getticks"},{level:3,title:"getUserBounds",slug:"getuserbounds"},{level:3,title:"getValueForPixel",slug:"getvalueforpixel"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"init",slug:"init"},{level:3,title:"isFullSize",slug:"isfullsize"},{level:3,title:"isHorizontal",slug:"ishorizontal"},{level:3,title:"normalize",slug:"normalize"},{level:3,title:"parse",slug:"parse"},{level:3,title:"setDimensions",slug:"setdimensions"},{level:3,title:"tooltipPosition",slug:"tooltipposition"},{level:3,title:"update",slug:"update"}],content:" Interface: TimeScale<O> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n O \n extends  TimeScaleOptions  =  TimeScaleOptions \n Hierarchy \n \n \n Scale < O > \n ↳  TimeScale \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Scale . active \n Defined in \n element.d.ts:7 \n axis \n •  axis :  string \n Inherited from \n Scale . axis \n Defined in \n index.esm.d.ts:1239 \n bottom \n •  bottom :  number \n Bottom edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . bottom \n Defined in \n layout.d.ts:41 \n chart \n •  Readonly   chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Inherited from \n Scale . chart \n Defined in \n index.esm.d.ts:1229 \n ctx \n •  Readonly   ctx :  CanvasRenderingContext2D \n Inherited from \n Scale . ctx \n Defined in \n index.esm.d.ts:1228 \n fullSize \n •  fullSize :  boolean \n if true, and the item is horizontal, then push vertical boxes down \n Inherited from \n Scale . fullSize \n Defined in \n layout.d.ts:17 \n height \n •  height :  number \n Height of item. Must be valid after update() \n Inherited from \n Scale . height \n Defined in \n layout.d.ts:25 \n id \n •  Readonly   id :  string \n Inherited from \n Scale . id \n Defined in \n index.esm.d.ts:1226 \n labelRotation \n •  labelRotation :  number \n Inherited from \n Scale . labelRotation \n Defined in \n index.esm.d.ts:1240 \n left \n •  left :  number \n Left edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . left \n Defined in \n layout.d.ts:29 \n max \n •  max :  number \n Inherited from \n Scale . max \n Defined in \n index.esm.d.ts:1242 \n maxHeight \n •  maxHeight :  number \n Inherited from \n Scale . maxHeight \n Defined in \n index.esm.d.ts:1232 \n maxWidth \n •  maxWidth :  number \n Inherited from \n Scale . maxWidth \n Defined in \n index.esm.d.ts:1231 \n min \n •  min :  number \n Inherited from \n Scale . min \n Defined in \n index.esm.d.ts:1241 \n options \n •  Readonly   options :  O \n Inherited from \n Scale . options \n Defined in \n element.d.ts:8 \n paddingBottom \n •  paddingBottom :  number \n Inherited from \n Scale . paddingBottom \n Defined in \n index.esm.d.ts:1235 \n paddingLeft \n •  paddingLeft :  number \n Inherited from \n Scale . paddingLeft \n Defined in \n index.esm.d.ts:1236 \n paddingRight \n •  paddingRight :  number \n Inherited from \n Scale . paddingRight \n Defined in \n index.esm.d.ts:1237 \n paddingTop \n •  paddingTop :  number \n Inherited from \n Scale . paddingTop \n Defined in \n index.esm.d.ts:1234 \n position \n •  position :  LayoutPosition \n The position of the item in the chart layout. Possible values are \n Inherited from \n Scale . position \n Defined in \n layout.d.ts:9 \n right \n •  right :  number \n Right edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . right \n Defined in \n layout.d.ts:37 \n ticks \n •  ticks :  Tick [] \n Inherited from \n Scale . ticks \n Defined in \n index.esm.d.ts:1243 \n top \n •  top :  number \n Top edge of the item. Set by layout system and cannot be used in update \n Inherited from \n Scale . top \n Defined in \n layout.d.ts:33 \n type \n •  Readonly   type :  string \n Inherited from \n Scale . type \n Defined in \n index.esm.d.ts:1227 \n weight \n •  weight :  number \n The weight used to sort the item. Higher weights are further away from the chart area \n Inherited from \n Scale . weight \n Defined in \n layout.d.ts:13 \n width \n •  width :  number \n Width of item. Must be valid after update() \n Inherited from \n Scale . width \n Defined in \n layout.d.ts:21 \n x \n •  Readonly   x :  number \n Inherited from \n Scale . x \n Defined in \n element.d.ts:5 \n y \n •  Readonly   y :  number \n Inherited from \n Scale . y \n Defined in \n element.d.ts:6 \n Methods \n afterBuildTicks \n ▸  afterBuildTicks ():  void \n Returns \n void \n Inherited from \n Scale . afterBuildTicks \n Defined in \n index.esm.d.ts:1323 \n afterCalculateLabelRotation \n ▸  afterCalculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . afterCalculateLabelRotation \n Defined in \n index.esm.d.ts:1329 \n afterDataLimits \n ▸  afterDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . afterDataLimits \n Defined in \n index.esm.d.ts:1320 \n afterFit \n ▸  afterFit ():  void \n Returns \n void \n Inherited from \n Scale . afterFit \n Defined in \n index.esm.d.ts:1332 \n afterSetDimensions \n ▸  afterSetDimensions ():  void \n Returns \n void \n Inherited from \n Scale . afterSetDimensions \n Defined in \n index.esm.d.ts:1317 \n afterTickToLabelConversion \n ▸  afterTickToLabelConversion ():  void \n Returns \n void \n Inherited from \n Scale . afterTickToLabelConversion \n Defined in \n index.esm.d.ts:1326 \n afterUpdate \n ▸  afterUpdate ():  void \n Returns \n void \n Inherited from \n Scale . afterUpdate \n Defined in \n index.esm.d.ts:1314 \n beforeBuildTicks \n ▸  beforeBuildTicks ():  void \n Returns \n void \n Inherited from \n Scale . beforeBuildTicks \n Defined in \n index.esm.d.ts:1321 \n beforeCalculateLabelRotation \n ▸  beforeCalculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . beforeCalculateLabelRotation \n Defined in \n index.esm.d.ts:1327 \n beforeDataLimits \n ▸  beforeDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . beforeDataLimits \n Defined in \n index.esm.d.ts:1318 \n beforeFit \n ▸  beforeFit ():  void \n Returns \n void \n Inherited from \n Scale . beforeFit \n Defined in \n index.esm.d.ts:1330 \n beforeLayout \n ▸  Optional   beforeLayout ():  void \n Called before the layout process starts \n Returns \n void \n Inherited from \n Scale . beforeLayout \n Defined in \n layout.d.ts:46 \n beforeSetDimensions \n ▸  beforeSetDimensions ():  void \n Returns \n void \n Inherited from \n Scale . beforeSetDimensions \n Defined in \n index.esm.d.ts:1315 \n beforeTickToLabelConversion \n ▸  beforeTickToLabelConversion ():  void \n Returns \n void \n Inherited from \n Scale . beforeTickToLabelConversion \n Defined in \n index.esm.d.ts:1324 \n beforeUpdate \n ▸  beforeUpdate ():  void \n Returns \n void \n Inherited from \n Scale . beforeUpdate \n Defined in \n index.esm.d.ts:1312 \n buildTicks \n ▸  buildTicks ():  Tick [] \n Returns \n Tick [] \n Inherited from \n Scale . buildTicks \n Defined in \n index.esm.d.ts:1322 \n calculateLabelRotation \n ▸  calculateLabelRotation ():  void \n Returns \n void \n Inherited from \n Scale . calculateLabelRotation \n Defined in \n index.esm.d.ts:1328 \n configure \n ▸  configure ():  void \n Returns \n void \n Inherited from \n Scale . configure \n Defined in \n index.esm.d.ts:1313 \n determineDataLimits \n ▸  determineDataLimits ():  void \n Returns \n void \n Inherited from \n Scale . determineDataLimits \n Defined in \n index.esm.d.ts:1319 \n draw \n ▸  draw ( chartArea ):  void \n Draws the element \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . draw \n Defined in \n layout.d.ts:50 \n drawGrid \n ▸  drawGrid ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawGrid \n Defined in \n index.esm.d.ts:1248 \n drawLabels \n ▸  drawLabels ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawLabels \n Defined in \n index.esm.d.ts:1247 \n drawTitle \n ▸  drawTitle ( chartArea ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n chartArea \n ChartArea \n Returns \n void \n Inherited from \n Scale . drawTitle \n Defined in \n index.esm.d.ts:1246 \n fit \n ▸  fit ():  void \n Returns \n void \n Inherited from \n Scale . fit \n Defined in \n index.esm.d.ts:1331 \n generateTickLabels \n ▸  generateTickLabels ( ticks ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ticks \n Tick [] \n Returns \n void \n Inherited from \n Scale . generateTickLabels \n Defined in \n index.esm.d.ts:1325 \n getBasePixel \n ▸  getBasePixel ():  number \n Returns the pixel for the minimum chart value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Returns \n number \n Inherited from \n Scale . getBasePixel \n Defined in \n index.esm.d.ts:1304 \n getBaseValue \n ▸  getBaseValue ():  number \n Returns \n number \n Inherited from \n Scale . getBaseValue \n Defined in \n index.esm.d.ts:1298 \n getDataTimestamps \n ▸  getDataTimestamps ():  number [] \n Returns \n number [] \n Defined in \n index.esm.d.ts:3312 \n getDecimalForPixel \n ▸  getDecimalForPixel ( pixel ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Inherited from \n Scale . getDecimalForPixel \n Defined in \n index.esm.d.ts:1254 \n getLabelForValue \n ▸  getLabelForValue ( value ):  string \n Used to get the label to display in the tooltip for the given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n string \n Inherited from \n Scale . getLabelForValue \n Defined in \n index.esm.d.ts:1274 \n getLabelTimestamps \n ▸  getLabelTimestamps ():  string [] \n Returns \n string [] \n Defined in \n index.esm.d.ts:3313 \n getLabels \n ▸  getLabels ():  string [] \n Returns \n string [] \n Inherited from \n Scale . getLabels \n Defined in \n index.esm.d.ts:1311 \n getLineWidthForValue \n ▸  getLineWidthForValue ( value ):  number \n Returns the grid line width at given value \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n Returns \n number \n Inherited from \n Scale . getLineWidthForValue \n Defined in \n index.esm.d.ts:1279 \n getMatchingVisibleMetas \n ▸  getMatchingVisibleMetas ( type? ):  ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n type? \n string \n Returns \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry >[] \n Inherited from \n Scale . getMatchingVisibleMetas \n Defined in \n index.esm.d.ts:1244 \n getMinMax \n ▸  getMinMax ( canStack ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n canStack \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n min \n number \n Inherited from \n Scale . getMinMax \n Defined in \n index.esm.d.ts:1309 \n getPadding \n ▸  Optional   getPadding ():  ChartArea \n Returns an object with padding on the edges \n Returns \n ChartArea \n Inherited from \n Scale . getPadding \n Defined in \n layout.d.ts:54 \n getPixelForDecimal \n ▸  getPixelForDecimal ( decimal ):  number \n Utility for getting the pixel location of a percentage of scale\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n decimal \n number \n Returns \n number \n Inherited from \n Scale . getPixelForDecimal \n Defined in \n index.esm.d.ts:1261 \n getPixelForTick \n ▸  getPixelForTick ( index ):  number \n Returns the location of the tick at the given index\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n index \n number \n Returns \n number \n Inherited from \n Scale . getPixelForTick \n Defined in \n index.esm.d.ts:1268 \n getPixelForValue \n ▸  getPixelForValue ( value ,  index? ):  number \n Returns the location of the given data point. Value can either be an index or a numerical value\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n value \n number \n \n \n index? \n number \n Returns \n number \n Inherited from \n Scale . getPixelForValue \n Defined in \n index.esm.d.ts:1288 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < unknown ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends  never [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < unknown ,  P [ number ]> \n Inherited from \n Scale . getProps \n Defined in \n element.d.ts:12 \n getTicks \n ▸  getTicks ():  Tick [] \n Returns \n Tick [] \n Inherited from \n Scale . getTicks \n Defined in \n index.esm.d.ts:1310 \n getUserBounds \n ▸  getUserBounds ():  Object \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n max \n number \n \n \n maxDefined \n boolean \n \n \n min \n number \n \n \n minDefined \n boolean \n Inherited from \n Scale . getUserBounds \n Defined in \n index.esm.d.ts:1308 \n getValueForPixel \n ▸  getValueForPixel ( pixel ):  number \n Used to get the data value from a given pixel. This is the inverse of getPixelForValue\nThe coordinate (0, 0) is at the upper-left corner of the canvas \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n pixel \n number \n Returns \n number \n Inherited from \n Scale . getValueForPixel \n Defined in \n index.esm.d.ts:1296 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Scale . hasValue \n Defined in \n element.d.ts:11 \n init \n ▸  init ( options ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n options \n O \n Returns \n void \n Inherited from \n Scale . init \n Defined in \n index.esm.d.ts:1306 \n isFullSize \n ▸  isFullSize ():  boolean \n Returns \n boolean \n Inherited from \n Scale . isFullSize \n Defined in \n index.esm.d.ts:1334 \n isHorizontal \n ▸  isHorizontal ():  boolean \n returns true if the layout item is horizontal (ie. top or bottom) \n Returns \n boolean \n Inherited from \n Scale . isHorizontal \n Defined in \n layout.d.ts:58 \n normalize \n ▸  normalize ( values ):  number [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n values \n number [] \n Returns \n number [] \n Defined in \n index.esm.d.ts:3314 \n parse \n ▸  parse ( raw ,  index ):  unknown \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n raw \n unknown \n \n \n index \n number \n Returns \n unknown \n Inherited from \n Scale . parse \n Defined in \n index.esm.d.ts:1307 \n setDimensions \n ▸  setDimensions ():  void \n Returns \n void \n Inherited from \n Scale . setDimensions \n Defined in \n index.esm.d.ts:1316 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Scale . tooltipPosition \n Defined in \n element.d.ts:10 \n update \n ▸  update ( width ,  height ,  margins? ):  void \n Takes two parameters: width and height. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n width \n number \n \n \n height \n number \n \n \n margins? \n ChartArea \n Returns \n void \n Inherited from \n Scale . update \n Defined in \n layout.d.ts:64 \n"},{title:"Interface: TitleOptions",frontmatter:{},regularPath:"/api/interfaces/TitleOptions.html",relativePath:"api/interfaces/TitleOptions.md",key:"v-4ff88985",path:"/api/interfaces/TitleOptions.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"align",slug:"align"},{level:3,title:"color",slug:"color"},{level:3,title:"display",slug:"display"},{level:3,title:"font",slug:"font"},{level:3,title:"fullSize",slug:"fullsize"},{level:3,title:"padding",slug:"padding"},{level:3,title:"position",slug:"position"},{level:3,title:"text",slug:"text"}],content:' Interface: TitleOptions \n Properties \n align \n •  align :  Align \n Alignment of the title. \n default  \'center\' \n Defined in \n index.esm.d.ts:2410 \n color \n •  color :  Color \n Color of text \n see  Defaults.color \n Defined in \n index.esm.d.ts:2425 \n display \n •  display :  boolean \n Is the title shown? \n default  false \n Defined in \n index.esm.d.ts:2415 \n font \n •  font :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableChartContext > \n Defined in \n index.esm.d.ts:2426 \n fullSize \n •  fullSize :  boolean \n Marks that this box should take the full width/height of the canvas (moving other boxes). If set to  false , places the box above/beside the\nchart area \n default  true \n Defined in \n index.esm.d.ts:2433 \n padding \n •  padding :  number  | {  bottom :  number  ;  top :  number   } \n Adds padding above and below the title text if a single number is specified. It is also possible to change top and bottom padding separately. \n Defined in \n index.esm.d.ts:2437 \n position \n •  position :  "left"  |  "right"  |  "bottom"  |  "top" \n Position of title \n default  \'top\' \n Defined in \n index.esm.d.ts:2420 \n text \n •  text :  string  |  string [] \n Title text to display. If specified as an array, text is rendered on multiple lines. \n Defined in \n index.esm.d.ts:2441 \n'},{title:"Interface: Tooltip",frontmatter:{},regularPath:"/api/interfaces/Tooltip.html",relativePath:"api/interfaces/Tooltip.md",key:"v-53991eeb",path:"/api/interfaces/Tooltip.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"id",slug:"id"},{level:3,title:"positioners",slug:"positioners"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBuildTicks",slug:"afterbuildticks"},{level:3,title:"afterDataLimits",slug:"afterdatalimits"},{level:3,title:"afterDatasetDraw",slug:"afterdatasetdraw"},{level:3,title:"afterDatasetUpdate",slug:"afterdatasetupdate"},{level:3,title:"afterDatasetsDraw",slug:"afterdatasetsdraw"},{level:3,title:"afterDatasetsUpdate",slug:"afterdatasetsupdate"},{level:3,title:"afterDestroy",slug:"afterdestroy"},{level:3,title:"afterDraw",slug:"afterdraw"},{level:3,title:"afterEvent",slug:"afterevent"},{level:3,title:"afterInit",slug:"afterinit"},{level:3,title:"afterLayout",slug:"afterlayout"},{level:3,title:"afterRender",slug:"afterrender"},{level:3,title:"afterTooltipDraw",slug:"aftertooltipdraw"},{level:3,title:"afterUpdate",slug:"afterupdate"},{level:3,title:"beforeBuildTicks",slug:"beforebuildticks"},{level:3,title:"beforeDataLimits",slug:"beforedatalimits"},{level:3,title:"beforeDatasetDraw",slug:"beforedatasetdraw"},{level:3,title:"beforeDatasetUpdate",slug:"beforedatasetupdate"},{level:3,title:"beforeDatasetsDraw",slug:"beforedatasetsdraw"},{level:3,title:"beforeDatasetsUpdate",slug:"beforedatasetsupdate"},{level:3,title:"beforeDestroy",slug:"beforedestroy"},{level:3,title:"beforeDraw",slug:"beforedraw"},{level:3,title:"beforeElementsUpdate",slug:"beforeelementsupdate"},{level:3,title:"beforeEvent",slug:"beforeevent"},{level:3,title:"beforeInit",slug:"beforeinit"},{level:3,title:"beforeLayout",slug:"beforelayout"},{level:3,title:"beforeRender",slug:"beforerender"},{level:3,title:"beforeTooltipDraw",slug:"beforetooltipdraw"},{level:3,title:"beforeUpdate",slug:"beforeupdate"},{level:3,title:"destroy",slug:"destroy"},{level:3,title:"install",slug:"install"},{level:3,title:"reset",slug:"reset"},{level:3,title:"resize",slug:"resize"},{level:3,title:"start",slug:"start"},{level:3,title:"stop",slug:"stop"},{level:3,title:"uninstall",slug:"uninstall"}],content:' Interface: Tooltip \n Hierarchy \n \n \n Plugin \n ↳  Tooltip \n Properties \n id \n •  id :  string \n Inherited from \n Plugin . id \n Defined in \n index.esm.d.ts:808 \n positioners \n •  Readonly   positioners :  TooltipPositionerMap \n Defined in \n index.esm.d.ts:2549 \n Methods \n afterBuildTicks \n ▸  Optional   afterBuildTicks ( chart ,  args ,  options ):  void \n desc  Called after scale has build its ticks. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterBuildTicks \n Defined in \n index.esm.d.ts:967 \n afterDataLimits \n ▸  Optional   afterDataLimits ( chart ,  args ,  options ):  void \n desc  Called after scale data limits are calculated. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDataLimits \n Defined in \n index.esm.d.ts:951 \n afterDatasetDraw \n ▸  Optional   afterDatasetDraw ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets at the given  args.index  have been drawn\n(datasets are drawn in the reverse order). Note that this hook will not be called\nif the datasets drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDatasetDraw \n Defined in \n index.esm.d.ts:1049 \n afterDatasetUpdate \n ▸  Optional   afterDatasetUpdate ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets at the given  args.index  has been updated. Note\nthat this hook will not be called if the datasets update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n false \n - \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDatasetUpdate \n Defined in \n index.esm.d.ts:926 \n afterDatasetsDraw \n ▸  Optional   afterDatasetsDraw ( chart ,  args ,  options ,  cancelable ):  void \n desc  Called after the  chart  datasets have been drawn. Note that this hook\nwill not be called if the datasets drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n \n \n cancelable \n false \n - \n Returns \n void \n Inherited from \n Plugin . afterDatasetsDraw \n Defined in \n index.esm.d.ts:1026 \n afterDatasetsUpdate \n ▸  Optional   afterDatasetsUpdate ( chart ,  args ,  options ):  void \n desc  Called after the  chart  datasets have been updated. Note that this hook\nwill not be called if the datasets update has been previously cancelled. \n since  version 2.1.5 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDatasetsUpdate \n Defined in \n index.esm.d.ts:903 \n afterDestroy \n ▸  Optional   afterDestroy ( chart ,  args ,  options ):  void \n Called after the chart has been destroyed. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDestroy \n Defined in \n index.esm.d.ts:1102 \n afterDraw \n ▸  Optional   afterDraw ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been drawn. Note that this hook will not be called\nif the drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterDraw \n Defined in \n index.esm.d.ts:1009 \n afterEvent \n ▸  Optional   afterEvent ( chart ,  args ,  options ):  void \n desc  Called after the  event  has been consumed. Note that this hook\nwill not be called if the  event  has been previously discarded. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n false \n - \n \n \n args.changed? \n boolean \n - \n \n \n args.event \n ChartEvent \n The event object. \n \n \n args.inChartArea \n boolean \n The event position is inside chartArea \n \n \n args.replay \n boolean \n True if this event is replayed from  Chart.update \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterEvent \n Defined in \n index.esm.d.ts:1072 \n afterInit \n ▸  Optional   afterInit ( chart ,  args ,  options ):  void \n desc  Called after  chart  has been initialized and before the first update. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterInit \n Defined in \n index.esm.d.ts:847 \n afterLayout \n ▸  Optional   afterLayout ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been laid out. Note that this hook will not\nbe called if the layout update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterLayout \n Defined in \n index.esm.d.ts:975 \n afterRender \n ▸  Optional   afterRender ( chart ,  args ,  options ):  void \n desc  Called after the  chart  has been fully rendered (and animation completed). Note\nthat this hook will not be called if the rendering has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterRender \n Defined in \n index.esm.d.ts:992 \n afterTooltipDraw \n ▸  Optional   afterTooltipDraw ( chart ,  args ,  options ):  void \n desc  Called after drawing the  tooltip . Note that this hook will not\nbe called if the tooltip drawing has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n TooltipModel <keyof  ChartTypeRegistry > \n The tooltip. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterTooltipDraw \n Defined in \n index.esm.d.ts:2601 \n afterUpdate \n ▸  Optional   afterUpdate ( chart ,  args ,  options ):  void \n desc  Called after  chart  has been updated and before rendering. Note that this\nhook will not be called if the chart update has been previously cancelled. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . afterUpdate \n Defined in \n index.esm.d.ts:866 \n beforeBuildTicks \n ▸  Optional   beforeBuildTicks ( chart ,  args ,  options ):  void \n desc  Called before scale builds its ticks. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . beforeBuildTicks \n Defined in \n index.esm.d.ts:959 \n beforeDataLimits \n ▸  Optional   beforeDataLimits ( chart ,  args ,  options ):  void \n desc  Called before scale data limits are calculated. This hook is called separately for each scale in the chart. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.scale \n Scale < CoreScaleOptions > \n The scale. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . beforeDataLimits \n Defined in \n index.esm.d.ts:943 \n beforeDatasetDraw \n ▸  Optional   beforeDatasetDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  chart  dataset at the given  args.index  (datasets\nare drawn in the reverse order). If any plugin returns  false , the datasets drawing\nis cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Inherited from \n Plugin . beforeDatasetDraw \n Defined in \n index.esm.d.ts:1038 \n beforeDatasetUpdate \n ▸  Optional   beforeDatasetUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating the  chart  dataset at the given  args.index . If any plugin\nreturns  false , the datasets update is cancelled until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.index \n number \n The dataset index. \n \n \n args.meta \n ChartMeta < Element < AnyObject ,  AnyObject >,  Element < AnyObject ,  AnyObject >, keyof  ChartTypeRegistry > \n The dataset metadata. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Inherited from \n Plugin . beforeDatasetUpdate \n Defined in \n index.esm.d.ts:915 \n beforeDatasetsDraw \n ▸  Optional   beforeDatasetsDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  chart  datasets. If any plugin returns  false ,\nthe datasets drawing is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart datasets drawing. \n Inherited from \n Plugin . beforeDatasetsDraw \n Defined in \n index.esm.d.ts:1018 \n beforeDatasetsUpdate \n ▸  Optional   beforeDatasetsUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating the  chart  datasets. If any plugin returns  false ,\nthe datasets update is cancelled until another  update  is triggered. \n since  version 2.1.5 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false to cancel the datasets update. \n Inherited from \n Plugin . beforeDatasetsUpdate \n Defined in \n index.esm.d.ts:893 \n beforeDestroy \n ▸  Optional   beforeDestroy ( chart ,  args ,  options ):  void \n Called before the chart is being destroyed. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . beforeDestroy \n Defined in \n index.esm.d.ts:1087 \n beforeDraw \n ▸  Optional   beforeDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing  chart  at every animation frame. If any plugin returns  false ,\nthe frame drawing is cancelled untilanother  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart drawing. \n Inherited from \n Plugin . beforeDraw \n Defined in \n index.esm.d.ts:1001 \n beforeElementsUpdate \n ▸  Optional   beforeElementsUpdate ( chart ,  args ,  options ):  void \n desc  Called during the update process, before any chart elements have been created.\nThis can be used for data decimation by changing the data array inside a dataset. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . beforeElementsUpdate \n Defined in \n index.esm.d.ts:874 \n beforeEvent \n ▸  Optional   beforeEvent ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before processing the specified  event . If any plugin returns  false ,\nthe event will be discarded. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.event \n ChartEvent \n The event object. \n \n \n args.inChartArea \n boolean \n The event position is inside chartArea \n \n \n args.replay \n boolean \n True if this event is replayed from  Chart.update \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n Inherited from \n Plugin . beforeEvent \n Defined in \n index.esm.d.ts:1060 \n beforeInit \n ▸  Optional   beforeInit ( chart ,  args ,  options ):  void \n desc  Called before initializing  chart . \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . beforeInit \n Defined in \n index.esm.d.ts:840 \n beforeLayout \n ▸  Optional   beforeLayout ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before laying out  chart . If any plugin returns  false ,\nthe layout update is cancelled until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart layout. \n Inherited from \n Plugin . beforeLayout \n Defined in \n index.esm.d.ts:935 \n beforeRender \n ▸  Optional   beforeRender ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before rendering  chart . If any plugin returns  false ,\nthe rendering is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart rendering. \n Inherited from \n Plugin . beforeRender \n Defined in \n index.esm.d.ts:984 \n beforeTooltipDraw \n ▸  Optional   beforeTooltipDraw ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before drawing the  tooltip . If any plugin returns  false ,\nthe tooltip drawing is cancelled until another  render  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.tooltip \n TooltipModel <keyof  ChartTypeRegistry > \n The tooltip. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart tooltip drawing. \n Inherited from \n Plugin . beforeTooltipDraw \n Defined in \n index.esm.d.ts:2592 \n beforeUpdate \n ▸  Optional   beforeUpdate ( chart ,  args ,  options ):  boolean  |  void \n desc  Called before updating  chart . If any plugin returns  false , the update\nis cancelled (and thus subsequent render(s)) until another  update  is triggered. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.cancelable \n true \n - \n \n \n args.mode \n "resize"  |  "reset"  |  "none"  |  "hide"  |  "show"  |  "normal"  |  "active" \n The update mode \n \n \n options \n AnyObject \n The plugin options. \n Returns \n boolean  |  void \n false  to cancel the chart update. \n Inherited from \n Plugin . beforeUpdate \n Defined in \n index.esm.d.ts:857 \n destroy \n ▸  Optional   destroy ( chart ,  args ,  options ):  void \n Called after the chart has been destroyed. \n deprecated  since version 3.7.0 in favour of afterDestroy \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . destroy \n Defined in \n index.esm.d.ts:1095 \n install \n ▸  Optional   install ( chart ,  args ,  options ):  void \n desc  Called when plugin is installed for this chart instance. This hook is also invoked for disabled plugins (options === false). \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . install \n Defined in \n index.esm.d.ts:817 \n reset \n ▸  Optional   reset ( chart ,  args ,  options ):  void \n desc  Called during chart reset \n since  version 3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . reset \n Defined in \n index.esm.d.ts:882 \n resize \n ▸  Optional   resize ( chart ,  args ,  options ):  void \n desc  Called after the chart as been resized. \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n Object \n The call arguments. \n \n \n args.size \n Object \n The new canvas display size (eq. canvas.style width & height). \n \n \n args.size.height \n number \n - \n \n \n args.size.width \n number \n - \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . resize \n Defined in \n index.esm.d.ts:1080 \n start \n ▸  Optional   start ( chart ,  args ,  options ):  void \n desc  Called when a plugin is starting. This happens when chart is created or plugin is enabled. \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . start \n Defined in \n index.esm.d.ts:825 \n stop \n ▸  Optional   stop ( chart ,  args ,  options ):  void \n desc  Called when a plugin stopping. This happens when chart is destroyed or plugin is disabled. \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . stop \n Defined in \n index.esm.d.ts:833 \n uninstall \n ▸  Optional   uninstall ( chart ,  args ,  options ):  void \n Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false). \n since  3.0.0 \n Parameters \n \n \n \n Name \n Type \n Description \n \n \n \n \n chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart instance. \n \n \n args \n EmptyObject \n The call arguments. \n \n \n options \n AnyObject \n The plugin options. \n Returns \n void \n Inherited from \n Plugin . uninstall \n Defined in \n index.esm.d.ts:1110 \n'},{title:"Interface: TooltipItem",frontmatter:{},regularPath:"/api/interfaces/TooltipItem.html",relativePath:"api/interfaces/TooltipItem.md",key:"v-bca459f6",path:"/api/interfaces/TooltipItem.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"chart",slug:"chart"},{level:3,title:"dataIndex",slug:"dataindex"},{level:3,title:"dataset",slug:"dataset"},{level:3,title:"datasetIndex",slug:"datasetindex"},{level:3,title:"element",slug:"element"},{level:3,title:"formattedValue",slug:"formattedvalue"},{level:3,title:"label",slug:"label"},{level:3,title:"parsed",slug:"parsed"},{level:3,title:"raw",slug:"raw"}],content:' Interface: TooltipItem<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Properties \n chart \n •  chart :  Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n The chart the tooltip is being shown on \n Defined in \n index.esm.d.ts:2793 \n dataIndex \n •  dataIndex :  number \n Index of this data item in the dataset \n Defined in \n index.esm.d.ts:2828 \n dataset \n •  dataset :  UnionToIntersection < ChartDataset < TType ,  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]>>> \n The dataset the item comes from \n Defined in \n index.esm.d.ts:2818 \n datasetIndex \n •  datasetIndex :  number \n Index of the dataset the item comes from \n Defined in \n index.esm.d.ts:2823 \n element \n •  element :  Element < AnyObject ,  AnyObject > \n The chart element (point, arc, bar, etc.) for this tooltip item \n Defined in \n index.esm.d.ts:2833 \n formattedValue \n •  formattedValue :  string \n Formatted value for the tooltip \n Defined in \n index.esm.d.ts:2813 \n label \n •  label :  string \n Label for the tooltip \n Defined in \n index.esm.d.ts:2798 \n parsed \n •  parsed :  UnionToIntersection < ParsedDataType < TType >> \n Parsed data values for the given  dataIndex  and  datasetIndex \n Defined in \n index.esm.d.ts:2803 \n raw \n •  raw :  unknown \n Raw data values for the given  dataIndex  and  datasetIndex \n Defined in \n index.esm.d.ts:2808 \n'},{title:"Interface: TooltipOptions",frontmatter:{},regularPath:"/api/interfaces/TooltipOptions.html",relativePath:"api/interfaces/TooltipOptions.md",key:"v-632afde5",path:"/api/interfaces/TooltipOptions.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"animation",slug:"animation"},{level:3,title:"animations",slug:"animations"},{level:3,title:"axis",slug:"axis"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"bodyAlign",slug:"bodyalign"},{level:3,title:"bodyColor",slug:"bodycolor"},{level:3,title:"bodyFont",slug:"bodyfont"},{level:3,title:"bodySpacing",slug:"bodyspacing"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderWidth",slug:"borderwidth"},{level:3,title:"boxHeight",slug:"boxheight"},{level:3,title:"boxPadding",slug:"boxpadding"},{level:3,title:"boxWidth",slug:"boxwidth"},{level:3,title:"callbacks",slug:"callbacks"},{level:3,title:"caretPadding",slug:"caretpadding"},{level:3,title:"caretSize",slug:"caretsize"},{level:3,title:"cornerRadius",slug:"cornerradius"},{level:3,title:"displayColors",slug:"displaycolors"},{level:3,title:"enabled",slug:"enabled"},{level:3,title:"footerAlign",slug:"footeralign"},{level:3,title:"footerColor",slug:"footercolor"},{level:3,title:"footerFont",slug:"footerfont"},{level:3,title:"footerMarginTop",slug:"footermargintop"},{level:3,title:"footerSpacing",slug:"footerspacing"},{level:3,title:"includeInvisible",slug:"includeinvisible"},{level:3,title:"intersect",slug:"intersect"},{level:3,title:"mode",slug:"mode"},{level:3,title:"multiKeyBackground",slug:"multikeybackground"},{level:3,title:"padding",slug:"padding"},{level:3,title:"position",slug:"position"},{level:3,title:"rtl",slug:"rtl"},{level:3,title:"textDirection",slug:"textdirection"},{level:3,title:"titleAlign",slug:"titlealign"},{level:3,title:"titleColor",slug:"titlecolor"},{level:3,title:"titleFont",slug:"titlefont"},{level:3,title:"titleMarginBottom",slug:"titlemarginbottom"},{level:3,title:"titleSpacing",slug:"titlespacing"},{level:3,title:"usePointStyle",slug:"usepointstyle"},{level:3,title:"xAlign",slug:"xalign"},{level:3,title:"yAlign",slug:"yalign"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"external",slug:"external"},{level:3,title:"filter",slug:"filter"},{level:3,title:"itemSort",slug:"itemsort"}],content:" Interface: TooltipOptions<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType  =  ChartType \n Hierarchy \n \n \n CoreInteractionOptions \n ↳  TooltipOptions \n Properties \n animation \n •  animation :  AnimationSpec < TType > \n Defined in \n index.esm.d.ts:2784 \n animations \n •  animations :  AnimationsSpec < TType > \n Defined in \n index.esm.d.ts:2785 \n axis \n •  axis :  InteractionAxis \n Defines which directions are used in calculating distances. Defaults to 'x' for 'index' mode and 'xy' in dataset and 'nearest' modes. \n Inherited from \n CoreInteractionOptions . axis \n Defined in \n index.esm.d.ts:1439 \n backgroundColor \n •  backgroundColor :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Background color of the tooltip. \n default  'rgba(0, 0, 0, 0.8)' \n Defined in \n index.esm.d.ts:2642 \n bodyAlign \n •  bodyAlign :  Scriptable < TextAlign ,  ScriptableTooltipContext < TType >> \n Horizontal alignment of the body text lines. \n default  'left' \n Defined in \n index.esm.d.ts:2692 \n bodyColor \n •  bodyColor :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Color of body \n default  '#fff' \n Defined in \n index.esm.d.ts:2682 \n bodyFont \n •  bodyFont :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableTooltipContext < TType >> \n See Fonts. \n default  {} \n Defined in \n index.esm.d.ts:2687 \n bodySpacing \n •  bodySpacing :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Spacing to add to top and bottom of each tooltip item. \n default  2 \n Defined in \n index.esm.d.ts:2677 \n borderColor \n •  borderColor :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Color of the border. \n default  'rgba(0, 0, 0, 0)' \n Defined in \n index.esm.d.ts:2767 \n borderWidth \n •  borderWidth :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Size of the border. \n default  0 \n Defined in \n index.esm.d.ts:2772 \n boxHeight \n •  boxHeight :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Height of the color box if displayColors is true. \n default  bodyFont.size \n Defined in \n index.esm.d.ts:2757 \n boxPadding \n •  boxPadding :  number \n Padding between the color box and the text. \n default  1 \n Defined in \n index.esm.d.ts:2647 \n boxWidth \n •  boxWidth :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Width of the color box if displayColors is true. \n default  bodyFont.size \n Defined in \n index.esm.d.ts:2752 \n callbacks \n •  callbacks :  TooltipCallbacks < TType ,  TooltipModel < TType >,  TooltipItem < TType >> \n Defined in \n index.esm.d.ts:2786 \n caretPadding \n •  caretPadding :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Extra distance to move the end of the tooltip arrow away from the tooltip point. \n default  2 \n Defined in \n index.esm.d.ts:2727 \n caretSize \n •  caretSize :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Size, in px, of the tooltip arrow. \n default  5 \n Defined in \n index.esm.d.ts:2732 \n cornerRadius \n •  cornerRadius :  Scriptable < number  |  BorderRadius ,  ScriptableTooltipContext < TType >> \n Radius of tooltip corner curves. \n default  6 \n Defined in \n index.esm.d.ts:2737 \n displayColors \n •  displayColors :  Scriptable < boolean ,  ScriptableTooltipContext < TType >> \n If true, color boxes are shown in the tooltip. \n default  true \n Defined in \n index.esm.d.ts:2747 \n enabled \n •  enabled :  Scriptable < boolean ,  ScriptableTooltipContext < TType >> \n Are on-canvas tooltips enabled? \n default  true \n Defined in \n index.esm.d.ts:2615 \n footerAlign \n •  footerAlign :  Scriptable < TextAlign ,  ScriptableTooltipContext < TType >> \n Horizontal alignment of the footer text lines. \n default  'left' \n Defined in \n index.esm.d.ts:2717 \n footerColor \n •  footerColor :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Color of footer \n default  '#fff' \n Defined in \n index.esm.d.ts:2707 \n footerFont \n •  footerFont :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableTooltipContext < TType >> \n See Fonts \n default  {weight: 'bold'} \n Defined in \n index.esm.d.ts:2712 \n footerMarginTop \n •  footerMarginTop :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Margin to add before drawing the footer. \n default  6 \n Defined in \n index.esm.d.ts:2702 \n footerSpacing \n •  footerSpacing :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Spacing to add to top and bottom of each footer line. \n default  2 \n Defined in \n index.esm.d.ts:2697 \n includeInvisible \n •  includeInvisible :  boolean \n if true, the invisible points that are outside of the chart area will also be included when evaluating interactions. \n default  false \n Inherited from \n CoreInteractionOptions . includeInvisible \n Defined in \n index.esm.d.ts:1445 \n intersect \n •  intersect :  boolean \n if true, the hover mode only applies when the mouse position intersects an item on the chart. \n default  true \n Inherited from \n CoreInteractionOptions . intersect \n Defined in \n index.esm.d.ts:1434 \n mode \n •  mode : keyof  InteractionModeMap \n Sets which elements appear in the tooltip. See Interaction Modes for details. \n default  'nearest' \n Inherited from \n CoreInteractionOptions . mode \n Defined in \n index.esm.d.ts:1429 \n multiKeyBackground \n •  multiKeyBackground :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Color to draw behind the colored boxes when multiple items are in the tooltip. \n default  '#fff' \n Defined in \n index.esm.d.ts:2742 \n padding \n •  padding :  Scriptable < number  |  ChartArea ,  ScriptableTooltipContext < TType >> \n Padding to add to the tooltip \n default  6 \n Defined in \n index.esm.d.ts:2722 \n position \n •  position :  Scriptable <keyof  TooltipPositionerMap ,  ScriptableTooltipContext < TType >> \n The mode for positioning the tooltip \n Defined in \n index.esm.d.ts:2623 \n rtl \n •  rtl :  Scriptable < boolean ,  ScriptableTooltipContext < TType >> \n true for rendering the legends from right to left. \n Defined in \n index.esm.d.ts:2776 \n textDirection \n •  textDirection :  Scriptable < string ,  ScriptableTooltipContext < TType >> \n This will force the text direction 'rtl' or 'ltr on the canvas for rendering the tooltips, regardless of the css specified on the canvas \n default  canvas's default \n Defined in \n index.esm.d.ts:2782 \n titleAlign \n •  titleAlign :  Scriptable < TextAlign ,  ScriptableTooltipContext < TType >> \n Horizontal alignment of the title text lines. \n default  'left' \n Defined in \n index.esm.d.ts:2672 \n titleColor \n •  titleColor :  Scriptable < Color ,  ScriptableTooltipContext < TType >> \n Color of title \n default  '#fff' \n Defined in \n index.esm.d.ts:2652 \n titleFont \n •  titleFont :  ScriptableAndScriptableOptions < Partial < FontSpec >,  ScriptableTooltipContext < TType >> \n See Fonts \n default  {weight: 'bold'} \n Defined in \n index.esm.d.ts:2657 \n titleMarginBottom \n •  titleMarginBottom :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Margin to add on bottom of title section. \n default  6 \n Defined in \n index.esm.d.ts:2667 \n titleSpacing \n •  titleSpacing :  Scriptable < number ,  ScriptableTooltipContext < TType >> \n Spacing to add to top and bottom of each title line. \n default  2 \n Defined in \n index.esm.d.ts:2662 \n usePointStyle \n •  usePointStyle :  Scriptable < boolean ,  ScriptableTooltipContext < TType >> \n Use the corresponding point style (from dataset options) instead of color boxes, ex: star, triangle etc. (size is based on the minimum value between boxWidth and boxHeight) \n default  false \n Defined in \n index.esm.d.ts:2762 \n xAlign \n •  xAlign :  Scriptable < TooltipXAlignment ,  ScriptableTooltipContext < TType >> \n Override the tooltip alignment calculations \n Defined in \n index.esm.d.ts:2628 \n yAlign \n •  yAlign :  Scriptable < TooltipYAlignment ,  ScriptableTooltipContext < TType >> \n Defined in \n index.esm.d.ts:2629 \n Methods \n external \n ▸  external ( args ):  void \n See external tooltip section. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n args \n Object \n \n \n args.chart \n Chart <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n \n \n args.tooltip \n TooltipModel < TType > \n Returns \n void \n Defined in \n index.esm.d.ts:2619 \n filter \n ▸  filter ( e ,  index ,  array ,  data ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n e \n TooltipItem < TType > \n \n \n index \n number \n \n \n array \n TooltipItem < TType >[] \n \n \n data \n ChartData <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n boolean \n Defined in \n index.esm.d.ts:2636 \n itemSort \n ▸  itemSort ( a ,  b ,  data ):  number \n Sort tooltip items. \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n a \n TooltipItem < TType > \n \n \n b \n TooltipItem < TType > \n \n \n data \n ChartData <keyof  ChartTypeRegistry , ( number  |  ScatterDataPoint  |  BubbleDataPoint )[],  unknown > \n Returns \n number \n Defined in \n index.esm.d.ts:2634 \n"},{title:"Interface: TooltipModel",frontmatter:{},regularPath:"/api/interfaces/TooltipModel.html",relativePath:"api/interfaces/TooltipModel.md",key:"v-59510185",path:"/api/interfaces/TooltipModel.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Properties",slug:"properties"},{level:3,title:"active",slug:"active"},{level:3,title:"afterBody",slug:"afterbody"},{level:3,title:"beforeBody",slug:"beforebody"},{level:3,title:"body",slug:"body"},{level:3,title:"caretX",slug:"caretx"},{level:3,title:"caretY",slug:"carety"},{level:3,title:"chart",slug:"chart"},{level:3,title:"dataPoints",slug:"datapoints"},{level:3,title:"footer",slug:"footer"},{level:3,title:"height",slug:"height"},{level:3,title:"labelColors",slug:"labelcolors"},{level:3,title:"labelPointStyles",slug:"labelpointstyles"},{level:3,title:"labelTextColors",slug:"labeltextcolors"},{level:3,title:"opacity",slug:"opacity"},{level:3,title:"options",slug:"options"},{level:3,title:"title",slug:"title"},{level:3,title:"width",slug:"width"},{level:3,title:"x",slug:"x"},{level:3,title:"xAlign",slug:"xalign"},{level:3,title:"y",slug:"y"},{level:3,title:"yAlign",slug:"yalign"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"getActiveElements",slug:"getactiveelements"},{level:3,title:"getProps",slug:"getprops"},{level:3,title:"hasValue",slug:"hasvalue"},{level:3,title:"setActiveElements",slug:"setactiveelements"},{level:3,title:"tooltipPosition",slug:"tooltipposition"}],content:' Interface: TooltipModel<TType> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n Hierarchy \n \n \n Element < AnyObject ,  TooltipOptions < TType >> \n ↳  TooltipModel \n Properties \n active \n •  Readonly   active :  boolean \n Inherited from \n Element.active \n Defined in \n element.d.ts:7 \n afterBody \n •  afterBody :  string [] \n Defined in \n index.esm.d.ts:2503 \n beforeBody \n •  beforeBody :  string [] \n Defined in \n index.esm.d.ts:2501 \n body \n •  body : {  after :  string [] ;  before :  string [] ;  lines :  string []  }[] \n Defined in \n index.esm.d.ts:2499 \n caretX \n •  caretX :  number \n Defined in \n index.esm.d.ts:2490 \n caretY \n •  caretY :  number \n Defined in \n index.esm.d.ts:2491 \n chart \n •  Readonly   chart :  Chart < TType ,  DistributiveArray < ChartTypeRegistry [ TType ][ "defaultDataPoint" ]>,  unknown > \n Defined in \n index.esm.d.ts:2475 \n dataPoints \n •  dataPoints :  TooltipItem < TType >[] \n Defined in \n index.esm.d.ts:2478 \n footer \n •  footer :  string [] \n Defined in \n index.esm.d.ts:2511 \n height \n •  height :  number \n Defined in \n index.esm.d.ts:2488 \n labelColors \n •  labelColors :  TooltipLabelStyle [] \n Defined in \n index.esm.d.ts:2514 \n labelPointStyles \n •  labelPointStyles : {  pointStyle :  PointStyle  ;  rotation :  number   }[] \n Defined in \n index.esm.d.ts:2516 \n labelTextColors \n •  labelTextColors :  Color [] \n Defined in \n index.esm.d.ts:2515 \n opacity \n •  opacity :  number \n Defined in \n index.esm.d.ts:2519 \n options \n •  options :  TooltipOptions < TType > \n Overrides \n Element.options \n Defined in \n index.esm.d.ts:2522 \n title \n •  title :  string [] \n Defined in \n index.esm.d.ts:2507 \n width \n •  width :  number \n Defined in \n index.esm.d.ts:2487 \n x \n •  x :  number \n Overrides \n Element.x \n Defined in \n index.esm.d.ts:2485 \n xAlign \n •  xAlign :  TooltipXAlignment \n Defined in \n index.esm.d.ts:2481 \n y \n •  y :  number \n Overrides \n Element.y \n Defined in \n index.esm.d.ts:2486 \n yAlign \n •  yAlign :  TooltipYAlignment \n Defined in \n index.esm.d.ts:2482 \n Methods \n getActiveElements \n ▸  getActiveElements ():  ActiveElement [] \n Returns \n ActiveElement [] \n Defined in \n index.esm.d.ts:2524 \n getProps \n ▸  getProps < P >( props ,  final? ):  Pick < AnyObject ,  P [ number ]> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n P \n extends  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n props \n P \n \n \n final? \n boolean \n Returns \n Pick < AnyObject ,  P [ number ]> \n Inherited from \n Element.getProps \n Defined in \n element.d.ts:12 \n hasValue \n ▸  hasValue ():  boolean \n Returns \n boolean \n Inherited from \n Element.hasValue \n Defined in \n element.d.ts:11 \n setActiveElements \n ▸  setActiveElements ( active ,  eventPosition ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n active \n ActiveDataPoint [] \n \n \n eventPosition \n Point \n Returns \n void \n Defined in \n index.esm.d.ts:2525 \n tooltipPosition \n ▸  tooltipPosition ( useFinalPosition? ):  Point \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Point \n Inherited from \n Element.tooltipPosition \n Defined in \n element.d.ts:10 \n'},{title:"Interface: TooltipPosition",frontmatter:{},regularPath:"/api/interfaces/TooltipPosition.html",relativePath:"api/interfaces/TooltipPosition.md",key:"v-097b8e4e",path:"/api/interfaces/TooltipPosition.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"x",slug:"x"},{level:3,title:"xAlign",slug:"xalign"},{level:3,title:"y",slug:"y"},{level:3,title:"yAlign",slug:"yalign"}],content:" Interface: TooltipPosition \n Properties \n x \n •  x :  number \n Defined in \n index.esm.d.ts:2529 \n xAlign \n •  Optional   xAlign :  TooltipXAlignment \n Defined in \n index.esm.d.ts:2531 \n y \n •  y :  number \n Defined in \n index.esm.d.ts:2530 \n yAlign \n •  Optional   yAlign :  TooltipYAlignment \n Defined in \n index.esm.d.ts:2532 \n"},{title:"Interface: TooltipPositionerMap",frontmatter:{},regularPath:"/api/interfaces/TooltipPositionerMap.html",relativePath:"api/interfaces/TooltipPositionerMap.md",key:"v-54e217b6",path:"/api/interfaces/TooltipPositionerMap.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"average",slug:"average"},{level:3,title:"nearest",slug:"nearest"}],content:" Interface: TooltipPositionerMap \n Properties \n average \n •  average :  TooltipPositionerFunction <keyof  ChartTypeRegistry > \n Defined in \n index.esm.d.ts:2542 \n nearest \n •  nearest :  TooltipPositionerFunction <keyof  ChartTypeRegistry > \n Defined in \n index.esm.d.ts:2543 \n"},{title:"Interface: TypedRegistry",frontmatter:{},regularPath:"/api/interfaces/TypedRegistry.html",relativePath:"api/interfaces/TypedRegistry.md",key:"v-9303bdba",path:"/api/interfaces/TypedRegistry.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"get",slug:"get"},{level:3,title:"register",slug:"register"},{level:3,title:"unregister",slug:"unregister"}],content:" Interface: TypedRegistry<T> \n Type parameters \n \n \n \n Name \n \n \n \n \n T \n Methods \n get \n ▸  get ( id ):  T \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n id \n string \n Returns \n T \n Defined in \n index.esm.d.ts:1389 \n register \n ▸  register ( item ):  string \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n item \n ChartComponent \n Returns \n string \n The scope where items defaults were registered to. \n Defined in \n index.esm.d.ts:1388 \n unregister \n ▸  unregister ( item ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n item \n ChartComponent \n Returns \n void \n Defined in \n index.esm.d.ts:1390 \n"},{title:"Interface: VisualElement",frontmatter:{},regularPath:"/api/interfaces/VisualElement.html",relativePath:"api/interfaces/VisualElement.md",key:"v-73ff348e",path:"/api/interfaces/VisualElement.html",headers:[{level:2,title:"Hierarchy",slug:"hierarchy"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"draw",slug:"draw"},{level:3,title:"getCenterPoint",slug:"getcenterpoint"},{level:3,title:"getRange",slug:"getrange"},{level:3,title:"inRange",slug:"inrange"},{level:3,title:"inXRange",slug:"inxrange"},{level:3,title:"inYRange",slug:"inyrange"}],content:' Interface: VisualElement \n Hierarchy \n \n \n VisualElement \n ↳  ArcElement \n ↳  LineElement \n ↳  PointElement \n ↳  BarElement \n Methods \n draw \n ▸  draw ( ctx ,  area? ):  void \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n ctx \n CanvasRenderingContext2D \n \n \n area? \n ChartArea \n Returns \n void \n Defined in \n index.esm.d.ts:1685 \n getCenterPoint \n ▸  getCenterPoint ( useFinalPosition? ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n useFinalPosition? \n boolean \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n x \n number \n \n \n y \n number \n Defined in \n index.esm.d.ts:1689 \n getRange \n ▸  Optional   getRange ( axis ):  number \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n axis \n "x"  |  "y" \n Returns \n number \n Defined in \n index.esm.d.ts:1690 \n inRange \n ▸  inRange ( mouseX ,  mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Defined in \n index.esm.d.ts:1686 \n inXRange \n ▸  inXRange ( mouseX ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseX \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Defined in \n index.esm.d.ts:1687 \n inYRange \n ▸  inYRange ( mouseY ,  useFinalPosition? ):  boolean \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n mouseY \n number \n \n \n useFinalPosition? \n boolean \n Returns \n boolean \n Defined in \n index.esm.d.ts:1688 \n'},{title:"Common options to all axes",frontmatter:{},regularPath:"/axes/_common.html",relativePath:"axes/_common.md",key:"v-35b8e831",path:"/axes/_common.html",headers:[{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n \n \n \n"},{title:"Common tick options to all axes",frontmatter:{},regularPath:"/axes/_common_ticks.html",relativePath:"axes/_common_ticks.md",key:"v-61db21c3",path:"/axes/_common_ticks.html",headers:[{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n \n \n \n"},{title:"Common options to all cartesian axes",frontmatter:{},regularPath:"/axes/cartesian/_common.html",relativePath:"axes/cartesian/_common.md",key:"v-66a3f9bf",path:"/axes/cartesian/_common.html",headers:[{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n \n \n \n"},{title:"Common tick options to all cartesian axes",frontmatter:{},regularPath:"/axes/cartesian/_common_ticks.html",relativePath:"axes/cartesian/_common_ticks.md",key:"v-7c170851",path:"/axes/cartesian/_common_ticks.html",headers:[{level:3,title:"Common tick options to all cartesian axes",slug:"common-tick-options-to-all-cartesian-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Common tick options to all cartesian axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n align \n string \n 'center' \n The tick alignment along the axis. Can be  'start' ,  'center' ,  'end' , or  'inner' .  inner  alignment means align  start  for first tick and  end  for the last tick of horizontal axis \n \n \n crossAlign \n string \n 'near' \n The tick alignment perpendicular to the axis. Can be  'near' ,  'center' , or  'far' . See  Tick Alignment \n \n \n sampleSize \n number \n ticks.length \n The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length. \n \n \n autoSkip \n boolean \n true \n If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to  maxRotation  before skipping any. Turn  autoSkip  off to show all labels no matter what. \n \n \n autoSkipPadding \n number \n 3 \n Padding between the ticks on the horizontal axis when  autoSkip  is enabled. \n \n \n includeBounds \n boolean \n true \n Should the defined  min  and  max  values be presented as ticks even if they are not \"nice\". \n \n \n labelOffset \n number \n 0 \n Distance in pixels to offset the label from the centre point of the tick (in the x-direction for the x-axis, and the y-direction for the y-axis).  Note: this can cause labels at the edges to be cropped by the edge of the canvas \n \n \n maxRotation \n number \n 50 \n Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary.  Note: Only applicable to horizontal scales. \n \n \n minRotation \n number \n 0 \n Minimum rotation for tick labels.  Note: Only applicable to horizontal scales. \n \n \n mirror \n boolean \n false \n Flips tick labels around axis, displaying the labels inside the chart instead of outside.  Note: Only applicable to vertical scales. \n \n \n padding \n number \n 0 \n Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction. \n \n \n maxTicksLimit \n number \n 11 \n Maximum number of ticks and gridlines to show. \n \n \n \n"},{title:"Cartesian Axes",frontmatter:{},regularPath:"/axes/cartesian/",relativePath:"axes/cartesian/index.md",key:"v-3287dba8",path:"/axes/cartesian/",headers:[{level:2,title:"Visual Components",slug:"visual-components"},{level:3,title:"Border",slug:"border"},{level:3,title:"Grid lines",slug:"grid-lines"},{level:3,title:"Ticks and Tick Marks",slug:"ticks-and-tick-marks"},{level:3,title:"Title",slug:"title"},{level:2,title:"Common Configuration",slug:"common-configuration"},{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:3,title:"Axis Position",slug:"axis-position"},{level:3,title:"Scale Bounds",slug:"scale-bounds"},{level:3,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Common tick options to all cartesian axes",slug:"common-tick-options-to-all-cartesian-axes"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:3,title:"Tick Alignment",slug:"tick-alignment"},{level:3,title:"Axis ID",slug:"axis-id"},{level:2,title:"Creating Multiple Axes",slug:"creating-multiple-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Cartesian Axes \n Axes that follow a cartesian grid are known as 'Cartesian Axes'. Cartesian axes are used for line, bar, and bubble charts. Four cartesian axes are included in Chart.js by default. \n \n linear \n logarithmic \n category \n time \n timeseries \n Visual Components \n A cartesian axis is composed of visual components that can be individually configured. These components are: \n \n border \n grid lines \n tick \n tick mark \n title \n Border \n The axis border is drawn at the edge of the axis, beside the chart area. In the image below, it is drawn in red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data,\n  options: {\n    scales: {\n      x: {\n        grid: {\n          borderColor: 'red'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Grid lines \n The grid lines for an axis are drawn on the chart area. In the image below, they are red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data,\n  options: {\n    scales: {\n      x: {\n        grid: {\n          color: 'red',\n          borderColor: 'grey',\n          tickColor: 'grey'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Ticks and Tick Marks \n Ticks represent data values on the axis that appear as labels. The tick mark is the extension of the grid line from the axis border to the label.\nIn this example, the tick mark is drawn in red while the tick label is drawn in blue. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data,\n  options: {\n    scales: {\n      x: {\n        grid: {\n          tickColor: 'red'\n        },\n        ticks: {\n          color: 'blue',\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Title \n The title component of the axis is used to label the data. In the example below, it is shown in red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data,\n  options: {\n    scales: {\n      x: {\n        title: {\n          color: 'red',\n          display: true,\n          text: 'Month'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Common Configuration \n Note \n These are only the common options supported by all cartesian axes. Please see the specific axis documentation for all the available options for that axis. \n Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Axis Position \n An axis can either be positioned at the edge of the chart, at the center of the chart area, or dynamically with respect to a data value. \n To position the axis at the edge of the chart, set the  position  option to one of:  'top' ,  'left' ,  'bottom' ,  'right' .\nTo position the axis at the center of the chart area, set the  position  option to  'center' . In this mode, either the  axis  option must be specified or the axis ID has to start with the letter 'x' or 'y'. This is so chart.js knows what kind of axis (horizontal or vertical) it is.\nTo position the axis with respect to a data value, set the  position  option to an object such as: \n { \n     x :   - 20 \n } \n \n This will position the axis at a value of -20 on the axis with ID \"x\". For cartesian axes, only 1 axis may be specified. \n Scale Bounds \n The  bounds  property controls the scale boundary strategy (bypassed by  min / max  options). \n \n 'data' : makes sure data are fully visible, labels outside are removed \n 'ticks' : makes sure ticks are fully visible, data outside are truncated \n Tick Configuration \n Note \n These are only the common tick options supported by all cartesian axes. Please see specific axis documentation for all of the available options for that axis. \n Common tick options to all cartesian axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n align \n string \n 'center' \n The tick alignment along the axis. Can be  'start' ,  'center' ,  'end' , or  'inner' .  inner  alignment means align  start  for first tick and  end  for the last tick of horizontal axis \n \n \n crossAlign \n string \n 'near' \n The tick alignment perpendicular to the axis. Can be  'near' ,  'center' , or  'far' . See  Tick Alignment \n \n \n sampleSize \n number \n ticks.length \n The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length. \n \n \n autoSkip \n boolean \n true \n If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to  maxRotation  before skipping any. Turn  autoSkip  off to show all labels no matter what. \n \n \n autoSkipPadding \n number \n 3 \n Padding between the ticks on the horizontal axis when  autoSkip  is enabled. \n \n \n includeBounds \n boolean \n true \n Should the defined  min  and  max  values be presented as ticks even if they are not \"nice\". \n \n \n labelOffset \n number \n 0 \n Distance in pixels to offset the label from the centre point of the tick (in the x-direction for the x-axis, and the y-direction for the y-axis).  Note: this can cause labels at the edges to be cropped by the edge of the canvas \n \n \n maxRotation \n number \n 50 \n Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary.  Note: Only applicable to horizontal scales. \n \n \n minRotation \n number \n 0 \n Minimum rotation for tick labels.  Note: Only applicable to horizontal scales. \n \n \n mirror \n boolean \n false \n Flips tick labels around axis, displaying the labels inside the chart instead of outside.  Note: Only applicable to vertical scales. \n \n \n padding \n number \n 0 \n Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction. \n \n \n maxTicksLimit \n number \n 11 \n Maximum number of ticks and gridlines to show. \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n Tick Alignment \n The alignment of ticks is primarily controlled using two settings on the tick configuration object:  align  and  crossAlign . The  align  setting configures how labels align with the tick mark along the axis direction (i.e. horizontal for a horizontal axis and vertical for a vertical axis). The  crossAlign  setting configures how labels align with the tick mark in the perpendicular direction (i.e. vertical for a horizontal axis and horizontal for a vertical axis). In the example below, the  crossAlign  setting is used to left align the labels on the Y axis. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: [\n      'rgba(255, 99, 132, 0.2)',\n      'rgba(255, 159, 64, 0.2)',\n      'rgba(255, 205, 86, 0.2)',\n      'rgba(75, 192, 192, 0.2)',\n      'rgba(54, 162, 235, 0.2)',\n      'rgba(153, 102, 255, 0.2)',\n      'rgba(201, 203, 207, 0.2)'\n    ],\n    borderColor: [\n      'rgb(255, 99, 132)',\n      'rgb(255, 159, 64)',\n      'rgb(255, 205, 86)',\n      'rgb(75, 192, 192)',\n      'rgb(54, 162, 235)',\n      'rgb(153, 102, 255)',\n      'rgb(201, 203, 207)'\n    ],\n    borderWidth: 1,\n    data: [65, 59, 80, 81, 56, 55, 40],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data,\n  options: {\n    indexAxis: 'y',\n    scales: {\n      y: {\n        ticks: {\n          crossAlign: 'far',\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> Note \n The  crossAlign  setting is only effective when these preconditions are met: \n \n tick rotation is  0 \n axis position is  'top' , ' left' ,  'bottom'  or  'right' \n Axis ID \n The properties  dataset.xAxisID  or  dataset.yAxisID  have to match to  scales  property. This is especially needed if multi-axes charts are used. \n const  myChart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             // This dataset appears on the first axis \n             yAxisID :   'first-y-axis' \n         } ,   { \n             // This dataset appears on the second axis \n             yAxisID :   'second-y-axis' \n         } ] \n     } , \n     options :   { \n         scales :   { \n             'first-y-axis' :   { \n                 type :   'linear' \n             } , \n             'second-y-axis' :   { \n                 type :   'linear' \n             } \n         } \n     } \n } ) ; \n Creating Multiple Axes \n With cartesian axes, it is possible to create multiple X and Y axes. To do so, you can add multiple configuration objects to the  xAxes  and  yAxes  properties. When adding new axes, it is important to ensure that you specify the type of the new axes as default types are  not  used in this case. \n In the example below, we are creating two Y axes. We then use the  yAxisID  property to map the datasets to their correct axes. \n const  myChart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             data :   [ 20 ,   50 ,   100 ,   75 ,   25 ,   0 ] , \n             label :   'Left dataset' , \n\n             // This binds the dataset to the left y axis \n             yAxisID :   'left-y-axis' \n         } ,   { \n             data :   [ 0.1 ,   0.5 ,   1.0 ,   2.0 ,   1.5 ,   0 ] , \n             label :   'Right dataset' , \n\n             // This binds the dataset to the right y axis \n             yAxisID :   'right-y-axis' \n         } ] , \n         labels :   [ 'Jan' ,   'Feb' ,   'Mar' ,   'Apr' ,   'May' ,   'Jun' ] \n     } , \n     options :   { \n         scales :   { \n             'left-y-axis' :   { \n                 type :   'linear' , \n                 position :   'left' \n             } , \n             'right-y-axis' :   { \n                 type :   'linear' , \n                 position :   'right' \n             } \n         } \n     } \n } ) ; \n \n "},{title:"Category Axis",frontmatter:{},regularPath:"/axes/cartesian/category.html",relativePath:"axes/cartesian/category.md",key:"v-f09e3db6",path:"/axes/cartesian/category.html",headers:[{level:2,title:"Category Axis Definition",slug:"category-axis-definition"},{level:2,title:"Configuration Options",slug:"configuration-options"},{level:3,title:"Category Axis specific options",slug:"category-axis-specific-options"},{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Common tick options to all cartesian axes",slug:"common-tick-options-to-all-cartesian-axes"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Min Max Configuration",slug:"min-max-configuration"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Category Axis \n If the global configuration is used, labels are drawn from one of the label arrays included in the chart data. If only  data.labels  is defined, this will be used. If  data.xLabels  is defined and the axis is horizontal, this will be used. Similarly, if  data.yLabels  is defined and the axis is vertical, this property will be used. Using both  xLabels  and  yLabels  together can create a chart that uses strings for both the X and Y axes. \n Specifying any of the settings above defines the x-axis as  type: 'category'  if not defined otherwise. For more fine-grained control of category labels, it is also possible to add  labels  as part of the category axis definition. Doing so does not apply the global defaults. \n Category Axis Definition \n Globally: \n let  chart  =   new   Chart ( ctx ,   { \n     type :   ... \n     data :   { \n         labels :   [ 'January' ,   'February' ,   'March' ,   'April' ,   'May' ,   'June' ] , \n         datasets :   ... \n     } \n } ) ; \n \n As part of axis definition: \n let  chart  =   new   Chart ( ctx ,   { \n     type :   ... \n     data :   ... \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'category' , \n                 labels :   [ 'January' ,   'February' ,   'March' ,   'April' ,   'May' ,   'June' ] \n             } \n         } \n     } \n } ) ; \n Configuration Options \n Category Axis specific options \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Description \n \n \n \n \n min \n string | number \n The minimum item to display.  more... \n \n \n max \n string | number \n The maximum item to display.  more... \n \n \n labels \n string[] | string[][] \n An array of labels to display. When an individual label is an array of strings, each item is rendered on a new line. \n Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Tick Configuration \n Common tick options to all cartesian axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n align \n string \n 'center' \n The tick alignment along the axis. Can be  'start' ,  'center' ,  'end' , or  'inner' .  inner  alignment means align  start  for first tick and  end  for the last tick of horizontal axis \n \n \n crossAlign \n string \n 'near' \n The tick alignment perpendicular to the axis. Can be  'near' ,  'center' , or  'far' . See  Tick Alignment \n \n \n sampleSize \n number \n ticks.length \n The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length. \n \n \n autoSkip \n boolean \n true \n If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to  maxRotation  before skipping any. Turn  autoSkip  off to show all labels no matter what. \n \n \n autoSkipPadding \n number \n 3 \n Padding between the ticks on the horizontal axis when  autoSkip  is enabled. \n \n \n includeBounds \n boolean \n true \n Should the defined  min  and  max  values be presented as ticks even if they are not \"nice\". \n \n \n labelOffset \n number \n 0 \n Distance in pixels to offset the label from the centre point of the tick (in the x-direction for the x-axis, and the y-direction for the y-axis).  Note: this can cause labels at the edges to be cropped by the edge of the canvas \n \n \n maxRotation \n number \n 50 \n Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary.  Note: Only applicable to horizontal scales. \n \n \n minRotation \n number \n 0 \n Minimum rotation for tick labels.  Note: Only applicable to horizontal scales. \n \n \n mirror \n boolean \n false \n Flips tick labels around axis, displaying the labels inside the chart instead of outside.  Note: Only applicable to vertical scales. \n \n \n padding \n number \n 0 \n Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction. \n \n \n maxTicksLimit \n number \n 11 \n Maximum number of ticks and gridlines to show. \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n Min Max Configuration \n For both the  min  and  max  properties, the value must be  string  in the  labels  array or  numeric  value as an index of a label in that array. In the example below, the x axis would only display \"March\" through \"June\". \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             data :   [ 10 ,   20 ,   30 ,   40 ,   50 ,   60 ] \n         } ] , \n         labels :   [ 'January' ,   'February' ,   'March' ,   'April' ,   'May' ,   'June' ] \n     } , \n     options :   { \n         scales :   { \n             x :   { \n                 min :   'March' \n             } \n         } \n     } \n } ) ; \n Internal data format \n Internally category scale uses label indices \n"},{title:"Linear Axis",frontmatter:{},regularPath:"/axes/cartesian/linear.html",relativePath:"axes/cartesian/linear.md",key:"v-7b6f0e85",path:"/axes/cartesian/linear.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"},{level:3,title:"Linear Axis specific options",slug:"linear-axis-specific-options"},{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Linear Axis specific tick options",slug:"linear-axis-specific-tick-options"},{level:3,title:"Common tick options to all cartesian axes",slug:"common-tick-options-to-all-cartesian-axes"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Step Size",slug:"step-size"},{level:2,title:"Grace",slug:"grace"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Axis \n The linear scale is used to chart numerical data. It can be placed on either the x or y-axis. The scatter chart type automatically configures a line chart to use one of these scales for the x-axis. As the name suggests, linear interpolation is used to determine where a value lies on the axis. \n Configuration Options \n Linear Axis specific options \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Description \n \n \n \n \n beginAtZero \n boolean \n if true, scale will include 0 if it is not already included. \n \n \n grace \n number | string \n Percentage (string ending with  % ) or amount (number) for added room in the scale range above and below data.  more... \n Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Tick Configuration \n Linear Axis specific tick options \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n count \n number \n Yes \n undefined \n The number of ticks to generate. If specified, this overrides the automatic generation. \n \n \n format \n object \n Yes \n \n The  Intl.NumberFormat  options used by the default label formatter \n \n \n precision \n number \n Yes \n \n if defined and  stepSize  is not specified, the step size will be rounded to this many decimal places. \n \n \n stepSize \n number \n Yes \n \n User-defined fixed step size for the scale.  more... \n Common tick options to all cartesian axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n align \n string \n 'center' \n The tick alignment along the axis. Can be  'start' ,  'center' ,  'end' , or  'inner' .  inner  alignment means align  start  for first tick and  end  for the last tick of horizontal axis \n \n \n crossAlign \n string \n 'near' \n The tick alignment perpendicular to the axis. Can be  'near' ,  'center' , or  'far' . See  Tick Alignment \n \n \n sampleSize \n number \n ticks.length \n The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length. \n \n \n autoSkip \n boolean \n true \n If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to  maxRotation  before skipping any. Turn  autoSkip  off to show all labels no matter what. \n \n \n autoSkipPadding \n number \n 3 \n Padding between the ticks on the horizontal axis when  autoSkip  is enabled. \n \n \n includeBounds \n boolean \n true \n Should the defined  min  and  max  values be presented as ticks even if they are not \"nice\". \n \n \n labelOffset \n number \n 0 \n Distance in pixels to offset the label from the centre point of the tick (in the x-direction for the x-axis, and the y-direction for the y-axis).  Note: this can cause labels at the edges to be cropped by the edge of the canvas \n \n \n maxRotation \n number \n 50 \n Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary.  Note: Only applicable to horizontal scales. \n \n \n minRotation \n number \n 0 \n Minimum rotation for tick labels.  Note: Only applicable to horizontal scales. \n \n \n mirror \n boolean \n false \n Flips tick labels around axis, displaying the labels inside the chart instead of outside.  Note: Only applicable to vertical scales. \n \n \n padding \n number \n 0 \n Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction. \n \n \n maxTicksLimit \n number \n 11 \n Maximum number of ticks and gridlines to show. \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n Step Size \n If set, the scale ticks will be enumerated by multiple of  stepSize , having one tick per increment. If not set, the ticks are labeled automatically using the nice numbers algorithm. \n This example sets up a chart with a y axis that creates ticks at  0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 . \n let  options  =   { \n     scales :   { \n         y :   { \n             max :   5 , \n             min :   0 , \n             ticks :   { \n                 stepSize :   0.5 \n             } \n         } \n     } \n } ; \n Grace \n If the value is string ending with  % , its treat as percentage. If number, its treat as value.\nThe value is added to the maximum data value and subtracted from the minimum data. This extends the scale range as if the data values were that much greater. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: ['Positive', 'Negative'],\n  datasets: [{\n    data: [100, -50],\n    backgroundColor: 'rgb(255, 99, 132)'\n  }],\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data,\n  options: {\n    scales: {\n      y: {\n        type: 'linear',\n        grace: '5%'\n      }\n    },\n    plugins: {\n      legend: false\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Internal data format \n Internally, the linear scale uses numeric data \n"},{title:"Logarithmic Axis",frontmatter:{},regularPath:"/axes/cartesian/logarithmic.html",relativePath:"axes/cartesian/logarithmic.md",key:"v-250e44d5",path:"/axes/cartesian/logarithmic.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"},{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Logarithmic Axis specific options",slug:"logarithmic-axis-specific-options"},{level:3,title:"Common tick options to all cartesian axes",slug:"common-tick-options-to-all-cartesian-axes"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Logarithmic Axis \n The logarithmic scale is used to chart numerical data. It can be placed on either the x or y-axis. As the name suggests, logarithmic interpolation is used to determine where a value lies on the axis. \n Configuration Options \n Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Tick Configuration \n Logarithmic Axis specific options \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n format \n object \n \n The  Intl.NumberFormat  options used by the default label formatter \n Common tick options to all cartesian axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n align \n string \n 'center' \n The tick alignment along the axis. Can be  'start' ,  'center' ,  'end' , or  'inner' .  inner  alignment means align  start  for first tick and  end  for the last tick of horizontal axis \n \n \n crossAlign \n string \n 'near' \n The tick alignment perpendicular to the axis. Can be  'near' ,  'center' , or  'far' . See  Tick Alignment \n \n \n sampleSize \n number \n ticks.length \n The number of ticks to examine when deciding how many labels will fit. Setting a smaller value will be faster, but may be less accurate when there is large variability in label length. \n \n \n autoSkip \n boolean \n true \n If true, automatically calculates how many labels can be shown and hides labels accordingly. Labels will be rotated up to  maxRotation  before skipping any. Turn  autoSkip  off to show all labels no matter what. \n \n \n autoSkipPadding \n number \n 3 \n Padding between the ticks on the horizontal axis when  autoSkip  is enabled. \n \n \n includeBounds \n boolean \n true \n Should the defined  min  and  max  values be presented as ticks even if they are not \"nice\". \n \n \n labelOffset \n number \n 0 \n Distance in pixels to offset the label from the centre point of the tick (in the x-direction for the x-axis, and the y-direction for the y-axis).  Note: this can cause labels at the edges to be cropped by the edge of the canvas \n \n \n maxRotation \n number \n 50 \n Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary.  Note: Only applicable to horizontal scales. \n \n \n minRotation \n number \n 0 \n Minimum rotation for tick labels.  Note: Only applicable to horizontal scales. \n \n \n mirror \n boolean \n false \n Flips tick labels around axis, displaying the labels inside the chart instead of outside.  Note: Only applicable to vertical scales. \n \n \n padding \n number \n 0 \n Padding between the tick label and the axis. When set on a vertical axis, this applies in the horizontal (X) direction. When set on a horizontal axis, this applies in the vertical (Y) direction. \n \n \n maxTicksLimit \n number \n 11 \n Maximum number of ticks and gridlines to show. \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n Internal data format \n Internally, the logarithmic scale uses numeric data. \n"},{title:"Time Series Axis",frontmatter:{},regularPath:"/axes/cartesian/timeseries.html",relativePath:"axes/cartesian/timeseries.md",key:"v-aecbafb6",path:"/axes/cartesian/timeseries.html",headers:[{level:2,title:"Example",slug:"example"},{level:2,title:"More details",slug:"more-details"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Time Series Axis \n The time series scale extends from the time scale and supports all the same options. However, for the time series scale, each data point is spread equidistant. \n Example \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'timeseries' , \n             } \n         } \n     } \n } ) ; \n More details \n Please see  the time scale documentation  for all other details. \n"},{title:"Time Cartesian Axis",frontmatter:{},regularPath:"/axes/cartesian/time.html",relativePath:"axes/cartesian/time.md",key:"v-47077485",path:"/axes/cartesian/time.html",headers:[{level:2,title:"Date Adapters",slug:"date-adapters"},{level:2,title:"Data Sets",slug:"data-sets"},{level:3,title:"Input Data",slug:"input-data"},{level:3,title:"Date Formats",slug:"date-formats"},{level:2,title:"Configuration Options",slug:"configuration-options"},{level:3,title:"Time Axis specific options",slug:"time-axis-specific-options"},{level:3,title:"Common options to all cartesian axes",slug:"common-options-to-all-cartesian-axes"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Min Max Configuration",slug:"min-max-configuration"},{level:2,title:"Changing the scale type from Time scale to Logarithmic/Linear scale.",slug:"changing-the-scale-type-from-time-scale-to-logarithmic-linear-scale"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Time Cartesian Axis \n The time scale is used to display times and dates. Data are spread according to the amount of time between data points. When building its ticks, it will automatically calculate the most comfortable unit base on the size of the scale. \n Date Adapters \n The time scale  requires  both a date library and a corresponding adapter to be present. Please choose from the  available adapters . \n Data Sets \n Input Data \n See  data structures . \n Date Formats \n When providing data for the time scale, Chart.js uses timestamps defined as milliseconds since the epoch (midnight January 1, 1970, UTC) internally. However, Chart.js also supports all of the formats that your chosen date adapter accepts. You should use timestamps if you'd like to set  parsing: false  for better performance. \n Configuration Options \n Time Axis specific options \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n min \n number | string \n \n The minimum item to display.  more... \n \n \n max \n number | string \n \n The maximum item to display.  more... \n \n \n suggestedMin \n number | string \n \n The minimum item to display if there is no datapoint before it.  more... \n \n \n suggestedMax \n number | string \n \n The maximum item to display if there is no datapoint behind it.  more... \n \n \n adapters.date \n object \n {} \n Options for adapter for external date library if that adapter needs or supports options \n \n \n bounds \n string \n 'data' \n Determines the scale bounds.  more... \n \n \n offsetAfterAutoskip \n boolean \n false \n If true, bar chart offsets are computed with auto skipped ticks. \n \n \n ticks.source \n string \n 'auto' \n How ticks are generated.  more... \n \n \n time.displayFormats \n object \n \n Sets how different time units are displayed.  more... \n \n \n time.isoWeekday \n boolean | number \n false \n If  boolean  and true and the unit is set to 'week', then the first day of the week will be Monday. Otherwise, it will be Sunday. If  number , the index of the first day of the week (0 - Sunday, 6 - Saturday) \n \n \n time.parser \n string | function \n \n Custom parser for dates.  more... \n \n \n time.round \n string \n false \n If defined, dates will be rounded to the start of this unit. See  Time Units  below for the allowed units. \n \n \n time.tooltipFormat \n string \n \n The format string to use for the tooltip. \n \n \n time.unit \n string \n false \n If defined, will force the unit to be a certain type. See  Time Units  section below for details. \n \n \n time.stepSize \n number \n 1 \n The number of units between grid lines. \n \n \n time.minUnit \n string \n 'millisecond' \n The minimum display format to be used for a time unit. \n Common options to all cartesian axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n bounds \n string \n 'ticks' \n Determines the scale bounds.  more... \n \n \n position \n string  |  object \n \n Position of the axis.  more... \n \n \n stack \n string \n \n Stack group. Axes at the same  position  with same  stack  are stacked. \n \n \n stackWeight \n number \n 1 \n Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. \n \n \n axis \n string \n \n Which type of axis this is. Possible values are:  'x' ,  'y' . If not set, this is inferred from the first character of the ID which should be  'x'  or  'y' . \n \n \n offset \n boolean \n false \n If true, extra space is added to the both edges and the axis is scaled to fit into the chart area. This is set to  true  for a bar chart by default. \n \n \n title \n object \n \n Scale title configuration.  more... \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Time Units \n The following time measurements are supported. The names can be passed as strings to the  time.unit  config option to force a certain unit. \n \n 'millisecond' \n 'second' \n 'minute' \n 'hour' \n 'day' \n 'week' \n 'month' \n 'quarter' \n 'year' \n \n For example, to create a chart with a time scale that always displayed units per month, the following config could be used. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'time' , \n                 time :   { \n                     unit :   'month' \n                 } \n             } \n         } \n     } \n } ) ; \n Display Formats \n You may specify a map of display formats with a key for each unit: \n \n millisecond \n second \n minute \n hour \n day \n week \n month \n quarter \n year \n \n The format string used as a value depends on the date adapter you chose to use. \n For example, to set the display format for the  quarter  unit to show the month and year, the following config might be passed to the chart constructor. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'time' , \n                 time :   { \n                     displayFormats :   { \n                         quarter :   'MMM YYYY' \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n Ticks Source \n The  ticks.source  property controls the ticks generation. \n \n 'auto' : generates \"optimal\" ticks based on scale size and time options \n 'data' : generates ticks from data (including labels from data  {x|y}  objects) \n 'labels' : generates ticks from user given  labels  ONLY \n Parser \n If this property is defined as a string, it is interpreted as a custom format to be used by the date adapter to parse the date. \n If this is a function, it must return a type that can be handled by your date adapter's  parse  method. \n Min Max Configuration \n For both the  min  and  max  properties, the value must be  string  that is parsable by your date adapter or a number with the amount of milliseconds that have elapsed since UNIX epoch.\nIn the example below the x axis will start at 7 October 2021. \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             data :   [ { \n                 x :   '2021-11-06 23:39:30' , \n                 y :   50 \n             } ,   { \n                 x :   '2021-11-07 01:00:28' , \n                 y :   60 \n             } ,   { \n                 x :   '2021-11-07 09:00:28' , \n                 y :   20 \n             } ] \n         } ] , \n     } , \n     options :   { \n         scales :   { \n             x :   { \n                 min :   '2021-11-07 00:00:00' , \n             } \n         } \n     } \n } ) ; \n Changing the scale type from Time scale to Logarithmic/Linear scale. \n When changing the scale type from Time scale to Logarithmic/Linear scale, you need to add  bounds: 'ticks'  to the scale options. Changing the  bounds  parameter is necessary because its default value is the  'data'  for the Time scale. \n Initial config: \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'time' , \n             } \n         } \n     } \n } ) ; \n \n Scale update: \n chart . options . scales . x  =   { \n     type :   'logarithmic' , \n     bounds :   'ticks' \n } ; \n Internal data format \n Internally time scale uses milliseconds since epoch \n"},{title:"Labeling Axes",frontmatter:{},regularPath:"/axes/labelling.html",relativePath:"axes/labelling.md",key:"v-7a3da8f1",path:"/axes/labelling.html",headers:[{level:2,title:"Scale Title Configuration",slug:"scale-title-configuration"},{level:2,title:"Creating Custom Tick Formats",slug:"creating-custom-tick-formats"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Labeling Axes \n When creating a chart, you want to tell the viewer what data they are viewing. To do this, you need to label the axis. \n Scale Title Configuration \n Namespace:  options.scales[scaleId].title , it defines options for the scale title. Note that this only applies to cartesian axes. \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n display \n boolean \n false \n If true, display the axis title. \n \n \n align \n string \n 'center' \n Alignment of the axis title. Possible options are  'start' ,  'center'  and  'end' \n \n \n text \n string | string[] \n '' \n The text for the title. (i.e. \"# of People\" or \"Response Choices\"). \n \n \n color \n Color \n Chart.defaults.color \n Color of label. \n \n \n font \n Font \n Chart.defaults.font \n See  Fonts \n \n \n padding \n Padding \n 4 \n Padding to apply around scale labels. Only  top ,  bottom  and  y  are implemented. \n Creating Custom Tick Formats \n It is also common to want to change the tick marks to include information about the data type. For example, adding a dollar sign ('$').\nTo do this, you need to override the  ticks.callback  method in the axis configuration. \n The method receives 3 arguments: \n \n value  - the tick value in the  internal data format  of the associated scale. \n index  - the tick index in the ticks array. \n ticks  - the array containing all of the  tick objects . \n \n The call to the method is scoped to the scale.  this  inside the method is the scale object. \n If the callback returns  null  or  undefined  the associated grid line will be hidden. \n TIP \n The  category axis , which is the default x-axis for line and bar charts, uses the  index  as internal data format. For accessing the label, use  this.getLabelForValue(value) .  API: getLabelForValue \n \n In the following example, every label of the Y-axis would be displayed with a dollar sign at the front. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             y :   { \n                 ticks :   { \n                     // Include a dollar sign in the ticks \n                     callback :   function ( value ,  index ,  ticks )   { \n                         return   '$'   +  value ; \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n \n Keep in mind that overriding  ticks.callback  means that you are responsible for all formatting of the label. Depending on your use case, you may want to call the default formatter and then modify its output. In the example above, that would look like: \n                          // call the default formatter, forwarding `this` \n                         return   '$'   +  Chart . Ticks . formatters . numeric . apply ( this ,   [ value ,  index ,  ticks ] ) ; \n \n Related samples: \n \n Tick configuration sample \n \n"},{title:"Axes",frontmatter:{},regularPath:"/axes/",relativePath:"axes/index.md",key:"v-5ff80d5a",path:"/axes/",headers:[{level:2,title:"Default scales",slug:"default-scales"},{level:2,title:"Common Configuration",slug:"common-configuration"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Axis Range Settings",slug:"axis-range-settings"},{level:2,title:"Stacking",slug:"stacking"},{level:2,title:"Callbacks",slug:"callbacks"},{level:3,title:"Updating Axis Defaults",slug:"updating-axis-defaults"},{level:2,title:"Creating New Axes",slug:"creating-new-axes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Axes \n Axes are an integral part of a chart. They are used to determine how data maps to a pixel value on the chart. In a cartesian chart, there is 1 or more X-axis and 1 or more Y-axis to map points onto the 2-dimensional canvas. These axes are known as  'cartesian axes' . \n In a radial chart, such as a radar chart or a polar area chart, there is a single axis that maps points in the angular and radial directions. These are known as  'radial axes' . \n Scales in Chart.js >v2.0 are significantly more powerful, but also different than those of v1.0. \n \n Multiple X & Y axes are supported. \n A built-in label auto-skip feature detects would-be overlapping ticks and labels and removes every nth label to keep things displaying normally. \n Scale titles are supported. \n New scale types can be extended without writing an entirely new chart type. \n Default scales \n The default  scaleId 's for carterian charts are  'x'  and  'y' . For radial charts:  'r' .\nEach dataset is mapped to a scale for each axis (x, y or r) it requires. The scaleId's that a dataset is mapped to, is determined by the  xAxisID ,  yAxisID  or  rAxisID .\nIf the ID for an axis is not specified, first scale for that axis is used. If no scale for an axis is found, a new scale is created. \n Some examples: \n The following chart will have  'x'  and  'y'  scales: \n let  chart  =   new   Chart ( ctx ,   { \n   type :   'line' \n } ) ; \n \n The following chart will have scales  'x'  and  'myScale' : \n let  chart  =   new   Chart ( ctx ,   { \n   type :   'bar' , \n   data :   { \n     datasets :   [ { \n       data :   [ 1 ,   2 ,   3 ] \n     } ] \n   } , \n   options :   { \n     scales :   { \n       myScale :   { \n         type :   'logarithmic' , \n         position :   'right' ,   // `axis` is determined by the position as `'y'` \n       } \n     } \n   } \n } ) ; \n \n The following chart will have scales  'xAxis'  and  'yAxis' : \n let  chart  =   new   Chart ( ctx ,   { \n   type :   'bar' , \n   data :   { \n     datasets :   [ { \n       yAxisID :   'yAxis' \n     } ] \n   } , \n   options :   { \n     scales :   { \n       xAxis :   { \n         // The axis for this scale is determined from the first letter of the id as `'x'` \n         // It is recommended to specify `position` and / or `axis` explicitly. \n         type :   'time' , \n       } \n     } \n   } \n } ) ; \n \n The following chart will have  'r'  scale: \n let  chart  =   new   Chart ( ctx ,   { \n   type :   'radar' \n } ) ; \n \n The following chart will have  'myScale'  scale: \n let  chart  =   new   Chart ( ctx ,   { \n   type :   'radar' , \n   scales :   { \n     myScale :   { \n       axis :   'r' \n     } \n   } \n } ) ; \n Common Configuration \n Note \n These are only the common options supported by all axes. Please see specific axis documentation for all of the available options for that axis. \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Tick Configuration \n Note \n These are only the common tick options supported by all axes. Please see specific axis documentation for all of the available tick options for that axis. \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n Axis Range Settings \n Given the number of axis range settings, it is important to understand how they all interact with each other. \n The  suggestedMax  and  suggestedMin  settings only change the data values that are used to scale the axis. These are useful for extending the range of the axis while maintaining the auto fit behaviour. \n let  minDataValue  =  Math . min ( mostNegativeValue ,  options . suggestedMin ) ; \n let  maxDataValue  =  Math . max ( mostPositiveValue ,  options . suggestedMax ) ; \n \n In this example, the largest positive value is 50, but the data maximum is expanded out to 100. However, because the lowest data value is below the  suggestedMin  setting, it is ignored. \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             label :   'First dataset' , \n             data :   [ 0 ,   20 ,   40 ,   50 ] \n         } ] , \n         labels :   [ 'January' ,   'February' ,   'March' ,   'April' ] \n     } , \n     options :   { \n         scales :   { \n             y :   { \n                 suggestedMin :   50 , \n                 suggestedMax :   100 \n             } \n         } \n     } \n } ) ; \n \n In contrast to the  suggested*  settings, the  min  and  max  settings set explicit ends to the axes. When these are set, some data points may not be visible. \n Stacking \n By default data is not stacked. If the  stacked  option of the value scale (y-axis on horizontal chart) is  true , positive and negative values are stacked separately. Additionally a  stack  option can be defined per dataset to further divide into stack groups  more... .\nFor some charts, you might want to stack positive and negative values together. That can be achieved by specifying  stacked: 'single' . \n Callbacks \n There are a number of config callbacks that can be used to change parameters in the scale at different points in the update process. The options are supplied at the top level of the axis options. \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Arguments \n Description \n \n \n \n \n beforeUpdate \n axis \n Callback called before the update process starts. \n \n \n beforeSetDimensions \n axis \n Callback that runs before dimensions are set. \n \n \n afterSetDimensions \n axis \n Callback that runs after dimensions are set. \n \n \n beforeDataLimits \n axis \n Callback that runs before data limits are determined. \n \n \n afterDataLimits \n axis \n Callback that runs after data limits are determined. \n \n \n beforeBuildTicks \n axis \n Callback that runs before ticks are created. \n \n \n afterBuildTicks \n axis \n Callback that runs after ticks are created. Useful for filtering ticks. \n \n \n beforeTickToLabelConversion \n axis \n Callback that runs before ticks are converted into strings. \n \n \n afterTickToLabelConversion \n axis \n Callback that runs after ticks are converted into strings. \n \n \n beforeCalculateLabelRotation \n axis \n Callback that runs before tick rotation is determined. \n \n \n afterCalculateLabelRotation \n axis \n Callback that runs after tick rotation is determined. \n \n \n beforeFit \n axis \n Callback that runs before the scale fits to the canvas. \n \n \n afterFit \n axis \n Callback that runs after the scale fits to the canvas. \n \n \n afterUpdate \n axis \n Callback that runs at the end of the update process. \n Updating Axis Defaults \n The default configuration for a scale can be easily changed. All you need to do is set the new options to  Chart.defaults.scales[type] . \n For example, to set the minimum value of 0 for all linear scales, you would do the following. Any linear scales created after this time would now have a minimum of 0. \n Chart . defaults . scales . linear . min  =   0 ; \n Creating New Axes \n To create a new axis, see the  developer docs . \n"},{title:"Radial Axes",frontmatter:{},regularPath:"/axes/radial/",relativePath:"axes/radial/index.md",key:"v-2f65a8fe",path:"/axes/radial/",headers:[{level:2,title:"Visual Components",slug:"visual-components"},{level:3,title:"Angle Lines",slug:"angle-lines"},{level:3,title:"Grid Lines",slug:"grid-lines"},{level:3,title:"Point Labels",slug:"point-labels"},{level:3,title:"Ticks",slug:"ticks"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radial Axes \n Radial axes are used specifically for the radar and polar area chart types. These axes overlay the chart area, rather than being positioned on one of the edges. One radial axis is included by default in Chart.js. \n \n radialLinear \n Visual Components \n A radial axis is composed of visual components that can be individually configured. These components are: \n \n angle lines \n grid lines \n point labels \n ticks \n Angle Lines \n The grid lines for an axis are drawn on the chart area. They stretch out from the center towards the edge of the canvas. In the example below, they are red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data,\n  options: {\n    scales: {\n      r: {\n        angleLines: {\n          color: 'red'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Grid Lines \n The grid lines for an axis are drawn on the chart area. In the example below, they are red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data,\n  options: {\n    scales: {\n      r: {\n        grid: {\n          color: 'red'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Point Labels \n The point labels indicate the value for each angle line. In the example below, they are red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data,\n  options: {\n    scales: {\n      r: {\n        pointLabels: {\n          color: 'red'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Ticks \n The ticks are used to label values based on how far they are from the center of the axis. In the example below, they are red. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgba(54, 162, 235, 0.5)',\n    borderColor: 'rgb(54, 162, 235)',\n    borderWidth: 1,\n    data: [10, 20, 30, 40, 50, 0, 5],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data,\n  options: {\n    scales: {\n      r: {\n        ticks: {\n          color: 'red'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/>"},{title:"Linear Radial Axis",frontmatter:{},regularPath:"/axes/radial/linear.html",relativePath:"axes/radial/linear.md",key:"v-73259cca",path:"/axes/radial/linear.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"},{level:3,title:"Linear Radial Axis specific options",slug:"linear-radial-axis-specific-options"},{level:3,title:"Common options to all axes",slug:"common-options-to-all-axes"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Linear Radial Axis specific tick options",slug:"linear-radial-axis-specific-tick-options"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Grid Line Configuration",slug:"grid-line-configuration"},{level:2,title:"Axis Range Settings",slug:"axis-range-settings"},{level:2,title:"Step Size",slug:"step-size"},{level:2,title:"Angle Line Options",slug:"angle-line-options"},{level:2,title:"Point Label Options",slug:"point-label-options"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Radial Axis \n The linear radial scale is used to chart numerical data. As the name suggests, linear interpolation is used to determine where a value lies in relation to the center of the axis. \n The following additional configuration options are provided by the radial linear scale. \n Configuration Options \n Linear Radial Axis specific options \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n animate \n boolean \n true \n Whether to animate scaling the chart from the centre \n \n \n angleLines \n object \n \n Angle line configuration.  more... \n \n \n beginAtZero \n boolean \n false \n If true, scale will include 0 if it is not already included. \n \n \n pointLabels \n object \n \n Point label configuration.  more... \n \n \n startAngle \n number \n 0 \n Starting angle of the scale. In degrees, 0 is at top. \n Common options to all axes \n Namespace:  options.scales[scaleId] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n type \n string \n \n Type of scale being employed. Custom scales can be created and registered with a string key. This allows changing the type of an axis for a chart. \n \n \n alignToPixels \n boolean \n false \n Align pixel values to device pixels. \n \n \n backgroundColor \n Color \n \n Background color of the scale area. \n \n \n display \n boolean | string \n true \n Controls the axis global visibility (visible when  true , hidden when  false ). When  display: 'auto' , the axis is visible only if at least one associated dataset is visible. \n \n \n grid \n object \n \n Grid line configuration.  more... \n \n \n min \n number \n \n User defined minimum number for the scale, overrides minimum value from data.  more... \n \n \n max \n number \n \n User defined maximum number for the scale, overrides maximum value from data.  more... \n \n \n reverse \n boolean \n false \n Reverse the scale. \n \n \n stacked \n boolean | string \n false \n Should the data be stacked.  more... \n \n \n suggestedMax \n number \n \n Adjustment used when calculating the maximum data value.  more... \n \n \n suggestedMin \n number \n \n Adjustment used when calculating the minimum data value.  more... \n \n \n ticks \n object \n \n Tick configuration.  more... \n \n \n weight \n number \n 0 \n The weight used to sort the axis. Higher weights are further away from the chart area. \n Tick Configuration \n Linear Radial Axis specific tick options \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n count \n number \n Yes \n undefined \n The number of ticks to generate. If specified, this overrides the automatic generation. \n \n \n format \n object \n Yes \n \n The  Intl.NumberFormat  options used by the default label formatter \n \n \n maxTicksLimit \n number \n Yes \n 11 \n Maximum number of ticks and gridlines to show. \n \n \n precision \n number \n Yes \n \n If defined and  stepSize  is not specified, the step size will be rounded to this many decimal places. \n \n \n stepSize \n number \n Yes \n \n User defined fixed step size for the scale.  more... \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n \n \n \n The scriptable context is described in  Options  section. \n Grid Line Configuration \n Namespace:  options.scales[scaleId].grid , it defines options for the grid lines of the axis. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n Description \n \n \n \n \n borderDash \n number[] \n \n \n [] \n Length and spacing of dashes on grid lines. See  MDN . \n \n \n borderDashOffset \n number \n Yes \n \n 0.0 \n Offset for line dashes. See  MDN . \n \n \n circular \n boolean \n \n \n false \n If true, gridlines are circular (on radar and polar area charts only). \n \n \n color \n Color \n Yes \n Yes \n Chart.defaults.borderColor \n The color of the grid lines. If specified as an array, the first color applies to the first grid line, the second to the second grid line, and so on. \n \n \n display \n boolean \n \n \n true \n If false, do not display grid lines for this axis. \n \n \n lineWidth \n number \n Yes \n Yes \n 1 \n Stroke width of grid lines. \n \n \n \n The scriptable context is described in  Options  section. \n Axis Range Settings \n Given the number of axis range settings, it is important to understand how they all interact with each other. \n The  suggestedMax  and  suggestedMin  settings only change the data values that are used to scale the axis. These are useful for extending the range of the axis while maintaining the auto fit behaviour. \n let  minDataValue  =  Math . min ( mostNegativeValue ,  options . ticks . suggestedMin ) ; \n let  maxDataValue  =  Math . max ( mostPositiveValue ,  options . ticks . suggestedMax ) ; \n \n In this example, the largest positive value is 50, but the data maximum is expanded out to 100. However, because the lowest data value is below the  suggestedMin  setting, it is ignored. \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'radar' , \n     data :   { \n         datasets :   [ { \n             label :   'First dataset' , \n             data :   [ 0 ,   20 ,   40 ,   50 ] \n         } ] , \n         labels :   [ 'January' ,   'February' ,   'March' ,   'April' ] \n     } , \n     options :   { \n         scales :   { \n             r :   { \n                 suggestedMin :   50 , \n                 suggestedMax :   100 \n             } \n         } \n     } \n } ) ; \n \n In contrast to the  suggested*  settings, the  min  and  max  settings set explicit ends to the axes. When these are set, some data points may not be visible. \n Step Size \n If set, the scale ticks will be enumerated by multiple of  stepSize , having one tick per increment. If not set, the ticks are labeled automatically using the nice numbers algorithm. \n This example sets up a chart with a y axis that creates ticks at  0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5 . \n let  options  =   { \n     scales :   { \n         r :   { \n             max :   5 , \n             min :   0 , \n             ticks :   { \n                 stepSize :   0.5 \n             } \n         } \n     } \n } ; \n Angle Line Options \n The following options are used to configure angled lines that radiate from the center of the chart to the point labels.\nNamespace:  options.scales[scaleId].angleLines \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n display \n boolean \n \n true \n If true, angle lines are shown. \n \n \n color \n Color \n Yes \n Chart.defaults.borderColor \n Color of angled lines. \n \n \n lineWidth \n number \n Yes \n 1 \n Width of angled lines. \n \n \n borderDash \n number[] \n Yes 1 \n [] \n Length and spacing of dashes on angled lines. See  MDN . \n \n \n borderDashOffset \n number \n Yes \n 0.0 \n Offset for line dashes. See  MDN . \n \n \n \n \n the  borderDash  setting only accepts a static value or a function. Passing an array of arrays is not supported. \n \n The scriptable context is described in  Options  section. \n Point Label Options \n The following options are used to configure the point labels that are shown on the perimeter of the scale.\nNamespace:  options.scales[scaleId].pointLabels \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n true \n undefined \n Background color of the point label. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n borderRadius \n number | object \n true \n 0 \n Border radius of the point label \n \n \n display \n boolean \n \n true \n If true, point labels are shown. \n \n \n callback \n function \n \n \n Callback function to transform data labels to point labels. The default implementation simply returns the current string. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of label. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n padding \n number \n Yes \n 5 \n Padding between chart and point labels. \n \n \n centerPointLabels \n boolean \n \n false \n If true, point labels are centered. \n \n \n \n The scriptable context is described in  Options  section. \n Internal data format \n Internally, the linear radial scale uses numeric data \n"},{title:"Styling",frontmatter:{},regularPath:"/axes/styling.html",relativePath:"axes/styling.md",key:"v-0e2a86e9",path:"/axes/styling.html",headers:[{level:2,title:"Grid Line Configuration",slug:"grid-line-configuration"},{level:2,title:"Tick Configuration",slug:"tick-configuration"},{level:3,title:"Common tick options to all axes",slug:"common-tick-options-to-all-axes"},{level:2,title:"Major Tick Configuration",slug:"major-tick-configuration"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Styling \n There are a number of options to allow styling an axis. There are settings to control  grid lines  and  ticks . \n Grid Line Configuration \n Namespace:  options.scales[scaleId].grid , it defines options for the grid lines that run perpendicular to the axis. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n Description \n \n \n \n \n borderColor \n Color \n \n \n Chart.defaults.borderColor \n The color of the border line. \n \n \n borderWidth \n number \n \n \n 1 \n The width of the border line. \n \n \n borderDash \n number[] \n Yes \n \n [] \n Length and spacing of dashes on grid lines. See  MDN . \n \n \n borderDashOffset \n number \n Yes \n \n 0.0 \n Offset for line dashes. See  MDN . \n \n \n circular \n boolean \n \n \n false \n If true, gridlines are circular (on radar and polar area charts only). \n \n \n color \n Color \n Yes \n Yes \n Chart.defaults.borderColor \n The color of the grid lines. If specified as an array, the first color applies to the first grid line, the second to the second grid line, and so on. \n \n \n display \n boolean \n \n \n true \n If false, do not display grid lines for this axis. \n \n \n drawBorder \n boolean \n \n \n true \n If true, draw a border at the edge between the axis and the chart area. \n \n \n drawOnChartArea \n boolean \n \n \n true \n If true, draw lines on the chart area inside the axis lines. This is useful when there are multiple axes and you need to control which grid lines are drawn. \n \n \n drawTicks \n boolean \n \n \n true \n If true, draw lines beside the ticks in the axis area beside the chart. \n \n \n lineWidth \n number \n Yes \n Yes \n 1 \n Stroke width of grid lines. \n \n \n offset \n boolean \n \n \n false \n If true, grid lines will be shifted to be between labels. This is set to  true  for a bar chart by default. \n \n \n tickBorderDash \n number[] \n \n \n \n Length and spacing of the tick mark line. If not set, defaults to the grid line  borderDash  value. \n \n \n tickBorderDashOffset \n number \n Yes \n Yes \n \n Offset for the line dash of the tick mark. If unset, defaults to the grid line  borderDashOffset  value \n \n \n tickColor \n Color \n Yes \n Yes \n \n Color of the tick line. If unset, defaults to the grid line color. \n \n \n tickLength \n number \n \n \n 8 \n Length in pixels that the grid lines will draw into the axis area. \n \n \n tickWidth \n number \n Yes \n Yes \n \n Width of the tick mark in pixels. If unset, defaults to the grid line width. \n \n \n z \n number \n \n \n 0 \n z-index of gridline layer. Values <= 0 are drawn under datasets, > 0 on top. \n \n \n \n The scriptable context is described in  Options  section. \n Tick Configuration \n Common tick options to all axes \n Namespace:  options.scales[scaleId].ticks \n \n \n \n Name \n Type \n Scriptable \n Default \n Description \n \n \n \n \n backdropColor \n Color \n Yes \n 'rgba(255, 255, 255, 0.75)' \n Color of label backdrops. \n \n \n backdropPadding \n Padding \n \n 2 \n Padding of label backdrop. \n \n \n callback \n function \n \n \n Returns the string representation of the tick value as it should be displayed on the chart. See  callback . \n \n \n display \n boolean \n \n true \n If true, show tick labels. \n \n \n color \n Color \n Yes \n Chart.defaults.color \n Color of ticks. \n \n \n font \n Font \n Yes \n Chart.defaults.font \n See  Fonts \n \n \n major \n object \n \n {} \n Major ticks configuration . \n \n \n padding \n number \n \n 3 \n Sets the offset of the tick labels from the axis \n \n \n showLabelBackdrop \n boolean \n Yes \n true  for radial scale,  false  otherwise \n If true, draw a background behind the tick labels. \n \n \n textStrokeColor \n Color \n Yes \n `` \n The color of the stroke around the text. \n \n \n textStrokeWidth \n number \n Yes \n 0 \n Stroke width around the text. \n \n \n z \n number \n \n 0 \n z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. \n \n \n \n The scriptable context is described in  Options  section. \n Major Tick Configuration \n Namespace:  options.scales[scaleId].ticks.major , it defines options for the major tick marks that are generated by the axis. \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n enabled \n boolean \n false \n If true, major ticks are generated. A major tick will affect autoskipping and  major  will be defined on ticks in the scriptable options context. \n \n \n \n"},{title:"Area Chart",frontmatter:{},regularPath:"/charts/area.html",relativePath:"charts/area.md",key:"v-055ef8b6",path:"/charts/area.html",headers:[{level:2,title:"Filling modes",slug:"filling-modes"},{level:3,title:"Example",slug:"example"},{level:3,title:"Example with multiple colors",slug:"example-with-multiple-colors"},{level:2,title:"Configuration",slug:"configuration"},{level:3,title:"propagate",slug:"propagate"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Area Chart \n Both  line  and  radar  charts support a  fill  option on the dataset object which can be used to create space between two datasets or a dataset and a boundary, i.e. the scale  origin ,  start,  or  end  (see  filling modes ). \n Note \n This feature is implemented by the  filler  plugin . \n Filling modes \n \n \n \n Mode \n Type \n Values \n \n \n \n \n Absolute dataset index \n number \n 1 ,  2 ,  3 , ... \n \n \n Relative dataset index \n string \n '-1' ,  '-2' ,  '+1' , ... \n \n \n Boundary \n string \n 'start' ,  'end' ,  'origin' \n \n \n Disabled  1 \n boolean \n false \n \n \n Stacked value below \n string \n 'stack' \n \n \n Axis value \n object \n { value: number; } \n \n \n Shape (fill inside line) \n string \n 'shape' \n \n \n \n \n 1  for backward compatibility,  fill: true  is equivalent to  fill: 'origin' \n Example \n new   Chart ( ctx ,   { \n     data :   { \n         datasets :   [ \n             { fill :   'origin' } ,        // 0: fill to 'origin' \n             { fill :   '+2' } ,            // 1: fill to dataset 3 \n             { fill :   1 } ,               // 2: fill to dataset 1 \n             { fill :   false } ,           // 3: no fill \n             { fill :   '-2' } ,            // 4: fill to dataset 2 \n             { fill :   { value :   25 } }      // 5: fill to axis value 25 \n         ] \n     } \n } ) ; \n \n If you need to support multiple colors when filling from one dataset to another, you may specify an object with the following option : \n \n \n \n Param \n Type \n Description \n \n \n \n \n target \n number ,  string ,  boolean ,  object \n The accepted values are the same as the filling mode values, so you may use absolute and relative dataset indexes and/or boundaries. \n \n \n above \n Color \n If no color is set, the default color will be the background color of the chart. \n \n \n below \n Color \n Same as the above. \n Example with multiple colors \n new   Chart ( ctx ,   { \n     data :   { \n         datasets :   [ \n             { \n               fill :   { \n                 target :   'origin' , \n                 above :   'rgb(255, 0, 0)' ,     // Area will be red above the origin \n                 below :   'rgb(0, 0, 255)'      // And blue below the origin \n               } \n             } \n         ] \n     } \n } ) ; \n Configuration \n Namespace:  options.plugins.filler \n \n \n \n Option \n Type \n Default \n Description \n \n \n \n \n drawTime \n string \n beforeDatasetDraw \n Filler draw time. Supported values:  'beforeDraw' ,  'beforeDatasetDraw' ,  'beforeDatasetsDraw' \n \n \n propagate \n boolean \n true \n Fill propagation when target is hidden. \n propagate \n propagate  takes a  boolean  value (default:  true ). \n If  true , the fill area will be recursively extended to the visible target defined by the  fill  value of hidden dataset targets: \n Example using propagate \n new   Chart ( ctx ,   { \n     data :   { \n         datasets :   [ \n             { fill :   'origin' } ,     // 0: fill to 'origin' \n             { fill :   '-1' } ,         // 1: fill to dataset 0 \n             { fill :   1 } ,            // 2: fill to dataset 1 \n             { fill :   false } ,        // 3: no fill \n             { fill :   '-2' }          // 4: fill to dataset 2 \n         ] \n     } , \n     options :   { \n         plugins :   { \n             filler :   { \n                 propagate :   true \n             } \n         } \n     } \n } ) ; \n \n propagate: true :\n-if dataset 2 is hidden, dataset 4 will fill to dataset 1\n-if dataset 2 and 1 are hidden, dataset 4 will fill to  'origin' \n propagate: false :\n-if dataset 2 and/or 4 are hidden, dataset 4 will not be filled \n"},{title:"Bar Chart",frontmatter:{},regularPath:"/charts/bar.html",relativePath:"charts/bar.md",key:"v-2789e33f",path:"/charts/bar.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"Example dataset configuration",slug:"example-dataset-configuration"},{level:3,title:"General",slug:"general"},{level:3,title:"Styling",slug:"styling"},{level:3,title:"Interactions",slug:"interactions"},{level:3,title:"barPercentage",slug:"barpercentage"},{level:3,title:"categoryPercentage",slug:"categorypercentage"},{level:3,title:"barThickness",slug:"barthickness"},{level:3,title:"maxBarThickness",slug:"maxbarthickness"},{level:2,title:"Scale Configuration",slug:"scale-configuration"},{level:3,title:"Example scale configuration",slug:"example-scale-configuration"},{level:3,title:"Offset Grid Lines",slug:"offset-grid-lines"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"barPercentage vs categoryPercentage",slug:"barpercentage-vs-categorypercentage"},{level:2,title:"Data Structure",slug:"data-structure"},{level:2,title:"Stacked Bar Chart",slug:"stacked-bar-chart"},{level:2,title:"Horizontal Bar Chart",slug:"horizontal-bar-chart"},{level:3,title:"Horizontal Bar Chart config Options",slug:"horizontal-bar-chart-config-options"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bar Chart \n A bar chart provides a way of showing data values represented as vertical bars. It is sometimes used to show trend data, and the comparison of multiple data sets side by side. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First Dataset',\n    data: [65, 59, 80, 81, 56, 55, 40],\n    backgroundColor: [\n      'rgba(255, 99, 132, 0.2)',\n      'rgba(255, 159, 64, 0.2)',\n      'rgba(255, 205, 86, 0.2)',\n      'rgba(75, 192, 192, 0.2)',\n      'rgba(54, 162, 235, 0.2)',\n      'rgba(153, 102, 255, 0.2)',\n      'rgba(201, 203, 207, 0.2)'\n    ],\n    borderColor: [\n      'rgb(255, 99, 132)',\n      'rgb(255, 159, 64)',\n      'rgb(255, 205, 86)',\n      'rgb(75, 192, 192)',\n      'rgb(54, 162, 235)',\n      'rgb(153, 102, 255)',\n      'rgb(201, 203, 207)'\n    ],\n    borderWidth: 1\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    scales: {\n      y: {\n        beginAtZero: true\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.bar  - options for all bar datasets \n options.elements.bar  - options for all  bar elements \n options  - options for the whole chart \n \n The bar chart allows a number of properties to be specified for each dataset.\nThese are used to set display properties for a specific dataset. For example,\nthe color of the bars is generally set this way.\nOnly the  data  option needs to be specified in the dataset namespace. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n base \n number \n Yes \n Yes \n \n \n \n barPercentage \n number \n - \n - \n 0.9 \n \n \n barThickness \n number | string \n - \n - \n \n \n \n borderColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderSkipped \n string | boolean \n Yes \n Yes \n 'start' \n \n \n borderWidth \n number | object \n Yes \n Yes \n 0 \n \n \n borderRadius \n number | object \n Yes \n Yes \n 0 \n \n \n categoryPercentage \n number \n - \n - \n 0.8 \n \n \n clip \n number | object | false \n - \n - \n \n \n \n data \n object | object[] |  number[] | string[] \n - \n - \n required \n \n \n grouped \n boolean \n - \n - \n true \n \n \n hoverBackgroundColor \n Color \n Yes \n Yes \n \n \n \n hoverBorderColor \n Color \n Yes \n Yes \n \n \n \n hoverBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n hoverBorderRadius \n number \n Yes \n Yes \n 0 \n \n \n indexAxis \n string \n - \n - \n 'x' \n \n \n inflateAmount \n number | 'auto' \n Yes \n Yes \n 'auto' \n \n \n maxBarThickness \n number \n - \n - \n \n \n \n minBarLength \n number \n - \n - \n \n \n \n label \n string \n - \n - \n '' \n \n \n order \n number \n - \n - \n 0 \n \n \n pointStyle \n pointStyle \n Yes \n - \n 'circle' \n \n \n skipNull \n boolean \n - \n - \n \n \n \n stack \n string \n - \n - \n 'bar' \n \n \n xAxisID \n string \n - \n - \n first x axis \n \n \n yAxisID \n string \n - \n - \n first y axis \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n Example dataset configuration \n data :   { \n     datasets :   [ { \n         barPercentage :   0.5 , \n         barThickness :   6 , \n         maxBarThickness :   8 , \n         minBarLength :   2 , \n         data :   [ 10 ,   20 ,   30 ,   40 ,   50 ,   60 ,   70 ] \n     } ] \n } ; \n General \n \n \n \n Name \n Description \n \n \n \n \n base \n Base value for the bar in data units along the value axis. If not set, defaults to the value axis base value. \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n grouped \n Should the bars be grouped on index axis. When  true , all the datasets at same index value will be placed next to each other centering on that index value. When  false , each bar is placed on its actual index-axis value. \n \n \n indexAxis \n The base axis of the dataset.  'x'  for vertical bars and  'y'  for horizontal bars. \n \n \n label \n The label for the dataset which appears in the legend and tooltips. \n \n \n order \n The drawing order of dataset. Also affects order for stacking, tooltip and legend.  more \n \n \n skipNull \n If  true , null or undefined values will not be used for spacing calculations when determining bar size. \n \n \n stack \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack).  more \n \n \n xAxisID \n The ID of the x-axis to plot this dataset on. \n \n \n yAxisID \n The ID of the y-axis to plot this dataset on. \n Styling \n The style of each bar can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n The bar background color. \n \n \n borderColor \n The bar border color. \n \n \n borderSkipped \n The edge to skip when drawing bar. \n \n \n borderWidth \n The bar border width (in pixels). \n \n \n borderRadius \n The bar border radius (in pixels). \n \n \n minBarLength \n Set this to ensure that bars have a minimum length in pixels. \n \n \n pointStyle \n Style of the point for legend.  more... \n \n \n \n All these values, if  undefined , fallback to the associated  elements.bar.*  options. \n borderSkipped \n This setting is used to avoid drawing the bar stroke at the base of the fill, or disable the border radius.\nIn general, this does not need to be changed except when creating chart types\nthat derive from a bar chart. \n Note \n For negative bars in a vertical chart,  top  and  bottom  are flipped. Same goes for  left  and  right  in a horizontal chart. \n \n Options are: \n \n 'start' \n 'end' \n 'middle'  (only valid on stacked bars: the borders between bars are skipped) \n 'bottom' \n 'left' \n 'top' \n 'right' \n false  (don't skip any borders) \n true  (skip all borders) \n borderWidth \n If this value is a number, it is applied to all sides of the rectangle (left, top, right, bottom), except  borderSkipped . If this value is an object, the  left  property defines the left border width. Similarly, the  right ,  top , and  bottom  properties can also be specified. Omitted borders and  borderSkipped  are skipped. \n borderRadius \n If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight), except corners touching the  borderSkipped . If this value is an object, the  topLeft  property defines the top-left corners border radius. Similarly, the  topRight ,  bottomLeft , and  bottomRight  properties can also be specified. Omitted corners and those touching the  borderSkipped  are skipped. For example if the  top  border is skipped, the border radius for the corners  topLeft  and  topRight  will be skipped as well. \n Stacked Charts \n When the border radius is supplied as a number and the chart is stacked, the radius will only be applied to the bars that are at the edges of the stack or where the bar is floating. The object syntax can be used to override this behavior. \n inflateAmount \n This option can be used to inflate the rects that are used to draw the bars. This can be used to hide artifacts between bars when  barPercentage (#barpercentage) *  categoryPercentage (#categorypercentage) is 1. The default value  'auto'  should work in most cases. \n Interactions \n The interaction with each bar can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n hoverBackgroundColor \n The bar background color when hovered. \n \n \n hoverBorderColor \n The bar border color when hovered. \n \n \n hoverBorderWidth \n The bar border width when hovered (in pixels). \n \n \n hoverBorderRadius \n The bar border radius when hovered (in pixels). \n \n \n \n All these values, if  undefined , fallback to the associated  elements.bar.*  options. \n barPercentage \n Percent (0-1) of the available width each bar should be within the category width. 1.0 will take the whole category width and put the bars right next to each other.  more... \n categoryPercentage \n Percent (0-1) of the available width each category should be within the sample width.  more... \n barThickness \n If this value is a number, it is applied to the width of each bar, in pixels. When this is enforced,  barPercentage  and  categoryPercentage  are ignored. \n If set to  'flex' , the base sample widths are calculated automatically based on the previous and following samples so that they take the full available widths without overlap. Then, bars are sized using  barPercentage  and  categoryPercentage . There is no gap when the percentage options are 1. This mode generates bars with different widths when data are not evenly spaced. \n If not set (default), the base sample widths are calculated using the smallest interval that prevents bar overlapping, and bars are sized using  barPercentage  and  categoryPercentage . This mode always generates bars equally sized. \n maxBarThickness \n Set this to ensure that bars are not sized thicker than this. \n Scale Configuration \n The bar chart sets unique default values for the following configuration from the associated  scale  options: \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n offset \n boolean \n true \n If true, extra space is added to both edges and the axis is scaled to fit into the chart area. \n \n \n grid.offset \n boolean \n true \n If true, the bars for a particular data point fall between the grid lines. The grid line will move to the left by one half of the tick interval. If false, the grid line will go right down the middle of the bars.  more... \n Example scale configuration \n options  =   { \n     scales :   { \n         x :   { \n             grid :   { \n               offset :   true \n             } \n         } \n     } \n } ; \n Offset Grid Lines \n If true, the bars for a particular data point fall between the grid lines. The grid line will move to the left by one half of the tick interval, which is the space between the grid lines. If false, the grid line will go right down the middle of the bars. This is set to true for a category scale in a bar chart while false for other scales or chart types by default. \n Default Options \n It is common to want to apply a configuration setting to all created bar charts. The global bar chart settings are stored in  Chart.overrides.bar . Changing the global options only affects charts created after the change. Existing charts are not changed. \n barPercentage vs categoryPercentage \n The following shows the relationship between the bar percentage option and the category percentage option. \n // categoryPercentage: 1.0\n// barPercentage: 1.0\nBar:        | 1.0 | 1.0 |\nCategory:   |    1.0    |\nSample:     |===========|\n\n// categoryPercentage: 1.0\n// barPercentage: 0.5\nBar:          |.5|  |.5|\nCategory:  |      1.0     |\nSample:    |==============|\n\n// categoryPercentage: 0.5\n// barPercentage: 1.0\nBar:             |1.0||1.0|\nCategory:        |   .5   |\nSample:     |==================|\n Data Structure \n All of the supported  data structures  can be used with bar charts. \n Stacked Bar Chart \n Bar charts can be configured into stacked bar charts by changing the settings on the X and Y axes to enable stacking. Stacked bar charts can be used to show how one data series is made up of a number of smaller pieces. \n const  stackedBar  =   new   Chart ( ctx ,   { \n     type :   'bar' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 stacked :   true \n             } , \n             y :   { \n                 stacked :   true \n             } \n         } \n     } \n } ) ; \n Horizontal Bar Chart \n A horizontal bar chart is a variation on a vertical bar chart. It is sometimes used to show trend data, and the comparison of multiple data sets side by side.\nTo achieve this you will have to set the  indexAxis  property in the options object to  'y' .\nThe default for this property is  'x'  and thus will show vertical bars. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    axis: 'y',\n    label: 'My First Dataset',\n    data: [65, 59, 80, 81, 56, 55, 40],\n    fill: false,\n    backgroundColor: [\n      'rgba(255, 99, 132, 0.2)',\n      'rgba(255, 159, 64, 0.2)',\n      'rgba(255, 205, 86, 0.2)',\n      'rgba(75, 192, 192, 0.2)',\n      'rgba(54, 162, 235, 0.2)',\n      'rgba(153, 102, 255, 0.2)',\n      'rgba(201, 203, 207, 0.2)'\n    ],\n    borderColor: [\n      'rgb(255, 99, 132)',\n      'rgb(255, 159, 64)',\n      'rgb(255, 205, 86)',\n      'rgb(75, 192, 192)',\n      'rgb(54, 162, 235)',\n      'rgb(153, 102, 255)',\n      'rgb(201, 203, 207)'\n    ],\n    borderWidth: 1\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data,\n  options: {\n    indexAxis: 'y',\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Horizontal Bar Chart config Options \n The configuration options for the horizontal bar chart are the same as for the  bar chart . However, any options specified on the x-axis in a bar chart, are applied to the y-axis in a horizontal bar chart. \n Internal data format \n {x, y, _custom}  where  _custom  is an optional object defining stacked bar properties:  {start, end, barStart, barEnd, min, max} .  start  and  end  are the input values. Those two are repeated in  barStart  (closer to origin),  barEnd  (further from origin),  min  and  max . \n"},{title:"Doughnut and Pie Charts",frontmatter:{},regularPath:"/charts/doughnut.html",relativePath:"charts/doughnut.md",key:"v-75cd8345",path:"/charts/doughnut.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"General",slug:"general"},{level:3,title:"Styling",slug:"styling"},{level:3,title:"Border Alignment",slug:"border-alignment"},{level:3,title:"Border Radius",slug:"border-radius"},{level:3,title:"Interactions",slug:"interactions"},{level:2,title:"Config Options",slug:"config-options"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"Data Structure",slug:"data-structure"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Doughnut and Pie Charts \n Pie and doughnut charts are probably the most commonly used charts. They are divided into segments, the arc of each segment shows the proportional value of each piece of data. \n They are excellent at showing the relational proportions between data. \n Pie and doughnut charts are effectively the same class in Chart.js, but have one different default value - their  cutout . This equates to what portion of the inner should be cut out. This defaults to  0  for pie charts, and  '50%'  for doughnuts. \n They are also registered under two aliases in the  Chart  core. Other than their different default value, and different alias, they are exactly the same. \n \n \n \nconst data = {\n  labels: [\n    'Red',\n    'Blue',\n    'Yellow'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [300, 50, 100],\n    backgroundColor: [\n      'rgb(255, 99, 132)',\n      'rgb(54, 162, 235)',\n      'rgb(255, 205, 86)'\n    ],\n    hoverOffset: 4\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'doughnut',\n  data: data,\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n \n \nconst data = {\n  labels: [\n    'Red',\n    'Blue',\n    'Yellow'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [300, 50, 100],\n    backgroundColor: [\n      'rgb(255, 99, 132)',\n      'rgb(54, 162, 235)',\n      'rgb(255, 205, 86)'\n    ],\n    hoverOffset: 4\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'pie',\n  data: data,\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.doughnut  - options for all doughnut datasets \n options.datasets.pie  - options for all pie datasets \n options.elements.arc  - options for all  arc elements \n options  - options for the whole chart \n \n The doughnut/pie chart allows a number of properties to be specified for each dataset. These are used to set display properties for a specific dataset. For example, the colours of the dataset's arcs are generally set this way. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderAlign \n 'center' | 'inner' \n Yes \n Yes \n 'center' \n \n \n borderColor \n Color \n Yes \n Yes \n '#fff' \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n Yes \n undefined \n \n \n borderRadius \n number | object \n Yes \n Yes \n 0 \n \n \n borderWidth \n number \n Yes \n Yes \n 2 \n \n \n circumference \n number \n - \n - \n undefined \n \n \n clip \n number | object | false \n - \n - \n undefined \n \n \n data \n number[] \n - \n - \n required \n \n \n hoverBackgroundColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n Yes \n undefined \n \n \n hoverBorderWidth \n number \n Yes \n Yes \n undefined \n \n \n hoverOffset \n number \n Yes \n Yes \n 0 \n \n \n offset \n number \n Yes \n Yes \n 0 \n \n \n rotation \n number \n - \n - \n undefined \n \n \n spacing \n number \n - \n - \n 0 \n \n \n weight \n number \n - \n - \n 1 \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n General \n \n \n \n Name \n Description \n \n \n \n \n circumference \n Per-dataset override for the sweep that the arcs cover \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n rotation \n Per-dataset override for the starting angle to draw arcs from \n Styling \n The style of each arc can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n arc background color. \n \n \n borderColor \n arc border color. \n \n \n borderJoinStyle \n arc border join style. See  MDN . \n \n \n borderWidth \n arc border width (in pixels). \n \n \n offset \n arc offset (in pixels). \n \n \n spacing \n Fixed arc offset (in pixels). Similar to  offset  but applies to all arcs. \n \n \n weight \n The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values. \n \n \n \n All these values, if  undefined , fallback to the associated  elements.arc.*  options. \n Border Alignment \n The following values are supported for  borderAlign . \n \n 'center'  (default) \n 'inner' \n \n When  'center'  is set, the borders of arcs next to each other will overlap. When  'inner'  is set, it is guaranteed that all borders will not overlap. \n Border Radius \n If this value is a number, it is applied to all corners of the arc (outerStart, outerEnd, innerStart, innerRight). If this value is an object, the  outerStart  property defines the outer-start corner's border radius. Similarly, the  outerEnd ,  innerStart , and  innerEnd  properties can also be specified. \n Interactions \n The interaction with each arc can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n hoverBackgroundColor \n arc background color when hovered. \n \n \n hoverBorderColor \n arc border color when hovered. \n \n \n hoverBorderJoinStyle \n arc border join style when hovered. See  MDN . \n \n \n hoverBorderWidth \n arc border width when hovered (in pixels). \n \n \n hoverOffset \n arc offset when hovered (in pixels). \n \n \n \n All these values, if  undefined , fallback to the associated  elements.arc.*  options. \n Config Options \n These are the customisation options specific to Pie & Doughnut charts. These options are looked up on access, and form together with the global chart configuration the options of the chart. \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n cutout \n number | string \n 50%  - for doughnut,  0  - for pie \n The portion of the chart that is cut out of the middle. If  string  and ending with '%', percentage of the chart radius.  number  is considered to be pixels. \n \n \n radius \n number | string \n 100% \n The outer radius of the chart. If  string  and ending with '%', percentage of the maximum radius.  number  is considered to be pixels. \n \n \n rotation \n number \n 0 \n Starting angle to draw arcs from. \n \n \n circumference \n number \n 360 \n Sweep to allow arcs to cover. \n \n \n animation.animateRotate \n boolean \n true \n If true, the chart will animate in with a rotation animation. This property is in the  options.animation  object. \n \n \n animation.animateScale \n boolean \n false \n If true, will animate scaling the chart from the center outwards. \n Default Options \n We can also change these default values for each Doughnut type that is created, this object is available at  Chart.overrides.doughnut . Pie charts also have a clone of these defaults available to change at  Chart.overrides.pie , with the only difference being  cutout  being set to 0. \n Data Structure \n For a pie chart, datasets need to contain an array of data points. The data points should be a number, Chart.js will total all of the numbers and calculate the relative proportion of each. \n You also need to specify an array of labels so that tooltips appear correctly. \n data  =   { \n     datasets :   [ { \n         data :   [ 10 ,   20 ,   30 ] \n     } ] , \n\n     // These labels appear in the legend and in the tooltips when hovering different arcs \n     labels :   [ \n         'Red' , \n         'Yellow' , \n         'Blue' \n     ] \n } ; \n \n "},{title:"Bubble Chart",frontmatter:{},regularPath:"/charts/bubble.html",relativePath:"charts/bubble.md",key:"v-29c13ef6",path:"/charts/bubble.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"General",slug:"general"},{level:3,title:"Styling",slug:"styling"},{level:3,title:"Interactions",slug:"interactions"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"Data Structure",slug:"data-structure"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bubble Chart \n A bubble chart is used to display three dimensions of data at the same time. The location of the bubble is determined by the first two dimensions and the corresponding horizontal and vertical axes. The third dimension is represented by the size of the individual bubbles. \n \nconst data = {\n  datasets: [{\n    label: 'First Dataset',\n    data: [{\n      x: 20,\n      y: 30,\n      r: 15\n    }, {\n      x: 40,\n      y: 10,\n      r: 10\n    }],\n    backgroundColor: 'rgb(255, 99, 132)'\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'bubble',\n  data: data,\n  options: {}\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.bubble  - options for all bubble datasets \n options.elements.point  - options for all  point elements \n options  - options for the whole chart \n \n The bubble chart allows a number of properties to be specified for each dataset. These are used to set display properties for a specific dataset. For example, the colour of the bubbles is generally set this way. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderWidth \n number \n Yes \n Yes \n 3 \n \n \n clip \n number | object | false \n - \n - \n undefined \n \n \n data \n object[] \n - \n - \n required \n \n \n drawActiveElementsOnTop \n boolean \n Yes \n Yes \n true \n \n \n hoverBackgroundColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n hoverRadius \n number \n Yes \n Yes \n 4 \n \n \n hitRadius \n number \n Yes \n Yes \n 1 \n \n \n label \n string \n - \n - \n undefined \n \n \n order \n number \n - \n - \n 0 \n \n \n pointStyle \n pointStyle \n Yes \n Yes \n 'circle' \n \n \n rotation \n number \n Yes \n Yes \n 0 \n \n \n radius \n number \n Yes \n Yes \n 3 \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n General \n \n \n \n Name \n Description \n \n \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n drawActiveElementsOnTop \n Draw the active bubbles of a dataset over the other bubbles of the dataset \n \n \n label \n The label for the dataset which appears in the legend and tooltips. \n \n \n order \n The drawing order of dataset. Also affects order for tooltip and legend.  more \n Styling \n The style of each bubble can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n bubble background color. \n \n \n borderColor \n bubble border color. \n \n \n borderWidth \n bubble border width (in pixels). \n \n \n pointStyle \n bubble  shape style . \n \n \n rotation \n bubble rotation (in degrees). \n \n \n radius \n bubble radius (in pixels). \n \n \n \n All these values, if  undefined , fallback to the associated  elements.point.*  options. \n Interactions \n The interaction with each bubble can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n hitRadius \n bubble  additional  radius for hit detection (in pixels). \n \n \n hoverBackgroundColor \n bubble background color when hovered. \n \n \n hoverBorderColor \n bubble border color when hovered. \n \n \n hoverBorderWidth \n bubble border width when hovered (in pixels). \n \n \n hoverRadius \n bubble  additional  radius when hovered (in pixels). \n \n \n \n All these values, if  undefined , fallback to the associated  elements.point.*  options. \n Default Options \n We can also change the default values for the Bubble chart type. Doing so will give all bubble charts created after this point the new defaults. The default configuration for the bubble chart can be accessed at  Chart.overrides.bubble . \n Data Structure \n Bubble chart datasets need to contain a  data  array of points, each point represented by an object containing the following properties: \n { \n     // X Value \n     x :  number , \n\n     // Y Value \n     y :  number , \n\n     // Bubble radius in pixels (not scaled). \n     r :  number\n } \n \n Important:  the radius property,  r  is  not  scaled by the chart, it is the raw radius in pixels of the bubble that is drawn on the canvas. \n Internal data format \n {x, y, _custom}  where  _custom  is the radius. \n"},{title:"Line Chart",frontmatter:{},regularPath:"/charts/line.html",relativePath:"charts/line.md",key:"v-84a75af6",path:"/charts/line.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"General",slug:"general"},{level:3,title:"Point Styling",slug:"point-styling"},{level:3,title:"Line Styling",slug:"line-styling"},{level:3,title:"Interactions",slug:"interactions"},{level:3,title:"cubicInterpolationMode",slug:"cubicinterpolationmode"},{level:3,title:"Segment",slug:"segment"},{level:3,title:"Stepped",slug:"stepped"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"Data Structure",slug:"data-structure"},{level:2,title:"Stacked Area Chart",slug:"stacked-area-chart"},{level:2,title:"Vertical Line Chart",slug:"vertical-line-chart"},{level:3,title:"Config Options",slug:"config-options"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart \n A line chart is a way of plotting data points on a line. Often, it is used to show trend data, or the comparison of two data sets. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First Dataset',\n    data: [65, 59, 80, 81, 56, 55, 40],\n    fill: false,\n    borderColor: 'rgb(75, 192, 192)',\n    tension: 0.1\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.line  - options for all line datasets \n options.elements.line  - options for all  line elements \n options.elements.point  - options for all  point elements \n options  - options for the whole chart \n \n The line chart allows a number of properties to be specified for each dataset. These are used to set display properties for a specific dataset. For example, the colour of a line is generally set this way. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n - \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderCapStyle \n string \n Yes \n - \n 'butt' \n \n \n borderColor \n Color \n Yes \n - \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderDash \n number[] \n Yes \n - \n [] \n \n \n borderDashOffset \n number \n Yes \n - \n 0.0 \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n - \n 'miter' \n \n \n borderWidth \n number \n Yes \n - \n 3 \n \n \n clip \n number | object | false \n - \n - \n undefined \n \n \n cubicInterpolationMode \n string \n Yes \n - \n 'default' \n \n \n data \n object | object[] |  number[] | string[] \n - \n - \n required \n \n \n drawActiveElementsOnTop \n boolean \n Yes \n Yes \n true \n \n \n fill \n boolean | string \n Yes \n - \n false \n \n \n hoverBackgroundColor \n Color \n Yes \n - \n undefined \n \n \n hoverBorderCapStyle \n string \n Yes \n - \n undefined \n \n \n hoverBorderColor \n Color \n Yes \n - \n undefined \n \n \n hoverBorderDash \n number[] \n Yes \n - \n undefined \n \n \n hoverBorderDashOffset \n number \n Yes \n - \n undefined \n \n \n hoverBorderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n - \n undefined \n \n \n hoverBorderWidth \n number \n Yes \n - \n undefined \n \n \n indexAxis \n string \n - \n - \n 'x' \n \n \n label \n string \n - \n - \n '' \n \n \n order \n number \n - \n - \n 0 \n \n \n pointBackgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n pointBorderColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n pointBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n pointHitRadius \n number \n Yes \n Yes \n 1 \n \n \n pointHoverBackgroundColor \n Color \n Yes \n Yes \n undefined \n \n \n pointHoverBorderColor \n Color \n Yes \n Yes \n undefined \n \n \n pointHoverBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n pointHoverRadius \n number \n Yes \n Yes \n 4 \n \n \n pointRadius \n number \n Yes \n Yes \n 3 \n \n \n pointRotation \n number \n Yes \n Yes \n 0 \n \n \n pointStyle \n pointStyle \n Yes \n Yes \n 'circle' \n \n \n segment \n object \n - \n - \n undefined \n \n \n showLine \n boolean \n - \n - \n true \n \n \n spanGaps \n boolean | number \n - \n - \n undefined \n \n \n stack \n string \n - \n - \n 'line' \n \n \n stepped \n boolean | string \n - \n - \n false \n \n \n tension \n number \n - \n - \n 0 \n \n \n xAxisID \n string \n - \n - \n first x axis \n \n \n yAxisID \n string \n - \n - \n first y axis \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n General \n \n \n \n Name \n Description \n \n \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n drawActiveElementsOnTop \n Draw the active points of a dataset over the other points of the dataset \n \n \n indexAxis \n The base axis of the dataset.  'x'  for horizontal lines and  'y'  for vertical lines. \n \n \n label \n The label for the dataset which appears in the legend and tooltips. \n \n \n order \n The drawing order of dataset. Also affects order for stacking, tooltip and legend.  more \n \n \n stack \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack).  more \n \n \n xAxisID \n The ID of the x-axis to plot this dataset on. \n \n \n yAxisID \n The ID of the y-axis to plot this dataset on. \n Point Styling \n The style of each point can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n pointBackgroundColor \n The fill color for points. \n \n \n pointBorderColor \n The border color for points. \n \n \n pointBorderWidth \n The width of the point border in pixels. \n \n \n pointHitRadius \n The pixel size of the non-displayed point that reacts to mouse events. \n \n \n pointRadius \n The radius of the point shape. If set to 0, the point is not rendered. \n \n \n pointRotation \n The rotation of the point in degrees. \n \n \n pointStyle \n Style of the point.  more... \n \n \n \n All these values, if  undefined , fallback first to the dataset options then to the associated  elements.point.*  options. \n Line Styling \n The style of the line can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n The line fill color. \n \n \n borderCapStyle \n Cap style of the line. See  MDN . \n \n \n borderColor \n The line color. \n \n \n borderDash \n Length and spacing of dashes. See  MDN . \n \n \n borderDashOffset \n Offset for line dashes. See  MDN . \n \n \n borderJoinStyle \n Line joint style. See  MDN . \n \n \n borderWidth \n The line width (in pixels). \n \n \n fill \n How to fill the area under the line. See  area charts . \n \n \n tension \n Bezier curve tension of the line. Set to 0 to draw straightlines. This option is ignored if monotone cubic interpolation is used. \n \n \n showLine \n If false, the line is not drawn for this dataset. \n \n \n spanGaps \n If true, lines will be drawn between points with no or null data. If false, points with  null  data will create a break in the line. Can also be a number specifying the maximum gap length to span. The unit of the value depends on the scale used. \n \n \n \n If the value is  undefined , the values fallback to the associated  elements.line.*  options. \n Interactions \n The interaction with each point can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n pointHoverBackgroundColor \n Point background color when hovered. \n \n \n pointHoverBorderColor \n Point border color when hovered. \n \n \n pointHoverBorderWidth \n Border width of point when hovered. \n \n \n pointHoverRadius \n The radius of the point when hovered. \n cubicInterpolationMode \n The following interpolation modes are supported. \n \n 'default' \n 'monotone' \n \n The  'default'  algorithm uses a custom weighted cubic interpolation, which produces pleasant curves for all types of datasets. \n The  'monotone'  algorithm is more suited to  y = f(x)  datasets: it preserves monotonicity (or piecewise monotonicity) of the dataset being interpolated, and ensures local extremums (if any) stay at input data points. \n If left untouched ( undefined ), the global  options.elements.line.cubicInterpolationMode  property is used. \n Segment \n Line segment styles can be overridden by scriptable options in the  segment  object. Currently all of the  border*  and  backgroundColor  options are supported. The segment styles are resolved for each section of the line between each point.  undefined  fallbacks to main line styles. \n TIP \n To be able to style gaps, you need the  spanGaps  option enabled. \n \n Context for the scriptable segment contains the following properties: \n \n type :  'segment' \n p0 : first point element \n p1 : second point element \n p0DataIndex : index of first point in the data array \n p1DataIndex : index of second point in the data array \n datasetIndex : dataset index \n \n Example usage \n Stepped \n The following values are supported for  stepped . \n \n false : No Step Interpolation (default) \n true : Step-before Interpolation (eq.  'before' ) \n 'before' : Step-before Interpolation \n 'after' : Step-after Interpolation \n 'middle' : Step-middle Interpolation \n \n If the  stepped  value is set to anything other than false,  tension  will be ignored. \n Default Options \n It is common to want to apply a configuration setting to all created line charts. The global line chart settings are stored in  Chart.overrides.line . Changing the global options only affects charts created after the change. Existing charts are not changed. \n For example, to configure all line charts with  spanGaps = true  you would do: \n Chart . overrides . line . spanGaps  =   true ; \n Data Structure \n All of the supported  data structures  can be used with line charts. \n Stacked Area Chart \n Line charts can be configured into stacked area charts by changing the settings on the y-axis to enable stacking. Stacked area charts can be used to show how one data trend is made up of a number of smaller pieces. \n const  stackedLine  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             y :   { \n                 stacked :   true \n             } \n         } \n     } \n } ) ; \n Vertical Line Chart \n A vertical line chart is a variation on the horizontal line chart.\nTo achieve this you will have to set the  indexAxis  property in the options object to  'y' .\nThe default for this property is  'x'  and thus will show horizontal lines. \n \nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [{\n    axis: 'y',\n    label: 'My First Dataset',\n    data: [65, 59, 80, 81, 56, 55, 40],\n    fill: false,\n    backgroundColor: [\n      'rgba(255, 99, 132, 0.2)',\n      'rgba(255, 159, 64, 0.2)',\n      'rgba(255, 205, 86, 0.2)',\n      'rgba(75, 192, 192, 0.2)',\n      'rgba(54, 162, 235, 0.2)',\n      'rgba(153, 102, 255, 0.2)',\n      'rgba(201, 203, 207, 0.2)'\n    ],\n    borderColor: [\n      'rgb(255, 99, 132)',\n      'rgb(255, 159, 64)',\n      'rgb(255, 205, 86)',\n      'rgb(75, 192, 192)',\n      'rgb(54, 162, 235)',\n      'rgb(153, 102, 255)',\n      'rgb(201, 203, 207)'\n    ],\n    borderWidth: 1\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    indexAxis: 'y',\n    scales: {\n      x: {\n        beginAtZero: true\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Config Options \n The configuration options for the vertical line chart are the same as for the  line chart . However, any options specified on the x-axis in a line chart, are applied to the y-axis in a vertical line chart. \n Internal data format \n {x, y} \n"},{title:"Mixed Chart Types",frontmatter:{},regularPath:"/charts/mixed.html",relativePath:"charts/mixed.md",key:"v-3f8fac2f",path:"/charts/mixed.html",headers:[{level:2,title:"Drawing order",slug:"drawing-order"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Mixed Chart Types \n With Chart.js, it is possible to create mixed charts that are a combination of two or more different chart types. A common example is a bar chart that also includes a line dataset. \n When creating a mixed chart, we specify the chart type on each dataset. \n const  mixedChart  =   new   Chart ( ctx ,   { \n     data :   { \n         datasets :   [ { \n             type :   'bar' , \n             label :   'Bar Dataset' , \n             data :   [ 10 ,   20 ,   30 ,   40 ] \n         } ,   { \n             type :   'line' , \n             label :   'Line Dataset' , \n             data :   [ 50 ,   50 ,   50 ,   50 ] , \n         } ] , \n         labels :   [ 'January' ,   'February' ,   'March' ,   'April' ] \n     } , \n     options :  options\n } ) ; \n \n At this point, we have a chart rendering how we'd like. It's important to note that the default options for the charts are only considered at the dataset level and are not merged at the chart level in this case. \n \nconst data = {\n  labels: [\n    'January',\n    'February',\n    'March',\n    'April'\n  ],\n  datasets: [{\n    type: 'bar',\n    label: 'Bar Dataset',\n    data: [10, 20, 30, 40],\n    borderColor: 'rgb(255, 99, 132)',\n    backgroundColor: 'rgba(255, 99, 132, 0.2)'\n  }, {\n    type: 'line',\n    label: 'Line Dataset',\n    data: [50, 50, 50, 50],\n    fill: false,\n    borderColor: 'rgb(54, 162, 235)'\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    scales: {\n      y: {\n        beginAtZero: true\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Drawing order \n By default, datasets are drawn such that the first one is top-most. This can be altered by specifying  order  option to datasets.  order  defaults to  0 . Note that this also affects stacking, legend, and tooltip. So it's essentially the same as reordering the datasets. \n The  order  property behaves like a weight instead of a specific order, so the higher the number, the sooner that dataset is drawn on the canvas and thus other datasets with a lower order number will get drawn over it. \n const  mixedChart  =   new   Chart ( ctx ,   { \n    type :   'bar' , \n    data :   { \n        datasets :   [ { \n            label :   'Bar Dataset' , \n            data :   [ 10 ,   20 ,   30 ,   40 ] , \n            // this dataset is drawn below \n            order :   2 \n        } ,   { \n            label :   'Line Dataset' , \n            data :   [ 10 ,   10 ,   10 ,   10 ] , \n            type :   'line' , \n            // this dataset is drawn on top \n            order :   1 \n        } ] , \n        labels :   [ 'January' ,   'February' ,   'March' ,   'April' ] \n    } , \n    options :  options\n } ) ; \n \n "},{title:"Radar Chart",frontmatter:{},regularPath:"/charts/radar.html",relativePath:"charts/radar.md",key:"v-18949c4e",path:"/charts/radar.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"General",slug:"general"},{level:3,title:"Point Styling",slug:"point-styling"},{level:3,title:"Line Styling",slug:"line-styling"},{level:3,title:"Interactions",slug:"interactions"},{level:2,title:"Scale Options",slug:"scale-options"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"Data Structure",slug:"data-structure"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radar Chart \n A radar chart is a way of showing multiple data points and the variation between them. \n They are often useful for comparing the points of two or more different data sets. \n \nconst data = {\n  labels: [\n    'Eating',\n    'Drinking',\n    'Sleeping',\n    'Designing',\n    'Coding',\n    'Cycling',\n    'Running'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [65, 59, 90, 81, 56, 55, 40],\n    fill: true,\n    backgroundColor: 'rgba(255, 99, 132, 0.2)',\n    borderColor: 'rgb(255, 99, 132)',\n    pointBackgroundColor: 'rgb(255, 99, 132)',\n    pointBorderColor: '#fff',\n    pointHoverBackgroundColor: '#fff',\n    pointHoverBorderColor: 'rgb(255, 99, 132)'\n  }, {\n    label: 'My Second Dataset',\n    data: [28, 48, 40, 19, 96, 27, 100],\n    fill: true,\n    backgroundColor: 'rgba(54, 162, 235, 0.2)',\n    borderColor: 'rgb(54, 162, 235)',\n    pointBackgroundColor: 'rgb(54, 162, 235)',\n    pointBorderColor: '#fff',\n    pointHoverBackgroundColor: '#fff',\n    pointHoverBorderColor: 'rgb(54, 162, 235)'\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data: data,\n  options: {\n    elements: {\n      line: {\n        borderWidth: 3\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.line  - options for all line datasets \n options.elements.line  - options for all  line elements \n options.elements.point  - options for all  point elements \n options  - options for the whole chart \n \n The radar chart allows a number of properties to be specified for each dataset. These are used to set display properties for a specific dataset. For example, the colour of a line is generally set this way. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n - \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderCapStyle \n string \n Yes \n - \n 'butt' \n \n \n borderColor \n Color \n Yes \n - \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderDash \n number[] \n Yes \n - \n [] \n \n \n borderDashOffset \n number \n Yes \n - \n 0.0 \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n - \n 'miter' \n \n \n borderWidth \n number \n Yes \n - \n 3 \n \n \n hoverBackgroundColor \n Color \n Yes \n - \n undefined \n \n \n hoverBorderCapStyle \n string \n Yes \n - \n undefined \n \n \n hoverBorderColor \n Color \n Yes \n - \n undefined \n \n \n hoverBorderDash \n number[] \n Yes \n - \n undefined \n \n \n hoverBorderDashOffset \n number \n Yes \n - \n undefined \n \n \n hoverBorderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n - \n undefined \n \n \n hoverBorderWidth \n number \n Yes \n - \n undefined \n \n \n clip \n number | object | false \n - \n - \n undefined \n \n \n data \n number[] \n - \n - \n required \n \n \n fill \n boolean | string \n Yes \n - \n false \n \n \n label \n string \n - \n - \n '' \n \n \n order \n number \n - \n - \n 0 \n \n \n tension \n number \n - \n - \n 0 \n \n \n pointBackgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n pointBorderColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n pointBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n pointHitRadius \n number \n Yes \n Yes \n 1 \n \n \n pointHoverBackgroundColor \n Color \n Yes \n Yes \n undefined \n \n \n pointHoverBorderColor \n Color \n Yes \n Yes \n undefined \n \n \n pointHoverBorderWidth \n number \n Yes \n Yes \n 1 \n \n \n pointHoverRadius \n number \n Yes \n Yes \n 4 \n \n \n pointRadius \n number \n Yes \n Yes \n 3 \n \n \n pointRotation \n number \n Yes \n Yes \n 0 \n \n \n pointStyle \n pointStyle \n Yes \n Yes \n 'circle' \n \n \n spanGaps \n boolean \n - \n - \n undefined \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n General \n \n \n \n Name \n Description \n \n \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n label \n The label for the dataset which appears in the legend and tooltips. \n \n \n order \n The drawing order of dataset. Also affects order for tooltip and legend.  more \n Point Styling \n The style of each point can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n pointBackgroundColor \n The fill color for points. \n \n \n pointBorderColor \n The border color for points. \n \n \n pointBorderWidth \n The width of the point border in pixels. \n \n \n pointHitRadius \n The pixel size of the non-displayed point that reacts to mouse events. \n \n \n pointRadius \n The radius of the point shape. If set to 0, the point is not rendered. \n \n \n pointRotation \n The rotation of the point in degrees. \n \n \n pointStyle \n Style of the point.  more... \n \n \n \n All these values, if  undefined , fallback first to the dataset options then to the associated  elements.point.*  options. \n Line Styling \n The style of the line can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n The line fill color. \n \n \n borderCapStyle \n Cap style of the line. See  MDN . \n \n \n borderColor \n The line color. \n \n \n borderDash \n Length and spacing of dashes. See  MDN . \n \n \n borderDashOffset \n Offset for line dashes. See  MDN . \n \n \n borderJoinStyle \n Line joint style. See  MDN . \n \n \n borderWidth \n The line width (in pixels). \n \n \n fill \n How to fill the area under the line. See  area charts . \n \n \n tension \n Bezier curve tension of the line. Set to 0 to draw straight lines. \n \n \n spanGaps \n If true, lines will be drawn between points with no or null data. If false, points with  null  data will create a break in the line. \n \n \n \n If the value is  undefined , the values fallback to the associated  elements.line.*  options. \n Interactions \n The interaction with each point can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n pointHoverBackgroundColor \n Point background color when hovered. \n \n \n pointHoverBorderColor \n Point border color when hovered. \n \n \n pointHoverBorderWidth \n Border width of point when hovered. \n \n \n pointHoverRadius \n The radius of the point when hovered. \n Scale Options \n The radar chart supports only a single scale. The options for this scale are defined in the  scales.r  property, which can be referenced from the  Linear Radial Axis page . \n options  =   { \n     scales :   { \n         r :   { \n             angleLines :   { \n                 display :   false \n             } , \n             suggestedMin :   50 , \n             suggestedMax :   100 \n         } \n     } \n } ; \n Default Options \n It is common to want to apply a configuration setting to all created radar charts. The global radar chart settings are stored in  Chart.overrides.radar . Changing the global options only affects charts created after the change. Existing charts are not changed. \n Data Structure \n The  data  property of a dataset for a radar chart is specified as an array of numbers. Each point in the data array corresponds to the label at the same index. \n data :   [ 20 ,   10 ] \n \n For a radar chart, to provide context of what each point means, we include an array of strings that show around each point in the chart. \n data :   { \n     labels :   [ 'Running' ,   'Swimming' ,   'Eating' ,   'Cycling' ] , \n     datasets :   [ { \n         data :   [ 20 ,   10 ,   4 ,   2 ] \n     } ] \n } \n Internal data format \n {x, y} \n"},{title:"Polar Area Chart",frontmatter:{},regularPath:"/charts/polar.html",relativePath:"charts/polar.md",key:"v-7ce84f69",path:"/charts/polar.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:3,title:"General",slug:"general"},{level:3,title:"Styling",slug:"styling"},{level:3,title:"Border Alignment",slug:"border-alignment"},{level:3,title:"Interactions",slug:"interactions"},{level:2,title:"Config Options",slug:"config-options"},{level:2,title:"Default Options",slug:"default-options"},{level:2,title:"Data Structure",slug:"data-structure"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Polar Area Chart \n Polar area charts are similar to pie charts, but each segment has the same angle - the radius of the segment differs depending on the value. \n This type of chart is often useful when we want to show a comparison data similar to a pie chart, but also show a scale of values for context. \n \nconst data = {\n  labels: [\n    'Red',\n    'Green',\n    'Yellow',\n    'Grey',\n    'Blue'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [11, 16, 7, 3, 14],\n    backgroundColor: [\n      'rgb(255, 99, 132)',\n      'rgb(75, 192, 192)',\n      'rgb(255, 205, 86)',\n      'rgb(201, 203, 207)',\n      'rgb(54, 162, 235)'\n    ]\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'polarArea',\n  data: data,\n  options: {}\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.polarArea  - options for all polarArea datasets \n options.elements.arc  - options for all  arc elements \n options  - options for the whole chart \n \n The following options can be included in a polar area chart dataset to configure options for that specific dataset. \n \n \n \n Name \n Type \n Scriptable \n Indexable \n Default \n \n \n \n \n backgroundColor \n Color \n Yes \n Yes \n 'rgba(0, 0, 0, 0.1)' \n \n \n borderAlign \n 'center' | 'inner' \n Yes \n Yes \n 'center' \n \n \n borderColor \n Color \n Yes \n Yes \n '#fff' \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n Yes \n undefined \n \n \n borderWidth \n number \n Yes \n Yes \n 2 \n \n \n clip \n number | object | false \n - \n - \n undefined \n \n \n data \n number[] \n - \n - \n required \n \n \n hoverBackgroundColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderColor \n Color \n Yes \n Yes \n undefined \n \n \n hoverBorderJoinStyle \n 'round' | 'bevel' | 'miter' \n Yes \n Yes \n undefined \n \n \n hoverBorderWidth \n number \n Yes \n Yes \n undefined \n \n \n circular \n boolean \n Yes \n Yes \n true \n \n \n \n All these values, if  undefined , fallback to the scopes described in  option resolution \n General \n \n \n \n Name \n Description \n \n \n \n \n clip \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea.  0  = clip at chartArea. Clipping can also be configured per side:  clip: {left: 5, top: false, right: -2, bottom: 0} \n Styling \n The style of each arc can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n backgroundColor \n arc background color. \n \n \n borderColor \n arc border color. \n \n \n borderJoinStyle \n arc border join style. See  MDN . \n \n \n borderWidth \n arc border width (in pixels). \n \n \n circular \n By default the Arc is curved. If  circular: false  the Arc will be flat. \n \n \n \n All these values, if  undefined , fallback to the associated  elements.arc.*  options. \n Border Alignment \n The following values are supported for  borderAlign . \n \n 'center'  (default) \n 'inner' \n \n When  'center'  is set, the borders of arcs next to each other will overlap. When  'inner'  is set, it is guaranteed that all the borders do not overlap. \n Interactions \n The interaction with each arc can be controlled with the following properties: \n \n \n \n Name \n Description \n \n \n \n \n hoverBackgroundColor \n arc background color when hovered. \n \n \n hoverBorderColor \n arc border color when hovered. \n \n \n hoverBorderJoinStyle \n arc border join style when hovered. See  MDN . \n \n \n hoverBorderWidth \n arc border width when hovered (in pixels). \n \n \n \n All these values, if  undefined , fallback to the associated  elements.arc.*  options. \n Config Options \n These are the customisation options specific to Polar Area charts. These options are looked up on access, and form together with the  global chart default options  the options of the chart. \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n animation.animateRotate \n boolean \n true \n If true, the chart will animate in with a rotation animation. This property is in the  options.animation  object. \n \n \n animation.animateScale \n boolean \n true \n If true, will animate scaling the chart from the center outwards. \n \n \n \n The polar area chart uses the  radialLinear  scale. Additional configuration is provided via the scale. \n Default Options \n We can also change these default values for each PolarArea type that is created, this object is available at  Chart.overrides.polarArea . Changing the global options only affects charts created after the change. Existing charts are not changed. \n For example, to configure all new polar area charts with  animateScale = false  you would do: \n Chart . overrides . polarArea . animation . animateScale  =   false ; \n Data Structure \n For a polar area chart, datasets need to contain an array of data points. The data points should be a number, Chart.js will total all of the numbers and calculate the relative proportion of each. \n You also need to specify an array of labels so that tooltips appear correctly for each slice. \n data  =   { \n     datasets :   [ { \n         data :   [ 10 ,   20 ,   30 ] \n     } ] , \n\n     // These labels appear in the legend and in the tooltips when hovering different arcs \n     labels :   [ \n         'Red' , \n         'Yellow' , \n         'Blue' \n     ] \n } ; \n \n "},{title:"Scatter Chart",frontmatter:{},regularPath:"/charts/scatter.html",relativePath:"charts/scatter.md",key:"v-afb8a42e",path:"/charts/scatter.html",headers:[{level:2,title:"Dataset Properties",slug:"dataset-properties"},{level:2,title:"Data Structure",slug:"data-structure"},{level:2,title:"Internal data format",slug:"internal-data-format"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Scatter Chart \n Scatter charts are based on basic line charts with the x axis changed to a linear axis. To use a scatter chart, data must be passed as objects containing X and Y properties. The example below creates a scatter chart with 4 points. \n \nconst data = {\n  datasets: [{\n    label: 'Scatter Dataset',\n    data: [{\n      x: -10,\n      y: 0\n    }, {\n      x: 0,\n      y: 10\n    }, {\n      x: 10,\n      y: 5\n    }, {\n      x: 0.5,\n      y: 5.5\n    }],\n    backgroundColor: 'rgb(255, 99, 132)'\n  }],\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    scales: {\n      x: {\n        type: 'linear',\n        position: 'bottom'\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Dataset Properties \n Namespaces: \n \n data.datasets[index]  - options for this dataset only \n options.datasets.scatter  - options for all scatter datasets \n options.elements.line  - options for all  line elements \n options.elements.point  - options for all  point elements \n options  - options for the whole chart \n \n The scatter chart supports all of the same properties as the  line chart .\nBy default, the scatter chart will override the showLine property of the line chart to  false . \n The index scale is of the type  linear . This means if you are using the labels array the values have to be numbers or parsable to numbers, the same applies to the object format for the keys. \n Data Structure \n Unlike the line chart where data can be supplied in two different formats, the scatter chart only accepts data in a point format. \n data :   [ { \n         x :   10 , \n         y :   20 \n     } ,   { \n         x :   15 , \n         y :   10 \n     } ] \n Internal data format \n {x, y} \n"},{title:"Animations",frontmatter:{},regularPath:"/configuration/animations.html",relativePath:"configuration/animations.md",key:"v-d2bee9be",path:"/configuration/animations.html",headers:[{level:2,title:"Animation configuration",slug:"animation-configuration"},{level:2,title:"animation",slug:"animation"},{level:2,title:"animations",slug:"animations-2"},{level:3,title:"Default animations",slug:"default-animations"},{level:2,title:"transitions",slug:"transitions"},{level:3,title:"Default transitions",slug:"default-transitions"},{level:2,title:"Disabling animation",slug:"disabling-animation"},{level:2,title:"Easing",slug:"easing"},{level:2,title:"Animation Callbacks",slug:"animation-callbacks"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Animations \n Chart.js animates charts out of the box. A number of options are provided to configure how the animation looks and how long it takes. \n \n \n \nconst data = {\n  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],\n  datasets: [{\n    label: 'Looping tension',\n    data: [65, 59, 80, 81, 26, 55, 40],\n    fill: false,\n    borderColor: 'rgb(75, 192, 192)',\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    animations: {\n      tension: {\n        duration: 1000,\n        easing: 'linear',\n        from: 1,\n        to: 0,\n        loop: true\n      }\n    },\n    scales: {\n      y: { // defining min and max so hiding the dataset does not change scale range\n        min: 0,\n        max: 100\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n \n \nconst data = {\n  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],\n  datasets: [{\n    label: 'Try hiding me',\n    data: [65, 59, 80, 81, 26, 55, 40],\n    fill: false,\n    borderColor: 'rgb(75, 192, 192)',\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    transitions: {\n      show: {\n        animations: {\n          x: {\n            from: 0\n          },\n          y: {\n            from: 0\n          }\n        }\n      },\n      hide: {\n        animations: {\n          x: {\n            to: 0\n          },\n          y: {\n            to: 0\n          }\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n Animation configuration \n Animation configuration consists of 3 keys. \n \n \n \n Name \n Type \n Details \n \n \n \n \n animation \n object \n animation \n \n \n animations \n object \n animations \n \n \n transitions \n object \n transitions \n \n \n \n These keys can be configured in following paths: \n \n `` - chart options \n datasets[type]  - dataset type options \n overrides[type]  - chart type options \n \n These paths are valid under  defaults  for global configuration and  options  for instance configuration. \n animation \n The default configuration is defined here:  core.animations.js \n Namespace:  options.animation \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n duration \n number \n 1000 \n The number of milliseconds an animation takes. \n \n \n easing \n string \n 'easeOutQuart' \n Easing function to use.  more... \n \n \n delay \n number \n undefined \n Delay before starting the animations. \n \n \n loop \n boolean \n undefined \n If set to  true , the animations loop endlessly. \n \n \n \n These defaults can be overridden in  options.animation  or  dataset.animation  and  tooltip.animation . These keys are also  Scriptable . \n animations \n Animations options configures which element properties are animated and how.\nIn addition to the main  animation configuration , the following options are available: \n Namespace:  options.animations[animation] \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n properties \n string[] \n key \n The property names this configuration applies to. Defaults to the key name of this object. \n \n \n type \n string \n typeof property \n Type of property, determines the interpolator used. Possible values:  'number' ,  'color'  and  'boolean' . Only really needed for  'color' , because  typeof  does not get that right. \n \n \n from \n number | Color | boolean \n undefined \n Start value for the animation. Current value is used when  undefined \n \n \n to \n number | Color | boolean \n undefined \n End value for the animation. Updated value is used when  undefined \n \n \n fn \n <T>(from: T, to: T, factor: number) => T; \n undefined \n Optional custom interpolator, instead of using a predefined interpolator from  type \n Default animations \n \n \n \n Name \n Option \n Value \n \n \n \n \n numbers \n properties \n ['x', 'y', 'borderWidth', 'radius', 'tension'] \n \n \n numbers \n type \n 'number' \n \n \n colors \n properties \n ['color', 'borderColor', 'backgroundColor'] \n \n \n colors \n type \n 'color' \n \n \n \n Note \n These default animations are overridden by most of the dataset controllers. \n transitions \n The core transitions are  'active' ,  'hide' ,  'reset' ,  'resize' ,  'show' .\nA custom transition can be used by passing a custom  mode  to  update .\nTransition extends the main  animation configuration  and  animations configuration . \n Default transitions \n Namespace:  options.transitions[mode] \n \n \n \n Mode \n Option \n Value \n Description \n \n \n \n \n 'active' \n animation.duration \n 400 \n Override default duration to 400ms for hover animations \n \n \n 'resize' \n animation.duration \n 0 \n Override default duration to 0ms (= no animation) for resize \n \n \n 'show' \n animations.colors \n { type: 'color', properties: ['borderColor', 'backgroundColor'], from: 'transparent' } \n Colors are faded in from transparent when dataset is shown using legend /  api . \n \n \n 'show' \n animations.visible \n { type: 'boolean', duration: 0 } \n Dataset visibility is immediately changed to true so the color transition from transparent is visible. \n \n \n 'hide' \n animations.colors \n { type: 'color', properties: ['borderColor', 'backgroundColor'], to: 'transparent' } \n Colors are faded to transparent when dataset id hidden using legend /  api . \n \n \n 'hide' \n animations.visible \n { type: 'boolean', easing: 'easeInExpo' } \n Visibility is changed to false at a very late phase of animation \n Disabling animation \n To disable an animation configuration, the animation node must be set to  false , with the exception for animation modes which can be disabled by setting the  duration  to  0 . \n chart . options . animation  =   false ;   // disables all animations \nchart . options . animations . colors  =   false ;   // disables animation defined by the collection of 'colors' properties \nchart . options . animations . x  =   false ;   // disables animation defined by the 'x' property \nchart . options . transitions . active . animation . duration  =   0 ;   // disables the animation for 'active' mode \n Easing \n Available options are: \n \n 'linear' \n 'easeInQuad' \n 'easeOutQuad' \n 'easeInOutQuad' \n 'easeInCubic' \n 'easeOutCubic' \n 'easeInOutCubic' \n 'easeInQuart' \n 'easeOutQuart' \n 'easeInOutQuart' \n 'easeInQuint' \n 'easeOutQuint' \n 'easeInOutQuint' \n 'easeInSine' \n 'easeOutSine' \n 'easeInOutSine' \n 'easeInExpo' \n 'easeOutExpo' \n 'easeInOutExpo' \n 'easeInCirc' \n 'easeOutCirc' \n 'easeInOutCirc' \n 'easeInElastic' \n 'easeOutElastic' \n 'easeInOutElastic' \n 'easeInBack' \n 'easeOutBack' \n 'easeInOutBack' \n 'easeInBounce' \n 'easeOutBounce' \n 'easeInOutBounce' \n \n See  Robert Penner's easing equations . \n Animation Callbacks \n The animation configuration provides callbacks which are useful for synchronizing an external draw to the chart animation.\nThe callbacks can be set only at main  animation configuration . \n Namespace:  options.animation \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n onProgress \n function \n null \n Callback called on each step of an animation. \n \n \n onComplete \n function \n null \n Callback called when all animations are completed. \n \n \n \n The callback is passed the following object: \n { \n   // Chart object \n   chart :  Chart , \n\n   // Number of animations still in progress \n   currentStep :  number , \n\n   // `true` for the initial animation of the chart \n   initial :  boolean , \n\n   // Total number of animations at the start of current animation \n   numSteps :  number , \n } \n \n The following example fills a progress bar during the chart animation. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         animation :   { \n             onProgress :   function ( animation )   { \n                progress . value  =  animation . currentStep  /  animation . numSteps ; \n             } \n         } \n     } \n } ) ; \n \n Another example usage of these callbacks can be found  in this progress bar sample.  which displays a progress bar showing how far along the animation is. \n"},{title:"Data Decimation",frontmatter:{},regularPath:"/configuration/decimation.html",relativePath:"configuration/decimation.md",key:"v-3eb5f9e1",path:"/configuration/decimation.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"},{level:2,title:"Decimation Algorithms",slug:"decimation-algorithms"},{level:3,title:"Largest Triangle Three Bucket (LTTB) Decimation",slug:"largest-triangle-three-bucket-lttb-decimation"},{level:3,title:"Min/Max Decimation",slug:"min-max-decimation"},{level:2,title:"Requirements",slug:"requirements"},{level:2,title:"Related Samples",slug:"related-samples"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Data Decimation \n The decimation plugin can be used with line charts to automatically decimate data at the start of the chart lifecycle. Before enabling this plugin, review the  requirements  to ensure that it will work with the chart you want to create. \n Configuration Options \n Namespace:  options.plugins.decimation , the global options for the plugin are defined in  Chart.defaults.plugins.decimation . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n enabled \n boolean \n false \n Is decimation enabled? \n \n \n algorithm \n string \n 'min-max' \n Decimation algorithm to use. See the  more... \n \n \n samples \n number \n \n If the  'lttb'  algorithm is used, this is the number of samples in the output dataset. Defaults to the canvas width to pick 1 sample per pixel. \n \n \n threshold \n number \n \n If the number of samples in the current axis range is above this value, the decimation will be triggered. Defaults to 4 times the canvas width. The number of point after decimation can be higher than the  threshold  value. \n Decimation Algorithms \n Decimation algorithm to use for data. Options are: \n \n 'lttb' \n 'min-max' \n Largest Triangle Three Bucket (LTTB) Decimation \n LTTB  decimation reduces the number of data points significantly. This is most useful for showing trends in data using only a few data points. \n Min/Max Decimation \n Min/max  decimation will preserve peaks in your data but could require up to 4 points for each pixel. This type of decimation would work well for a very noisy signal where you need to see data peaks. \n Requirements \n To use the decimation plugin, the following requirements must be met: \n \n The dataset must have an  indexAxis  of  'x' \n The dataset must be a line \n The X axis for the dataset must be either a  'linear'  or  'time'  type axis \n Data must not need parsing, i.e.  parsing  must be  false \n The dataset object must be mutable. The plugin stores the original data as  dataset._data  and then defines a new  data  property on the dataset. \n There must be more points on the chart than the threshold value. Take a look at the Configuration Options for more information. \n Related Samples \n \n Data Decimation Sample \n \n"},{title:"Canvas background",frontmatter:{},regularPath:"/configuration/canvas-background.html",relativePath:"configuration/canvas-background.md",key:"v-780ac3f6",path:"/configuration/canvas-background.html",lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Canvas background \n In some use cases you would want a background image or color over the whole canvas. There is no built-in support for this, the way you can achieve this is by writing a custom plugin. \n In the two example plugins underneath here you can see how you can draw a color or image to the canvas as background. This way of giving the chart a background is only necessary if you want to export the chart with that specific background.\nFor normal use you can set the background more easily with  CSS . \n \n \n \nconst data = {\n  labels: [\n    'Red',\n    'Blue',\n    'Yellow'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [300, 50, 100],\n    backgroundColor: [\n      'rgb(255, 99, 132)',\n      'rgb(54, 162, 235)',\n      'rgb(255, 205, 86)'\n    ],\n    hoverOffset: 4\n  }]\n};\n//  \n\n//  \n// Note: changes to the plugin code is not reflected to the chart, because the plugin is loaded at chart construction time and editor changes only trigger an chart.update().\nconst plugin = {\n  id: 'custom_canvas_background_color',\n  beforeDraw: (chart) => {\n    const {ctx} = chart;\n    ctx.save();\n    ctx.globalCompositeOperation = 'destination-over';\n    ctx.fillStyle = 'lightGreen';\n    ctx.fillRect(0, 0, chart.width, chart.height);\n    ctx.restore();\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'doughnut',\n  data: data,\n  plugins: [plugin],\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n \n \nconst data = {\n  labels: [\n    'Red',\n    'Blue',\n    'Yellow'\n  ],\n  datasets: [{\n    label: 'My First Dataset',\n    data: [300, 50, 100],\n    backgroundColor: [\n      'rgb(255, 99, 132)',\n      'rgb(54, 162, 235)',\n      'rgb(255, 205, 86)'\n    ],\n    hoverOffset: 4\n  }]\n};\n//  \n\n//  \n// Note: changes to the plugin code is not reflected to the chart, because the plugin is loaded at chart construction time and editor changes only trigger an chart.update().\nconst image = new Image();\nimage.src = 'https://www.chartjs.org/img/chartjs-logo.svg';\n\nconst plugin = {\n  id: 'custom_canvas_background_image',\n  beforeDraw: (chart) => {\n    if (image.complete) {\n      const ctx = chart.ctx;\n      const {top, left, width, height} = chart.chartArea;\n      const x = left + width / 2 - image.width / 2;\n      const y = top + height / 2 - image.height / 2;\n      ctx.drawImage(image, x, y);\n    } else {\n      image.onload = () => chart.draw();\n    }\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'doughnut',\n  data: data,\n  plugins: [plugin],\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> \n \n"},{title:"Device Pixel Ratio",frontmatter:{},regularPath:"/configuration/device-pixel-ratio.html",relativePath:"configuration/device-pixel-ratio.md",key:"v-4c3fbf36",path:"/configuration/device-pixel-ratio.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Device Pixel Ratio \n By default the chart's canvas will use a 1:1 pixel ratio, unless the physical display has a higher pixel ratio (e.g. Retina displays). \n For applications where a chart will be converted to a bitmap, or printed to a higher DPI medium it can be desirable to render the chart at a higher resolution than the default. \n Setting  devicePixelRatio  to a value other than 1 will force the canvas size to be scaled by that amount, relative to the container size. There should be no visible difference on screen; the difference will only be visible when the image is zoomed or printed. \n Configuration Options \n Namespace:  options \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n devicePixelRatio \n number \n window.devicePixelRatio \n Override the window's default devicePixelRatio. \n \n \n \n"},{title:"Elements",frontmatter:{},regularPath:"/configuration/elements.html",relativePath:"configuration/elements.md",key:"v-48b49fde",path:"/configuration/elements.html",headers:[{level:2,title:"Global Configuration",slug:"global-configuration"},{level:2,title:"Point Configuration",slug:"point-configuration"},{level:3,title:"Point Styles",slug:"point-styles"},{level:2,title:"Line Configuration",slug:"line-configuration"},{level:2,title:"Bar Configuration",slug:"bar-configuration"},{level:2,title:"Arc Configuration",slug:"arc-configuration"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Elements \n While chart types provide settings to configure the styling of each dataset, you sometimes want to style  all datasets the same way . A common example would be to stroke all of the bars in a bar chart with the same colour but change the fill per dataset. Options can be configured for four different types of elements:  arc ,  lines ,  points , and  bars . When set, these options apply to all objects of that type unless specifically overridden by the configuration attached to a dataset. \n Global Configuration \n The element options can be specified per chart or globally. The global options for elements are defined in  Chart.defaults.elements . For example, to set the border width of all bar charts globally you would do: \n Chart . defaults . elements . bar . borderWidth  =   2 ; \n Point Configuration \n Point elements are used to represent the points in a line, radar or bubble chart. \n Namespace:  options.elements.point , global point options:  Chart.defaults.elements.point . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n radius \n number \n 3 \n Point radius. \n \n \n pointStyle \n pointStyle \n 'circle' \n Point style. \n \n \n rotation \n number \n 0 \n Point rotation (in degrees). \n \n \n backgroundColor \n Color \n Chart.defaults.backgroundColor \n Point fill color. \n \n \n borderWidth \n number \n 1 \n Point stroke width. \n \n \n borderColor \n Color \n 'Chart.defaults.borderColor \n Point stroke color. \n \n \n hitRadius \n number \n 1 \n Extra radius added to point radius for hit detection. \n \n \n hoverRadius \n number \n 4 \n Point radius when hovered. \n \n \n hoverBorderWidth \n number \n 1 \n Stroke width when hovered. \n Point Styles \n Types \n The  pointStyle  argument accepts the following type of inputs:  string ,  Image  and  HTMLCanvasElement \n Info \n When a string is provided, the following values are supported: \n \n 'circle' \n 'cross' \n 'crossRot' \n 'dash' \n 'line' \n 'rect' \n 'rectRounded' \n 'rectRot' \n 'star' \n 'triangle' \n \n If the value is an image or a canvas element, that image or canvas element is drawn on the canvas using  drawImage . \n Line Configuration \n Line elements are used to represent the line in a line chart. \n Namespace:  options.elements.line , global line options:  Chart.defaults.elements.line . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n tension \n number \n 0 \n Bézier curve tension ( 0  for no Bézier curves). \n \n \n backgroundColor \n Color \n Chart.defaults.backgroundColor \n Line fill color. \n \n \n borderWidth \n number \n 3 \n Line stroke width. \n \n \n borderColor \n Color \n Chart.defaults.borderColor \n Line stroke color. \n \n \n borderCapStyle \n string \n 'butt' \n Line cap style. See  MDN . \n \n \n borderDash \n number[] \n [] \n Line dash. See  MDN . \n \n \n borderDashOffset \n number \n 0.0 \n Line dash offset. See  MDN . \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n 'miter' \n Line join style. See  MDN . \n \n \n capBezierPoints \n boolean \n true \n true  to keep Bézier control inside the chart,  false  for no restriction. \n \n \n cubicInterpolationMode \n string \n 'default' \n Interpolation mode to apply.  See more... \n \n \n fill \n boolean | string \n false \n How to fill the area under the line. See  area charts . \n \n \n stepped \n boolean \n false \n true  to show the line as a stepped line ( tension  will be ignored). \n Bar Configuration \n Bar elements are used to represent the bars in a bar chart. \n Namespace:  options.elements.bar , global bar options:  Chart.defaults.elements.bar . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n backgroundColor \n Color \n Chart.defaults.backgroundColor \n Bar fill color. \n \n \n borderWidth \n number \n 0 \n Bar stroke width. \n \n \n borderColor \n Color \n Chart.defaults.borderColor \n Bar stroke color. \n \n \n borderSkipped \n string \n 'start' \n Skipped (excluded) border:  'start' ,  'end' ,  'middle' ,  'bottom' ,  'left' ,  'top' ,  'right'  or  false . \n \n \n borderRadius \n number | object \n 0 \n The bar border radius (in pixels). \n \n \n inflateAmount \n number | 'auto' \n 'auto' \n The amount of pixels to inflate the bar rectangle(s) when drawing. \n \n \n pointStyle \n string | Image | HTMLCanvasElement \n 'circle' \n Style of the point for legend. \n Arc Configuration \n Arcs are used in the polar area, doughnut and pie charts. \n Namespace:  options.elements.arc , global arc options:  Chart.defaults.elements.arc . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n angle  - for polar only \n number \n circumference / (arc count) \n Arc angle to cover. \n \n \n backgroundColor \n Color \n Chart.defaults.backgroundColor \n Arc fill color. \n \n \n borderAlign \n 'center' | 'inner' \n 'center' \n Arc stroke alignment. \n \n \n borderColor \n Color \n '#fff' \n Arc stroke color. \n \n \n borderJoinStyle \n 'round' | 'bevel' | 'miter' \n 'bevel' | 'round' \n Line join style. See  MDN . The default is  'round'  when  borderAlign  is  'inner' \n \n \n borderWidth \n number \n 2 \n Arc stroke width. \n \n \n circular \n boolean \n true \n By default the Arc is curved. If  circular: false  the Arc will be flat \n \n \n \n"},{title:"Configuration",frontmatter:{},regularPath:"/configuration/",relativePath:"configuration/index.md",key:"v-1c7c991e",path:"/configuration/",headers:[{level:2,title:"Configuration object structure",slug:"configuration-object-structure"},{level:3,title:"type",slug:"type"},{level:3,title:"data",slug:"data"},{level:3,title:"options",slug:"options"},{level:3,title:"plugins",slug:"plugins"},{level:2,title:"Global Configuration",slug:"global-configuration"},{level:2,title:"Dataset Configuration",slug:"dataset-configuration"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Configuration \n The configuration is used to change how the chart behaves. There are properties to control styling, fonts, the legend, etc. \n Configuration object structure \n The top level structure of Chart.js configuration: \n const  config  =   { \n   type :   'line' \n   data :   { } \n   options :   { } \n   plugins :   [ ] \n } \n type \n Chart type determines the main type of the chart. \n note  A dataset can override the  type , this is how mixed charts are constructed. \n data \n See  Data Structures  for details. \n options \n Majority of the documentation talks about these options. \n plugins \n Inline plugins can be included in this array. It is an alternative way of adding plugins for single chart (vs registering the plugin globally).\nMore about plugins in the  developers section . \n Global Configuration \n This concept was introduced in Chart.js 1.0 to keep configuration  DRY , and allow for changing options globally across chart types, avoiding the need to specify options for each instance, or the default for a particular chart type. \n Chart.js merges the options object passed to the chart with the global configuration using chart type defaults and scales defaults appropriately. This way you can be as specific as you would like in your individual chart configuration, while still changing the defaults for all chart types where applicable. The global general options are defined in  Chart.defaults . The defaults for each chart type are discussed in the documentation for that chart type. \n The following example would set the interaction mode to 'nearest' for all charts where this was not overridden by the chart type defaults or the options passed to the constructor on creation. \n Chart . defaults . interaction . mode  =   'nearest' ; \n\n // Interaction mode is set to nearest because it was not overridden here \n const  chartInteractionModeNearest  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data\n } ) ; \n\n // This chart would have the interaction mode that was passed in \n const  chartDifferentInteractionMode  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             // Overrides the global setting \n             mode :   'index' \n         } \n     } \n } ) ; \n Dataset Configuration \n Options may be configured directly on the dataset. The dataset options can be changed at multiple different levels. See  options  for details on how the options are resolved. \n The following example would set the  showLine  option to 'false' for all line datasets except for those overridden by options passed to the dataset on creation. \n // Do not show lines for all datasets by default \nChart . defaults . datasets . line . showLine  =   false ; \n\n // This chart would show a line only for the third dataset \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             data :   [ 0 ,   0 ] , \n         } ,   { \n             data :   [ 0 ,   1 ] \n         } ,   { \n             data :   [ 1 ,   0 ] , \n             showLine :   true   // overrides the `line` dataset default \n         } ,   { \n             type :   'scatter' ,   // 'line' dataset default does not affect this dataset since it's a 'scatter' \n             data :   [ 1 ,   1 ] \n         } ] \n     } \n } ) ; \n \n "},{title:"Interactions",frontmatter:{},regularPath:"/configuration/interactions.html",relativePath:"configuration/interactions.md",key:"v-3e9146bd",path:"/configuration/interactions.html",headers:[{level:2,title:"Events",slug:"events"},{level:3,title:"Event Option",slug:"event-option"},{level:3,title:"Converting Events to Data Values",slug:"converting-events-to-data-values"},{level:2,title:"Modes",slug:"modes"},{level:3,title:"point",slug:"point"},{level:3,title:"nearest",slug:"nearest"},{level:3,title:"index",slug:"index"},{level:3,title:"dataset",slug:"dataset"},{level:3,title:"x",slug:"x"},{level:3,title:"y",slug:"y"},{level:2,title:"Custom Interaction Modes",slug:"custom-interaction-modes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Interactions \n Namespace:  options.interaction , the global interaction configuration is at  Chart.defaults.interaction . To configure which events trigger chart interactions, see  events . \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n mode \n string \n 'nearest' \n Sets which elements appear in the interaction. See  Interaction Modes  for details. \n \n \n intersect \n boolean \n true \n if true, the interaction mode only applies when the mouse position intersects an item on the chart. \n \n \n axis \n string \n 'x' \n Can be set to  'x' ,  'y' ,  'xy'  or  'r'  to define which directions are used in calculating distances. Defaults to  'x'  for  'index'  mode and  'xy'  in  dataset  and  'nearest'  modes. \n \n \n includeInvisible \n boolean \n false \n if true, the invisible points that are outside of the chart area will also be included when evaluating interactions. \n \n \n \n By default, these options apply to both the hover and tooltip interactions. The same options can be set in the  options.hover  namespace, in which case they will only affect the hover interaction. Similarly, the options can be set in the  options.plugins.tooltip  namespace to independently configure the tooltip interactions. \n Events \n The following properties define how the chart interacts with events.\nNamespace:  options \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n events \n string[] \n ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'] \n The  events  option defines the browser events that the chart should listen to for. Each of these events trigger hover and are passed to plugins.  more... \n \n \n onHover \n function \n null \n Called when any of the events fire over chartArea. Passed the event, an array of active elements (bars, points, etc), and the chart. \n \n \n onClick \n function \n null \n Called if the event is of type  'mouseup' ,  'click'  or ' 'contextmenu'  over chartArea. Passed the event, an array of active elements, and the chart. \n Event Option \n For example, to have the chart only respond to click events, you could do: \n const  chart  =   new   Chart ( ctx ,   { \n   type :   'line' , \n   data :  data , \n   options :   { \n     // This chart will not respond to mousemove, etc \n     events :   [ 'click' ] \n   } \n } ) ; \n \n Events for each plugin can be further limited by defining (allowed) events array in plugin options: \n const  chart  =   new   Chart ( ctx ,   { \n   type :   'line' , \n   data :  data , \n   options :   { \n     // All of these (default) events trigger a hover and are passed to all plugins, \n     // unless limited at plugin options \n     events :   [ 'mousemove' ,   'mouseout' ,   'click' ,   'touchstart' ,   'touchmove' ] , \n     plugins :   { \n       tooltip :   { \n         // Tooltip will only receive click events \n         events :   [ 'click' ] \n       } \n     } \n   } \n } ) ; \n \n Events that do not fire over chartArea, like  mouseout , can be captured using a simple plugin: \n const  chart  =   new   Chart ( ctx ,   { \n   type :   'line' , \n   data :  data , \n   options :   { \n     // these are the default events: \n     // events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'], \n   } , \n   plugins :   [ { \n     id :   'myEventCatcher' , \n     beforeEvent ( chart ,  args ,  pluginOptions )   { \n       const  event  =  args . event ; \n       if   ( event . type  ===   'mouseout' )   { \n         // process the event \n       } \n     } \n   } ] \n } ) ; \n \n For more information about plugins, see  Plugins \n Converting Events to Data Values \n A common occurrence is taking an event, such as a click, and finding the data coordinates on the chart where the event occurred. Chart.js provides helpers that make this a straightforward process. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         onClick :   ( e )   =>   { \n             const  canvasPosition  =  Chart . helpers . getRelativePosition ( e ,  chart ) ; \n\n             // Substitute the appropriate scale IDs \n             const  dataX  =  chart . scales . x . getValueForPixel ( canvasPosition . x ) ; \n             const  dataY  =  chart . scales . y . getValueForPixel ( canvasPosition . y ) ; \n         } \n     } \n } ) ; \n \n When using a bundler, the helper functions have to be imported seperatly, for a full explanation of this please head over to the  integration  page \n Modes \n When configuring the interaction with the graph via  interaction ,  hover  or  tooltips , a number of different modes are available. \n options.hover  and  options.plugins.tooltip  extend from  options.interaction . So if  mode ,  intersect  or any other common settings are configured only in  options.interaction , both hover and tooltips obey that. \n The modes are detailed below and how they behave in conjunction with the  intersect  setting. \n See how different modes work with the tooltip in  tooltip interactions sample \n point \n Finds all of the items that intersect the point. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'point' \n         } \n     } \n } ) ; \n nearest \n Gets the items that are at the nearest distance to the point. The nearest item is determined based on the distance to the center of the chart item (point, bar). You can use the  axis  setting to define which coordinates are considered in distance calculation. If  intersect  is true, this is only triggered when the mouse position intersects an item in the graph. This is very useful for combo charts where points are hidden behind bars. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'nearest' \n         } \n     } \n } ) ; \n index \n Finds item at the same index. If the  intersect  setting is true, the first intersecting item is used to determine the index in the data. If  intersect  false the nearest item, in the x direction, is used to determine the index. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'index' \n         } \n     } \n } ) ; \n \n To use index mode in a chart like the horizontal bar chart, where we search along the y direction, you can use the  axis  setting introduced in v2.7.0. By setting this value to  'y'  on the y direction is used. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'bar' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'index' , \n             axis :   'y' \n         } \n     } \n } ) ; \n dataset \n Finds items in the same dataset. If the  intersect  setting is true, the first intersecting item is used to determine the index in the data. If  intersect  false the nearest item is used to determine the index. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'dataset' \n         } \n     } \n } ) ; \n x \n Returns all items that would intersect based on the  X  coordinate of the position only. Would be useful for a vertical cursor implementation. Note that this only applies to cartesian charts. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'x' \n         } \n     } \n } ) ; \n y \n Returns all items that would intersect based on the  Y  coordinate of the position. This would be useful for a horizontal cursor implementation. Note that this only applies to cartesian charts. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'y' \n         } \n     } \n } ) ; \n Custom Interaction Modes \n New modes can be defined by adding functions to the  Chart.Interaction.modes  map.  You can use the  Chart.Interaction.evaluateInteractionItems  function to help implement these. \n Example: \n import   {  Interaction  }   from   'chart.js' ; \n import   {  getRelativePosition  }   from   'chart.js/helpers' ; \n\n /**\n * Custom interaction mode\n * @function Interaction.modes.myCustomMode\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {InteractionOptions} options - options to use\n * @param {boolean} [useFinalPosition] - use final element position (animation target)\n * @return {InteractionItem[]} - items that are found\n */ \nInteraction . modes . myCustomMode   =   function ( chart ,  e ,  options ,  useFinalPosition )   { \n   const  position  =   getRelativePosition ( e ,  chart ) ; \n\n   const  items  =   [ ] ; \n  Interaction . evaluateInteractionItems ( chart ,   'x' ,  position ,   ( element ,  datasetIndex ,  index )   =>   { \n     if   ( element . inXRange ( position . x ,  useFinalPosition )   &&   myCustomLogic ( element ) )   { \n      items . push ( { element ,  datasetIndex ,  index } ) ; \n     } \n   } ) ; \n   return  items ; \n } ; \n\n // Then, to use it... \n new   Chart . js ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         interaction :   { \n             mode :   'myCustomMode' \n         } \n     } \n } ) \n \n If you're using TypeScript, you'll also need to register the new mode: \n declare   module   'chart.js'   { \n   interface   InteractionModeMap   { \n    myCustomMode :  InteractionModeFunction ; \n   } \n } \n \n "},{title:"Layout",frontmatter:{},regularPath:"/configuration/layout.html",relativePath:"configuration/layout.md",key:"v-773a2a6b",path:"/configuration/layout.html",lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Layout \n Namespace:  options.layout , the global options for the chart layout is defined in  Chart.defaults.layout . \n \n \n \n Name \n Type \n Default \n Scriptable \n Description \n \n \n \n \n autoPadding \n boolean \n true \n No \n Apply automatic padding so visible elements are completely drawn. \n \n \n padding \n Padding \n 0 \n Yes \n The padding to add inside the chart. \n \n \n \n"},{title:"Legend",frontmatter:{},regularPath:"/configuration/legend.html",relativePath:"configuration/legend.md",key:"v-6b745d65",path:"/configuration/legend.html",headers:[{level:2,title:"Configuration options",slug:"configuration-options"},{level:2,title:"Position",slug:"position"},{level:2,title:"Align",slug:"align"},{level:2,title:"Legend Label Configuration",slug:"legend-label-configuration"},{level:2,title:"Legend Title Configuration",slug:"legend-title-configuration"},{level:2,title:"Legend Item Interface",slug:"legend-item-interface"},{level:2,title:"Example",slug:"example"},{level:2,title:"Custom On Click Actions",slug:"custom-on-click-actions"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Legend \n The chart legend displays data about the datasets that are appearing on the chart. \n Configuration options \n Namespace:  options.plugins.legend , the global options for the chart legend is defined in  Chart.defaults.plugins.legend . \n WARNING \n The doughnut, pie, and polar area charts override the legend defaults. To change the overrides for those chart types, the options are defined in  Chart.overrides[type].plugins.legend . \n \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n display \n boolean \n true \n Is the legend shown? \n \n \n position \n string \n 'top' \n Position of the legend.  more... \n \n \n align \n string \n 'center' \n Alignment of the legend.  more... \n \n \n maxHeight \n number \n \n Maximum height of the legend, in pixels \n \n \n maxWidth \n number \n \n Maximum width of the legend, in pixels \n \n \n fullSize \n boolean \n true \n Marks that this box should take the full width/height of the canvas (moving other boxes). This is unlikely to need to be changed in day-to-day use. \n \n \n onClick \n function \n \n A callback that is called when a click event is registered on a label item. Arguments:  [event, legendItem, legend] . \n \n \n onHover \n function \n \n A callback that is called when a 'mousemove' event is registered on top of a label item. Arguments:  [event, legendItem, legend] . \n \n \n onLeave \n function \n \n A callback that is called when a 'mousemove' event is registered outside of a previously hovered label item. Arguments:  [event, legendItem, legend] . \n \n \n reverse \n boolean \n false \n Legend will show datasets in reverse order. \n \n \n labels \n object \n \n See the  Legend Label Configuration  section below. \n \n \n rtl \n boolean \n \n true  for rendering the legends from right to left. \n \n \n textDirection \n string \n canvas' default \n This will force the text direction  'rtl'  or  'ltr'  on the canvas for rendering the legend, regardless of the css specified on the canvas \n \n \n title \n object \n \n See the  Legend Title Configuration  section below. \n Position \n Position of the legend. Options are: \n \n 'top' \n 'left' \n 'bottom' \n 'right' \n 'chartArea' \n \n When using the  'chartArea'  option the legend position is at the moment not configurable, it will always be on the left side of the chart in the middle. \n Align \n Alignment of the legend. Options are: \n \n 'start' \n 'center' \n 'end' \n \n Defaults to  'center'  for unrecognized values. \n Legend Label Configuration \n Namespace:  options.plugins.legend.labels \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n boxWidth \n number \n 40 \n Width of coloured box. \n \n \n boxHeight \n number \n font.size \n Height of the coloured box. \n \n \n color \n Color \n Chart.defaults.color \n Color of label and the strikethrough. \n \n \n font \n Font \n Chart.defaults.font \n See  Fonts \n \n \n padding \n number \n 10 \n Padding between rows of colored boxes. \n \n \n generateLabels \n function \n \n Generates legend items for each thing in the legend. Default implementation returns the text + styling for the color box. See  Legend Item  for details. \n \n \n filter \n function \n null \n Filters legend items out of the legend. Receives 2 parameters, a  Legend Item  and the chart data. \n \n \n sort \n function \n null \n Sorts legend items. Type is :  sort(a: LegendItem, b: LegendItem, data: ChartData): number; . Receives 3 parameters, two  Legend Items  and the chart data. The return value of the function is a number that indicates the order of the two legend item parameters. The ordering matches the  return value  of  Array.prototype.sort() \n \n \n pointStyle \n pointStyle \n 'circle' \n If specified, this style of point is used for the legend. Only used if  usePointStyle  is true. \n \n \n textAlign \n string \n 'center' \n Horizontal alignment of the label text. Options are:  'left' ,  'right'  or  'center' . \n \n \n usePointStyle \n boolean \n false \n Label style will match corresponding point style (size is based on pointStyleWidth or the minimum value between boxWidth and font.size). \n \n \n pointStyleWidth \n number \n null \n If  usePointStyle  is true, the width of the point style used for the legend (only for  circle ,  rect  and  line  point stlye). \n Legend Title Configuration \n Namespace:  options.plugins.legend.title \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n color \n Color \n Chart.defaults.color \n Color of text. \n \n \n display \n boolean \n false \n Is the legend title displayed. \n \n \n font \n Font \n Chart.defaults.font \n See  Fonts \n \n \n padding \n Padding \n 0 \n Padding around the title. \n \n \n text \n string \n \n The string title. \n Legend Item Interface \n Items passed to the legend  onClick  function are the ones returned from  labels.generateLabels . These items must implement the following interface. \n { \n     // Label that will be displayed \n     text :  string , \n\n     // Border radius of the legend item. \n     // Introduced in 3.1.0 \n    borderRadius ? :  number  |  BorderRadius , \n\n     // Index of the associated dataset \n     datasetIndex :  number , \n\n     // Fill style of the legend box \n     fillStyle :  Color , \n\n     // Text color \n     fontColor :  Color , \n\n     // If true, this item represents a hidden dataset. Label will be rendered with a strike-through effect \n     hidden :  boolean , \n\n     // For box border. See https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap \n     lineCap :  string , \n\n     // For box border. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash \n     lineDash :  number [ ] , \n\n     // For box border. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset \n     lineDashOffset :  number , \n\n     // For box border. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin \n     lineJoin :  string , \n\n     // Width of box border \n     lineWidth :  number , \n\n     // Stroke style of the legend box \n     strokeStyle :  Color , \n\n     // Point style of the legend box (only used if usePointStyle is true) \n     pointStyle :  string  |  Image  |  HTMLCanvasElement , \n\n     // Rotation of the point in degrees (only used if usePointStyle is true) \n     rotation :  number\n } \n Example \n The following example will create a chart with the legend enabled and turn all of the text red in color. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'bar' , \n     data :  data , \n     options :   { \n         plugins :   { \n             legend :   { \n                 display :   true , \n                 labels :   { \n                     color :   'rgb(255, 99, 132)' \n                 } \n             } \n         } \n     } \n } ) ; \n Custom On Click Actions \n It can be common to want to trigger different behaviour when clicking an item in the legend. This can be easily achieved using a callback in the config object. \n The default legend click handler is: \n function ( e ,  legendItem ,  legend )   { \n     const  index  =  legendItem . datasetIndex ; \n     const  ci  =  legend . chart ; \n     if   ( ci . isDatasetVisible ( index ) )   { \n        ci . hide ( index ) ; \n        legendItem . hidden  =   true ; \n     }   else   { \n        ci . show ( index ) ; \n        legendItem . hidden  =   false ; \n     } \n } \n \n Lets say we wanted instead to link the display of the first two datasets. We could change the click handler accordingly. \n const  defaultLegendClickHandler  =  Chart . defaults . plugins . legend . onClick ; \n const  pieDoughnutLegendClickHandler  =  Chart . controllers . doughnut . overrides . plugins . legend . onClick ; \n const   newLegendClickHandler   =   function   ( e ,  legendItem ,  legend )   { \n     const  index  =  legendItem . datasetIndex ; \n     const  type  =  legend . chart . config . type ; \n\n     if   ( index  >   1 )   { \n         // Do the original logic \n         if   ( type  ===   'pie'   ||  type  ===   'doughnut' )   { \n             pieDoughnutLegendClickHandler ( e ,  legendItem ,  legend ) \n         }   else   { \n             defaultLegendClickHandler ( e ,  legendItem ,  legend ) ; \n         } \n\n     }   else   { \n         let  ci  =  legend . chart ; \n         [ \n            ci . getDatasetMeta ( 0 ) , \n            ci . getDatasetMeta ( 1 ) \n         ] . forEach ( function ( meta )   { \n            meta . hidden  =  meta . hidden  ===   null   ?   ! ci . data . datasets [ index ] . hidden  :   null ; \n         } ) ; \n        ci . update ( ) ; \n     } \n } ; \n\n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             legend :   { \n                 onClick :  newLegendClickHandler\n             } \n         } \n     } \n } ) ; \n \n Now when you click the legend in this chart, the visibility of the first two datasets will be linked together. \n"},{title:"Locale",frontmatter:{},regularPath:"/configuration/locale.html",relativePath:"configuration/locale.md",key:"v-80c4dfea",path:"/configuration/locale.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Locale \n For applications where the numbers of ticks on scales must be formatted accordingly with a language sensitive number formatting, you can enable this kind of formatting by setting the  locale  option. \n The locale is a string that is a  Unicode BCP 47 locale identifier . \n A Unicode BCP 47 locale identifier consists of \n \n a language code, \n (optionally) a script code, \n (optionally) a region (or country) code, \n (optionally) one or more variant codes, and \n (optionally) one or more extension sequences, \n \n with all present components separated by hyphens. \n By default the chart is using the default locale of the platform which is running on. \n Configuration Options \n Namespace:  options \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n locale \n string \n undefined \n a string with a BCP 47 language tag, leveraging on  INTL NumberFormat . \n \n \n \n"},{title:"Responsive Charts",frontmatter:{},regularPath:"/configuration/responsive.html",relativePath:"configuration/responsive.md",key:"v-75b52a57",path:"/configuration/responsive.html",headers:[{level:2,title:"Configuration Options",slug:"configuration-options"},{level:2,title:"Important Note",slug:"important-note"},{level:2,title:"Printing Resizable Charts",slug:"printing-resizable-charts"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:' Responsive Charts \n When it comes to changing the chart size based on the window size, a major limitation is that the canvas  render  size ( canvas.width  and  .height ) can  not  be expressed with relative values, contrary to the  display  size ( canvas.style.width  and  .height ). Furthermore, these sizes are independent from each other and thus the canvas  render  size does not adjust automatically based on the  display  size, making the rendering inaccurate. \n The following examples  do not work : \n \n <canvas height="40vh" width="80vw"> :  invalid  values, the canvas doesn\'t resize ( example ) \n <canvas style="height:40vh; width:80vw"> :  invalid  behavior, the canvas is resized but becomes blurry ( example ) \n <canvas style="margin: 0 auto;"> :  invalid  behavior, the canvas continually shrinks. Chart.js needs a dedicated container for each canvas and this styling should be applied there. \n \n Chart.js provides a  few options  to enable responsiveness and control the resize behavior of charts by detecting when the canvas  display  size changes and update the  render  size accordingly. \n Configuration Options \n Namespace:  options \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n responsive \n boolean \n true \n Resizes the chart canvas when its container does ( important note... ). \n \n \n maintainAspectRatio \n boolean \n true \n Maintain the original canvas aspect ratio  (width / height)  when resizing. \n \n \n aspectRatio \n number \n 1 | 2 \n Canvas aspect ratio (i.e.  width / height , a value of 1 representing a square canvas). Note that this option is ignored if the height is explicitly defined either as attribute or via the style. The default value varies by chart type; Radial charts (doughnut, pie, polarArea, radar) default to  1  and others default to  2 . \n \n \n onResize \n function \n null \n Called when a resize occurs. Gets passed two arguments: the chart instance and the new size. \n \n \n resizeDelay \n number \n 0 \n Delay the resize update by the given amount of milliseconds. This can ease the resize process by debouncing the update of the elements. \n Important Note \n Detecting when the canvas size changes can not be done directly from the  canvas  element. Chart.js uses its parent container to update the canvas  render  and  display  sizes. However, this method requires the container to be  relatively positioned  and  dedicated to the chart canvas only . Responsiveness can then be achieved by setting relative values for the container size ( example ): \n < div   class = " chart-container "   style = " position :  relative ;   height : 40vh ;   width : 80vw " > \n     < canvas   id = " chart " > </ canvas > \n </ div > \n \n The chart can also be programmatically resized by modifying the container size: \n chart . canvas . parentNode . style . height  =   \'128px\' ; \nchart . canvas . parentNode . style . width  =   \'128px\' ; \n \n Note that in order for the above code to correctly resize the chart height, the  maintainAspectRatio  option must also be set to  false . \n Printing Resizable Charts \n CSS media queries allow changing styles when printing a page. The CSS applied from these media queries may cause charts to need to resize. However, the resize won\'t happen automatically. To support resizing charts when printing, you need to hook the  onbeforeprint  event and manually trigger resizing of each chart. \n function   beforePrintHandler   ( )   { \n     for   ( let  id  in  Chart . instances )   { \n        Chart . instances [ id ] . resize ( ) ; \n     } \n } \n \n You may also find that, due to complexities in when the browser lays out the document for printing and when resize events are fired, Chart.js is unable to properly resize for the print layout. To work around this, you can pass an explicit size to  .resize()  then use an  onafterprint  event to restore the automatic size when done. \n window . addEventListener ( \'beforeprint\' ,   ( )   =>   { \n  myChart . resize ( 600 ,   600 ) ; \n } ) ; \nwindow . addEventListener ( \'afterprint\' ,   ( )   =>   { \n  myChart . resize ( ) ; \n } ) ; \n \n '},{title:"Subtitle",frontmatter:{},regularPath:"/configuration/subtitle.html",relativePath:"configuration/subtitle.md",key:"v-221e424f",path:"/configuration/subtitle.html",headers:[{level:2,title:"Subtitle Configuration",slug:"subtitle-configuration"},{level:2,title:"Example Usage",slug:"example-usage"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Subtitle \n Subtitle is a second title placed under the main title, by default. It has exactly the same configuration options with the main  title . \n Subtitle Configuration \n Namespace:  options.plugins.subtitle . The global defaults for subtitle are configured in  Chart.defaults.plugins.subtitle . \n Exactly the same configuration options with  title  are available for subtitle, the namespaces only differ. \n Example Usage \n The example below would enable a title of 'Custom Chart Subtitle' on the chart that is created. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             subtitle :   { \n                 display :   true , \n                 text :   'Custom Chart Subtitle' \n             } \n         } \n     } \n } ) ; \n \n "},{title:"Title",frontmatter:{},regularPath:"/configuration/title.html",relativePath:"configuration/title.md",key:"v-685e35a5",path:"/configuration/title.html",headers:[{level:2,title:"Title Configuration",slug:"title-configuration"},{level:3,title:"Position",slug:"position"},{level:2,title:"Align",slug:"align"},{level:2,title:"Example Usage",slug:"example-usage"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Title \n The chart title defines text to draw at the top of the chart. \n Title Configuration \n Namespace:  options.plugins.title , the global options for the chart title is defined in  Chart.defaults.plugins.title . \n \n \n \n Name \n Type \n Default \n Scriptable \n Description \n \n \n \n \n align \n string \n 'center' \n Yes \n Alignment of the title.  more... \n \n \n color \n Color \n Chart.defaults.color \n Yes \n Color of text. \n \n \n display \n boolean \n false \n Yes \n Is the title shown? \n \n \n fullSize \n boolean \n true \n Yes \n Marks that this box should take the full width/height of the canvas. If  false , the box is sized and placed above/beside the chart area. \n \n \n position \n string \n 'top' \n Yes \n Position of title.  more... \n \n \n font \n Font \n {weight: 'bold'} \n Yes \n See  Fonts \n \n \n padding \n Padding \n 10 \n Yes \n Padding to apply around the title. Only  top  and  bottom  are implemented. \n \n \n text \n string | string[] \n '' \n Yes \n Title text to display. If specified as an array, text is rendered on multiple lines. \n Position \n Possible title position values are: \n \n 'top' \n 'left' \n 'bottom' \n 'right' \n Align \n Alignment of the title. Options are: \n \n 'start' \n 'center' \n 'end' \n Example Usage \n The example below would enable a title of 'Custom Chart Title' on the chart that is created. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             title :   { \n                 display :   true , \n                 text :   'Custom Chart Title' \n             } \n         } \n     } \n } ) ; \n \n This example shows how to specify separate top and bottom title text padding: \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             title :   { \n                 display :   true , \n                 text :   'Custom Chart Title' , \n                 padding :   { \n                     top :   10 , \n                     bottom :   30 \n                 } \n             } \n         } \n     } \n } ) ; \n \n "},{title:"Tooltip",frontmatter:{},regularPath:"/configuration/tooltip.html",relativePath:"configuration/tooltip.md",key:"v-067ab7f6",path:"/configuration/tooltip.html",headers:[{level:2,title:"Tooltip Configuration",slug:"tooltip-configuration"},{level:3,title:"Position Modes",slug:"position-modes"},{level:3,title:"Tooltip Alignment",slug:"tooltip-alignment"},{level:3,title:"Text Alignment",slug:"text-alignment"},{level:3,title:"Sort Callback",slug:"sort-callback"},{level:3,title:"Filter Callback",slug:"filter-callback"},{level:2,title:"Tooltip Callbacks",slug:"tooltip-callbacks"},{level:3,title:"Label Callback",slug:"label-callback"},{level:3,title:"Label Color Callback",slug:"label-color-callback"},{level:3,title:"Label Point Style Callback",slug:"label-point-style-callback"},{level:3,title:"Tooltip Item Context",slug:"tooltip-item-context"},{level:2,title:"External (Custom) Tooltips",slug:"external-custom-tooltips"},{level:2,title:"Tooltip Model",slug:"tooltip-model"},{level:2,title:"Custom Position Modes",slug:"custom-position-modes"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Tooltip \n Tooltip Configuration \n Namespace:  options.plugins.tooltip , the global options for the chart tooltips is defined in  Chart.defaults.plugins.tooltip . \n WARNING \n The bubble, doughnut, pie, polar area, and scatter charts override the tooltip defaults. To change the overrides for those chart types, the options are defined in  Chart.overrides[type].plugins.tooltip . \n \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n enabled \n boolean \n true \n Are on-canvas tooltips enabled? \n \n \n external \n function \n null \n See  external tooltip  section. \n \n \n mode \n string \n interaction.mode \n Sets which elements appear in the tooltip.  more... . \n \n \n intersect \n boolean \n interaction.intersect \n If true, the tooltip mode applies only when the mouse position intersects with an element. If false, the mode will be applied at all times. \n \n \n position \n string \n 'average' \n The mode for positioning the tooltip.  more... \n \n \n callbacks \n object \n \n See the  callbacks section . \n \n \n itemSort \n function \n \n Sort tooltip items.  more... \n \n \n filter \n function \n \n Filter tooltip items.  more... \n \n \n backgroundColor \n Color \n 'rgba(0, 0, 0, 0.8)' \n Background color of the tooltip. \n \n \n titleColor \n Color \n '#fff' \n Color of title text. \n \n \n titleFont \n Font \n {weight: 'bold'} \n See  Fonts . \n \n \n titleAlign \n string \n 'left' \n Horizontal alignment of the title text lines.  more... \n \n \n titleSpacing \n number \n 2 \n Spacing to add to top and bottom of each title line. \n \n \n titleMarginBottom \n number \n 6 \n Margin to add on bottom of title section. \n \n \n bodyColor \n Color \n '#fff' \n Color of body text. \n \n \n bodyFont \n Font \n {} \n See  Fonts . \n \n \n bodyAlign \n string \n 'left' \n Horizontal alignment of the body text lines.  more... \n \n \n bodySpacing \n number \n 2 \n Spacing to add to top and bottom of each tooltip item. \n \n \n footerColor \n Color \n '#fff' \n Color of footer text. \n \n \n footerFont \n Font \n {weight: 'bold'} \n See  Fonts . \n \n \n footerAlign \n string \n 'left' \n Horizontal alignment of the footer text lines.  more... \n \n \n footerSpacing \n number \n 2 \n Spacing to add to top and bottom of each footer line. \n \n \n footerMarginTop \n number \n 6 \n Margin to add before drawing the footer. \n \n \n padding \n Padding \n 6 \n Padding inside the tooltip. \n \n \n caretPadding \n number \n 2 \n Extra distance to move the end of the tooltip arrow away from the tooltip point. \n \n \n caretSize \n number \n 5 \n Size, in px, of the tooltip arrow. \n \n \n cornerRadius \n number | object \n 6 \n Radius of tooltip corner curves. \n \n \n multiKeyBackground \n Color \n '#fff' \n Color to draw behind the colored boxes when multiple items are in the tooltip. \n \n \n displayColors \n boolean \n true \n If true, color boxes are shown in the tooltip. \n \n \n boxWidth \n number \n bodyFont.size \n Width of the color box if displayColors is true. \n \n \n boxHeight \n number \n bodyFont.size \n Height of the color box if displayColors is true. \n \n \n boxPadding \n number \n 1 \n Padding between the color box and the text. \n \n \n usePointStyle \n boolean \n false \n Use the corresponding point style (from dataset options) instead of color boxes, ex: star, triangle etc. (size is based on the minimum value between boxWidth and boxHeight). \n \n \n borderColor \n Color \n 'rgba(0, 0, 0, 0)' \n Color of the border. \n \n \n borderWidth \n number \n 0 \n Size of the border. \n \n \n rtl \n boolean \n \n true  for rendering the tooltip from right to left. \n \n \n textDirection \n string \n canvas' default \n This will force the text direction  'rtl' or 'ltr  on the canvas for rendering the tooltips, regardless of the css specified on the canvas \n \n \n xAlign \n string \n undefined \n Position of the tooltip caret in the X direction.  more \n \n \n yAlign \n string \n undefined \n Position of the tooltip caret in the Y direction.  more \n Position Modes \n Possible modes are: \n \n 'average' \n 'nearest' \n \n 'average'  mode will place the tooltip at the average position of the items displayed in the tooltip.  'nearest'  will place the tooltip at the position of the element closest to the event position. \n You can also define  custom position modes . \n Tooltip Alignment \n The  xAlign  and  yAlign  options define the position of the tooltip caret. If these parameters are unset, the optimal caret position is determined. \n The following values for the  xAlign  setting are supported. \n \n 'left' \n 'center' \n 'right' \n \n The following values for the  yAlign  setting are supported. \n \n 'top' \n 'center' \n 'bottom' \n Text Alignment \n The  titleAlign ,  bodyAlign  and  footerAlign  options define the horizontal position of the text lines with respect to the tooltip box. The following values are supported. \n \n 'left'  (default) \n 'right' \n 'center' \n \n These options are only applied to text lines. Color boxes are always aligned to the left edge. \n Sort Callback \n Allows sorting of  tooltip items . Must implement at minimum a function that can be passed to  Array.prototype.sort . This function can also accept a third parameter that is the data object passed to the chart. \n Filter Callback \n Allows filtering of  tooltip items . Must implement at minimum a function that can be passed to  Array.prototype.filter . This function can also accept a fourth parameter that is the data object passed to the chart. \n Tooltip Callbacks \n Namespace:  options.plugins.tooltip.callbacks , the tooltip has the following callbacks for providing text. For all functions,  this  will be the tooltip object created from the  Tooltip  constructor. \n Namespace:  data.datasets[].tooltip.callbacks , items marked with  Yes  in the column  Dataset override  can be overridden per dataset. \n A  tooltip item context  is generated for each item that appears in the tooltip. This is the primary model that the callback methods interact with. For functions that return text, arrays of strings are treated as multiple lines of text. \n \n \n \n Name \n Arguments \n Return Type \n Dataset override \n Description \n \n \n \n \n beforeTitle \n TooltipItem[] \n string | string[] \n \n Returns the text to render before the title. \n \n \n title \n TooltipItem[] \n string | string[] \n \n Returns text to render as the title of the tooltip. \n \n \n afterTitle \n TooltipItem[] \n string | string[] \n \n Returns text to render after the title. \n \n \n beforeBody \n TooltipItem[] \n string | string[] \n \n Returns text to render before the body section. \n \n \n beforeLabel \n TooltipItem \n string | string[] \n Yes \n Returns text to render before an individual label. This will be called for each item in the tooltip. \n \n \n label \n TooltipItem \n string | string[] \n Yes \n Returns text to render for an individual item in the tooltip.  more... \n \n \n labelColor \n TooltipItem \n object \n Yes \n Returns the colors to render for the tooltip item.  more... \n \n \n labelTextColor \n TooltipItem \n Color \n Yes \n Returns the colors for the text of the label for the tooltip item. \n \n \n labelPointStyle \n TooltipItem \n object \n Yes \n Returns the point style to use instead of color boxes if usePointStyle is true (object with values  pointStyle  and  rotation ). Default implementation uses the point style from the dataset points.  more... \n \n \n afterLabel \n TooltipItem \n string | string[] \n Yes \n Returns text to render after an individual label. \n \n \n afterBody \n TooltipItem[] \n string | string[] \n \n Returns text to render after the body section. \n \n \n beforeFooter \n TooltipItem[] \n string | string[] \n \n Returns text to render before the footer section. \n \n \n footer \n TooltipItem[] \n string | string[] \n \n Returns text to render as the footer of the tooltip. \n \n \n afterFooter \n TooltipItem[] \n string | string[] \n \n Text to render after the footer section. \n Label Callback \n The  label  callback can change the text that displays for a given data point. A common example to show a unit. The example below puts a  '$'  before every row. \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             tooltip :   { \n                 callbacks :   { \n                     label :   function ( context )   { \n                         let  label  =  context . dataset . label  ||   '' ; \n\n                         if   ( label )   { \n                            label  +=   ': ' ; \n                         } \n                         if   ( context . parsed . y  !==   null )   { \n                            label  +=   new   Intl . NumberFormat ( 'en-US' ,   {   style :   'currency' ,   currency :   'USD'   } ) . format ( context . parsed . y ) ; \n                         } \n                         return  label ; \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n Label Color Callback \n For example, to return a red box with a blue dashed border that has a border radius for each item in the tooltip you could do: \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             tooltip :   { \n                 callbacks :   { \n                     labelColor :   function ( context )   { \n                         return   { \n                             borderColor :   'rgb(0, 0, 255)' , \n                             backgroundColor :   'rgb(255, 0, 0)' , \n                             borderWidth :   2 , \n                             borderDash :   [ 2 ,   2 ] , \n                             borderRadius :   2 , \n                         } ; \n                     } , \n                     labelTextColor :   function ( context )   { \n                         return   '#543453' ; \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n Label Point Style Callback \n For example, to draw triangles instead of the regular color box for each item in the tooltip you could do: \n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             tooltip :   { \n                 usePointStyle :   true , \n                 callbacks :   { \n                     labelPointStyle :   function ( context )   { \n                         return   { \n                             pointStyle :   'triangle' , \n                             rotation :   0 \n                         } ; \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n Tooltip Item Context \n The tooltip items passed to the tooltip callbacks implement the following interface. \n { \n     // The chart the tooltip is being shown on \n     chart :  Chart\n\n     // Label for the tooltip \n     label :  string , \n\n     // Parsed data values for the given `dataIndex` and `datasetIndex` \n     parsed :  object , \n\n     // Raw data values for the given `dataIndex` and `datasetIndex` \n     raw :  object , \n\n     // Formatted value for the tooltip \n     formattedValue :  string , \n\n     // The dataset the item comes from \n     dataset :  object\n\n     // Index of the dataset the item comes from \n     datasetIndex :  number , \n\n     // Index of this data item in the dataset \n     dataIndex :  number , \n\n     // The chart element (point, arc, bar, etc.) for this tooltip item \n     element :  Element , \n } \n External (Custom) Tooltips \n External tooltips allow you to hook into the tooltip rendering process so that you can render the tooltip in your own custom way. Generally this is used to create an HTML tooltip instead of an on-canvas tooltip. The  external  option takes a function which is passed a context parameter containing the  chart  and  tooltip . You can enable external tooltips in the global or chart configuration like so: \n const  myPieChart  =   new   Chart ( ctx ,   { \n     type :   'pie' , \n     data :  data , \n     options :   { \n         plugins :   { \n             tooltip :   { \n                 // Disable the on-canvas tooltip \n                 enabled :   false , \n\n                 external :   function ( context )   { \n                     // Tooltip Element \n                     let  tooltipEl  =  document . getElementById ( 'chartjs-tooltip' ) ; \n\n                     // Create element on first render \n                     if   ( ! tooltipEl )   { \n                        tooltipEl  =  document . createElement ( 'div' ) ; \n                        tooltipEl . id  =   'chartjs-tooltip' ; \n                        tooltipEl . innerHTML  =   '<table></table>' ; \n                        document . body . appendChild ( tooltipEl ) ; \n                     } \n\n                     // Hide if no tooltip \n                     const  tooltipModel  =  context . tooltip ; \n                     if   ( tooltipModel . opacity  ===   0 )   { \n                        tooltipEl . style . opacity  =   0 ; \n                         return ; \n                     } \n\n                     // Set caret Position \n                    tooltipEl . classList . remove ( 'above' ,   'below' ,   'no-transform' ) ; \n                     if   ( tooltipModel . yAlign )   { \n                        tooltipEl . classList . add ( tooltipModel . yAlign ) ; \n                     }   else   { \n                        tooltipEl . classList . add ( 'no-transform' ) ; \n                     } \n\n                     function   getBody ( bodyItem )   { \n                         return  bodyItem . lines ; \n                     } \n\n                     // Set Text \n                     if   ( tooltipModel . body )   { \n                         const  titleLines  =  tooltipModel . title  ||   [ ] ; \n                         const  bodyLines  =  tooltipModel . body . map ( getBody ) ; \n\n                         let  innerHtml  =   '<thead>' ; \n\n                        titleLines . forEach ( function ( title )   { \n                            innerHtml  +=   '<tr><th>'   +  title  +   '</th></tr>' ; \n                         } ) ; \n                        innerHtml  +=   '</thead><tbody>' ; \n\n                        bodyLines . forEach ( function ( body ,  i )   { \n                             const  colors  =  tooltipModel . labelColors [ i ] ; \n                             let  style  =   'background:'   +  colors . backgroundColor ; \n                            style  +=   '; border-color:'   +  colors . borderColor ; \n                            style  +=   '; border-width: 2px' ; \n                             const  span  =   '<span style=\"'   +  style  +   '\"></span>' ; \n                            innerHtml  +=   '<tr><td>'   +  span  +  body  +   '</td></tr>' ; \n                         } ) ; \n                        innerHtml  +=   '</tbody>' ; \n\n                         let  tableRoot  =  tooltipEl . querySelector ( 'table' ) ; \n                        tableRoot . innerHTML  =  innerHtml ; \n                     } \n\n                     const  position  =  context . chart . canvas . getBoundingClientRect ( ) ; \n                     const  bodyFont  =  Chart . helpers . toFont ( tooltipModel . options . bodyFont ) ; \n\n                     // Display, position, and set styles for font \n                    tooltipEl . style . opacity  =   1 ; \n                    tooltipEl . style . position  =   'absolute' ; \n                    tooltipEl . style . left  =  position . left  +  window . pageXOffset  +  tooltipModel . caretX  +   'px' ; \n                    tooltipEl . style . top  =  position . top  +  window . pageYOffset  +  tooltipModel . caretY  +   'px' ; \n                    tooltipEl . style . font  =  bodyFont . string ; \n                    tooltipEl . style . padding  =  tooltipModel . padding  +   'px '   +  tooltipModel . padding  +   'px' ; \n                    tooltipEl . style . pointerEvents  =   'none' ; \n                 } \n             } \n         } \n     } \n } ) ; \n \n See  samples  for examples on how to get started with external tooltips. \n Tooltip Model \n The tooltip model contains parameters that can be used to render the tooltip. \n { \n     chart :  Chart , \n\n     // The items that we are rendering in the tooltip. See Tooltip Item Interface section \n     dataPoints :  TooltipItem [ ] , \n\n     // Positioning \n     xAlign :  string , \n     yAlign :  string , \n\n     // X and Y properties are the top left of the tooltip \n     x :  number , \n     y :  number , \n     width :  number , \n     height :  number , \n     // Where the tooltip points to \n     caretX :  number , \n     caretY :  number , \n\n     // Body \n     // The body lines that need to be rendered \n     // Each object contains 3 parameters \n     // before: string[] // lines of text before the line with the color square \n     // lines: string[], // lines of text to render as the main item with color square \n     // after: string[], // lines of text to render after the main lines \n     body :  object [ ] , \n     // lines of text that appear after the title but before the body \n     beforeBody :  string [ ] , \n     // line of text that appear after the body and before the footer \n     afterBody :  string [ ] , \n\n     // Title \n     // lines of text that form the title \n     title :  string [ ] , \n\n     // Footer \n     // lines of text that form the footer \n     footer :  string [ ] , \n\n     // colors to render for each item in body[]. This is the color of the squares in the tooltip \n     labelColors :  Color [ ] , \n     labelTextColors :  Color [ ] , \n\n     // 0 opacity is a hidden tooltip \n     opacity :  number , \n\n     // tooltip options \n     options :  Object\n } \n Custom Position Modes \n New modes can be defined by adding functions to the  Chart.Tooltip.positioners  map. \n Example: \n import   {  Tooltip  }   from   'chart.js' ; \n\n /**\n * Custom positioner\n * @function Tooltip.positioners.myCustomPositioner\n * @param elements {Chart.Element[]} the tooltip elements\n * @param eventPosition {Point} the position of the event in canvas coordinates\n * @returns {TooltipPosition} the tooltip position\n */ \nTooltip . positioners . myCustomPositioner   =   function ( elements ,  eventPosition )   { \n     // A reference to the tooltip model \n     const  tooltip  =   this ; \n\n     /* ... */ \n\n     return   { \n         x :   0 , \n         y :   0 \n         // You may also include xAlign and yAlign to override those tooltip options. \n     } ; \n } ; \n\n // Then, to use it... \n new   Chart . js ( ctx ,   { \n    data , \n     options :   { \n         plugins :   { \n             tooltip :   { \n                 position :   'myCustomPositioner' \n             } \n         } \n     } \n } ) \n \n See  samples  for a more detailed example. \n If you're using TypeScript, you'll also need to register the new mode: \n declare   module   'chart.js'   { \n   interface   TooltipPositionerMap   { \n    myCustomPositioner :  TooltipPositionerFunction < ChartType > ; \n   } \n } \n \n "},{title:"API",frontmatter:{},regularPath:"/developers/api.html",relativePath:"developers/api.md",key:"v-6876a209",path:"/developers/api.html",headers:[{level:2,title:".destroy()",slug:"destroy"},{level:2,title:".update(mode?)",slug:"update-mode"},{level:2,title:".reset()",slug:"reset"},{level:2,title:".render()",slug:"render"},{level:2,title:".stop()",slug:"stop"},{level:2,title:".resize(width?, height?)",slug:"resize-width-height"},{level:2,title:".clear()",slug:"clear"},{level:2,title:".toBase64Image(type?, quality?)",slug:"tobase64image-type-quality"},{level:2,title:".getElementsAtEventForMode(e, mode, options, useFinalPosition)",slug:"getelementsateventformode-e-mode-options-usefinalposition"},{level:2,title:".getSortedVisibleDatasetMetas()",slug:"getsortedvisibledatasetmetas"},{level:2,title:".getDatasetMeta(index)",slug:"getdatasetmeta-index"},{level:2,title:"getVisibleDatasetCount",slug:"getvisibledatasetcount"},{level:2,title:"setDatasetVisibility(datasetIndex, visibility)",slug:"setdatasetvisibility-datasetindex-visibility"},{level:2,title:"toggleDataVisibility(index)",slug:"toggledatavisibility-index"},{level:2,title:"getDataVisibility(index)",slug:"getdatavisibility-index"},{level:2,title:"hide(datasetIndex, dataIndex?)",slug:"hide-datasetindex-dataindex"},{level:2,title:"show(datasetIndex, dataIndex?)",slug:"show-datasetindex-dataindex"},{level:2,title:"setActiveElements(activeElements)",slug:"setactiveelements-activeelements"},{level:2,title:"Static: getChart(key)",slug:"static-getchart-key"},{level:2,title:"Static: register(chartComponentLike)",slug:"static-register-chartcomponentlike"},{level:2,title:"Static: unregister(chartComponentLike)",slug:"static-unregister-chartcomponentlike"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" API \n For each chart, there are a set of global prototype methods on the shared chart type which you may find useful. These are available on all charts created with Chart.js, but for the examples, let's use a line chart we've made. \n // For example: \n const  myLineChart  =   new   Chart ( ctx ,  config ) ; \n .destroy() \n Use this to destroy any chart instances that are created. This will clean up any references stored to the chart object within Chart.js, along with any associated event listeners attached by Chart.js.\nThis must be called before the canvas is reused for a new chart. \n // Destroys a specific chart instance \nmyLineChart . destroy ( ) ; \n .update(mode?) \n Triggers an update of the chart. This can be safely called after updating the data object. This will update all scales, legends, and then re-render the chart. \n myLineChart . data . datasets [ 0 ] . data [ 2 ]   =   50 ;   // Would update the first dataset's value of 'March' to be 50 \nmyLineChart . update ( ) ;   // Calling update now animates the position of March from 90 to 50. \n \n A  mode  string can be provided to indicate transition configuration should be used. Core calls this method using any of  'active' ,  'hide' ,  'reset' ,  'resize' ,  'show'  or  undefined .  'none'  is also a supported mode for skipping animations for single update. Please see  animations  docs for more details. \n Example: \n myChart . update ( 'active' ) ; \n \n See  Updating Charts  for more details. \n .reset() \n Reset the chart to its state before the initial animation. A new animation can then be triggered using  update . \n myLineChart . reset ( ) ; \n .render() \n Triggers a redraw of all chart elements. Note, this does not update elements for new data. Use  .update()  in that case. \n .stop() \n Use this to stop any current animation. This will pause the chart during any current animation frame. Call  .render()  to re-animate. \n // Stops the charts animation loop at its current frame \nmyLineChart . stop ( ) ; \n // => returns 'this' for chainability \n .resize(width?, height?) \n Use this to manually resize the canvas element. This is run each time the canvas container is resized, but you can call this method manually if you change the size of the canvas nodes container element. \n You can call  .resize()  with no parameters to have the chart take the size of its container element, or you can pass explicit dimensions (e.g., for  printing ). \n // Resizes & redraws to fill its container element \nmyLineChart . resize ( ) ; \n // => returns 'this' for chainability \n\n // With an explicit size: \nmyLineChart . resize ( width ,  height ) ; \n .clear() \n Will clear the chart canvas. Used extensively internally between animation frames, but you might find it useful. \n // Will clear the canvas that myLineChart is drawn on \nmyLineChart . clear ( ) ; \n // => returns 'this' for chainability \n .toBase64Image(type?, quality?) \n This returns a base 64 encoded string of the chart in its current state. \n myLineChart . toBase64Image ( ) ; \n // => returns png data url of the image on the canvas \n\nmyLineChart . toBase64Image ( 'image/jpeg' ,   1 ) \n // => returns a jpeg data url in the highest quality of the canvas \n .getElementsAtEventForMode(e, mode, options, useFinalPosition) \n Calling  getElementsAtEventForMode(e, mode, options, useFinalPosition)  on your Chart instance passing an event and a mode will return the elements that are found. The  options  and  useFinalPosition  arguments are passed through to the handlers. \n To get an item that was clicked on,  getElementsAtEventForMode  can be used. \n function   clickHandler ( evt )   { \n     const  points  =  myChart . getElementsAtEventForMode ( evt ,   'nearest' ,   {   intersect :   true   } ,   true ) ; \n\n     if   ( points . length )   { \n         const  firstPoint  =  points [ 0 ] ; \n         const  label  =  myChart . data . labels [ firstPoint . index ] ; \n         const  value  =  myChart . data . datasets [ firstPoint . datasetIndex ] . data [ firstPoint . index ] ; \n     } \n } \n .getSortedVisibleDatasetMetas() \n Returns an array of all the dataset meta's in the order that they are drawn on the canvas that are not hidden. \n const  visibleMetas  =  chart . getSortedVisibleDatasetMetas ( ) ; \n .getDatasetMeta(index) \n Looks for the dataset that matches the current index and returns that metadata. This returned data has all of the metadata that is used to construct the chart. \n The  data  property of the metadata will contain information about each point, bar, etc. depending on the chart type. \n Extensive examples of usage are available in the  Chart.js tests . \n const  meta  =  myChart . getDatasetMeta ( 0 ) ; \n const  x  =  meta . data [ 0 ] . x ; \n getVisibleDatasetCount \n Returns the amount of datasets that are currently not hidden. \n const  numberOfVisibleDatasets  =  chart . getVisibleDatasetCount ( ) ; \n setDatasetVisibility(datasetIndex, visibility) \n Sets the visibility for a given dataset. This can be used to build a chart legend in HTML. During click on one of the HTML items, you can call  setDatasetVisibility  to change the appropriate dataset. \n chart . setDatasetVisibility ( 1 ,   false ) ;   // hides dataset at index 1 \nchart . update ( ) ;   // chart now renders with dataset hidden \n toggleDataVisibility(index) \n Toggles the visibility of an item in all datasets. A dataset needs to explicitly support this feature for it to have an effect. From internal chart types, doughnut / pie, polar area, and bar use this. \n chart . toggleDataVisibility ( 2 ) ;   // toggles the item in all datasets, at index 2 \nchart . update ( ) ;   // chart now renders with item hidden \n getDataVisibility(index) \n Returns the stored visibility state of an data index for all datasets. Set by  toggleDataVisibility . A dataset controller should use this method to determine if an item should not be visible. \n const  visible  =  chart . getDataVisibility ( 2 ) ; \n hide(datasetIndex, dataIndex?) \n If dataIndex is not specified, sets the visibility for the given dataset to false. Updates the chart and animates the dataset with  'hide'  mode. This animation can be configured under the  hide  key in animation options. Please see  animations  docs for more details. \n If dataIndex is specified, sets the hidden flag of that element to true and updates the chart. \n chart . hide ( 1 ) ;   // hides dataset at index 1 and does 'hide' animation. \nchart . hide ( 0 ,   2 ) ;   // hides the data element at index 2 of the first dataset. \n show(datasetIndex, dataIndex?) \n If dataIndex is not specified, sets the visibility for the given dataset to true. Updates the chart and animates the dataset with  'show'  mode. This animation can be configured under the  show  key in animation options. Please see  animations  docs for more details. \n If dataIndex is specified, sets the hidden flag of that element to false and updates the chart. \n chart . show ( 1 ) ;   // shows dataset at index 1 and does 'show' animation. \nchart . show ( 0 ,   2 ) ;   // shows the data element at index 2 of the first dataset. \n setActiveElements(activeElements) \n Sets the active (hovered) elements for the chart. See the \"Programmatic Events\" sample file to see this in action. \n chart . setActiveElements ( [ \n     { datasetIndex :   0 ,   index :   1 } , \n ] ) ; \n Static: getChart(key) \n Finds the chart instance from the given key. If the key is a  string , it is interpreted as the ID of the Canvas node for the Chart. The key can also be a  CanvasRenderingContext2D  or an  HTMLDOMElement . This will return  undefined  if no Chart is found. To be found, the chart must have previously been created. \n const  chart  =  Chart . getChart ( \"canvas-id\" ) ; \n Static: register(chartComponentLike) \n Used to register plugins, axis types or chart types globally to all your charts. \n import   {  Chart ,  Tooltip ,  LinearScale ,  PointElement ,  BubbleController  }   from   'chart.js' ; \n\nChart . register ( Tooltip ,  LinearScale ,  PointElement ,  BubbleController ) ; \n Static: unregister(chartComponentLike) \n Used to unregister plugins, axis types or chart types globally from all your charts. \n"},{title:"New Axes",frontmatter:{},regularPath:"/developers/axes.html",relativePath:"developers/axes.md",key:"v-3ae8d0b6",path:"/developers/axes.html",headers:[{level:2,title:"Scale Properties",slug:"scale-properties"},{level:2,title:"Scale Interface",slug:"scale-interface"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" New Axes \n Axes in Chart.js can be individually extended. Axes should always derive from  Chart.Scale  but this is not a mandatory requirement. \n class   MyScale   extends   Chart . Scale   { \n     /* extensions ... */ \n } \nMyScale . id  =   'myScale' ; \nMyScale . defaults  =  defaultConfigObject ; \n\n // MyScale is now derived from Chart.Scale \n \n Once you have created your scale class, you need to register it with the global chart object so that it can be used. \n Chart . register ( MyScale ) ; \n\n // If the new scale is not extending Chart.Scale, the prototype can not be used to detect what \n // you are trying to register - so you need to be explicit: \n\n // Chart.registry.addScales(MyScale); \n \n To use the new scale, simply pass in the string key to the config when creating a chart. \n const  lineChart  =   new   Chart ( ctx ,   { \n     data :  data , \n     type :   'line' , \n     options :   { \n         scales :   { \n             y :   { \n                 type :   'myScale'   // this is the same id that was set on the scale \n             } \n         } \n     } \n } ) ; \n Scale Properties \n Scale instances are given the following properties during the fitting process. \n { \n     left :  number ,   // left edge of the scale bounding box \n     right :  number ,   // right edge of the bounding box \n     top :  number , \n     bottom :  number , \n     width :  number ,   // the same as right - left \n     height :  number ,   // the same as bottom - top \n\n     // Margin on each side. Like css, this is outside the bounding box. \n     margins :   { \n         left :  number , \n         right :  number , \n         top :  number , \n         bottom :  number\n     } , \n\n     // Amount of padding on the inside of the bounding box (like CSS) \n     paddingLeft :  number , \n     paddingRight :  number , \n     paddingTop :  number , \n     paddingBottom :  number\n } \n Scale Interface \n To work with Chart.js, custom scale types must implement the following interface. \n { \n     // Determines the data limits. Should set this.min and this.max to be the data max/min \n     determineDataLimits :   function ( )   { } , \n\n     // Generate tick marks. this.chart is the chart instance. The data object can be accessed as this.chart.data \n     // buildTicks() should create a ticks array on the axis instance, if you intend to use any of the implementations from the base class \n     buildTicks :   function ( )   { } , \n\n     // Get the label to show for the given value \n     getLabelForValue :   function ( value )   { } , \n\n     // Get the pixel (x coordinate for horizontal axis, y coordinate for vertical axis) for a given value \n     // @param index: index into the ticks array \n     getPixelForTick :   function ( index )   { } , \n\n     // Get the pixel (x coordinate for horizontal axis, y coordinate for vertical axis) for a given value \n     // @param value : the value to get the pixel for \n     // @param [index] : index into the data array of the value \n     getPixelForValue :   function ( value ,  index )   { } , \n\n     // Get the value for a given pixel (x coordinate for horizontal axis, y coordinate for vertical axis) \n     // @param pixel : pixel value \n     getValueForPixel :   function ( pixel )   { } \n } \n \n Optionally, the following methods may also be overwritten, but an implementation is already provided by the  Chart.Scale  base class. \n { \n     // Adds labels to objects in the ticks array. The default implementation simply calls this.options.ticks.callback(numericalTick, index, ticks); \n     generateTickLabels :   function ( )   { } , \n\n     // Determine how much the labels will rotate by. The default implementation will only rotate labels if the scale is horizontal. \n     calculateLabelRotation :   function ( )   { } , \n\n     // Fits the scale into the canvas. \n     // this.maxWidth and this.maxHeight will tell you the maximum dimensions the scale instance can be. Scales should endeavour to be as efficient as possible with canvas space. \n     // this.margins is the amount of space you have on either side of your scale that you may expand in to. This is used already for calculating the best label rotation \n     // You must set this.minSize to be the size of your scale. It must be an object containing 2 properties: width and height. \n     // You must set this.width to be the width and this.height to be the height of the scale \n     fit :   function ( )   { } , \n\n     // Draws the scale onto the canvas. this.(left|right|top|bottom) will have been populated to tell you the area on the canvas to draw in \n     // @param chartArea : an object containing four properties: left, right, top, bottom. This is the rectangle that lines, bars, etc will be drawn in. It may be used, for example, to draw grid lines. \n     draw :   function ( chartArea )   { } \n } \n \n The Core.Scale base class also has some utility functions that you may find useful. \n { \n     // Returns true if the scale instance is horizontal \n     isHorizontal :   function ( )   { } , \n\n     // Returns the scale tick objects ({label, major}) \n     getTicks :   function ( )   { } \n } \n \n "},{title:"New Charts",frontmatter:{},regularPath:"/developers/charts.html",relativePath:"developers/charts.md",key:"v-5ad7f765",path:"/developers/charts.html",headers:[{level:2,title:"Dataset Controller Interface",slug:"dataset-controller-interface"},{level:2,title:"Extending Existing Chart Types",slug:"extending-existing-chart-types"},{level:2,title:"TypeScript Typings",slug:"typescript-typings"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" New Charts \n Chart.js 2.0 introduced the concept of controllers for each dataset. Like scales, new controllers can be written as needed. \n class   MyType   extends   Chart . DatasetController   { \n\n } \n\nChart . register ( MyType ) ; \n\n // Now we can create a new instance of our chart, using the Chart.js API \n new   Chart ( ctx ,   { \n     // this is the string the constructor was registered at, ie Chart.controllers.MyType \n     type :   'MyType' , \n     data :  data , \n     options :  options\n } ) ; \n Dataset Controller Interface \n Dataset controllers must implement the following interface. \n { \n     // Defaults for charts of this type \n     defaults :   { \n         // If set to `false` or `null`, no dataset level element is created. \n         // If set to a string, this is the type of element to create for the dataset. \n         // For example, a line create needs to create a line element so this is the string 'line' \n         datasetElementType :  string  |   null   |   false , \n\n         // If set to `false` or `null`, no elements are created for each data value. \n         // If set to a string, this is the type of element to create for each data value. \n         // For example, a line create needs to create a point element so this is the string 'point' \n         dataElementType :  string  |   null   |   false , \n     } \n\n     // ID of the controller \n     id :  string ; \n\n     // Update the elements in response to new data \n     // @param mode : update mode, core calls this method using any of `'active'`, `'hide'`, `'reset'`, `'resize'`, `'show'` or `undefined` \n     update :   function ( mode )   { } \n } \n \n The following methods may optionally be overridden by derived dataset controllers. \n { \n     // Draw the representation of the dataset. The base implementation works in most cases, and an example of a derived version \n     // can be found in the line controller \n     draw :   function ( )   { } , \n\n     // Initializes the controller \n     initialize :   function ( )   { } , \n\n     // Ensures that the dataset represented by this controller is linked to a scale. Overridden to helpers.noop in the polar area and doughnut controllers as these \n     // chart types using a single scale \n     linkScales :   function ( )   { } , \n\n     // Parse the data into the controller meta data. The default implementation will work for cartesian parsing, but an example of an overridden \n     // version can be found in the doughnut controller \n     parse :   function ( start ,  count )   { } , \n } \n Extending Existing Chart Types \n Extending or replacing an existing controller type is easy. Simply replace the constructor for one of the built in types with your own. \n The built in controller types are: \n \n BarController \n BubbleController \n DoughnutController \n LineController \n PieController \n PolarAreaController \n RadarController \n ScatterController \n \n These controllers are also available in the UMD package, directly under  Chart . Eg:  Chart.BarController . \n For example, to derive a new chart type that extends from a bubble chart, you would do the following. \n import   { BubbleController }   from   'chart.js' ; \n class   Custom   extends   BubbleController   { \n     draw ( )   { \n         // Call bubble controller method to draw all the points \n         super . draw ( arguments ) ; \n\n         // Now we can do some custom drawing for this dataset. Here we'll draw a red box around the first point in each dataset \n         const  meta  =   this . getMeta ( ) ; \n         const  pt0  =  meta . data [ 0 ] ; \n\n         const   { x ,  y }   =  pt0 . getProps ( [ 'x' ,   'y' ] ) ; \n         const   { radius }   =  pt0 . options ; \n\n         const  ctx  =   this . chart . ctx ; \n        ctx . save ( ) ; \n        ctx . strokeStyle  =   'red' ; \n        ctx . lineWidth  =   1 ; \n        ctx . strokeRect ( x  -  radius ,  y  -  radius ,   2   *  radius ,   2   *  radius ) ; \n        ctx . restore ( ) ; \n     } \n } ; \nCustom . id  =   'derivedBubble' ; \nCustom . defaults  =  BubbleController . defaults ; \n\n // Stores the controller so that the chart initialization routine can look it up \nChart . register ( Custom ) ; \n\n // Now we can create and use our new chart type \n new   Chart ( ctx ,   { \n     type :   'derivedBubble' , \n     data :  data , \n     options :  options\n } ) ; \n TypeScript Typings \n If you want your new chart type to be statically typed, you must provide a  .d.ts  TypeScript declaration file. Chart.js provides a way to augment built-in types with user-defined ones, by using the concept of \"declaration merging\". \n When adding a new chart type,  ChartTypeRegistry  must contains the declarations for the new type, either by extending an existing entry in  ChartTypeRegistry  or by creating a new one. \n For example, to provide typings for a new chart type that extends from a bubble chart, you would add a  .d.ts  containing: \n import   {  ChartTypeRegistry  }   from   'chart.js' \n\n declare   module   'chart.js'   { \n     interface   ChartTypeRegistry   { \n        derivedBubble :  ChartTypeRegistry [ 'bubble' ] \n     } \n } \n \n "},{title:"Contributing",frontmatter:{},regularPath:"/developers/contributing.html",relativePath:"developers/contributing.md",key:"v-55746476",path:"/developers/contributing.html",headers:[{level:2,title:"Joining the project",slug:"joining-the-project"},{level:2,title:"Building and Testing",slug:"building-and-testing"},{level:3,title:"Documentation",slug:"documentation"},{level:3,title:"Image-Based Tests",slug:"image-based-tests"},{level:2,title:"Bugs and Issues",slug:"bugs-and-issues"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Contributing \n New contributions to the library are welcome, but we ask that you please follow these guidelines: \n \n Before opening a PR for major additions or changes, please discuss the expected API and/or implementation by  filing an issue  or asking about it in the  Chart.js Slack  #dev channel. This will save you development time by getting feedback upfront and make review faster by giving the maintainers more context and details. \n Consider whether your changes are useful for all users, or if creating a Chart.js  plugin  would be more appropriate. \n Check that your code will pass tests and  eslint  code standards.  npm test  will run both the linter and tests for you. \n Add unit tests and document new functionality (in the  test/  and  docs/  directories respectively). \n Avoid breaking changes unless there is an upcoming major release, which is infrequent. We encourage people to write plugins for most new advanced features, and care a lot about backwards compatibility. \n We strongly prefer new methods to be added as private whenever possible. A method can be made private either by making a top-level  function  outside of a class or by prefixing it with  _  and adding  @private  JSDoc if inside a class. Public APIs take considerable time to review and become locked once implemented as we have limited ability to change them without breaking backwards compatibility. Private APIs allow the flexibility to address unforeseen cases. \n Joining the project \n Active committers and contributors are invited to introduce yourself and request commit access to this project. We have a very active Slack community that you can join  here . If you think you can help, we'd love to have you! \n Building and Testing \n Firstly, we need to ensure development dependencies are installed. With node and npm installed, after cloning the Chart.js repo to a local directory, and navigating to that directory in the command line, we can run the following: \n >   npm   install \n \n This will install the local development dependencies for Chart.js. \n The following commands are now available from the repository root: \n >   npm  run build             // build dist files  in  ./dist\n >   npm  run autobuild         // build and  watch   for   source  changes\n >   npm  run dev               // run tests and  watch   for   source  and  test  changes\n >   npm  run lint              // perform code linting  ( ESLint, tsc ) \n >   npm   test                   // perform code linting and run unit tests with coverage\n \n npm run dev  and  npm test  can be appended with a string that is used to match the spec filenames. For example:  npm run dev plugins  will start karma in watch mode for  test/specs/**/*plugin*.js . \n Documentation \n We use  Vuepress  to manage the docs which are contained as Markdown files in the docs directory. You can run the doc server locally using these commands: \n >   npm  run docs:dev\n Image-Based Tests \n Some display-related functionality is difficult to test via typical Jasmine units. For this reason, we introduced image-based tests ( #3988  and  #5777 ) to assert that a chart is drawn pixel-for-pixel matching an expected image. \n Generated charts in image-based tests should be  as minimal as possible  and focus only on the tested feature to prevent failure if another feature breaks (e.g. disable the title and legend when testing scales). \n You can create a new image-based test by following the steps below: \n \n Create a JS file ( example ) or JSON file ( example ) that defines chart config and generation options. \n Add this file in  test/fixtures/{spec.name}/{feature-name}.json . \n Add a  describe line  to the beginning of  test/specs/{spec.name}.tests.js  if it doesn't exist yet. \n Run  npm run dev . \n Click the  \"Debug\"  button (top/right): a test should fail with the associated canvas visible. \n Right click on the chart and  \"Save image as...\"   test/fixtures/{spec.name}/{feature-name}.png  making sure not to activate the tooltip or any hover functionality \n Refresh the browser page ( CTRL+R ): test should now pass \n Verify test relevancy by changing the feature values  slightly  in the JSON file. \n \n Tests should pass in both browsers. In general, we've hidden all text in image tests since it's quite difficult to get them passing between different browsers. As a result, it is recommended to hide all scales in image-based tests. It is also recommended to disable animations. If tests still do not pass, adjust  tolerance  and/or  threshold  at the beginning of the JSON file keeping them  as low as possible . \n When a test fails, the expected and actual images are shown. If you'd like to see the images even when the tests pass, set  \"debug\": true  in the JSON file. \n Bugs and Issues \n Please report these on the GitHub page - at  github.com/chartjs/Chart.js . Please do not use issues for support requests. For help using Chart.js, please take a look at the  chart.js  tag on Stack Overflow. \n Well structured, detailed bug reports are hugely valuable for the project. \n Guidelines for reporting bugs: \n \n Check the issue search to see if it has already been reported \n Isolate the problem to a simple test case \n Please include a demonstration of the bug on a website such as  JS Bin ,  JS Fiddle , or  Codepen . ( Template ). If filing a bug against  master , you may reference the latest code via  https://www.chartjs.org/dist/master/chart.min.js  (changing the filename to point at the file you need as appropriate). Do not rely on these files for production purposes as they may be removed at any time. \n \n Please provide any additional details associated with the bug, if it's browser or screen density specific, or only happens with a certain configuration or data. \n"},{title:"Developers",frontmatter:{},regularPath:"/developers/",relativePath:"developers/index.md",key:"v-4529055c",path:"/developers/",headers:[{level:2,title:"Latest resources",slug:"latest-resources"},{level:2,title:"Development releases",slug:"development-releases"},{level:2,title:"Browser support",slug:"browser-support"},{level:2,title:"Previous versions",slug:"previous-versions"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Developers \n Developer features allow extending and enhancing Chart.js in many different ways. \n Latest resources \n Latest documentation and samples, including unreleased features, are available at: \n \n https://www.chartjs.org/docs/master/ \n https://www.chartjs.org/samples/master/ \n Development releases \n Latest builds are available for testing at: \n \n https://www.chartjs.org/dist/master/chart.js \n https://www.chartjs.org/dist/master/chart.min.js \n \n WARNING: Development builds MUST not be used for production purposes or as replacement for CDN. \n Browser support \n All modern and up-to-date browsers are supported, including, but not limited to: \n Chrome\nEdge\nFirefox\nSafari \n As of version 3, we have dropped Internet Explorer 11 support. \n Browser support for the canvas element is available in all modern & major mobile browsers.  CanIUse \n Run  npx browserslist  at the root of the  codebase  to get a list of supported browsers. \n Thanks to  BrowserStack  for allowing our team to test on thousands of browsers. \n Previous versions \n To migrate from version 2 to version 3, please see  the v3 migration guide . \n Version 3 has a largely different API than earlier versions. \n Most earlier version options have current equivalents or are the same. \n Please note - documentation for previous versions is available online or in the GitHub repo. \n \n 2.9.4 Documentation \n 1.x Documentation \n \n"},{title:"Publishing an extension",frontmatter:{},regularPath:"/developers/publishing.html",relativePath:"developers/publishing.md",key:"v-cbca35b6",path:"/developers/publishing.html",headers:[{level:2,title:"Awesome",slug:"awesome"},{level:2,title:"ESM",slug:"esm"},{level:3,title:"Rollup",slug:"rollup"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Publishing an extension \n If you are planning on publishing an extension for Chart.js, here are a some pointers. \n Awesome \n You'd probably want your extension to be listed in the  awesome . \n Note the minimum extension age requirement of 30 days. \n ESM \n If you are utilizing ESM, you probably still want to publish an UMD bundle of your extension. Because Chart.js v3 is tree shakeable, the interface is a bit different.\nUMD package's global  Chart  includes everything, while ESM package exports all the things separately.\nFortunately, most of the exports can be mapped automatically by the bundlers. \n But not the helpers. \n In UMD, helpers are available through  Chart.helpers . In ESM, they are imported from  chart.js/helpers . \n For example  import {isNullOrUndef} from 'chart.js/helpers'  is available at  Chart.helpers.isNullOrUndef  for UMD. \n Rollup \n output.globals  can be used to convert the helpers. \n module . exports  =   { \n   // ... \n   output :   { \n     globals :   { \n       'chart.js' :   'Chart' , \n       'chart.js/helpers' :   'Chart.helpers' \n     } \n   } \n } ; \n \n "},{title:"Plugins",frontmatter:{},regularPath:"/developers/plugins.html",relativePath:"developers/plugins.md",key:"v-dfe3a406",path:"/developers/plugins.html",headers:[{level:2,title:"Using plugins",slug:"using-plugins"},{level:2,title:"Global plugins",slug:"global-plugins"},{level:2,title:"Configuration",slug:"configuration"},{level:3,title:"Plugin ID",slug:"plugin-id"},{level:3,title:"Plugin options",slug:"plugin-options"},{level:2,title:"Plugin Core API",slug:"plugin-core-api"},{level:3,title:"Chart Initialization",slug:"chart-initialization"},{level:3,title:"Chart Update",slug:"chart-update"},{level:3,title:"Scale Update",slug:"scale-update"},{level:3,title:"Rendering",slug:"rendering"},{level:3,title:"Event Handling",slug:"event-handling"},{level:3,title:"Chart destroy",slug:"chart-destroy"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Plugins \n Plugins are the most efficient way to customize or change the default behavior of a chart. They have been introduced at  version 2.1.0  (global plugins only) and extended at  version 2.5.0  (per chart plugins and options). \n Using plugins \n Plugins can be shared between chart instances: \n const  plugin  =   {   /* plugin implementation */   } ; \n\n // chart1 and chart2 use \"plugin\" \n const  chart1  =   new   Chart ( ctx ,   { \n     plugins :   [ plugin ] \n } ) ; \n\n const  chart2  =   new   Chart ( ctx ,   { \n     plugins :   [ plugin ] \n } ) ; \n\n // chart3 doesn't use \"plugin\" \n const  chart3  =   new   Chart ( ctx ,   { } ) ; \n \n Plugins can also be defined directly in the chart  plugins  config (a.k.a.  inline plugins ): \n WARNING \n inline  plugins are not registered. Some plugins require registering, i.e. can't be used  inline . \n \n const  chart  =   new   Chart ( ctx ,   { \n     plugins :   [ { \n         beforeInit :   function ( chart ,  args ,  options )   { \n             //.. \n         } \n     } ] \n } ) ; \n \n However, this approach is not ideal when the customization needs to apply to many charts. \n Global plugins \n Plugins can be registered globally to be applied on all charts (a.k.a.  global plugins ): \n Chart . register ( { \n     // plugin implementation \n } ) ; \n \n WARNING \n inline  plugins can't be registered globally. \n Configuration \n Plugin ID \n Plugins must define a unique id in order to be configurable. \n This id should follow the  npm package name convention : \n \n can't start with a dot or an underscore \n can't contain any non-URL-safe characters \n can't contain uppercase letters \n should be something short, but also reasonably descriptive \n \n If a plugin is intended to be released publicly, you may want to check the  registry  to see if there's something by that name already. Note that in this case, the package name should be prefixed by  chartjs-plugin-  to appear in Chart.js plugin registry. \n Plugin options \n Plugin options are located under the  options.plugins  config and are scoped by the plugin ID:  options.plugins.{plugin-id} . \n const  chart  =   new   Chart ( ctx ,   { \n     options :   { \n         foo :   {   ...   } ,             // chart 'foo' option \n         plugins :   { \n             p1 :   { \n                 foo :   {   ...   } ,     // p1 plugin 'foo' option \n                 bar :   {   ...   } \n             } , \n             p2 :   { \n                 foo :   {   ...   } ,     // p2 plugin 'foo' option \n                 bla :   {   ...   } \n             } \n         } \n     } \n } ) ; \n Disable plugins \n To disable a global plugin for a specific chart instance, the plugin options must be set to  false : \n Chart . register ( { \n     id :   'p1' , \n     // ... \n } ) ; \n\n const  chart  =   new   Chart ( ctx ,   { \n     options :   { \n         plugins :   { \n             p1 :   false     // disable plugin 'p1' for this instance \n         } \n     } \n } ) ; \n \n To disable all plugins for a specific chart instance, set  options.plugins  to  false : \n const  chart  =   new   Chart ( ctx ,   { \n     options :   { \n         plugins :   false   // all plugins are disabled for this instance \n     } \n } ) ; \n Plugin defaults \n You can set default values for your plugin options in the  defaults  entry of your plugin object. In the example below the canvas will always have a lightgreen backgroundColor unless the user overrides this option in  options.plugins.custom_canvas_background_color.color . \n const  plugin  =   { \n     id :   'custom_canvas_background_color' , \n     beforeDraw :   ( chart ,  args ,  options )   =>   { \n         const   { ctx }   =  chart ; \n        ctx . save ( ) ; \n        ctx . globalCompositeOperation  =   'destination-over' ; \n        ctx . fillStyle  =  options . color ; \n        ctx . fillRect ( 0 ,   0 ,  chart . width ,  chart . height ) ; \n        ctx . restore ( ) ; \n     } , \n     defaults :   { \n         color :   'lightGreen' \n     } \n } \n Plugin Core API \n Read more about the  existing plugin extension hooks . \n Chart Initialization \n Plugins are notified during the initialization process. These hooks can be used to setup data needed for the plugin to operate. \n Chart Update \n Plugins are notified throughout the update process. \n Scale Update \n Plugins are notified throughout the scale update process. \n Rendering \n Plugins can interact with the chart throughout the render process. The rendering process is documented in the flowchart below. Each of the green processes is a plugin notification. The red lines indicate how cancelling part of the render process can occur when a plugin returns  false  from a hook. Not all hooks are cancelable, however, in general most  before*  hooks can be cancelled. \n Event Handling \n Plugins can interact with the chart during the event handling process. The event handling flow is documented in the flowchart below. Each of the green processes is a plugin notification. If a plugin makes changes that require a re-render, the plugin can set  args.changed  to  true  to indicate that a render is needed. The built-in tooltip plugin uses this method to indicate when the tooltip has changed. \n Chart destroy \n Plugins are notified during the destroy process. These hooks can be used to destroy things that the plugin made and used during its life.\nThe  destroy  hook has been deprecated since Chart.js version 3.7.0, use the  afterDestroy  hook instead. \n \n"},{title:"Updating Charts",frontmatter:{},regularPath:"/developers/updates.html",relativePath:"developers/updates.md",key:"v-26241ba9",path:"/developers/updates.html",headers:[{level:2,title:"Adding or Removing Data",slug:"adding-or-removing-data"},{level:2,title:"Updating Options",slug:"updating-options"},{level:2,title:"Preventing Animations",slug:"preventing-animations"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Updating Charts \n It's pretty common to want to update charts after they've been created. When the chart data or options are changed, Chart.js will animate to the new data values and options. \n Adding or Removing Data \n Adding and removing data is supported by changing the data array. To add data, just add data into the data array as seen in this example. \n function   addData ( chart ,  label ,  data )   { \n    chart . data . labels . push ( label ) ; \n    chart . data . datasets . forEach ( ( dataset )   =>   { \n        dataset . data . push ( data ) ; \n     } ) ; \n    chart . update ( ) ; \n } \n\n function   removeData ( chart )   { \n    chart . data . labels . pop ( ) ; \n    chart . data . datasets . forEach ( ( dataset )   =>   { \n        dataset . data . pop ( ) ; \n     } ) ; \n    chart . update ( ) ; \n } \n Updating Options \n To update the options, mutating the options property in place or passing in a new options object are supported. \n \n If the options are mutated in place, other option properties would be preserved, including those calculated by Chart.js. \n If created as a new object, it would be like creating a new chart with the options - old options would be discarded. \n \n function   updateConfigByMutating ( chart )   { \n    chart . options . plugins . title . text  =   'new title' ; \n    chart . update ( ) ; \n } \n\n function   updateConfigAsNewObject ( chart )   { \n    chart . options  =   { \n         responsive :   true , \n         plugins :   { \n             title :   { \n                 display :   true , \n                 text :   'Chart.js' \n             } \n         } , \n         scales :   { \n             x :   { \n                 display :   true \n             } , \n             y :   { \n                 display :   true \n             } \n         } \n     } ; \n    chart . update ( ) ; \n } \n \n Scales can be updated separately without changing other options.\nTo update the scales, pass in an object containing all the customization including those unchanged ones. \n Variables referencing any one from  chart.scales  would be lost after updating scales with a new  id  or the changed  type . \n function   updateScales ( chart )   { \n     let  xScale  =  chart . scales . x ; \n     let  yScale  =  chart . scales . y ; \n    chart . options . scales  =   { \n         newId :   { \n             display :   true \n         } , \n         y :   { \n             display :   true , \n             type :   'logarithmic' \n         } \n     } ; \n    chart . update ( ) ; \n     // need to update the reference \n    xScale  =  chart . scales . newId ; \n    yScale  =  chart . scales . y ; \n } \n \n You can also update a specific scale either by its id. \n function   updateScale ( chart )   { \n    chart . options . scales . y  =   { \n         type :   'logarithmic' \n     } ; \n    chart . update ( ) ; \n } \n \n Code sample for updating options can be found in  toggle-scale-type.html . \n Preventing Animations \n Sometimes when a chart updates, you may not want an animation. To achieve this you can call  update  with  'none'  as mode. \n myChart . update ( 'none' ) ; \n \n "},{title:"Accessibility",frontmatter:{},regularPath:"/general/accessibility.html",relativePath:"general/accessibility.md",key:"v-38e8b165",path:"/general/accessibility.html",headers:[{level:2,title:"Examples",slug:"examples"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:' Accessibility \n Chart.js charts are rendered on user provided  canvas  elements. Thus, it is up to the user to create the  canvas  element in a way that is accessible. The  canvas  element has support in all browsers and will render on screen but the  canvas  content will not be accessible to screen readers. \n With  canvas , the accessibility has to be added with ARIA attributes on the  canvas  element or added using internal fallback content placed within the opening and closing canvas tags. \n This  website  has a more detailed explanation of  canvas  accessibility as well as in depth examples. \n Examples \n These are some examples of  accessible   canvas  elements. \n By setting the  role  and  aria-label , this  canvas  now has an accessible name. \n < canvas   id = " goodCanvas1 "   width = " 400 "   height = " 100 "   aria-label = " Hello ARIA World "   role = " img " > </ canvas > \n \n This  canvas  element has a text alternative via fallback content. \n < canvas   id = " okCanvas2 "   width = " 400 "   height = " 100 " > \n     < p > Hello Fallback World </ p > \n </ canvas > \n \n These are some bad examples of  inaccessible   canvas  elements. \n This  canvas  element does not have an accessible name or role. \n < canvas   id = " badCanvas1 "   width = " 400 "   height = " 100 " > </ canvas > \n \n This  canvas  element has inaccessible fallback content. \n < canvas   id = " badCanvas2 "   width = " 400 "   height = " 100 " > Your browser does not support the canvas element. </ canvas > \n \n '},{title:"Data structures",frontmatter:{},regularPath:"/general/data-structures.html",relativePath:"general/data-structures.md",key:"v-7a90f145",path:"/general/data-structures.html",headers:[{level:2,title:"Primitive[]",slug:"primitive"},{level:2,title:"Object[]",slug:"object"},{level:2,title:"Object[] using custom properties",slug:"object-using-custom-properties"},{level:2,title:"Object",slug:"object-2"},{level:2,title:"Dataset Configuration",slug:"dataset-configuration"},{level:3,title:"parsing",slug:"parsing"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Data structures \n The  data  property of a dataset can be passed in various formats. By default, that  data  is parsed using the associated chart type and scales. \n If the  labels  property of the main  data  property is used, it has to contain the same amount of elements as the dataset with the most values. These labels are used to label the index axis (default x axes). The values for the labels have to be provided in an array.\nThe provided labels can be of the type string or number to be rendered correctly. In case you want multiline labels you can provide an array with each line as one entry in the array. \n Primitive[] \n type :   'bar' , \n data :   { \n     datasets :   [ { \n       data :   [ 20 ,   10 ] , \n     } ] , \n     labels :   [ 'a' ,   'b' ] \n } \n \n When the  data  is an array of numbers, values from  labels  array at the same index are used for the index axis ( x  for vertical,  y  for horizontal charts). \n Object[] \n type :   'line' , \n data :   { \n   datasets :   [ { \n     data :   [ { x :   10 ,   y :   20 } ,   { x :   15 ,   y :   null } ,   { x :   20 ,   y :   10 } ] \n   } ] \n } \n \n type :   'line' , \n data :   { \n   datasets :   [ { \n     data :   [ { x : '2016-12-25' ,   y : 20 } ,   { x : '2016-12-26' ,   y : 10 } ] \n   } ] \n } \n \n type :   'bar' , \n data :   { \n   datasets :   [ { \n     data :   [ { x : 'Sales' ,   y : 20 } ,   { x : 'Revenue' ,   y : 10 } ] \n   } ] \n } \n \n This is also the internal format used for parsed data. In this mode, parsing can be disabled by specifying  parsing: false  at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n The values provided must be parsable by the associated scales or in the internal format of the associated scales. A common mistake would be to provide integers for the  category  scale, which uses integers as an internal format, where each integer represents an index in the labels array.  null  can be used for skipped values. \n Object[] using custom properties \n type :   'bar' , \n data :   { \n     datasets :   [ { \n         data :   [ { id :   'Sales' ,   nested :   { value :   1500 } } ,   { id :   'Purchases' ,   nested :   { value :   500 } } ] \n     } ] \n } , \n options :   { \n     parsing :   { \n         xAxisKey :   'id' , \n         yAxisKey :   'nested.value' \n     } \n } \n \n When using the pie/doughnut, radar or polarArea chart type, the  parsing  object should have a  key  item that points to the value to look at. In this example, the doughnut chart will show two items with values 1500 and 500. \n type :   'doughnut' , \n data :   { \n     datasets :   [ { \n         data :   [ { id :   'Sales' ,   nested :   { value :   1500 } } ,   { id :   'Purchases' ,   nested :   { value :   500 } } ] \n     } ] \n } , \n options :   { \n     parsing :   { \n         key :   'nested.value' \n     } \n } \n \n If the key contains a dot, it needs to be escaped with a double slash: \n type :   'line' , \n data :   { \n     datasets :   [ { \n         data :   [ {   'data.key' :   'one' ,   'data.value' :   20   } ,   {   'data.key' :   'two' ,   'data.value' :   30   } ] \n     } ] \n } , \n options :   { \n     parsing :   { \n       xAxisKey :   'data\\\\.key' , \n       yAxisKey :   'data\\\\.value' \n     } \n } \n \n WARNING \n When using object notation in a radar chart you still need a labels array with labels for the chart to show correctly. \n Object \n type :   'pie' , \n data :   { \n     datasets :   [ { \n       data :   { \n           January :   10 , \n           February :   20 \n       } \n     } ] \n } \n \n In this mode, property name is used for  index  scale and value for  value  scale. For vertical charts, index scale is  x  and value scale is  y . \n Dataset Configuration \n \n \n \n Name \n Type \n Description \n \n \n \n \n label \n string \n The label for the dataset which appears in the legend and tooltips. \n \n \n clip \n number | object \n How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. 0 = clip at chartArea. Clipping can also be configured per side: clip: {left: 5, top: false, right: -2, bottom: 0} \n \n \n order \n number \n The drawing order of dataset. Also affects order for stacking, tooltip and legend. \n \n \n stack \n string \n The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). Defaults to dataset  type . \n \n \n parsing \n boolean | object \n How to parse the dataset. The parsing can be disabled by specifying parsing: false at chart options or dataset. If parsing is disabled, data must be sorted and in the formats the associated chart type and scales use internally. \n \n \n hidden \n boolean \n Configure the visibility of the dataset. Using  hidden: true  will hide the dataset from being rendered in the Chart. \n parsing \n const  data  =   [ { x :   'Jan' ,   net :   100 ,   cogs :   50 ,   gm :   50 } ,   { x :   'Feb' ,   net :   120 ,   cogs :   55 ,   gm :   75 } ] ; \n const  cfg  =   { \n     type :   'bar' , \n     data :   { \n         labels :   [ 'Jan' ,   'Feb' ] , \n         datasets :   [ { \n             label :   'Net sales' , \n             data :  data , \n             parsing :   { \n                 yAxisKey :   'net' \n             } \n         } ,   { \n             label :   'Cost of goods sold' , \n             data :  data , \n             parsing :   { \n                 yAxisKey :   'cogs' \n             } \n         } ,   { \n             label :   'Gross margin' , \n             data :  data , \n             parsing :   { \n                 yAxisKey :   'gm' \n             } \n         } ] \n     } , \n } ; \n \n "},{title:"Fonts",frontmatter:{},regularPath:"/general/fonts.html",relativePath:"general/fonts.md",key:"v-4a93cba5",path:"/general/fonts.html",headers:[{level:2,title:"Missing Fonts",slug:"missing-fonts"},{level:2,title:"Loading Fonts",slug:"loading-fonts"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Fonts \n There are special global settings that can change all of the fonts on the chart. These options are in  Chart.defaults.font . The global font settings only apply when more specific options are not included in the config. \n For example, in this chart the text will have a font size of 16px except for the labels in the legend. \n Chart . defaults . font . size  =   16 ; \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         plugins :   { \n             legend :   { \n                 labels :   { \n                     // This more specific font property overrides the global property \n                     font :   { \n                         size :   14 \n                     } \n                 } \n             } \n         } \n     } \n } ) ; \n \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n family \n string \n \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\" \n Default font family for all text, follows CSS font-family options. \n \n \n size \n number \n 12 \n Default font size (in px) for text. Does not apply to radialLinear scale point labels. \n \n \n style \n string \n 'normal' \n Default font style. Does not apply to tooltip title or footer. Does not apply to chart title. Follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit). \n \n \n weight \n string \n undefined \n Default font weight (boldness). (see  MDN ). \n \n \n lineHeight \n number | string \n 1.2 \n Height of an individual line of text (see  MDN ). \n Missing Fonts \n If a font is specified for a chart that does exist on the system, the browser will not apply the font when it is set. If you notice odd fonts appearing in your charts, check that the font you are applying exists on your system. See  issue 3318  for more details. \n Loading Fonts \n If a font is not cached and needs to be loaded, charts that use the font will need to be updated once the font is loaded. This can be accomplished using the  Font Loading APIs . See  issue 8020  for more details. \n"},{title:"Colors",frontmatter:{},regularPath:"/general/colors.html",relativePath:"general/colors.md",key:"v-26d33183",path:"/general/colors.html",headers:[{level:2,title:"Patterns and Gradients",slug:"patterns-and-gradients"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Colors \n When supplying colors to Chart options, you can use a number of formats. You can specify the color as a string in hexadecimal, RGB, or HSL notations. If a color is needed, but not specified, Chart.js will use the global default color. There are 3 color options, stored at  Chart.defaults , to set: \n \n \n \n Name \n Type \n Default \n Description \n \n \n \n \n backgroundColor \n Color \n rgba(0, 0, 0, 0.1) \n Background color. \n \n \n borderColor \n Color \n rgba(0, 0, 0, 0.1) \n Border color. \n \n \n color \n Color \n #666 \n Font color. \n \n \n \n You can also pass a  CanvasGradient  object. You will need to create this before passing to the chart, but using it you can achieve some interesting effects. \n Patterns and Gradients \n An alternative option is to pass a  CanvasPattern  or  CanvasGradient  object instead of a string colour. \n For example, if you wanted to fill a dataset with a pattern from an image you could do the following. \n const  img  =   new   Image ( ) ; \nimg . src  =   'https://example.com/my_image.png' ; \nimg . onload   =   function ( )   { \n     const  ctx  =  document . getElementById ( 'canvas' ) . getContext ( '2d' ) ; \n     const  fillPattern  =  ctx . createPattern ( img ,   'repeat' ) ; \n\n     const  chart  =   new   Chart ( ctx ,   { \n         data :   { \n             labels :   [ 'Item 1' ,   'Item 2' ,   'Item 3' ] , \n             datasets :   [ { \n                 data :   [ 10 ,   20 ,   30 ] , \n                 backgroundColor :  fillPattern\n             } ] \n         } \n     } ) ; \n } ; \n \n Using pattern fills for data graphics can help viewers with vision deficiencies (e.g. color-blindness or partial sight) to  more easily understand your data . \n Using the  Patternomaly  library you can generate patterns to fill datasets. \n const  chartData  =   { \n     datasets :   [ { \n         data :   [ 45 ,   25 ,   20 ,   10 ] , \n         backgroundColor :   [ \n            pattern . draw ( 'square' ,   '#ff6384' ) , \n            pattern . draw ( 'circle' ,   '#36a2eb' ) , \n            pattern . draw ( 'diamond' ,   '#cc65fe' ) , \n            pattern . draw ( 'triangle' ,   '#ffce56' ) \n         ] \n     } ] , \n     labels :   [ 'Red' ,   'Blue' ,   'Purple' ,   'Yellow' ] \n } ; \n \n "},{title:"Options",frontmatter:{},regularPath:"/general/options.html",relativePath:"general/options.md",key:"v-6936c725",path:"/general/options.html",headers:[{level:2,title:"Option resolution",slug:"option-resolution"},{level:3,title:"Chart level options",slug:"chart-level-options"},{level:3,title:"Dataset level options",slug:"dataset-level-options"},{level:3,title:"Dataset animation options",slug:"dataset-animation-options"},{level:3,title:"Dataset element level options",slug:"dataset-element-level-options"},{level:3,title:"Scale options",slug:"scale-options"},{level:3,title:"Plugin options",slug:"plugin-options"},{level:2,title:"Scriptable Options",slug:"scriptable-options"},{level:2,title:"Indexable Options",slug:"indexable-options"},{level:2,title:"Option Context",slug:"option-context"},{level:3,title:"chart",slug:"chart"},{level:3,title:"dataset",slug:"dataset"},{level:3,title:"data",slug:"data"},{level:3,title:"scale",slug:"scale"},{level:3,title:"tick",slug:"tick"},{level:3,title:"tooltip",slug:"tooltip"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Options \n Option resolution \n Options are resolved from top to bottom, using a context dependent route. \n Chart level options \n \n options \n overrides[ config.type ] \n defaults \n Dataset level options \n dataset.type  defaults to  config.type , if not specified. \n \n dataset \n options.datasets[ dataset.type ] \n options \n overrides[ config.type ].datasets[ dataset.type ] \n defaults.datasets[ dataset.type ] \n defaults \n Dataset animation options \n \n dataset.animation \n options.datasets[ dataset.type ].animation \n options.animation \n overrides[ config.type ].datasets[ dataset.type ].animation \n defaults.datasets[ dataset.type ].animation \n defaults.animation \n Dataset element level options \n Each scope is looked up with  elementType  prefix in the option name first, then without the prefix. For example,  radius  for  point  element is looked up using  pointRadius  and if that does not hit, then  radius . \n \n dataset \n options.datasets[ dataset.type ] \n options.datasets[ dataset.type ].elements[ elementType ] \n options.elements[ elementType ] \n options \n overrides[ config.type ].datasets[ dataset.type ] \n overrides[ config.type ].datasets[ dataset.type ].elements[ elementType ] \n defaults.datasets[ dataset.type ] \n defaults.datasets[ dataset.type ].elements[ elementType ] \n defaults.elements[ elementType ] \n defaults \n Scale options \n \n options.scales \n overrides[ config.type ].scales \n defaults.scales \n defaults.scale \n Plugin options \n A plugin can provide  additionalOptionScopes  array of paths to additionally look for its options in. For root scope, use empty string:  '' . Most core plugins also take options from root scope. \n \n options.plugins[ plugin.id ] \n (options.[ ...plugin.additionalOptionScopes ]) \n overrides[ config.type ].plugins[ plugin.id ] \n defaults.plugins[ plugin.id ] \n (defaults.[ ...plugin.additionalOptionScopes ]) \n Scriptable Options \n Scriptable options also accept a function which is called for each of the underlying data values and that takes the unique argument  context  representing contextual information (see  option context ).\nA resolver is passed as second parameter, that can be used to access other options in the same context. \n Note \n The  context  argument should be validated in the scriptable function, because the function can be invoked in different contexts. The  type  field is a good candidate for this validation. \n \n Example: \n color :   function ( context )   { \n     const  index  =  context . dataIndex ; \n     const  value  =  context . dataset . data [ index ] ; \n     return  value  <   0   ?   'red'   :    // draw negative values in red \n        index  %   2   ?   'blue'   :      // else, alternate values in blue and green \n         'green' ; \n } , \n borderColor :   function ( context ,  options )   { \n     const  color  =  options . color ;   // resolve the value of another scriptable option: 'red', 'blue' or 'green' \n     return  Chart . helpers . color ( color ) . lighten ( 0.2 ) ; \n } \n Indexable Options \n Indexable options also accept an array in which each item corresponds to the element at the same index. Note that if there are less items than data, the items are looped over. In many cases, using a  function  is more appropriate if supported. \n Example: \n color :   [ \n     'red' ,      // color for data at index 0 \n     'blue' ,     // color for data at index 1 \n     'green' ,    // color for data at index 2 \n     'black' ,    // color for data at index 3 \n     //... \n ] \n Option Context \n The option context is used to give contextual information when resolving options and currently only applies to  scriptable options .\nThe object is preserved, so it can be used to store and pass information between calls. \n There are multiple levels of context objects: \n \n chart \n \n dataset \n \n data \n \n \n scale \n \n tick \n pointLabel  (only used in the radial linear scale) \n \n \n tooltip \n \n \n \n Each level inherits its parent(s) and any contextual information stored in the parent is available through the child. \n The context object contains the following properties: \n chart \n \n chart : the associated chart \n type :  'chart' \n dataset \n In addition to  chart \n \n active : true if element is active (hovered) \n dataset : dataset at index  datasetIndex \n datasetIndex : index of the current dataset \n index : same as  datasetIndex \n mode : the update mode \n type :  'dataset' \n data \n In addition to  dataset \n \n active : true if element is active (hovered) \n dataIndex : index of the current data \n parsed : the parsed data values for the given  dataIndex  and  datasetIndex \n raw : the raw data values for the given  dataIndex  and  datasetIndex \n element : the element (point, arc, bar, etc.) for this data \n index : same as  dataIndex \n type :  'data' \n scale \n In addition to  chart \n \n scale : the associated scale \n type :  'scale' \n tick \n In addition to  scale \n \n tick : the associated tick object \n index : tick index \n type :  'tick' \n tooltip \n In addition to  chart \n \n tooltip : the tooltip object \n tooltipItems : the items the tooltip is displaying \n \n"},{title:"Padding",frontmatter:{},regularPath:"/general/padding.html",relativePath:"general/padding.md",key:"v-4160ce05",path:"/general/padding.html",headers:[{level:2,title:"Number",slug:"number"},{level:2,title:"{top, left, bottom, right} object",slug:"top-left-bottom-right-object"},{level:2,title:"{x, y} object",slug:"x-y-object"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Padding \n Padding values in Chart options can be supplied in couple of different formats. \n Number \n If this value is a number, it is applied to all sides (left, top, right, bottom). \n For example, defining a 20px padding to all sides of chart: \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         layout :   { \n             padding :   20 \n         } \n     } \n } ) ; \n {top, left, bottom, right} object \n If this value is an object, the  left  property defines the left padding. Similarly the  right ,  top  and  bottom  properties can also be specified.\nOmitted properties default to  0 . \n Lets say you wanted to add 50px of padding to the left side of the chart canvas, you would do: \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         layout :   { \n             padding :   { \n                 left :   50 \n             } \n         } \n     } \n } ) ; \n {x, y} object \n This is a shorthand for defining left/right and top/bottom to the same values. \n For example, 10px left / right and 4px top / bottom padding on a Radial Linear Axis  tick backdropPadding : \n let  chart  =   new   Chart ( ctx ,   { \n     type :   'radar' , \n     data :  data , \n     options :   { \n         scales :   { \n           r :   { \n             ticks :   { \n               backdropPadding :   { \n                   x :   10 , \n                   y :   4 \n               } \n             } \n         } \n     } \n } ) ; \n \n "},{title:"Performance",frontmatter:{},regularPath:"/general/performance.html",relativePath:"general/performance.md",key:"v-6fc6c8e5",path:"/general/performance.html",headers:[{level:2,title:"Data structure and format",slug:"data-structure-and-format"},{level:3,title:"Parsing",slug:"parsing"},{level:3,title:"Data normalization",slug:"data-normalization"},{level:3,title:"Decimation",slug:"decimation"},{level:2,title:"Tick Calculation",slug:"tick-calculation"},{level:3,title:"Rotation",slug:"rotation"},{level:3,title:"Sampling",slug:"sampling"},{level:2,title:"Disable Animations",slug:"disable-animations"},{level:2,title:"Specify min and max for scales",slug:"specify-min-and-max-for-scales"},{level:2,title:"Parallel rendering with web workers (Chromium only)",slug:"parallel-rendering-with-web-workers-chromium-only"},{level:2,title:"Line Charts",slug:"line-charts"},{level:3,title:"Leave Bézier curves disabled",slug:"leave-bezier-curves-disabled"},{level:3,title:"Automatic data decimation during draw",slug:"automatic-data-decimation-during-draw"},{level:3,title:"Enable spanGaps",slug:"enable-spangaps"},{level:3,title:"Disable Line Drawing",slug:"disable-line-drawing"},{level:3,title:"Disable Point Drawing",slug:"disable-point-drawing"},{level:2,title:"When transpiling with Babel, consider using loose mode",slug:"when-transpiling-with-babel-consider-using-loose-mode"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Performance \n Chart.js charts are rendered on  canvas  elements, which makes rendering quite fast. For large datasets or performance sensitive applications, you may wish to consider the tips below. \n Data structure and format \n Parsing \n Provide prepared data in the internal format accepted by the dataset and scales, and set  parsing: false . See  Data structures  for more information. \n Data normalization \n Chart.js is fastest if you provide data with indices that are unique, sorted, and consistent across datasets and provide the  normalized: true  option to let Chart.js know that you have done so. Even without this option, it can sometimes still be faster to provide sorted data. \n Decimation \n Decimating your data will achieve the best results. When there is a lot of data to display on the graph, it doesn't make sense to show tens of thousands of data points on a graph that is only a few hundred pixels wide. \n The  decimation plugin  can be used with line charts to decimate data before the chart is rendered. This will provide the best performance since it will reduce the memory needed to render the chart. \n Line charts are able to do  automatic data decimation during draw , when certain conditions are met. You should still consider decimating data yourself before passing it in for maximum performance since the automatic decimation occurs late in the chart life cycle. \n Tick Calculation \n Rotation \n Specify a rotation value  by setting  minRotation  and  maxRotation  to the same value, which avoids the chart from having to automatically determine a value to use. \n Sampling \n Set the  ticks.sampleSize  option. This will determine how large your labels are by looking at only a subset of them in order to render axes more quickly. This works best if there is not a large variance in the size of your labels. \n Disable Animations \n If your charts have long render times, it is a good idea to disable animations. Doing so will mean that the chart needs to only be rendered once during an update instead of multiple times. This will have the effect of reducing CPU usage and improving general page performance.\nLine charts use Path2D caching when animations are disabled and Path2D is available. \n To disable animations \n new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         animation :   false \n     } \n } ) ; \n Specify  min  and  max  for scales \n If you specify the  min  and  max , the scale does not have to compute the range from the data. \n new   Chart ( ctx ,   { \n     type :   'line' , \n     data :  data , \n     options :   { \n         scales :   { \n             x :   { \n                 type :   'time' , \n                 min :   new   Date ( '2019-01-01' ) . valueOf ( ) , \n                 max :   new   Date ( '2019-12-31' ) . valueOf ( ) \n             } , \n             y :   { \n                 type :   'linear' , \n                 min :   0 , \n                 max :   100 \n             } \n         } \n     } \n } ) ; \n Parallel rendering with web workers (Chromium only) \n Chromium (Chrome: version 69, Edge: 79, Opera: 56) added the ability to  transfer rendering control of a canvas  to a web worker. Web workers can use the  OffscreenCanvas API  to render from a web worker onto canvases in the DOM. Chart.js is a canvas-based library and supports rendering in a web worker - just pass an OffscreenCanvas into the Chart constructor instead of a Canvas element. Note that as of today, this API is only supported in Chromium based browsers. \n By moving all Chart.js calculations onto a separate thread, the main thread can be freed up for other uses. Some tips and tricks when using Chart.js in a web worker: \n \n Transferring data between threads can be expensive, so ensure that your config and data objects are as small as possible. Try generating them on the worker side if you can (workers can make HTTP requests!) or passing them to your worker as ArrayBuffers, which can be transferred quickly from one thread to another. \n You can't transfer functions between threads, so if your config object includes functions you'll have to strip them out before transferring and then add them back later. \n You can't access the DOM from worker threads, so Chart.js plugins that use the DOM (including any mouse interactions) will likely not work. \n Ensure that you have a fallback if you support browsers other than the most modern Chromium browsers. \n Resizing the chart must be done manually. See an example in the worker code below. \n \n Example main thread code: \n const  config  =   { } ; \n const  canvas  =   new   HTMLCanvasElement ( ) ; \n const  offscreenCanvas  =  canvas . transferControlToOffscreen ( ) ; \n\n const  worker  =   new   Worker ( 'worker.js' ) ; \nworker . postMessage ( { canvas :  offscreenCanvas ,  config } ,   [ offscreenCanvas ] ) ; \n \n Example worker code, in  worker.js : \n onmessage   =   function ( event )   { \n     const   { canvas ,  config }   =  event . data ; \n     const  chart  =   new   Chart ( canvas ,  config ) ; \n\n     // Resizing the chart must be done manually, since OffscreenCanvas does not include event listeners. \n    canvas . width  =   100 ; \n    canvas . height  =   100 ; \n    chart . resize ( ) ; \n } ; \n Line Charts \n Leave Bézier curves disabled \n If you are drawing lines on your chart, disabling Bézier curves will improve render times since drawing a straight line is more performant than a Bézier curve. Bézier curves are disabled by default. \n Automatic data decimation during draw \n Line element will automatically decimate data, when  tension ,  stepped , and  borderDash  are left set to their default values ( false ,  0 , and  []  respectively). This improves rendering speed by skipping drawing of invisible line segments. \n Enable spanGaps \n If you have a lot of data points, it can be more performant to enable  spanGaps . This disables segmentation of the line, which can be an unneeded step. \n To enable  spanGaps : \n new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             spanGaps :   true   // enable for a single dataset \n         } ] \n     } , \n     options :   { \n         spanGaps :   true   // enable for all datasets \n     } \n } ) ; \n Disable Line Drawing \n If you have a lot of data points, it can be more performant to disable rendering of the line for a dataset and only draw points. Doing this means that there is less to draw on the canvas which will improve render performance. \n To disable lines: \n new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             showLine :   false   // disable for a single dataset \n         } ] \n     } , \n     options :   { \n         showLine :   false   // disable for all datasets \n     } \n } ) ; \n Disable Point Drawing \n If you have a lot of data points, it can be more performant to disable rendering of the points for a dataset and only draw line. Doing this means that there is less to draw on the canvas which will improve render performance. \n To disable point drawing: \n new   Chart ( ctx ,   { \n     type :   'line' , \n     data :   { \n         datasets :   [ { \n             pointRadius :   0   // disable for a single dataset \n         } ] \n     } , \n     options :   { \n         datasets :   { \n             line :   { \n                 pointRadius :   0   // disable for all `'line'` datasets \n             } \n         } , \n         elements :   { \n             point :   { \n                 radius :   0   // default to disabled in all datasets \n             } \n         } \n     } \n } ) ; \n When transpiling with Babel, consider using  loose  mode \n Babel 7.9 changed the way classes are constructed. It is slow, unless used with  loose  mode.\n More information \n"},{title:"Getting Started",frontmatter:{},regularPath:"/getting-started/",relativePath:"getting-started/index.md",key:"v-1907f51e",path:"/getting-started/",lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Getting Started \n Let's get started using Chart.js! \n First, we need to have a canvas in our page. It's recommended to give the chart its own container for  responsiveness . \n < div > \n   < canvas   id = \" myChart \" > </ canvas > \n </ div > \n \n Now that we have a canvas we can use, we need to include Chart.js in our page. \n < script   src = \" https://cdn.jsdelivr.net/npm/chart.js \" > </ script > \n \n Now, we can create a chart. We add a script to our page: \n < script > \n   const  labels  =   [ \n     'January' , \n     'February' , \n     'March' , \n     'April' , \n     'May' , \n     'June' , \n   ] ; \n\n   const  data  =   { \n     labels :  labels , \n     datasets :   [ { \n       label :   'My First dataset' , \n       backgroundColor :   'rgb(255, 99, 132)' , \n       borderColor :   'rgb(255, 99, 132)' , \n       data :   [ 0 ,   10 ,   5 ,   2 ,   20 ,   30 ,   45 ] , \n     } ] \n   } ; \n\n   const  config  =   { \n     type :   'line' , \n     data :  data , \n     options :   { } \n   } ; \n </ script > \n \n Finally, render the chart using our configuration: \n < script > \n   const  myChart  =   new   Chart ( \n    document . getElementById ( 'myChart' ) , \n    config\n   ) ; \n </ script > \n \n It's that easy to get started using Chart.js! From here you can explore the many options that can help you customise your charts with scales, tooltips, labels, colors, custom actions, and much more. \n Here the sample above is presented with our sample block: \n \nconst labels = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n];\nconst data = {\n  labels: labels,\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: 'rgb(255, 99, 132)',\n    borderColor: 'rgb(255, 99, 132)',\n    data: [0, 10, 5, 2, 20, 30, 45],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {}\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> Note \n As you can see, some of the boilerplate needed is not visible in our sample blocks, as the samples focus on the configuration options. \n \n All our examples are  available online . \n To run the samples locally you first have to install all the necessary packages using the  npm ci  command, after this you can run  npm run docs:dev  to build the documentation. As soon as the build is done, you can go to  http://localhost:8080/samples/  to see the samples. \n"},{title:"Installation",frontmatter:{title:"Installation"},regularPath:"/getting-started/installation.html",relativePath:"getting-started/installation.md",key:"v-4eb521cf",path:"/getting-started/installation.html",headers:[{level:2,title:"npm",slug:"npm"},{level:2,title:"CDN",slug:"cdn"},{level:3,title:"CDNJS",slug:"cdnjs"},{level:3,title:"jsDelivr",slug:"jsdelivr"},{level:2,title:"Github",slug:"github"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" npm \n \n \n npm   install  chart.js\n CDN \n CDNJS \n \n Chart.js built files are available on  CDNJS : \n https://cdnjs.com/libraries/Chart.js \n jsDelivr \n   \n Chart.js built files are also available through  jsDelivr : \n https://www.jsdelivr.com/package/npm/chart.js?path=dist \n Github \n \n You can download the latest version of  Chart.js on GitHub . \n If you download or clone the repository, you must  build  Chart.js to generate the dist files. Chart.js no longer comes with prebuilt release versions, so an alternative option to downloading the repo is  strongly  advised. \n"},{title:"Integration",frontmatter:{},regularPath:"/getting-started/integration.html",relativePath:"getting-started/integration.md",key:"v-93702f36",path:"/getting-started/integration.html",headers:[{level:2,title:"Script Tag",slug:"script-tag"},{level:2,title:"Common JS",slug:"common-js"},{level:2,title:"Bundlers (Webpack, Rollup, etc.)",slug:"bundlers-webpack-rollup-etc"},{level:3,title:"Helper functions",slug:"helper-functions"},{level:2,title:"Require JS",slug:"require-js"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Integration \n Chart.js can be integrated with plain JavaScript or with different module loaders. The examples below show how to load Chart.js in different systems. \n Script Tag \n < script   src = \" path/to/chartjs/dist/chart.js \" > </ script > \n < script > \n     const  myChart  =   new   Chart ( ctx ,   { ... } ) ; \n </ script > \n Common JS \n const  Chart  =   require ( 'chart.js' ) ; \n const  myChart  =   new   Chart ( ctx ,   { ... } ) ; \n Bundlers (Webpack, Rollup, etc.) \n Chart.js 3 is tree-shakeable, so it is necessary to import and register the controllers, elements, scales and plugins you are going to use. \n For all available imports see the example below. \n import   { \n  Chart , \n  ArcElement , \n  LineElement , \n  BarElement , \n  PointElement , \n  BarController , \n  BubbleController , \n  DoughnutController , \n  LineController , \n  PieController , \n  PolarAreaController , \n  RadarController , \n  ScatterController , \n  CategoryScale , \n  LinearScale , \n  LogarithmicScale , \n  RadialLinearScale , \n  TimeScale , \n  TimeSeriesScale , \n  Decimation , \n  Filler , \n  Legend , \n  Title , \n  Tooltip , \n  SubTitle\n }   from   'chart.js' ; \n\nChart . register ( \n  ArcElement , \n  LineElement , \n  BarElement , \n  PointElement , \n  BarController , \n  BubbleController , \n  DoughnutController , \n  LineController , \n  PieController , \n  PolarAreaController , \n  RadarController , \n  ScatterController , \n  CategoryScale , \n  LinearScale , \n  LogarithmicScale , \n  RadialLinearScale , \n  TimeScale , \n  TimeSeriesScale , \n  Decimation , \n  Filler , \n  Legend , \n  Title , \n  Tooltip , \n  SubTitle\n ) ; \n\n const  myChart  =   new   Chart ( ctx ,   { ... } ) ; \n \n A short registration format is also available to quickly register everything. \n import   {  Chart ,  registerables  }   from   'chart.js' ; \nChart . register ( ... registerables ) ; \n \n And finally there is a separate path to do just the above for you, in one line: \n import  Chart  from   'chart.js/auto' ; \n Helper functions \n If you want to use the helper functions, you will need to import these separately from the helpers package and use them as stand-alone functions. \n Example of  Converting Events to Data Values  using bundlers. \n import  Chart  from   'chart.js/auto' ; \n import   {  getRelativePosition  }   from   'chart.js/helpers' ; \n\n const  chart  =   new   Chart ( ctx ,   { \n   type :   'line' , \n   data :  data , \n   options :   { \n     onClick :   ( e )   =>   { \n       const  canvasPosition  =   getRelativePosition ( e ,  chart ) ; \n\n       // Substitute the appropriate scale IDs \n       const  dataX  =  chart . scales . x . getValueForPixel ( canvasPosition . x ) ; \n       const  dataY  =  chart . scales . y . getValueForPixel ( canvasPosition . y ) ; \n     } \n   } \n } ) ; \n Require JS \n Important:  RequireJS  can  not  load CommonJS module as is , so be sure to require one of the UMD builds instead (i.e.  dist/chart.js ,  dist/chart.min.js , etc.). \n require ( [ 'path/to/chartjs/dist/chart.min.js' ] ,   function ( Chart ) { \n     const  myChart  =   new   Chart ( ctx ,   { ... } ) ; \n } ) ; \n \n Note:  in order to use the time scale, you need to make sure  one of the available date adapters  and corresponding date library are fully loaded  after  requiring Chart.js. For this you can use nested requires: \n require ( [ 'chartjs' ] ,   function ( Chart )   { \n     require ( [ 'moment' ] ,   function ( )   { \n         require ( [ 'chartjs-adapter-moment' ] ,   function ( )   { \n             new   Chart ( ctx ,   { ... } ) ; \n         } ) ; \n     } ) ; \n } ) ; \n \n "},{title:"Usage",frontmatter:{},regularPath:"/getting-started/usage.html",relativePath:"getting-started/usage.md",key:"v-a053eff6",path:"/getting-started/usage.html",headers:[{level:2,title:"Creating a Chart",slug:"creating-a-chart"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Usage \n Chart.js can be used with ES6 modules, plain JavaScript, and module loaders. \n Creating a Chart \n To create a chart, we need to instantiate the  Chart  class. To do this, we need to pass in the node, jQuery instance, or 2d context of the canvas of where we want to draw the chart. Here's an example. \n < canvas   id = \" myChart \"   width = \" 400 \"   height = \" 400 \" > </ canvas > \n \n // Any of the following formats may be used \n const  ctx  =  document . getElementById ( 'myChart' ) ; \n const  ctx  =  document . getElementById ( 'myChart' ) . getContext ( '2d' ) ; \n const  ctx  =   $ ( '#myChart' ) ; \n const  ctx  =   'myChart' ; \n \n Once you have the element or context, you're ready to instantiate a pre-defined chart-type or create your own! \n The following example instantiates a bar chart showing the number of votes for different colors and the y-axis starting at 0. \n < canvas   id = \" myChart \"   width = \" 400 \"   height = \" 400 \" > </ canvas > \n < script > \n const  ctx  =  document . getElementById ( 'myChart' ) ; \n const  myChart  =   new   Chart ( ctx ,   { \n     type :   'bar' , \n     data :   { \n         labels :   [ 'Red' ,   'Blue' ,   'Yellow' ,   'Green' ,   'Purple' ,   'Orange' ] , \n         datasets :   [ { \n             label :   '# of Votes' , \n             data :   [ 12 ,   19 ,   3 ,   5 ,   2 ,   3 ] , \n             backgroundColor :   [ \n                 'rgba(255, 99, 132, 0.2)' , \n                 'rgba(54, 162, 235, 0.2)' , \n                 'rgba(255, 206, 86, 0.2)' , \n                 'rgba(75, 192, 192, 0.2)' , \n                 'rgba(153, 102, 255, 0.2)' , \n                 'rgba(255, 159, 64, 0.2)' \n             ] , \n             borderColor :   [ \n                 'rgba(255, 99, 132, 1)' , \n                 'rgba(54, 162, 235, 1)' , \n                 'rgba(255, 206, 86, 1)' , \n                 'rgba(75, 192, 192, 1)' , \n                 'rgba(153, 102, 255, 1)' , \n                 'rgba(255, 159, 64, 1)' \n             ] , \n             borderWidth :   1 \n         } ] \n     } , \n     options :   { \n         scales :   { \n             y :   { \n                 beginAtZero :   true \n             } \n         } \n     } \n } ) ; \n </ script > \n \n "},{title:"3.x Migration Guide",frontmatter:{},regularPath:"/getting-started/v3-migration.html",relativePath:"getting-started/v3-migration.md",key:"v-5332aa47",path:"/getting-started/v3-migration.html",headers:[{level:2,title:"End user migration",slug:"end-user-migration"},{level:3,title:"Setup and installation",slug:"setup-and-installation"},{level:3,title:"Chart types",slug:"chart-types"},{level:3,title:"Options",slug:"options"},{level:2,title:"Developer migration",slug:"developer-migration"},{level:3,title:"Removed",slug:"removed"},{level:3,title:"Renamed",slug:"renamed"},{level:3,title:"Changed",slug:"changed"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" 3.x Migration Guide \n Chart.js 3.0 introduces a number of breaking changes. Chart.js 2.0 was released in April 2016. In the years since then, as Chart.js has grown in popularity and feature set, we've learned some lessons about how to better create a charting library. In order to improve performance, offer new features, and improve maintainability, it was necessary to break backwards compatibility, but we aimed to do so only when worth the benefit. Some major highlights of v3 include: \n \n Large  performance  improvements including the ability to skip data parsing and render charts in parallel via webworkers \n Additional configurability and scriptable options with better defaults \n Completely rewritten animation system \n Rewritten filler plugin with numerous bug fixes \n Documentation migrated from GitBook to Vuepress \n API documentation generated and verified by TypeDoc \n No more CSS injection \n Tons of bug fixes \n Tree shaking \n End user migration \n Setup and installation \n \n Distributed files are now in lower case. For example:  dist/chart.js . \n Chart.js is no longer providing the  Chart.bundle.js  and  Chart.bundle.min.js . Please see the  installation  and  integration  docs for details on the recommended way to setup Chart.js if you were using these builds. \n moment  is no longer specified as an npm dependency. If you are using the  time  or  timeseries  scales, you must include one of  the available adapters  and corresponding date library. You no longer need to exclude moment from your build. \n The  Chart  constructor will throw an error if the canvas/context provided is already in use \n Chart.js 3 is tree-shakeable. So if you are using it as an  npm  module in a project and want to make use of this feature, you need to import and register the controllers, elements, scales and plugins you want to use, for a list of all the available items to import see  integration . You will not have to call  register  if importing Chart.js via a  script  tag or from the  auto  register path as an  npm  module, in this case you will not get the tree shaking benefits. Here is an example of registering components: \n \n import   {  Chart ,  LineController ,  LineElement ,  PointElement ,  LinearScale ,  Title  }   from   ` chart.js ` \n\nChart . register ( LineController ,  LineElement ,  PointElement ,  LinearScale ,  Title ) ; \n\n const  chart  =   new   Chart ( ctx ,   { \n     type :   'line' , \n     // data: ... \n     options :   { \n         plugins :   { \n             title :   { \n                 display :   true , \n                 text :   'Chart Title' \n             } \n         } , \n         scales :   { \n             x :   { \n                 type :   'linear' \n             } , \n             y :   { \n                 type :   'linear' \n             } \n         } \n     } \n } ) \n Chart types \n \n horizontalBar  chart type was removed. Horizontal bar charts can be configured using the new  indexAxis  option \n Options \n A number of changes were made to the configuration options passed to the  Chart  constructor. Those changes are documented below. \n Generic changes \n \n Indexable options are now looping.  backgroundColor: ['red', 'green']  will result in alternating  'red'  /  'green'  if there are more than 2 data points. \n The input properties of object data can now be freely specified, see  data structures  for details. \n Most options are resolved utilizing proxies, instead of merging with defaults. In addition to easily enabling different resolution routes for different contexts, it allows using other resolved options in scriptable options.\n \n Options are by default scriptable and indexable, unless disabled for some reason. \n Scriptable options receive a option resolver as second parameter for accessing other options in same context. \n Resolution falls to upper scopes, if no match is found earlier. See  options  for details. \n Specific changes \n \n elements.rectangle  is now  elements.bar \n hover.animationDuration  is now configured in  animation.active.duration \n responsiveAnimationDuration  is now configured in  animation.resize.duration \n Polar area  elements.arc.angle  is now configured in degrees instead of radians. \n Polar area  startAngle  option is now consistent with  Radar , 0 is at top and value is in degrees. Default is changed from  -½π  to   0 . \n Doughnut  rotation  option is now in degrees and 0 is at top. Default is changed from  -½π  to   0 . \n Doughnut  circumference  option is now in degrees. Default is changed from  2π  to  360 . \n Doughnut  cutoutPercentage  was renamed to  cutout and accepts pixels as number and percent as string ending with  % . \n scale  option was removed in favor of  options.scales.r  (or any other scale id, with  axis: 'r' ) \n scales.[x/y]Axes  arrays were removed. Scales are now configured directly to  options.scales  object with the object key being the scale Id. \n scales.[x/y]Axes.barPercentage  was moved to dataset option  barPercentage \n scales.[x/y]Axes.barThickness  was moved to dataset option  barThickness \n scales.[x/y]Axes.categoryPercentage  was moved to dataset option  categoryPercentage \n scales.[x/y]Axes.maxBarThickness  was moved to dataset option  maxBarThickness \n scales.[x/y]Axes.minBarLength  was moved to dataset option  minBarLength \n scales.[x/y]Axes.scaleLabel  was renamed to  scales[id].title \n scales.[x/y]Axes.scaleLabel.labelString  was renamed to  scales[id].title.text \n scales.[x/y]Axes.ticks.beginAtZero  was renamed to  scales[id].beginAtZero \n scales.[x/y]Axes.ticks.max  was renamed to  scales[id].max \n scales.[x/y]Axes.ticks.min  was renamed to  scales[id].min \n scales.[x/y]Axes.ticks.reverse  was renamed to  scales[id].reverse \n scales.[x/y]Axes.ticks.suggestedMax  was renamed to  scales[id].suggestedMax \n scales.[x/y]Axes.ticks.suggestedMin  was renamed to  scales[id].suggestedMin \n scales.[x/y]Axes.ticks.unitStepSize  was removed. Use  scales[id].ticks.stepSize \n scales.[x/y]Axes.ticks.userCallback  was renamed to  scales[id].ticks.callback \n scales.[x/y]Axes.time.format  was renamed to  scales[id].time.parser \n scales.[x/y]Axes.time.max  was renamed to  scales[id].max \n scales.[x/y]Axes.time.min  was renamed to  scales[id].min \n scales.[x/y]Axes.zeroLine*  options of axes were removed. Use scriptable scale options instead. \n The dataset option  steppedLine  was removed. Use  stepped \n The chart option  showLines  was renamed to  showLine  to match the dataset option. \n The chart option  startAngle  was moved to  radial  scale options. \n To override the platform class used in a chart instance, pass  platform: PlatformClass  in the config object. Note that the class should be passed, not an instance of the class. \n aspectRatio  defaults to 1 for doughnut, pie, polarArea, and radar charts \n TimeScale  does not read  t  from object data by default anymore. The default property is  x  or  y , depending on the orientation. See  data structures  for details on how to change the default. \n tooltips  namespace was renamed to  tooltip  to match the plugin name \n legend ,  title  and  tooltip  namespaces were moved from  options  to  options.plugins . \n tooltips.custom  was renamed to  plugins.tooltip.external \n Defaults \n \n global  namespace was removed from  defaults . So  Chart.defaults.global  is now  Chart.defaults \n Dataset controller defaults were relocate to  overrides . For example  Chart.defaults.line  is now  Chart.overrides.line \n default  prefix was removed from defaults. For example  Chart.defaults.global.defaultColor  is now  Chart.defaults.color \n defaultColor  was split to  color ,  borderColor  and  backgroundColor \n defaultFontColor  was renamed to  color \n defaultFontFamily  was renamed to  font.family \n defaultFontSize  was renamed to  font.size \n defaultFontStyle  was renamed to  font.style \n defaultLineHeight  was renamed to  font.lineHeight \n Horizontal Bar default tooltip mode was changed from  'index'  to  'nearest'  to match vertical bar charts \n legend ,  title  and  tooltip  namespaces were moved from  Chart.defaults  to  Chart.defaults.plugins . \n elements.line.fill  default changed from  true  to  false . \n Line charts no longer override the default  interaction  mode. Default is changed from  'index'  to  'nearest' . \n Scales \n The configuration options for scales is the largest change in v3. The  xAxes  and  yAxes  arrays were removed and axis options are individual scales now keyed by scale ID. \n The v2 configuration below is shown with it's new v3 configuration \n options :   { \n   scales :   { \n     xAxes :   [ { \n       id :   'x' , \n       type :   'time' , \n       display :   true , \n       title :   { \n         display :   true , \n         text :   'Date' \n       } , \n       ticks :   { \n         major :   { \n           enabled :   true \n         } , \n         font :   function ( context )   { \n           if   ( context . tick  &&  context . tick . major )   { \n             return   { \n               weight :   'bold' , \n               color :   '#FF0000' \n             } ; \n           } \n         } \n       } \n     } ] , \n     yAxes :   [ { \n       id :   'y' , \n       display :   true , \n       title :   { \n         display :   true , \n         text :   'value' \n       } \n     } ] \n   } \n } \n \n And now, in v3: \n options :   { \n   scales :   { \n     x :   { \n       type :   'time' , \n       display :   true , \n       title :   { \n         display :   true , \n         text :   'Date' \n       } , \n       ticks :   { \n         major :   { \n           enabled :   true \n         } , \n         color :   ( context )   =>  context . tick  &&  context . tick . major  &&   '#FF0000' , \n         font :   function ( context )   { \n           if   ( context . tick  &&  context . tick . major )   { \n             return   { \n               weight :   'bold' \n             } ; \n           } \n         } \n       } \n     } , \n     y :   { \n       display :   true , \n       title :   { \n         display :   true , \n         text :   'value' \n       } \n     } \n   } \n } \n \n \n The time scale option  distribution: 'series'  was removed and a new scale type  timeseries  was introduced in its place \n In the time scale,  autoSkip  is now enabled by default for consistency with the other scales \n Animations \n Animation system was completely rewritten in Chart.js v3. Each property can now be animated separately. Please see  animations  docs for details. \n Customizability \n \n custom  attribute of elements was removed. Please use scriptable options \n The  hover  property of scriptable options  context  object was renamed to  active  to align it with the datalabels plugin. \n Interactions \n \n To allow DRY configuration, a root options scope for common interaction options was added.  options.hover  and  options.plugins.tooltip  now both extend from  options.interaction . Defaults are defined at  defaults.interaction  level, so by default hover and tooltip interactions share the same mode etc. \n interactions  are now limited to the chart area + allowed overflow \n {mode: 'label'}  was replaced with  {mode: 'index'} \n {mode: 'single'}  was replaced with  {mode: 'nearest', intersect: true} \n modes['X-axis']  was replaced with  {mode: 'index', intersect: false} \n options.onClick  is now limited to the chart area \n options.onClick  and  options.onHover  now receive the  chart  instance as a 3rd argument \n options.onHover  now receives a wrapped  event  as the first parameter. The previous first parameter value is accessible via  event.native . \n options.hover.onHover  was removed, use  options.onHover . \n Ticks \n \n options.gridLines  was renamed to  options.grid \n options.gridLines.offsetGridLines  was renamed to  options.grid.offset . \n options.gridLines.tickMarkLength  was renamed to  options.grid.tickLength . \n options.ticks.fixedStepSize  is no longer used. Use  options.ticks.stepSize . \n options.ticks.major  and  options.ticks.minor  were replaced with scriptable options for tick fonts. \n Chart.Ticks.formatters.linear  was renamed to  Chart.Ticks.formatters.numeric . \n options.ticks.backdropPaddingX  and  options.ticks.backdropPaddingY  were replaced with  options.ticks.backdropPadding  in the radial linear scale. \n Tooltip \n \n xLabel  and  yLabel  were removed. Please use  label  and  formattedValue \n The  filter  option will now be passed additional parameters when called and should have the method signature  function(tooltipItem, index, tooltipItems, data) \n The  custom  callback now takes a context object that has  tooltip  and  chart  properties \n All properties of tooltip model related to the tooltip options have been moved to reside within the  options  property. \n The callbacks no longer are given a  data  parameter. The tooltip item parameter contains the chart and dataset instead \n The tooltip item's  index  parameter was renamed to  dataIndex  and  value  was renamed to  formattedValue \n The  xPadding  and  yPadding  options were merged into a single  padding  object \n Developer migration \n While the end-user migration for Chart.js 3 is fairly straight-forward, the developer migration can be more complicated. Please reach out for help in the #dev  Slack  channel if tips on migrating would be helpful. \n Some of the biggest things that have changed: \n \n There is a completely rewritten and more performant animation system.\n \n Element._model  and  Element._view  are no longer used and properties are now set directly on the elements. You will have to use the method  getProps  to access these properties inside most methods such as  inXRange / inYRange  and  getCenterPoint . Please take a look at  the Chart.js-provided elements  for examples. \n When building the elements in a controller, it's now suggested to call  updateElement  to provide the element properties. There are also methods such as  getSharedOptions  and  includeOptions  that have been added to skip redundant computation. Please take a look at  the Chart.js-provided controllers  for examples. \n \n \n Scales introduced a new parsing API. This API takes user data and converts it into a more standard format. E.g. it allows users to provide numeric data as a  string  and converts it to a  number  where necessary. Previously this was done on the fly as charts were rendered. Now it's done up front with the ability to skip it for better performance if users provide data in the correct format. If you're using standard data format like  x / y  you may not need to do anything. If you're using a custom data format you will have to override some of the parse methods in  core.datasetController.js . An example can be found in  chartjs-chart-financial , which uses an  {o, h, l, c}  data format. \n \n A few changes were made to controllers that are more straight-forward, but will affect all controllers: \n \n Options:\n \n global  was removed from the defaults namespace as it was unnecessary and sometimes inconsistent \n Dataset defaults are now under the chart type options instead of vice-versa. This was not able to be done when introduced in 2.x for backwards compatibility. Fixing it removes the biggest stumbling block that new chart developers encountered \n Scale default options need to be updated as described in the end user migration section (e.g.  x  instead of  xAxes  and  y  instead of  yAxes ) \n \n \n updateElement  was changed to  updateElements  and has a new method signature as described below. This provides performance enhancements such as allowing easier reuse of computations that are common to all elements and reducing the number of function calls \n Removed \n The following properties and methods were removed: \n Removed from Chart \n \n Chart.animationService \n Chart.active \n Chart.borderWidth \n Chart.chart.chart \n Chart.Bar . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.Bubble . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.Chart \n Chart.Controller \n Chart.Doughnut . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.innerRadius  now lives on doughnut, pie, and polarArea controllers \n Chart.lastActive \n Chart.Legend  was moved to  Chart.plugins.legend._element  and made private \n Chart.Line . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.LinearScaleBase  now must be imported and cannot be accessed off the  Chart  object \n Chart.offsetX \n Chart.offsetY \n Chart.outerRadius  now lives on doughnut, pie, and polarArea controllers \n Chart.plugins  was replaced with  Chart.registry . Plugin defaults are now in  Chart.defaults.plugins[id] . \n Chart.plugins.register  was replaced by  Chart.register . \n Chart.PolarArea . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.prototype.generateLegend \n Chart.platform . It only contained  disableCSSInjection . CSS is never injected in v3. \n Chart.PluginBase \n Chart.Radar . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.radiusLength \n Chart.scaleService  was replaced with  Chart.registry . Scale defaults are now in  Chart.defaults.scales[type] . \n Chart.Scatter . New charts are created via  new Chart  and providing the appropriate  type  parameter \n Chart.types \n Chart.Title  was moved to  Chart.plugins.title._element  and made private \n Chart.Tooltip  is now provided by the tooltip plugin. The positioners can be accessed from  tooltipPlugin.positioners \n ILayoutItem.minSize \n Removed from Dataset Controllers \n \n BarController.getDatasetMeta().bar \n DatasetController.addElementAndReset \n DatasetController.createMetaData \n DatasetController.createMetaDataset \n DoughnutController.getRingIndex \n Removed from Elements \n \n Element.getArea \n Element.height \n Element.hidden  was replaced by chart level status, usable with  getDataVisibility(index)  /  toggleDataVisibility(index) \n Element.initialize \n Element.inLabelRange \n Line.calculatePointY \n Removed from Helpers \n \n helpers.addEvent \n helpers.aliasPixel \n helpers.arrayEquals \n helpers.configMerge \n helpers.findIndex \n helpers.findNextWhere \n helpers.findPreviousWhere \n helpers.extend . Use  Object.assign  instead \n helpers.getValueAtIndexOrDefault . Use  helpers.resolve  instead. \n helpers.indexOf \n helpers.lineTo \n helpers.longestText  was made private \n helpers.max \n helpers.measureText  was made private \n helpers.min \n helpers.nextItem \n helpers.niceNum \n helpers.numberOfLabelLines \n helpers.previousItem \n helpers.removeEvent \n helpers.roundedRect \n helpers.scaleMerge \n helpers.where \n Removed from Layout \n \n Layout.defaults \n Removed from Scales \n \n LinearScaleBase.handleDirectionalChanges \n LogarithmicScale.minNotZero \n Scale.getRightValue \n Scale.longestLabelWidth \n Scale.longestTextCache  is now private \n Scale.margins  is now private \n Scale.mergeTicksOptions \n Scale.ticksAsNumbers \n Scale.tickValues  is now private \n TimeScale.getLabelCapacity  is now private \n TimeScale.tickFormatFunction  is now private \n Removed from Plugins (Legend, Title, and Tooltip) \n \n IPlugin.afterScaleUpdate . Use  afterLayout  instead \n Legend.margins  is now private \n Legend  onClick ,  onHover , and  onLeave  options now receive the legend as the 3rd argument in addition to implicitly via  this \n Legend  onClick ,  onHover , and  onLeave  options now receive a wrapped  event  as the first parameter. The previous first parameter value is accessible via  event.native . \n Title.margins  is now private \n The tooltip item's  x  and  y  attributes were replaced by  element . You can use  element.x  and  element.y  or  element.tooltipPosition()  instead. \n Removal of Public APIs \n The following public APIs were removed. \n \n getElementAtEvent  is replaced with  chart.getElementsAtEventForMode(e, 'nearest', { intersect: true }, false) \n getElementsAtEvent  is replaced with  chart.getElementsAtEventForMode(e, 'index', { intersect: true }, false) \n getElementsAtXAxis  is replaced with  chart.getElementsAtEventForMode(e, 'index', { intersect: false }, false) \n getDatasetAtEvent  is replaced with  chart.getElementsAtEventForMode(e, 'dataset', { intersect: true }, false) \n Removal of private APIs \n The following private APIs were removed. \n \n Chart._bufferedRender \n Chart._updating \n Chart.data.datasets[datasetIndex]._meta \n DatasetController._getIndexScaleId \n DatasetController._getIndexScale \n DatasetController._getValueScaleId \n DatasetController._getValueScale \n Element._ctx \n Element._model \n Element._view \n LogarithmicScale._valueOffset \n TimeScale.getPixelForOffset \n TimeScale.getLabelWidth \n Tooltip._lastActive \n Renamed \n The following properties were renamed during v3 development: \n \n Chart.Animation.animationObject  was renamed to  Chart.Animation \n Chart.Animation.chartInstance  was renamed to  Chart.Animation.chart \n Chart.canvasHelpers  was merged with  Chart.helpers \n Chart.elements.Arc  was renamed to  Chart.elements.ArcElement \n Chart.elements.Line  was renamed to  Chart.elements.LineElement \n Chart.elements.Point  was renamed to  Chart.elements.PointElement \n Chart.elements.Rectangle  was renamed to  Chart.elements.BarElement \n Chart.layoutService  was renamed to  Chart.layouts \n Chart.pluginService  was renamed to  Chart.plugins \n helpers.callCallback  was renamed to  helpers.callback \n helpers.drawRoundedRectangle  was renamed to  helpers.roundedRect \n helpers.getValueOrDefault  was renamed to  helpers.valueOrDefault \n LayoutItem.fullWidth  was renamed to  LayoutItem.fullSize \n Point.controlPointPreviousX  was renamed to  Point.cp1x \n Point.controlPointPreviousY  was renamed to  Point.cp1y \n Point.controlPointNextX  was renamed to  Point.cp2x \n Point.controlPointNextY  was renamed to  Point.cp2y \n Scale.calculateTickRotation  was renamed to  Scale.calculateLabelRotation \n Tooltip.options.legendColorBackgroupd  was renamed to  Tooltip.options.multiKeyBackground \n Renamed private APIs \n The private APIs listed below were renamed: \n \n BarController.calculateBarIndexPixels  was renamed to  BarController._calculateBarIndexPixels \n BarController.calculateBarValuePixels  was renamed to  BarController._calculateBarValuePixels \n BarController.getStackCount  was renamed to  BarController._getStackCount \n BarController.getStackIndex  was renamed to  BarController._getStackIndex \n BarController.getRuler  was renamed to  BarController._getRuler \n Chart.destroyDatasetMeta  was renamed to  Chart._destroyDatasetMeta \n Chart.drawDataset  was renamed to  Chart._drawDataset \n Chart.drawDatasets  was renamed to  Chart._drawDatasets \n Chart.eventHandler  was renamed to  Chart._eventHandler \n Chart.handleEvent  was renamed to  Chart._handleEvent \n Chart.initialize  was renamed to  Chart._initialize \n Chart.resetElements  was renamed to  Chart._resetElements \n Chart.unbindEvents  was renamed to  Chart._unbindEvents \n Chart.updateDataset  was renamed to  Chart._updateDataset \n Chart.updateDatasets  was renamed to  Chart._updateDatasets \n Chart.updateLayout  was renamed to  Chart._updateLayout \n DatasetController.destroy  was renamed to  DatasetController._destroy \n DatasetController.insertElements  was renamed to  DatasetController._insertElements \n DatasetController.onDataPop  was renamed to  DatasetController._onDataPop \n DatasetController.onDataPush  was renamed to  DatasetController._onDataPush \n DatasetController.onDataShift  was renamed to  DatasetController._onDataShift \n DatasetController.onDataSplice  was renamed to  DatasetController._onDataSplice \n DatasetController.onDataUnshift  was renamed to  DatasetController._onDataUnshift \n DatasetController.removeElements  was renamed to  DatasetController._removeElements \n DatasetController.resyncElements  was renamed to  DatasetController._resyncElements \n LayoutItem.isFullWidth  was renamed to  LayoutItem.isFullSize \n RadialLinearScale.setReductions  was renamed to  RadialLinearScale._setReductions \n RadialLinearScale.pointLabels  was renamed to  RadialLinearScale._pointLabels \n Scale.handleMargins  was renamed to  Scale._handleMargins \n Changed \n The APIs listed in this section have changed in signature or behaviour from version 2. \n Changed in Scales \n \n Scale.getLabelForIndex  was replaced by  scale.getLabelForValue \n Scale.getPixelForValue  now only requires one parameter. For the  TimeScale  that parameter must be millis since the epoch. As a performance optimization, it may take an optional second parameter, giving the index of the data point. \n Changed in Ticks \n \n Scale.afterBuildTicks  now has no parameters like the other callbacks \n Scale.buildTicks  is now expected to return tick objects \n Scale.convertTicksToLabels  was renamed to  generateTickLabels . It is now expected to set the label property on the ticks given as input \n Scale.ticks  now contains objects instead of strings \n When the  autoSkip  option is enabled,  Scale.ticks  now contains only the non-skipped ticks instead of all ticks. \n Ticks are now always generated in monotonically increasing order \n Changed in Time Scale \n \n getValueForPixel  now returns milliseconds since the epoch \n Changed in Controllers \n Core Controller \n \n The first parameter to  updateHoverStyle  is now an array of objects containing the  element ,  datasetIndex , and  index \n The signature or  resize  changed, the first  silent  parameter was removed. \n Dataset Controllers \n \n updateElement  was replaced with  updateElements  now taking the elements to update, the  start  index,  count , and  mode \n setHoverStyle  and  removeHoverStyle  now additionally take the  datasetIndex  and  index \n Changed in Interactions \n \n Interaction mode methods now return an array of objects containing the  element ,  datasetIndex , and  index \n Changed in Layout \n \n ILayoutItem.update  no longer has a return value \n Changed in Helpers \n All helpers are now exposed in a flat hierarchy, e.g.,  Chart.helpers.canvas.clipArea  ->  Chart.helpers.clipArea \n Canvas Helper \n \n The second parameter to  drawPoint  is now the full options object, so  style ,  rotation , and  radius  are no longer passed explicitly \n helpers.getMaximumHeight  was replaced by  helpers.dom.getMaximumSize \n helpers.getMaximumWidth  was replaced by  helpers.dom.getMaximumSize \n helpers.clear  was renamed to  helpers.clearCanvas  and now takes  canvas  and optionally  ctx  as parameter(s). \n helpers.retinaScale  accepts optional third parameter  forceStyle , which forces overriding current canvas style.  forceRatio  no longer falls back to  window.devicePixelRatio , instead it defaults to  1 . \n Changed in Platform \n \n Chart.platform  is no longer the platform object used by charts. Every chart instance now has a separate platform instance. \n Chart.platforms  is an object that contains two usable platform classes,  BasicPlatform  and  DomPlatform . It also contains  BasePlatform , a class that all platforms must extend from. \n If the canvas passed in is an instance of  OffscreenCanvas , the  BasicPlatform  is automatically used. \n isAttached  method was added to platform. \n Changed in IPlugin interface \n \n All plugin hooks have unified signature with 3 arguments:  chart ,  args  and  options . This means change in signature for these hooks:  beforeInit ,  afterInit ,  reset ,  beforeLayout ,  afterLayout ,  beforeRender ,  afterRender ,  beforeDraw ,  afterDraw ,  beforeDatasetsDraw ,  afterDatasetsDraw ,  beforeEvent ,  afterEvent ,  resize ,  destroy . \n afterDatasetsUpdate ,  afterUpdate ,  beforeDatasetsUpdate , and  beforeUpdate  now receive  args  object as second argument.  options  argument is always the last and thus was moved from 2nd to 3rd place. \n afterEvent  and  beforeEvent  now receive a wrapped  event  as the  event  property of the second argument. The native event is available via  args.event.native . \n Initial  resize  is no longer silent. Meaning that  resize  event can fire between  beforeInit  and  afterInit \n New hooks:  install ,  start ,  stop , and  uninstall \n afterEvent  should notify about changes that need a render by setting  args.changed  to true. Because the  args  are shared with all plugins, it should only be set to true and not false. \n \n"},{title:"Chart.js",frontmatter:{},regularPath:"/",relativePath:"index.md",key:"v-0c574d84",path:"/",headers:[{level:2,title:"Installation",slug:"installation"},{level:2,title:"Creating a Chart",slug:"creating-a-chart"},{level:2,title:"Contributing",slug:"contributing"},{level:2,title:"License",slug:"license"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Chart.js \n Installation \n You can get the latest version of Chart.js from  npm , the  GitHub releases , or use a  Chart.js CDN . Detailed installation instructions can be found on the  installation  page. \n If you're using a front-end framework (e.g., React, Angular, or Vue), please check  available integrations . \n Creating a Chart \n It's easy to get started with Chart.js. All that's required is the script included in your page along with a single  <canvas>  node to render the chart. \n In this example, we create a bar chart for a single dataset and render that in our page. You can see all the ways to use Chart.js in the  usage documentation . \n < canvas   id = \" myChart \"   width = \" 400 \"   height = \" 400 \" > </ canvas > \n < script > \n const  ctx  =  document . getElementById ( 'myChart' ) . getContext ( '2d' ) ; \n const  myChart  =   new   Chart ( ctx ,   { \n     type :   'bar' , \n     data :   { \n         labels :   [ 'Red' ,   'Blue' ,   'Yellow' ,   'Green' ,   'Purple' ,   'Orange' ] , \n         datasets :   [ { \n             label :   '# of Votes' , \n             data :   [ 12 ,   19 ,   3 ,   5 ,   2 ,   3 ] , \n             backgroundColor :   [ \n                 'rgba(255, 99, 132, 0.2)' , \n                 'rgba(54, 162, 235, 0.2)' , \n                 'rgba(255, 206, 86, 0.2)' , \n                 'rgba(75, 192, 192, 0.2)' , \n                 'rgba(153, 102, 255, 0.2)' , \n                 'rgba(255, 159, 64, 0.2)' \n             ] , \n             borderColor :   [ \n                 'rgba(255, 99, 132, 1)' , \n                 'rgba(54, 162, 235, 1)' , \n                 'rgba(255, 206, 86, 1)' , \n                 'rgba(75, 192, 192, 1)' , \n                 'rgba(153, 102, 255, 1)' , \n                 'rgba(255, 159, 64, 1)' \n             ] , \n             borderWidth :   1 \n         } ] \n     } , \n     options :   { \n         scales :   { \n             y :   { \n                 beginAtZero :   true \n             } \n         } \n     } \n } ) ; \n </ script > \n Contributing \n Before submitting an issue or a pull request to the project, please take a moment to look over the  contributing guidelines  first. \n For support using Chart.js, please post questions with the  chart.js  tag on Stack Overflow . \n License \n Chart.js is available under the  MIT license . \n Documentation is copyright © 2014-{{new Date().getFullYear()}} Chart.js contributors. \n"},{title:"Data Decimation",frontmatter:{},regularPath:"/samples/advanced/data-decimation.html",relativePath:"samples/advanced/data-decimation.md",key:"v-32a3884a",path:"/samples/advanced/data-decimation.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Data Decimation \n This example shows how to use the built-in data decimation to reduce the number of points drawn on the graph for improved performance. \n \nconst actions = [\n  {\n    name: 'No decimation (default)',\n    handler(chart) {\n      chart.options.plugins.decimation.enabled = false;\n      chart.update();\n    }\n  },\n  {\n    name: 'min-max decimation',\n    handler(chart) {\n      chart.options.plugins.decimation.algorithm = 'min-max';\n      chart.options.plugins.decimation.enabled = true;\n      chart.update();\n    },\n  },\n  {\n    name: 'LTTB decimation (50 samples)',\n    handler(chart) {\n      chart.options.plugins.decimation.algorithm = 'lttb';\n      chart.options.plugins.decimation.enabled = true;\n      chart.options.plugins.decimation.samples = 50;\n      chart.update();\n    }\n  },\n  {\n    name: 'LTTB decimation (500 samples)',\n    handler(chart) {\n      chart.options.plugins.decimation.algorithm = 'lttb';\n      chart.options.plugins.decimation.enabled = true;\n      chart.options.plugins.decimation.samples = 500;\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst NUM_POINTS = 100000;\nUtils.srand(10);\n\n// parseISODate returns a luxon date object to work with in the samples\n// We will create points every 30s starting from this point in time\nconst start = Utils.parseISODate('2021-04-01T00:00:00Z').toMillis();\nconst pointData = [];\n\nfor (let i = 0; i  \n\n//  \nconst decimation = {\n  enabled: false,\n  algorithm: 'min-max',\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    // Turn off animations and data parsing for performance\n    animation: false,\n    parsing: false,\n\n    interaction: {\n      mode: 'nearest',\n      axis: 'x',\n      intersect: false\n    },\n    plugins: {\n      decimation: decimation,\n    },\n    scales: {\n      x: {\n        type: 'time',\n        ticks: {\n          source: 'auto',\n          // Disabled rotation for performance\n          maxRotation: 0,\n          autoSkip: true,\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data Decimation \n Line \n Time Scale \n \n"},{title:"Derived Axis Type",frontmatter:{},regularPath:"/samples/advanced/derived-axis-type.html",relativePath:"samples/advanced/derived-axis-type.md",key:"v-5ae5fc53",path:"/samples/advanced/derived-axis-type.html",headers:[{level:2,title:"Log2 axis implementation",slug:"log2-axis-implementation"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Derived Axis Type \n \nconst DATA_COUNT = 12;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 1000};\nconst labels = Utils.months({count: DATA_COUNT});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'My First dataset',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      fill: false,\n    }\n  ],\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data,\n  options: {\n    responsive: true,\n    scales: {\n      x: {\n        display: true,\n      },\n      y: {\n        display: true,\n        type: 'log2',\n      }\n    }\n  }\n};\n\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Log2 axis implementation \n import   { Scale ,  LinearScale }   from   'chart.js' ; \n\n export   default   class   Log2Axis   extends   Scale   { \n   constructor ( cfg )   { \n     super ( cfg ) ; \n     this . _startValue  =   undefined ; \n     this . _valueRange  =   0 ; \n   } \n\n   parse ( raw ,  index )   { \n     const  value  =   LinearScale . prototype . parse . apply ( this ,   [ raw ,  index ] ) ; \n     return   isFinite ( value )   &&  value  >   0   ?  value  :   null ; \n   } \n\n   determineDataLimits ( )   { \n     const   { min ,  max }   =   this . getMinMax ( true ) ; \n     this . min  =   isFinite ( min )   ?  Math . max ( 0 ,  min )   :   null ; \n     this . max  =   isFinite ( max )   ?  Math . max ( 0 ,  max )   :   null ; \n   } \n\n   buildTicks ( )   { \n     const  ticks  =   [ ] ; \n\n     let  power  =  Math . floor ( Math . log2 ( this . min  ||   1 ) ) ; \n     let  maxPower  =  Math . ceil ( Math . log2 ( this . max  ||   2 ) ) ; \n     while   ( power  <=  maxPower )   { \n      ticks . push ( { value :  Math . pow ( 2 ,  power ) } ) ; \n      power  +=   1 ; \n     } \n\n     this . min  =  ticks [ 0 ] . value ; \n     this . max  =  ticks [ ticks . length  -   1 ] . value ; \n     return  ticks ; \n   } \n\n   /**\n   * @protected\n   */ \n   configure ( )   { \n     const  start  =   this . min ; \n\n     super . configure ( ) ; \n\n     this . _startValue  =  Math . log2 ( start ) ; \n     this . _valueRange  =  Math . log2 ( this . max )   -  Math . log2 ( start ) ; \n   } \n\n   getPixelForValue ( value )   { \n     if   ( value  ===   undefined   ||  value  ===   0 )   { \n      value  =   this . min ; \n     } \n\n     return   this . getPixelForDecimal ( value  ===   this . min  ?   0 \n       :   ( Math . log2 ( value )   -   this . _startValue )   /   this . _valueRange ) ; \n   } \n\n   getValueForPixel ( pixel )   { \n     const  decimal  =   this . getDecimalForPixel ( pixel ) ; \n     return  Math . pow ( 2 ,   this . _startValue  +  decimal  *   this . _valueRange ) ; \n   } \n } \n\nLog2Axis . id  =   'log2' ; \nLog2Axis . defaults  =   { } ; \n\n // The derived axis is registered like this: \n // Chart.register(Log2Axis); \n Docs \n \n Data structures ( labels ) \n Line \n New Axes \n \n"},{title:"Derived Chart Type",frontmatter:{},regularPath:"/samples/advanced/derived-chart-type.html",relativePath:"samples/advanced/derived-chart-type.md",key:"v-b42df276",path:"/samples/advanced/derived-chart-type.html",headers:[{level:2,title:"DerivedBubble Implementation",slug:"derivedbubble-implementation"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Derived Chart Type \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100, rmin: 1, rmax: 20};\nconst data = {\n  datasets: [\n    {\n      label: 'My First dataset',\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      borderColor: Utils.CHART_COLORS.blue,\n      borderWidth: 1,\n      boxStrokeStyle: 'red',\n      data: Utils.bubbles(NUMBER_CFG)\n    }\n  ],\n};\n//  \n\n//  \nconst config = {\n  type: 'derivedBubble',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Derived Chart Type'\n      },\n    }\n  }\n};\n\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  DerivedBubble Implementation \n import   { Chart ,  BubbleController }   from   'chart.js' ; \n\n class   Custom   extends   BubbleController   { \n   draw ( )   { \n     // Call bubble controller method to draw all the points \n     super . draw ( arguments ) ; \n\n     // Now we can do some custom drawing for this dataset. \n     // Here we'll draw a box around the first point in each dataset, \n     // using `boxStrokeStyle` dataset option for color \n     var  meta  =   this . getMeta ( ) ; \n     var  pt0  =  meta . data [ 0 ] ; \n\n     const   { x ,  y }   =  pt0 . getProps ( [ 'x' ,   'y' ] ) ; \n     const   { radius }   =  pt0 . options ; \n\n     var  ctx  =   this . chart . ctx ; \n    ctx . save ( ) ; \n    ctx . strokeStyle  =   this . options . boxStrokeStyle ; \n    ctx . lineWidth  =   1 ; \n    ctx . strokeRect ( x  -  radius ,  y  -  radius ,   2   *  radius ,   2   *  radius ) ; \n    ctx . restore ( ) ; \n   } \n } \nCustom . id  =   'derivedBubble' ; \nCustom . defaults  =   { \n   // Custom defaults. Bubble defaults are inherited. \n   boxStrokeStyle :   'red' \n } ; \n // Overrides are only inherited, but not merged if defined \n // Custom.overrides = Chart.overrides.bubble; \n\n // Stores the controller so that the chart initialization routine can look it up \nChart . register ( Custom ) ; \n Docs \n \n Bubble Chart \n New Charts \n \n"},{title:"Linear Gradient",frontmatter:{},regularPath:"/samples/advanced/linear-gradient.html",relativePath:"samples/advanced/linear-gradient.md",key:"v-c76cb662",path:"/samples/advanced/linear-gradient.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Gradient \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nlet width, height, gradient;\nfunction getGradient(ctx, chartArea) {\n  const chartWidth = chartArea.right - chartArea.left;\n  const chartHeight = chartArea.bottom - chartArea.top;\n  if (!gradient || width !== chartWidth || height !== chartHeight) {\n    // Create the gradient because this is either the first render\n    // or the size of the chart has changed\n    width = chartWidth;\n    height = chartHeight;\n    gradient = ctx.createLinearGradient(0, chartArea.bottom, 0, chartArea.top);\n    gradient.addColorStop(0, Utils.CHART_COLORS.blue);\n    gradient.addColorStop(0.5, Utils.CHART_COLORS.yellow);\n    gradient.addColorStop(1, Utils.CHART_COLORS.red);\n  }\n\n  return gradient;\n}\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst labels = Utils.months({count: 7});\n\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: function(context) {\n        const chart = context.chart;\n        const {ctx, chartArea} = chart;\n\n        if (!chartArea) {\n          // This case happens on initial chart load\n          return;\n        }\n        return getGradient(ctx, chartArea);\n      },\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Colors \n \n Patterns and Gradients \n \n \n Data structures ( labels ) \n Options \n \n Scriptable Options \n \n \n Line \n \n"},{title:"Programmatic Event Triggers",frontmatter:{},regularPath:"/samples/advanced/programmatic-events.html",relativePath:"samples/advanced/programmatic-events.md",key:"v-3294305f",path:"/samples/advanced/programmatic-events.html",headers:[{level:2,title:"API",slug:"api"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Programmatic Event Triggers \n \nfunction triggerHover(chart) {\n  if (chart.getActiveElements().length > 0) {\n    chart.setActiveElements([]);\n  } else {\n    chart.setActiveElements([\n      {\n        datasetIndex: 0,\n        index: 0,\n      }, {\n        datasetIndex: 1,\n        index: 0,\n      }\n    ]);\n  }\n  chart.update();\n}\n//  \n\n//  \nfunction triggerTooltip(chart) {\n  const tooltip = chart.tooltip;\n  if (tooltip.getActiveElements().length > 0) {\n    tooltip.setActiveElements([], {x: 0, y: 0});\n  } else {\n    const chartArea = chart.chartArea;\n    tooltip.setActiveElements([\n      {\n        datasetIndex: 0,\n        index: 2,\n      }, {\n        datasetIndex: 1,\n        index: 2,\n      }\n    ],\n    {\n      x: (chartArea.left + chartArea.right) / 2,\n      y: (chartArea.top + chartArea.bottom) / 2,\n    });\n  }\n\n  chart.update();\n}\n//  \n\n//  \nconst actions = [\n  {\n    name: 'Trigger Hover',\n    handler: triggerHover\n  },\n  {\n    name: 'Trigger Tooltip',\n    handler: triggerTooltip\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      hoverBorderWidth: 5,\n      hoverBorderColor: 'green',\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      hoverBorderWidth: 5,\n      hoverBorderColor: 'green',\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  API \n \n Chart \n \n setActiveElements \n \n \n TooltipModel \n \n setActiveElements \n Docs \n \n Bar \n \n Interactions ( hoverBorderColor ) \n \n \n Interactions \n Tooltip \n \n"},{title:"Animation Progress Bar",frontmatter:{},regularPath:"/samples/advanced/progress-bar.html",relativePath:"samples/advanced/progress-bar.md",key:"v-12361bf6",path:"/samples/advanced/progress-bar.html",headers:[{level:2,title:"Initial animation",slug:"initial-animation"},{level:2,title:"Other animations",slug:"other-animations"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Animation Progress Bar \n Initial animation \n Other animations \n \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst initProgress = document.getElementById('initialProgress');\nconst progress = document.getElementById('animationProgress');\n\nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    animation: {\n      duration: 2000,\n      onProgress: function(context) {\n        if (context.initial) {\n          initProgress.value = context.currentStep / context.numSteps;\n        } else {\n          progress.value = context.currentStep / context.numSteps;\n        }\n      },\n      onComplete: function(context) {\n        if (context.initial) {\n          console.log('Initial animation finished');\n        } else {\n          console.log('animation finished');\n        }\n      }\n    },\n    interaction: {\n      mode: 'nearest',\n      axis: 'x',\n      intersect: false\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart - Animation Progress Bar'\n      }\n    },\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n  output: 'console.log output is displayed here'\n};\n`\"/> #  Docs \n \n Animations \n \n Animation Callbacks \n \n \n Data structures ( labels ) \n Line \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Radial Gradient",frontmatter:{},regularPath:"/samples/advanced/radial-gradient.html",relativePath:"samples/advanced/radial-gradient.md",key:"v-6dca2ac3",path:"/samples/advanced/radial-gradient.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radial Gradient \n \nconst DATA_COUNT = 5;\nUtils.srand(110);\n\nconst chartColors = Utils.CHART_COLORS;\nconst colors = [chartColors.red, chartColors.orange, chartColors.yellow, chartColors.green, chartColors.blue];\n\nconst cache = new Map();\nlet width = null;\nlet height = null;\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction createRadialGradient3(context, c1, c2, c3) {\n  const chartArea = context.chart.chartArea;\n  if (!chartArea) {\n    // This case happens on initial chart load\n    return;\n  }\n\n  const chartWidth = chartArea.right - chartArea.left;\n  const chartHeight = chartArea.bottom - chartArea.top;\n  if (width !== chartWidth || height !== chartHeight) {\n    cache.clear();\n  }\n  let gradient = cache.get(c1 + c2 + c3);\n  if (!gradient) {\n    // Create the gradient because this is either the first render\n    // or the size of the chart has changed\n    width = chartWidth;\n    height = chartHeight;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const r = Math.min(\n      (chartArea.right - chartArea.left) / 2,\n      (chartArea.bottom - chartArea.top) / 2\n    );\n    const ctx = context.chart.ctx;\n    gradient = ctx.createRadialGradient(centerX, centerY, 0, centerX, centerY, r);\n    gradient.addColorStop(0, c1);\n    gradient.addColorStop(0.5, c2);\n    gradient.addColorStop(1, c3);\n    cache.set(c1 + c2 + c3, gradient);\n  }\n\n  return gradient;\n}\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: 0,\n    max: 100\n  });\n}\n\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [{\n    data: generateData()\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'polarArea',\n  data: data,\n  options: {\n    plugins: {\n      legend: false,\n      tooltip: false,\n    },\n    elements: {\n      arc: {\n        backgroundColor: function(context) {\n          let c = colors[context.dataIndex];\n          if (!c) {\n            return;\n          }\n          if (context.active) {\n            c = helpers.getHoverColor(c);\n          }\n          const mid = helpers.color(c).desaturate(0.2).darken(0.2).rgbString();\n          const start = helpers.color(c).lighten(0.2).rotate(270).rgbString();\n          const end = helpers.color(c).lighten(0.1).rgbString();\n          return createRadialGradient3(context, start, mid, end);\n        },\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Polar Area Chart \n \n Styling \n \n \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Delay",frontmatter:{},regularPath:"/samples/animations/delay.html",relativePath:"samples/animations/delay.md",key:"v-1b036bdf",path:"/samples/animations/delay.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Delay \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.blue,\n    },\n    {\n      label: 'Dataset 3',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.green,\n    },\n  ]\n};\n//  \n\n//  \nlet delayed;\nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    animation: {\n      onComplete: () => {\n        delayed = true;\n      },\n      delay: (context) => {\n        let delay = 0;\n        if (context.type === 'data' && context.mode === 'default' && !delayed) {\n          delay = context.dataIndex * 300 + context.datasetIndex * 100;\n        }\n        return delay;\n      },\n    },\n    scales: {\n      x: {\n        stacked: true,\n      },\n      y: {\n        stacked: true\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Animations \n \n animation ( delay ) \n Animation Callbacks \n \n \n Bar \n \n Stacked Bar Chart \n \n \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Drop",frontmatter:{},regularPath:"/samples/animations/drop.html",relativePath:"samples/animations/drop.md",key:"v-56ffc565",path:"/samples/animations/drop.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Drop \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      animations: {\n        y: {\n          duration: 2000,\n          delay: 500\n        }\n      },\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      fill: 1,\n      tension: 0.5\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    animations: {\n      y: {\n        easing: 'easeInOutElastic',\n        from: (ctx) => {\n          if (ctx.type === 'data') {\n            if (ctx.mode === 'default' && !ctx.dropped) {\n              ctx.dropped = true;\n              return 0;\n            }\n          }\n        }\n      }\n    },\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Area \n Animations \n \n animation ( easing ) \n animations ( from ) \n \n \n Line \n \n Line Styling \n \n fill \n tension \n \n \n \n \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Loop",frontmatter:{},regularPath:"/samples/animations/loop.html",relativePath:"samples/animations/loop.md",key:"v-2eef3a85",path:"/samples/animations/loop.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Loop \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: DATA_COUNT});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      tension: 0.4,\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      tension: 0.2,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    animations: {\n      radius: {\n        duration: 400,\n        easing: 'linear',\n        loop: (context) => context.active\n      }\n    },\n    hoverRadius: 12,\n    hoverBackgroundColor: 'yellow',\n    interaction: {\n      mode: 'nearest',\n      intersect: false,\n      axis: 'x'\n    },\n    plugins: {\n      tooltip: {\n        enabled: false\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Animations \n \n animation \n \n duration \n easing \n loop \n \n \n Default animations ( radius ) \n \n \n Data structures ( labels ) \n Elements \n \n Point Configuration \n \n hoverRadius \n hoverBackgroundColor \n \n \n \n \n Line \n Options \n \n Scriptable Options \n \n \n Tooltip ( enabled ) \n \n"},{title:"Progressive Line With Easing",frontmatter:{},regularPath:"/samples/animations/progressive-line-easing.html",relativePath:"samples/animations/progressive-line-easing.md",key:"v-03bfee3e",path:"/samples/animations/progressive-line-easing.html",headers:[{level:2,title:"Api",slug:"api"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Progressive Line With Easing \n \nconst data = [];\nconst data2 = [];\nlet prev = 100;\nlet prev2 = 80;\nfor (let i = 0; i  \n\n//  \nlet easing = helpers.easingEffects.easeOutQuad;\nlet restart = false;\nconst totalDuration = 5000;\nconst duration = (ctx) => easing(ctx.index / data.length) * totalDuration / data.length;\nconst delay = (ctx) => easing(ctx.index / data.length) * totalDuration;\nconst previousY = (ctx) => ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\nconst animation = {\n  x: {\n    type: 'number',\n    easing: 'linear',\n    duration: duration,\n    from: NaN, // the point is initially skipped\n    delay(ctx) {\n      if (ctx.type !== 'data' || ctx.xStarted) {\n        return 0;\n      }\n      ctx.xStarted = true;\n      return delay(ctx);\n    }\n  },\n  y: {\n    type: 'number',\n    easing: 'linear',\n    duration: duration,\n    from: previousY,\n    delay(ctx) {\n      if (ctx.type !== 'data' || ctx.yStarted) {\n        return 0;\n      }\n      ctx.yStarted = true;\n      return delay(ctx);\n    }\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: {\n    datasets: [{\n      borderColor: Utils.CHART_COLORS.red,\n      borderWidth: 1,\n      radius: 0,\n      data: data,\n    },\n    {\n      borderColor: Utils.CHART_COLORS.blue,\n      borderWidth: 1,\n      radius: 0,\n      data: data2,\n    }]\n  },\n  options: {\n    animation,\n    interaction: {\n      intersect: false\n    },\n    plugins: {\n      legend: false,\n      title: {\n        display: true,\n        text: () => easing.name\n      }\n    },\n    scales: {\n      x: {\n        type: 'linear'\n      }\n    }\n  }\n};\n//  \n\n//  \nfunction restartAnims(chart) {\n  chart.stop();\n  const meta0 = chart.getDatasetMeta(0);\n  const meta1 = chart.getDatasetMeta(1);\n  for (let i = 0; i  \n\nmodule.exports = {\n  config,\n  actions\n};\n\n`\"/> #  Api \n \n Chart \n \n getDatasetMeta \n \n \n Scale \n \n getPixelForValue \n Docs \n \n Animations \n \n animation \n \n delay \n duration \n easing \n loop \n \n \n Easing \n \n \n Line \n Options \n \n Scriptable Options \n \n Data Context \n \n \n \n \n \n"},{title:"Progressive Line",frontmatter:{},regularPath:"/samples/animations/progressive-line.html",relativePath:"samples/animations/progressive-line.md",key:"v-bb2f4e76",path:"/samples/animations/progressive-line.html",headers:[{level:2,title:"Api",slug:"api"},{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Progressive Line \n \nconst data = [];\nconst data2 = [];\nlet prev = 100;\nlet prev2 = 80;\nfor (let i = 0; i  \n\n//  \nconst totalDuration = 10000;\nconst delayBetweenPoints = totalDuration / data.length;\nconst previousY = (ctx) => ctx.index === 0 ? ctx.chart.scales.y.getPixelForValue(100) : ctx.chart.getDatasetMeta(ctx.datasetIndex).data[ctx.index - 1].getProps(['y'], true).y;\nconst animation = {\n  x: {\n    type: 'number',\n    easing: 'linear',\n    duration: delayBetweenPoints,\n    from: NaN, // the point is initially skipped\n    delay(ctx) {\n      if (ctx.type !== 'data' || ctx.xStarted) {\n        return 0;\n      }\n      ctx.xStarted = true;\n      return ctx.index * delayBetweenPoints;\n    }\n  },\n  y: {\n    type: 'number',\n    easing: 'linear',\n    duration: delayBetweenPoints,\n    from: previousY,\n    delay(ctx) {\n      if (ctx.type !== 'data' || ctx.yStarted) {\n        return 0;\n      }\n      ctx.yStarted = true;\n      return ctx.index * delayBetweenPoints;\n    }\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: {\n    datasets: [{\n      borderColor: Utils.CHART_COLORS.red,\n      borderWidth: 1,\n      radius: 0,\n      data: data,\n    },\n    {\n      borderColor: Utils.CHART_COLORS.blue,\n      borderWidth: 1,\n      radius: 0,\n      data: data2,\n    }]\n  },\n  options: {\n    animation,\n    interaction: {\n      intersect: false\n    },\n    plugins: {\n      legend: false\n    },\n    scales: {\n      x: {\n        type: 'linear'\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  config\n};\n\n`\"/> #  Api \n \n Chart \n \n getDatasetMeta \n \n \n Scale \n \n getPixelForValue \n Docs \n \n Animations \n \n animation \n \n delay \n duration \n easing \n loop \n \n \n \n \n Line \n Options \n \n Scriptable Options \n \n Data Context \n \n \n \n \n \n"},{title:"Line Chart Boundaries",frontmatter:{},regularPath:"/samples/area/line-boundaries.html",relativePath:"samples/area/line-boundaries.md",key:"v-ee2054b2",path:"/samples/area/line-boundaries.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart Boundaries \n \nconst inputs = {\n  min: -100,\n  max: 100,\n  count: 8,\n  decimals: 2,\n  continuity: 1\n};\n\nconst generateLabels = () => {\n  return Utils.months({count: inputs.count});\n};\n\nconst generateData = () => (Utils.numbers(inputs));\n//  \n\n//  \nconst data = {\n  labels: generateLabels(),\n  datasets: [\n    {\n      label: 'Dataset',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red),\n      fill: false\n    }\n  ]\n};\n//  \n\n//  \nlet smooth = false;\n\nconst actions = [\n  {\n    name: 'Fill: false (default)',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.fill = false;\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Fill: origin',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.fill = 'origin';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Fill: start',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.fill = 'start';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Fill: end',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.fill = 'end';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Smooth',\n    handler(chart) {\n      smooth = !smooth;\n      chart.options.elements.line.tension = smooth ? 0.4 : 0;\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      filler: {\n        propagate: false,\n      },\n      title: {\n        display: true,\n        text: (ctx) => 'Fill: ' + ctx.chart.data.datasets[0].fill\n      }\n    },\n    interaction: {\n      intersect: false,\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Area \n \n Filling modes \n \n Boundary:  'start' ,  'end' ,  'origin' \n \n \n \n \n Line \n Data structures ( labels ) \n \n"},{title:"Line Chart Datasets",frontmatter:{},regularPath:"/samples/area/line-datasets.html",relativePath:"samples/area/line-datasets.md",key:"v-31e27a01",path:"/samples/area/line-datasets.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart Datasets \n \nconst inputs = {\n  min: 20,\n  max: 80,\n  count: 8,\n  decimals: 2,\n  continuity: 1\n};\n\nconst generateLabels = () => {\n  return Utils.months({count: inputs.count});\n};\n\nconst generateData = () => (Utils.numbers(inputs));\n\nUtils.srand(42);\n//  \n\n//  \nconst data = {\n  labels: generateLabels(),\n  datasets: [\n    {\n      label: 'D0',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red),\n      hidden: true\n    },\n    {\n      label: 'D1',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.orange,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange),\n      fill: '-1'\n    },\n    {\n      label: 'D2',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.yellow,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.yellow),\n      hidden: true,\n      fill: 1\n    },\n    {\n      label: 'D3',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.green,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.green),\n      fill: '-1'\n    },\n    {\n      label: 'D4',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue),\n      fill: '-1'\n    },\n    {\n      label: 'D5',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.grey,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.grey),\n      fill: '+2'\n    },\n    {\n      label: 'D6',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.purple,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.purple),\n      fill: false\n    },\n    {\n      label: 'D7',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red),\n      fill: 8\n    },\n    {\n      label: 'D8',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.orange,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange),\n      fill: 'end',\n      hidden: true\n    },\n    {\n      label: 'D9',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.yellow,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.yellow),\n      fill: {above: 'blue', below: 'red', target: {value: 350}}\n    }\n  ]\n};\n//  \n\n//  \nlet smooth = false;\nlet propagate = false;\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Propagate',\n    handler(chart) {\n      propagate = !propagate;\n      chart.options.plugins.filler.propagate = propagate;\n      chart.update();\n    }\n  },\n  {\n    name: 'Smooth',\n    handler(chart) {\n      smooth = !smooth;\n      chart.options.elements.line.tension = smooth ? 0.4 : 0;\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    scales: {\n      y: {\n        stacked: true\n      }\n    },\n    plugins: {\n      filler: {\n        propagate: false\n      },\n      'samples-filler-analyser': {\n        target: 'chart-analyser'\n      }\n    },\n    interaction: {\n      intersect: false,\n    },\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> \n Docs \n \n Area \n \n Filling modes \n \n \n Line \n Data structures ( labels ) \n Axes scales \n \n Common options to all axes ( stacked ) \n \n \n \n"},{title:"Line Chart drawTime",frontmatter:{},regularPath:"/samples/area/line-drawtime.html",relativePath:"samples/area/line-drawtime.md",key:"v-434629d5",path:"/samples/area/line-drawtime.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart drawTime \n \nconst inputs = {\n  min: -100,\n  max: 100,\n  count: 8,\n  decimals: 2,\n  continuity: 1\n};\n\nconst generateLabels = () => {\n  return Utils.months({count: inputs.count});\n};\n\nUtils.srand(3);\nconst generateData = () => (Utils.numbers(inputs));\n//  \n\n//  \nconst data = {\n  labels: generateLabels(),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n      fill: true\n    },\n    {\n      label: 'Dataset 2',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue),\n      fill: true\n    }\n  ]\n};\n//  \n\n//  \nlet smooth = false;\n\nconst actions = [\n  {\n    name: 'drawTime: beforeDatasetDraw (default)',\n    handler: (chart) => {\n      chart.options.plugins.filler.drawTime = 'beforeDatasetDraw';\n      chart.update();\n    }\n  },\n  {\n    name: 'drawTime: beforeDatasetsDraw',\n    handler: (chart) => {\n      chart.options.plugins.filler.drawTime = 'beforeDatasetsDraw';\n      chart.update();\n    }\n  },\n  {\n    name: 'drawTime: beforeDraw',\n    handler: (chart) => {\n      chart.options.plugins.filler.drawTime = 'beforeDraw';\n      chart.update();\n    }\n  },\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Smooth',\n    handler(chart) {\n      smooth = !smooth;\n      chart.options.elements.line.tension = smooth ? 0.4 : 0;\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      filler: {\n        propagate: false,\n      },\n      title: {\n        display: true,\n        text: (ctx) => 'drawTime: ' + ctx.chart.options.plugins.filler.drawTime\n      }\n    },\n    pointBackgroundColor: '#fff',\n    radius: 10,\n    interaction: {\n      intersect: false,\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Area \n \n Configuration ( drawTime ) \n \n \n Line \n \n Line Styling ( tension ) \n \n \n Data structures ( labels ) \n \n"},{title:"Line Chart Stacked",frontmatter:{},regularPath:"/samples/area/line-stacked.html",relativePath:"samples/area/line-stacked.md",key:"v-4da19405",path:"/samples/area/line-stacked.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart Stacked \n \nconst actions = [\n  {\n    name: 'Stacked: true',\n    handler: (chart) => {\n      chart.options.scales.y.stacked = true;\n      chart.update();\n    }\n  },\n  {\n    name: 'Stacked: false (default)',\n    handler: (chart) => {\n      chart.options.scales.y.stacked = false;\n      chart.update();\n    }\n  },\n  {\n    name: 'Stacked Single',\n    handler: (chart) => {\n      chart.options.scales.y.stacked = 'single';\n      chart.update();\n    }\n  },\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: dsColor,\n        borderColor: dsColor,\n        fill: true,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'My First dataset',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n      fill: true\n    },\n    {\n      label: 'My Second dataset',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.CHART_COLORS.blue,\n      fill: true\n    },\n    {\n      label: 'My Third dataset',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.green,\n      backgroundColor: Utils.CHART_COLORS.green,\n      fill: true\n    },\n    {\n      label: 'My Fourth dataset',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.yellow,\n      backgroundColor: Utils.CHART_COLORS.yellow,\n      fill: true\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => 'Chart.js Line Chart - stacked=' + ctx.chart.options.scales.y.stacked\n      },\n      tooltip: {\n        mode: 'index'\n      },\n    },\n    interaction: {\n      mode: 'nearest',\n      axis: 'x',\n      intersect: false\n    },\n    scales: {\n      x: {\n        title: {\n          display: true,\n          text: 'Month'\n        }\n      },\n      y: {\n        stacked: true,\n        title: {\n          display: true,\n          text: 'Value'\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config\n};\n`\"/> #  Docs \n \n Area \n \n Filling modes \n \n \n Line \n Data structures ( labels ) \n Axes scales \n \n Common options to all axes ( stacked ) \n \n \n \n"},{title:"Radar Chart Stacked",frontmatter:{},regularPath:"/samples/area/radar.html",relativePath:"samples/area/radar.md",key:"v-66fe6f5d",path:"/samples/area/radar.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radar Chart Stacked \n \nconst inputs = {\n  min: 8,\n  max: 16,\n  count: 8,\n  decimals: 2,\n  continuity: 1\n};\n\nconst generateLabels = () => {\n  return Utils.months({count: inputs.count});\n};\n\nconst generateData = () => {\n  const values = Utils.numbers(inputs);\n  inputs.from = values;\n  return values;\n};\n\nconst labels = Utils.months({count: 8});\nconst data = {\n  labels: generateLabels(),\n  datasets: [\n    {\n      label: 'D0',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red),\n    },\n    {\n      label: 'D1',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.orange,\n      hidden: true,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange),\n      fill: '-1'\n    },\n    {\n      label: 'D2',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.yellow,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.yellow),\n      fill: 1\n    },\n    {\n      label: 'D3',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.green,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.green),\n      fill: false\n    },\n    {\n      label: 'D4',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue),\n      fill: '-1'\n    },\n    {\n      label: 'D5',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.purple,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.purple),\n      fill: '-1'\n    },\n    {\n      label: 'D6',\n      data: generateData(),\n      borderColor: Utils.CHART_COLORS.grey,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.grey),\n      fill: {value: 85}\n    }\n  ]\n};\n//  \n\n//  \nlet smooth = false;\nlet propagate = false;\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      inputs.from = [];\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Propagate',\n    handler(chart) {\n      propagate = !propagate;\n      chart.options.plugins.filler.propagate = propagate;\n      chart.update();\n\n    }\n  },\n  {\n    name: 'Smooth',\n    handler(chart) {\n      smooth = !smooth;\n      chart.options.elements.line.tension = smooth ? 0.4 : 0;\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data: data,\n  options: {\n    plugins: {\n      filler: {\n        propagate: false\n      },\n      'samples-filler-analyser': {\n        target: 'chart-analyser'\n      }\n    },\n    interaction: {\n      intersect: false\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config\n};\n`\"/> \n Docs \n \n Area \n \n Filling modes \n propagate \n \n \n Radar \n Data structures ( labels ) \n \n"},{title:"Bar Chart Border Radius",frontmatter:{},regularPath:"/samples/bar/border-radius.html",relativePath:"samples/bar/border-radius.md",key:"v-068132b6",path:"/samples/bar/border-radius.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bar Chart Border Radius \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Fully Rounded',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      borderWidth: 2,\n      borderRadius: Number.MAX_VALUE,\n      borderSkipped: false,\n    },\n    {\n      label: 'Small Radius',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      borderWidth: 2,\n      borderRadius: 5,\n      borderSkipped: false,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Bar Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n \n borderRadius \n \n \n Data structures ( labels ) \n \n"},{title:"Floating Bars",frontmatter:{},regularPath:"/samples/bar/floating.html",relativePath:"samples/bar/floating.md",key:"v-86e6a23e",path:"/samples/bar/floating.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Floating Bars \n Using  [number, number][]  as the type for  data  to define the beginning and end value for each bar. This is instead of having every bar start at 0. \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = chart.data.labels.map(() => {\n          return [Utils.rand(-100, 100), Utils.rand(-100, 100)];\n        });\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: labels.map(() => {\n        return [Utils.rand(-100, 100), Utils.rand(-100, 100)];\n      }),\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: labels.map(() => {\n        return [Utils.rand(-100, 100), Utils.rand(-100, 100)];\n      }),\n      backgroundColor: Utils.CHART_COLORS.blue,\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Floating Bar Chart'\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n Data structures ( labels ) \n \n"},{title:"Horizontal Bar Chart",frontmatter:{},regularPath:"/samples/bar/horizontal.html",relativePath:"samples/bar/horizontal.md",key:"v-d4755bb6",path:"/samples/bar/horizontal.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Horizontal Bar Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        borderWidth: 1,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    indexAxis: 'y',\n    // Elements options apply to all of the options unless overridden in a dataset\n    // In this case, we are setting the border of each horizontal bar to be 2px wide\n    elements: {\n      bar: {\n        borderWidth: 2,\n      }\n    },\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'right',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Horizontal Bar Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n \n Horizontal Bar Chart \n \n \n \n"},{title:"Stacked Bar Chart with Groups",frontmatter:{},regularPath:"/samples/bar/stacked-groups.html",relativePath:"samples/bar/stacked-groups.md",key:"v-4ad9ddf9",path:"/samples/bar/stacked-groups.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Stacked Bar Chart with Groups \n Using the  stack  property to divide datasets into multiple stacks. \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.red,\n      stack: 'Stack 0',\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.blue,\n      stack: 'Stack 0',\n    },\n    {\n      label: 'Dataset 3',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.green,\n      stack: 'Stack 1',\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Bar Chart - Stacked'\n      },\n    },\n    responsive: true,\n    interaction: {\n      intersect: false,\n    },\n    scales: {\n      x: {\n        stacked: true,\n      },\n      y: {\n        stacked: true\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n \n Stacked Bar Chart \n \n \n Data structures ( labels ) \n \n Dataset Configuration ( stack ) \n \n \n \n"},{title:"Stacked Bar Chart",frontmatter:{},regularPath:"/samples/bar/stacked.html",relativePath:"samples/bar/stacked.md",key:"v-6abbef36",path:"/samples/bar/stacked.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Stacked Bar Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.blue,\n    },\n    {\n      label: 'Dataset 3',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Utils.CHART_COLORS.green,\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Bar Chart - Stacked'\n      },\n    },\n    responsive: true,\n    scales: {\n      x: {\n        stacked: true,\n      },\n      y: {\n        stacked: true\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n \n Stacked Bar Chart \n \n \n \n"},{title:"Vertical Bar Chart",frontmatter:{},regularPath:"/samples/bar/vertical.html",relativePath:"samples/bar/vertical.md",key:"v-031ce7fe",path:"/samples/bar/vertical.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Vertical Bar Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        borderWidth: 1,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Bar Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n Data structures ( labels ) \n \n"},{title:"Information",frontmatter:{},regularPath:"/samples/information.html",relativePath:"samples/information.md",key:"v-b091f4f6",path:"/samples/information.html",headers:[{level:2,title:"Out of the box working samples",slug:"out-of-the-box-working-samples"},{level:2,title:"Autogenerated data",slug:"autogenerated-data"},{level:2,title:"Actions block",slug:"actions-block"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Information \n Out of the box working samples \n These samples are made for demonstration purposes only. They won't work out of the box if you copy paste them into your own website. This is because of how the docs are getting built. Some boilerplate code gets hidden.\nFor a sample that can be copied and pasted and used directly you can check the  usage page . \n Autogenerated data \n The data used in the samples is autogenerated using custom functions. These functions do not ship with the library, for more information about this you can check the  utils page . \n Actions block \n The samples have an  actions  code block. These actions are not part of chart.js. They are internally transformed to separate buttons together with onClick listeners by a plugin we use in the documentation. To implement such actions yourself you can make some buttons and add onClick event listeners to them. Then in these event listeners you can call your variable in which you made the chart and do the logic that the button is supposed to do. \n"},{title:"Events",frontmatter:{},regularPath:"/samples/legend/events.html",relativePath:"samples/legend/events.md",key:"v-ee799cb6",path:"/samples/legend/events.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Events \n This sample demonstrates how to use the event hooks to highlight chart elements. \n \nconst data = {\n  labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],\n  datasets: [{\n    label: '# of Votes',\n    data: [12, 19, 3, 5, 2, 3],\n    borderWidth: 1,\n    backgroundColor: ['#CB4335', '#1F618D', '#F1C40F', '#27AE60', '#884EA0', '#D35400'],\n  }]\n};\n//  \n\n//  \n// Append '4d' to the colors (alpha channel), except for the hovered index\nfunction handleHover(evt, item, legend) {\n  legend.chart.data.datasets[0].backgroundColor.forEach((color, index, colors) => {\n    colors[index] = index === item.index || color.length === 9 ? color : color + '4D';\n  });\n  legend.chart.update();\n}\n//  \n\n//  \n// Removes the alpha channel from background colors\nfunction handleLeave(evt, item, legend) {\n  legend.chart.data.datasets[0].backgroundColor.forEach((color, index, colors) => {\n    colors[index] = color.length === 9 ? color.slice(0, -2) : color;\n  });\n  legend.chart.update();\n}\n//  \n\n//  \nconst config = {\n  type: 'pie',\n  data: data,\n  options: {\n    plugins: {\n      legend: {\n        onHover: handleHover,\n        onLeave: handleLeave\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  config\n};\n`\"/> #  Docs \n \n Doughnut and Pie Charts \n Legend \n \n onHover \n onLeave \n \n \n \n"},{title:"HTML Legend",frontmatter:{},regularPath:"/samples/legend/html.html",relativePath:"samples/legend/html.md",key:"v-0bf9eaa5",path:"/samples/legend/html.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" HTML Legend \n This example shows how to create a custom HTML legend using a plugin and connect it to the chart in lieu of the default on-canvas legend. \n \n \nconst getOrCreateLegendList = (chart, id) => {\n  const legendContainer = document.getElementById(id);\n  let listContainer = legendContainer.querySelector('ul');\n\n  if (!listContainer) {\n    listContainer = document.createElement('ul');\n    listContainer.style.display = 'flex';\n    listContainer.style.flexDirection = 'row';\n    listContainer.style.margin = 0;\n    listContainer.style.padding = 0;\n\n    legendContainer.appendChild(listContainer);\n  }\n\n  return listContainer;\n};\n\nconst htmlLegendPlugin = {\n  id: 'htmlLegend',\n  afterUpdate(chart, args, options) {\n    const ul = getOrCreateLegendList(chart, options.containerID);\n\n    // Remove old legend items\n    while (ul.firstChild) {\n      ul.firstChild.remove();\n    }\n\n    // Reuse the built-in legendItems generator\n    const items = chart.options.plugins.legend.labels.generateLabels(chart);\n\n    items.forEach(item => {\n      const li = document.createElement('li');\n      li.style.alignItems = 'center';\n      li.style.cursor = 'pointer';\n      li.style.display = 'flex';\n      li.style.flexDirection = 'row';\n      li.style.marginLeft = '10px';\n\n      li.onclick = () => {\n        const {type} = chart.config;\n        if (type === 'pie' || type === 'doughnut') {\n          // Pie and doughnut charts only have a single dataset and visibility is per item\n          chart.toggleDataVisibility(item.index);\n        } else {\n          chart.setDatasetVisibility(item.datasetIndex, !chart.isDatasetVisible(item.datasetIndex));\n        }\n        chart.update();\n      };\n\n      // Color box\n      const boxSpan = document.createElement('span');\n      boxSpan.style.background = item.fillStyle;\n      boxSpan.style.borderColor = item.strokeStyle;\n      boxSpan.style.borderWidth = item.lineWidth + 'px';\n      boxSpan.style.display = 'inline-block';\n      boxSpan.style.height = '20px';\n      boxSpan.style.marginRight = '10px';\n      boxSpan.style.width = '20px';\n\n      // Text\n      const textContainer = document.createElement('p');\n      textContainer.style.color = item.fontColor;\n      textContainer.style.margin = 0;\n      textContainer.style.padding = 0;\n      textContainer.style.textDecoration = item.hidden ? 'line-through' : '';\n\n      const text = document.createTextNode(item.text);\n      textContainer.appendChild(text);\n\n      li.appendChild(boxSpan);\n      li.appendChild(textContainer);\n      ul.appendChild(li);\n    });\n  }\n};\n//  \n\n//  \nconst NUM_DATA = 7;\nconst NUM_CFG = {count: NUM_DATA, min: 0, max: 100};\nconst data = {\n  labels: Utils.months({count: NUM_DATA}),\n  datasets: [\n    {\n      label: 'Dataset: 1',\n      data: Utils.numbers(NUM_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      fill: false,\n    },\n    {\n      label: 'Dataset: 1',\n      data: Utils.numbers(NUM_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      fill: false,\n    },\n  ],\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      htmlLegend: {\n        // ID of the container to put the legend in\n        containerID: 'legend-container',\n      },\n      legend: {\n        display: false,\n      }\n    }\n  },\n  plugins: [htmlLegendPlugin],\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Legend \n \n display: false \n \n \n Plugins \n \n"},{title:"Point Style",frontmatter:{},regularPath:"/samples/legend/point-style.html",relativePath:"samples/legend/point-style.md",key:"v-1e95cf01",path:"/samples/legend/point-style.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Point Style \n This sample show how to use the dataset point style in the legend instead of a rectangle to identify each dataset.. \n \nconst actions = [\n  {\n    name: 'Toggle Point Style',\n    handler(chart) {\n      chart.options.plugins.legend.labels.usePointStyle = !chart.options.plugins.legend.labels.usePointStyle;\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      borderWidth: 1,\n      pointStyle: 'rectRot',\n      pointRadius: 5,\n      pointBorderColor: 'rgb(0, 0, 0)'\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      legend: {\n        labels: {\n          usePointStyle: true,\n        },\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Legend \n \n Legend Label Configuration \n \n usePointStyle \n \n \n \n \n Elements \n \n Point Configuration \n Point Styles \n \n \n \n"},{title:"Position",frontmatter:{},regularPath:"/samples/legend/position.html",relativePath:"samples/legend/position.md",key:"v-5fa74ee5",path:"/samples/legend/position.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Position \n This sample show how to change the position of the chart legend. \n \nconst actions = [\n  {\n    name: 'Position: top',\n    handler(chart) {\n      chart.options.plugins.legend.position = 'top';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: right',\n    handler(chart) {\n      chart.options.plugins.legend.position = 'right';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: bottom',\n    handler(chart) {\n      chart.options.plugins.legend.position = 'bottom';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: left',\n    handler(chart) {\n      chart.options.plugins.legend.position = 'left';\n      chart.update();\n    }\n  },\n];\n//  \n\n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Legend \n \n Position \n \n \n \n"},{title:"Alignment and Title Position",frontmatter:{},regularPath:"/samples/legend/title.html",relativePath:"samples/legend/title.md",key:"v-614ec58e",path:"/samples/legend/title.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Alignment and Title Position \n This sample show how to configure the alignment and title position of the chart legend. \n \nconst actions = [\n  {\n    name: 'Title Position: start',\n    handler(chart) {\n      chart.options.plugins.legend.align = 'start';\n      chart.options.plugins.legend.title.position = 'start';\n      chart.update();\n    }\n  },\n  {\n    name: 'Title Position: center (default)',\n    handler(chart) {\n      chart.options.plugins.legend.align = 'center';\n      chart.options.plugins.legend.title.position = 'center';\n      chart.update();\n    }\n  },\n  {\n    name: 'Title Position: end',\n    handler(chart) {\n      chart.options.plugins.legend.align = 'end';\n      chart.options.plugins.legend.title.position = 'end';\n      chart.update();\n    }\n  },\n];\n//  \n\n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      legend: {\n        title: {\n          display: true,\n          text: 'Legend Title',\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Legend \n \n"},{title:"Interpolation Modes",frontmatter:{},regularPath:"/samples/line/interpolation.html",relativePath:"samples/line/interpolation.md",key:"v-7e4ade5a",path:"/samples/line/interpolation.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Interpolation Modes \n \nconst DATA_COUNT = 12;\nconst labels = [];\nfor (let i = 0; i  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart - Cubic interpolation mode'\n      },\n    },\n    interaction: {\n      intersect: false,\n    },\n    scales: {\n      x: {\n        display: true,\n        title: {\n          display: true\n        }\n      },\n      y: {\n        display: true,\n        title: {\n          display: true,\n          text: 'Value'\n        },\n        suggestedMin: -10,\n        suggestedMax: 200\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n \n cubicInterpolationMode \n Line Styling ( tension ) \n \n \n \n"},{title:"Line Chart",frontmatter:{},regularPath:"/samples/line/line.html",relativePath:"samples/line/line.md",key:"v-1d315ea5",path:"/samples/line/line.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n \n"},{title:"Multi Axis Line Chart",frontmatter:{},regularPath:"/samples/line/multi-axis.html",relativePath:"samples/line/multi-axis.md",key:"v-cd72e3f6",path:"/samples/line/multi-axis.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Multi Axis Line Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      yAxisID: 'y',\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      yAxisID: 'y1',\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    interaction: {\n      mode: 'index',\n      intersect: false,\n    },\n    stacked: false,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart - Multi Axis'\n      }\n    },\n    scales: {\n      y: {\n        type: 'linear',\n        display: true,\n        position: 'left',\n      },\n      y1: {\n        type: 'linear',\n        display: true,\n        position: 'right',\n\n        // grid line settings\n        grid: {\n          drawOnChartArea: false, // only want the grid lines for one axis to show up\n        },\n      },\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Axes scales \n Cartesian Axes \n \n Axis Position \n \n \n Data structures ( labels ) \n Line \n \n"},{title:"Point Styling",frontmatter:{},regularPath:"/samples/line/point-styling.html",relativePath:"samples/line/point-styling.md",key:"v-3573ab39",path:"/samples/line/point-styling.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Point Styling \n \nconst actions = [\n  {\n    name: 'pointStyle: circle (default)',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'cirlce';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: cross',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'cross';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: crossRot',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'crossRot';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: dash',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'dash';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: line',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'line';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: rect',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'rect';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: rectRounded',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'rectRounded';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: rectRot',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'rectRot';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: star',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'star';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'pointStyle: triangle',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.pointStyle = 'triangle';\n      });\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst data = {\n  labels: ['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5', 'Day 6'],\n  datasets: [\n    {\n      label: 'Dataset',\n      data: Utils.numbers({count: 6, min: -100, max: 100}),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      pointStyle: 'circle',\n      pointRadius: 10,\n      pointHoverRadius: 15\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => 'Point Style: ' + ctx.chart.data.datasets[0].pointStyle,\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n \n Point Styling \n \n \n \n"},{title:"Line Segment Styling",frontmatter:{},regularPath:"/samples/line/segments.html",relativePath:"samples/line/segments.md",key:"v-300471a5",path:"/samples/line/segments.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Segment Styling \n Using helper functions to style each segment. Gaps in the data ('skipped') are set to dashed lines and segments with values going 'down' are set to a different color. \n \nconst skipped = (ctx, value) => ctx.p0.skip || ctx.p1.skip ? value : undefined;\nconst down = (ctx, value) => ctx.p0.parsed.y > ctx.p1.parsed.y ? value : undefined;\n//  \n\n//  \nconst genericOptions = {\n  fill: false,\n  interaction: {\n    intersect: false\n  },\n  radius: 0,\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: {\n    labels: Utils.months({count: 7}),\n    datasets: [{\n      label: 'My First Dataset',\n      data: [65, 59, NaN, 48, 56, 57, 40],\n      borderColor: 'rgb(75, 192, 192)',\n      segment: {\n        borderColor: ctx => skipped(ctx, 'rgb(0,0,0,0.2)') || down(ctx, 'rgb(192,75,75)'),\n        borderDash: ctx => skipped(ctx, [6, 6]),\n      },\n      spanGaps: true\n    }]\n  },\n  options: genericOptions\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n \n Line Styling \n Segment \n \n \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Stepped Line Charts",frontmatter:{},regularPath:"/samples/line/stepped.html",relativePath:"samples/line/stepped.md",key:"v-0d0a7615",path:"/samples/line/stepped.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Stepped Line Charts \n \nconst actions = [\n  {\n    name: 'Step: false (default)',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.stepped = false;\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Step: true',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.stepped = true;\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Step: before',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.stepped = 'before';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Step: after',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.stepped = 'after';\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Step: middle',\n    handler: (chart) => {\n      chart.data.datasets.forEach(dataset => {\n        dataset.stepped = 'middle';\n      });\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst data = {\n  labels: ['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5', 'Day 6'],\n  datasets: [\n    {\n      label: 'Dataset',\n      data: Utils.numbers({count: 6, min: -100, max: 100}),\n      borderColor: Utils.CHART_COLORS.red,\n      fill: false,\n      stepped: true,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    interaction: {\n      intersect: false,\n      axis: 'x'\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => 'Step ' + ctx.chart.data.datasets[0].stepped + ' Interpolation',\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n \n Stepped \n \n \n \n"},{title:"Line Styling",frontmatter:{},regularPath:"/samples/line/styling.html",relativePath:"samples/line/styling.md",key:"v-a078b402",path:"/samples/line/styling.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Styling \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: DATA_COUNT});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Unfilled',\n      fill: false,\n      backgroundColor: Utils.CHART_COLORS.blue,\n      borderColor: Utils.CHART_COLORS.blue,\n      data: Utils.numbers(NUMBER_CFG),\n    }, {\n      label: 'Dashed',\n      fill: false,\n      backgroundColor: Utils.CHART_COLORS.green,\n      borderColor: Utils.CHART_COLORS.green,\n      borderDash: [5, 5],\n      data: Utils.numbers(NUMBER_CFG),\n    }, {\n      label: 'Filled',\n      backgroundColor: Utils.CHART_COLORS.red,\n      borderColor: Utils.CHART_COLORS.red,\n      data: Utils.numbers(NUMBER_CFG),\n      fill: true,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart'\n      },\n    },\n    interaction: {\n      mode: 'index',\n      intersect: false\n    },\n    scales: {\n      x: {\n        display: true,\n        title: {\n          display: true,\n          text: 'Month'\n        }\n      },\n      y: {\n        display: true,\n        title: {\n          display: true,\n          text: 'Value'\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n \n Line Styling \n \n \n \n"},{title:"Bubble",frontmatter:{},regularPath:"/samples/other-charts/bubble.html",relativePath:"samples/other-charts/bubble.md",key:"v-2b6f5925",path:"/samples/other-charts/bubble.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bubble \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.bubbles({count: chart.data.labels.length, rmin: 5, rmax: 15, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.bubbles({count: data.labels.length, rmin: 5, rmax: 15, min: 0, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, rmin: 5, rmax: 15, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.orange,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bubble',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Bubble Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bubble \n \n"},{title:"Doughnut",frontmatter:{},regularPath:"/samples/other-charts/doughnut.html",relativePath:"samples/other-charts/doughnut.md",key:"v-e3cb5bb6",path:"/samples/other-charts/doughnut.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Doughnut \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: [],\n        data: [],\n      };\n\n      for (let i = 0; i   0) {\n        data.labels.push('data #' + (data.labels.length + 1));\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 5;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst data = {\n  labels: ['Red', 'Orange', 'Yellow', 'Green', 'Blue'],\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Object.values(Utils.CHART_COLORS),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'doughnut',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Doughnut Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Doughnut and Pie Charts \n \n"},{title:"Combo bar/line",frontmatter:{},regularPath:"/samples/other-charts/combo-bar-line.html",relativePath:"samples/other-charts/combo-bar-line.md",key:"v-3fc5bb45",path:"/samples/other-charts/combo-bar-line.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Combo bar/line \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        borderWidth: 1,\n        data: Utils.numbers({count: data.labels.length, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      order: 1\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      type: 'line',\n      order: 0\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'bar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Combined Line/Bar Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n Line \n Data structures ( labels ) \n \n"},{title:"Pie",frontmatter:{},regularPath:"/samples/other-charts/pie.html",relativePath:"samples/other-charts/pie.md",key:"v-2ce89747",path:"/samples/other-charts/pie.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Pie \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: [],\n        data: [],\n      };\n\n      for (let i = 0; i   0) {\n        data.labels.push('data #' + (data.labels.length + 1));\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 5;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst data = {\n  labels: ['Red', 'Orange', 'Yellow', 'Green', 'Blue'],\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: Object.values(Utils.CHART_COLORS),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'pie',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Pie Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Doughnut and Pie Charts \n \n"},{title:"Multi Series Pie",frontmatter:{},regularPath:"/samples/other-charts/multi-series-pie.html",relativePath:"samples/other-charts/multi-series-pie.md",key:"v-79e56a25",path:"/samples/other-charts/multi-series-pie.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Multi Series Pie \n \nconst DATA_COUNT = 5;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: ['Overall Yay', 'Overall Nay', 'Group A Yay', 'Group A Nay', 'Group B Yay', 'Group B Nay', 'Group C Yay', 'Group C Nay'],\n  datasets: [\n    {\n      backgroundColor: ['#AAA', '#777'],\n      data: [21, 79]\n    },\n    {\n      backgroundColor: ['hsl(0, 100%, 60%)', 'hsl(0, 100%, 35%)'],\n      data: [33, 67]\n    },\n    {\n      backgroundColor: ['hsl(100, 100%, 60%)', 'hsl(100, 100%, 35%)'],\n      data: [20, 80]\n    },\n    {\n      backgroundColor: ['hsl(180, 100%, 60%)', 'hsl(180, 100%, 35%)'],\n      data: [10, 90]\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'pie',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels: function(chart) {\n            // Get the default label list\n            const original = Chart.overrides.pie.plugins.legend.labels.generateLabels;\n            const labelsOriginal = original.call(this, chart);\n\n            // Build an array of colors used in the datasets of the chart\n            let datasetColors = chart.data.datasets.map(function(e) {\n              return e.backgroundColor;\n            });\n            datasetColors = datasetColors.flat();\n\n            // Modify the color and hide state of each label\n            labelsOriginal.forEach(label => {\n              // There are twice as many labels as there are datasets. This converts the label index into the corresponding dataset index\n              label.datasetIndex = (label.index - label.index % 2) / 2;\n\n              // The hidden state must match the dataset's hidden state\n              label.hidden = !chart.isDatasetVisible(label.datasetIndex);\n\n              // Change the color to match the dataset\n              label.fillStyle = datasetColors[label.index];\n            });\n\n            return labelsOriginal;\n          }\n        },\n        onClick: function(mouseEvent, legendItem, legend) {\n          // toggle the visibility of the dataset from what it currently is\n          legend.chart.getDatasetMeta(\n            legendItem.datasetIndex\n          ).hidden = legend.chart.isDatasetVisible(legendItem.datasetIndex);\n          legend.chart.update();\n        }\n      },\n      tooltip: {\n        callbacks: {\n          label: function(context) {\n            const labelIndex = (context.datasetIndex * 2) + context.dataIndex;\n            return context.chart.data.labels[labelIndex] + ': ' + context.formattedValue;\n          }\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Doughnut and Pie Charts \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Polar area centered point labels",frontmatter:{},regularPath:"/samples/other-charts/polar-area-center-labels.html",relativePath:"samples/other-charts/polar-area-center-labels.md",key:"v-0a3e57a5",path:"/samples/other-charts/polar-area-center-labels.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Polar area centered point labels \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels.push('data #' + (data.labels.length + 1));\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 5;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = ['Red', 'Orange', 'Yellow', 'Green', 'Blue'];\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: [\n        Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.orange, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.yellow, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.green, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      ]\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'polarArea',\n  data: data,\n  options: {\n    responsive: true,\n    scales: {\n      r: {\n        pointLabels: {\n          display: true,\n          centerPointLabels: true,\n          font: {\n            size: 18\n          }\n        }\n      }\n    },\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Polar Area Chart With Centered Point Labels'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Polar Area Chart \n Linear Radial Axis \n \n Point Label Options ( centerPointLabels ) \n \n \n \n"},{title:"Polar area",frontmatter:{},regularPath:"/samples/other-charts/polar-area.html",relativePath:"samples/other-charts/polar-area.md",key:"v-f72532b6",path:"/samples/other-charts/polar-area.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Polar area \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels.push('data #' + (data.labels.length + 1));\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 5;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = ['Red', 'Orange', 'Yellow', 'Green', 'Blue'];\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      backgroundColor: [\n        Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.orange, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.yellow, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.green, 0.5),\n        Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      ]\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'polarArea',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Polar Area Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Polar Area Chart \n \n"},{title:"Radar skip points",frontmatter:{},regularPath:"/samples/other-charts/radar-skip-points.html",relativePath:"samples/other-charts/radar-skip-points.md",key:"v-823e326a",path:"/samples/other-charts/radar-skip-points.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radar skip points \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach((dataset, i) => {\n        const data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n\n        if (i === 0) {\n          data[0] = null;\n        } else if (i === 1) {\n          data[Number.parseInt(data.length / 2, 10)] = null;\n        } else {\n          data[data.length - 1] = null;\n        }\n\n        dataset.data = data;\n      });\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst dataFirstSkip = Utils.numbers(NUMBER_CFG);\nconst dataMiddleSkip = Utils.numbers(NUMBER_CFG);\nconst dataLastSkip = Utils.numbers(NUMBER_CFG);\n\ndataFirstSkip[0] = null;\ndataMiddleSkip[Number.parseInt(dataMiddleSkip.length / 2, 10)] = null;\ndataLastSkip[dataLastSkip.length - 1] = null;\n\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Skip first dataset',\n      data: dataFirstSkip,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Skip mid dataset',\n      data: dataMiddleSkip,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    },\n    {\n      label: 'Skip last dataset',\n      data: dataLastSkip,\n      borderColor: Utils.CHART_COLORS.green,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.green, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Radar Skip Points Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config\n};\n`\"/> #  Docs \n \n Radar \n Data structures ( labels ) \n \n"},{title:"Radar",frontmatter:{},regularPath:"/samples/other-charts/radar.html",relativePath:"samples/other-charts/radar.md",key:"v-39d68593",path:"/samples/other-charts/radar.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radar \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: 0, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'radar',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Radar Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Radar \n Data structures ( labels ) \n \n"},{title:"Scatter - Multi axis",frontmatter:{},regularPath:"/samples/other-charts/scatter-multi-axis.html",relativePath:"samples/other-charts/scatter-multi-axis.md",key:"v-47e586a5",path:"/samples/other-charts/scatter-multi-axis.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Scatter - Multi axis \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.bubbles({count: chart.data.labels.length, rmin: 1, rmax: 1, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.bubbles({count: data.labels.length, rmin: 1, rmax: 1, min: -100, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, rmin: 1, rmax: 1, min: -100, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      yAxisID: 'y',\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.orange,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange, 0.5),\n      yAxisID: 'y2',\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Scatter Multi Axis Chart'\n      }\n    },\n    scales: {\n      y: {\n        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance\n        position: 'left',\n        ticks: {\n          color: Utils.CHART_COLORS.red\n        }\n      },\n      y2: {\n        type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance\n        position: 'right',\n        reverse: true,\n        ticks: {\n          color: Utils.CHART_COLORS.blue\n        },\n        grid: {\n          drawOnChartArea: false // only want the grid lines for one axis to show up\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Scatter \n Cartesian Axes \n \n Axis Position \n \n \n \n"},{title:"Scatter",frontmatter:{},regularPath:"/samples/other-charts/scatter.html",relativePath:"samples/other-charts/scatter.md",key:"v-252911e3",path:"/samples/other-charts/scatter.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Scatter \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.bubbles({count: chart.data.labels.length, rmin: 1, rmax: 1, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        data: Utils.bubbles({count: data.labels.length, rmin: 1, rmax: 1, min: 0, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, rmin: 1, rmax: 1, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.bubbles(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.orange,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.orange, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      legend: {\n        position: 'top',\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Scatter Chart'\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Scatter \n \n"},{title:"Stacked bar/line",frontmatter:{},regularPath:"/samples/other-charts/stacked-bar-line.html",relativePath:"samples/other-charts/stacked-bar-line.md",key:"v-d3338236",path:"/samples/other-charts/stacked-bar-line.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Stacked bar/line \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: Utils.transparentize(dsColor, 0.5),\n        borderColor: dsColor,\n        borderWidth: 1,\n        stack: 'combined',\n        data: Utils.numbers({count: data.labels.length, min: 0, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      stack: 'combined',\n      type: 'bar'\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      stack: 'combined'\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Stacked Line/Bar Chart'\n      }\n    },\n    scales: {\n      y: {\n        stacked: true\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Axes scales \n \n Common options to all axes ( stacked ) \n Stacking \n \n \n Bar \n Line \n Data structures ( labels ) \n \n Dataset Configuration ( stack ) \n \n \n \n"},{title:"Chart Area Border",frontmatter:{},regularPath:"/samples/plugins/chart-area-border.html",relativePath:"samples/plugins/chart-area-border.md",key:"v-42b89576",path:"/samples/plugins/chart-area-border.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Chart Area Border \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst chartAreaBorder = {\n  id: 'chartAreaBorder',\n  beforeDraw(chart, args, options) {\n    const {ctx, chartArea: {left, top, width, height}} = chart;\n    ctx.save();\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.setLineDash(options.borderDash || []);\n    ctx.lineDashOffset = options.borderDashOffset;\n    ctx.strokeRect(left, top, width, height);\n    ctx.restore();\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      chartAreaBorder: {\n        borderColor: 'red',\n        borderWidth: 2,\n        borderDash: [5, 5],\n        borderDashOffset: 2,\n      }\n    }\n  },\n  plugins: [chartAreaBorder]\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n Plugins \n \n"},{title:"Doughnut Empty State",frontmatter:{},regularPath:"/samples/plugins/doughnut-empty-state.html",relativePath:"samples/plugins/doughnut-empty-state.md",key:"v-62fa92fb",path:"/samples/plugins/doughnut-empty-state.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Doughnut Empty State \n \nconst data = {\n  labels: [],\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: []\n    }\n  ]\n};\n//  \n\n//  \nconst plugin = {\n  id: 'emptyDoughnut',\n  afterDraw(chart, args, options) {\n    const {datasets} = chart.data;\n    const {color, width, radiusDecrease} = options;\n    let hasData = false;\n\n    for (let i = 0; i   0;\n    }\n\n    if (!hasData) {\n      const {chartArea: {left, top, right, bottom}, ctx} = chart;\n      const centerX = (left + right) / 2;\n      const centerY = (top + bottom) / 2;\n      const r = Math.min(right - left, bottom - top) / 2;\n\n      ctx.beginPath();\n      ctx.lineWidth = width || 2;\n      ctx.strokeStyle = color || 'rgba(255, 128, 0, 0.5)';\n      ctx.arc(centerX, centerY, (r - radiusDecrease || 0), 0, 2 * Math.PI);\n      ctx.stroke();\n    }\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'doughnut',\n  data: data,\n  options: {\n    plugins: {\n      emptyDoughnut: {\n        color: 'rgba(255, 128, 0, 0.5)',\n        width: 2,\n        radiusDecrease: 20\n      }\n    }\n  },\n  plugins: [plugin]\n};\n//  \n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.points(NUMBER_CFG);\n      });\n      chart.update();\n    }\n  },\n];\n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Plugins \n Doughnut and Pie Charts \n \n"},{title:"Quadrants",frontmatter:{},regularPath:"/samples/plugins/quadrants.html",relativePath:"samples/plugins/quadrants.md",key:"v-4205b905",path:"/samples/plugins/quadrants.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Quadrants \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.points(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.points(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst quadrants = {\n  id: 'quadrants',\n  beforeDraw(chart, args, options) {\n    const {ctx, chartArea: {left, top, right, bottom}, scales: {x, y}} = chart;\n    const midX = x.getPixelForValue(0);\n    const midY = y.getPixelForValue(0);\n    ctx.save();\n    ctx.fillStyle = options.topLeft;\n    ctx.fillRect(left, top, midX - left, midY - top);\n    ctx.fillStyle = options.topRight;\n    ctx.fillRect(midX, top, right - midX, midY - top);\n    ctx.fillStyle = options.bottomRight;\n    ctx.fillRect(midX, midY, right - midX, bottom - midY);\n    ctx.fillStyle = options.bottomLeft;\n    ctx.fillRect(left, midY, midX - left, bottom - midY);\n    ctx.restore();\n  }\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    plugins: {\n      quadrants: {\n        topLeft: Utils.CHART_COLORS.red,\n        topRight: Utils.CHART_COLORS.blue,\n        bottomRight: Utils.CHART_COLORS.green,\n        bottomLeft: Utils.CHART_COLORS.yellow,\n      }\n    }\n  },\n  plugins: [quadrants]\n};\n//  \n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.points(NUMBER_CFG);\n      });\n      chart.update();\n    }\n  },\n];\n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Plugins \n Scatter \n \n"},{title:"Center Positioning",frontmatter:{},regularPath:"/samples/scale-options/center.html",relativePath:"samples/scale-options/center.md",key:"v-d5fcd9da",path:"/samples/scale-options/center.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Center Positioning \n This sample show how to place the axis in the center of the chart area, instead of at the edges. \n \nconst actions = [\n  {\n    name: 'Default Positions',\n    handler(chart) {\n      chart.options.scales.x.position = 'bottom';\n      chart.options.scales.y.position = 'left';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: center',\n    handler(chart) {\n      chart.options.scales.x.position = 'center';\n      chart.options.scales.y.position = 'center';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: Vertical: x=-60, Horizontal: y=30',\n    handler(chart) {\n      chart.options.scales.x.position = {y: 30};\n      chart.options.scales.y.position = {x: -60};\n      chart.update();\n    }\n  },\n];\n//  \n\n\n//  \nconst DATA_COUNT = 6;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.points(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.points(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'scatter',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Axis Center Positioning'\n      }\n    },\n    scales: {\n      x: {\n        min: -100,\n        max: 100,\n      },\n      y: {\n        min: -100,\n        max: 100,\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Scatter \n Cartesian Axes \n \n Axis Position \n \n \n \n"},{title:"Grid Configuration",frontmatter:{},regularPath:"/samples/scale-options/grid.html",relativePath:"samples/scale-options/grid.md",key:"v-2c4bdff1",path:"/samples/scale-options/grid.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Grid Configuration \n This sample shows how to use scriptable grid options for an axis to control styling. In this case, the Y axis grid lines are colored based on their value. In addition, booleans are provided to toggle different parts of the X axis grid visibility. \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: -100, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: [10, 30, 39, 20, 25, 34, -10],\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: [18, 33, 22, 19, 11, -39, 30],\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \n// Change these settings to change the display for different parts of the X axis\n// grid configuiration\nconst DISPLAY = true;\nconst BORDER = true;\nconst CHART_AREA = true;\nconst TICKS = true;\n\nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Grid Line Settings'\n      }\n    },\n    scales: {\n      x: {\n        grid: {\n          display: DISPLAY,\n          drawBorder: BORDER,\n          drawOnChartArea: CHART_AREA,\n          drawTicks: TICKS,\n        }\n      },\n      y: {\n        grid: {\n          drawBorder: false,\n          color: function(context) {\n            if (context.tick.value > 0) {\n              return Utils.CHART_COLORS.green;\n            } else if (context.tick.value  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Options \n \n Scriptable Options \n \n Tick Context \n \n \n \n \n Data structures ( labels ) \n Axes Styling \n \n Grid Line Configuration \n \n \n \n"},{title:"Tick Configuration",frontmatter:{},regularPath:"/samples/scale-options/ticks.html",relativePath:"samples/scale-options/ticks.md",key:"v-42597776",path:"/samples/scale-options/ticks.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Tick Configuration \n This sample shows how to use different tick features to control how tick labels are shown on the X axis. These features include: \n \n Multi-line labels \n Filtering labels \n Changing the tick color \n Changing the tick alignment for the X axis \n \n \nconst actions = [\n  {\n    name: 'Alignment: start',\n    handler(chart) {\n      chart.options.scales.x.ticks.align = 'start';\n      chart.update();\n    }\n  },\n  {\n    name: 'Alignment: center (default)',\n    handler(chart) {\n      chart.options.scales.x.ticks.align = 'center';\n      chart.update();\n    }\n  },\n  {\n    name: 'Alignment: end',\n    handler(chart) {\n      chart.options.scales.x.ticks.align = 'end';\n      chart.update();\n    }\n  },\n];\n//  \n\n\n//  \nconst DATA_COUNT = 12;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\nconst data = {\n  labels: [['June', '2015'], 'July', 'August', 'September', 'October', 'November', 'December', ['January', '2016'], 'February', 'March', 'April', 'May'],\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart with Tick Configuration'\n      }\n    },\n    scales: {\n      x: {\n        ticks: {\n          // For a category axis, the val is the index so the lookup via getLabelForValue is needed\n          callback: function(val, index) {\n            // Hide every 2nd tick label\n            return index % 2 === 0 ? this.getLabelForValue(val) : '';\n          },\n          color: 'red',\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Options \n \n Scriptable Options \n \n Tick Context \n \n \n \n \n Data structures ( labels ) \n Axes Styling \n \n Tick Configuration \n \n \n \n"},{title:"Title Configuration",frontmatter:{},regularPath:"/samples/scale-options/titles.html",relativePath:"samples/scale-options/titles.md",key:"v-5ea2edf2",path:"/samples/scale-options/titles.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Title Configuration \n This sample shows how to configure the title of an axis including alignment, font, and color. \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    scales: {\n      x: {\n        display: true,\n        title: {\n          display: true,\n          text: 'Month',\n          color: '#911',\n          font: {\n            family: 'Comic Sans MS',\n            size: 20,\n            weight: 'bold',\n            lineHeight: 1.2,\n          },\n          padding: {top: 20, left: 0, right: 0, bottom: 0}\n        }\n      },\n      y: {\n        display: true,\n        title: {\n          display: true,\n          text: 'Value',\n          color: '#191',\n          font: {\n            family: 'Times',\n            size: 20,\n            style: 'normal',\n            lineHeight: 1.2\n          },\n          padding: {top: 30, left: 0, right: 0, bottom: 0}\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n Axes Styling \n Cartesian Axes \n \n Common options to all cartesian axes \n \n \n Labeling Axes \n \n Scale Title Configuration \n \n \n \n"},{title:"Linear Scale - Suggested Min-Max",frontmatter:{},regularPath:"/samples/scales/linear-min-max-suggested.html",relativePath:"samples/scales/linear-min-max-suggested.md",key:"v-383af825",path:"/samples/scales/linear-min-max-suggested.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Scale - Suggested Min-Max \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: [10, 30, 39, 20, 25, 34, -10],\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: [18, 33, 22, 19, 11, 39, 30],\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.CHART_COLORS.blue,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Suggested Min and Max Settings'\n      }\n    },\n    scales: {\n      y: {\n        // the data minimum used for determining the ticks is Math.min(dataMin, suggestedMin)\n        suggestedMin: 30,\n\n        // the data maximum used for determining the ticks is Math.max(dataMax, suggestedMax)\n        suggestedMax: 50,\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n Axes scales \n \n Common options to all axes \n Axis Range Settings \n \n \n \n"},{title:"Linear Scale - Min-Max",frontmatter:{},regularPath:"/samples/scales/linear-min-max.html",relativePath:"samples/scales/linear-min-max.md",key:"v-136b6525",path:"/samples/scales/linear-min-max.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Scale - Min-Max \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: [10, 30, 50, 20, 25, 44, -10],\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: [100, 33, 22, 19, 11, 49, 30],\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.CHART_COLORS.blue,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Min and Max Settings'\n      }\n    },\n    scales: {\n      y: {\n        min: 10,\n        max: 50,\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n Axes scales \n \n Common options to all axes ( min , max ) \n \n \n \n"},{title:"Linear Scale - Step Size",frontmatter:{},regularPath:"/samples/scales/linear-step-size.html",relativePath:"samples/scales/linear-step-size.md",key:"v-61b2dc05",path:"/samples/scales/linear-step-size.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Linear Scale - Step Size \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Dataset',\n    handler(chart) {\n      const data = chart.data;\n      const dsColor = Utils.namedColor(chart.data.datasets.length);\n      const newDataset = {\n        label: 'Dataset ' + (data.datasets.length + 1),\n        backgroundColor: dsColor,\n        borderColor: dsColor,\n        data: Utils.numbers({count: data.labels.length, min: 0, max: 100}),\n      };\n      chart.data.datasets.push(newDataset);\n      chart.update();\n    }\n  },\n  {\n    name: 'Add Data',\n    handler(chart) {\n      const data = chart.data;\n      if (data.datasets.length > 0) {\n        data.labels = Utils.months({count: data.labels.length + 1});\n\n        for (let index = 0; index   {\n        dataset.data.pop();\n      });\n\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.CHART_COLORS.blue,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      tooltip: {\n        mode: 'index',\n        intersect: false\n      },\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart'\n      }\n    },\n    hover: {\n      mode: 'index',\n      intersec: false\n    },\n    scales: {\n      x: {\n        title: {\n          display: true,\n          text: 'Month'\n        }\n      },\n      y: {\n        title: {\n          display: true,\n          text: 'Value'\n        },\n        min: 0,\n        max: 100,\n        ticks: {\n          // forces step size to be 50 units\n          stepSize: 50\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Data structures ( labels ) \n Axes scales \n \n Common options to all axes ( min , max ) \n \n \n Linear Axis \n \n Linear Axis specific tick options ( stepSize ) \n Step Size \n \n \n \n"},{title:"Log Scale",frontmatter:{},regularPath:"/samples/scales/log.html",relativePath:"samples/scales/log.md",key:"v-131e3c29",path:"/samples/scales/log.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Log Scale \n \nconst logNumbers = (num) => {\n  const data = [];\n\n  for (let i = 0; i   {\n        dataset.data = logNumbers(chart.data.labels.length);\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: logNumbers(DATA_COUNT),\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n      fill: false,\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart - Logarithmic'\n      }\n    },\n    scales: {\n      x: {\n        display: true,\n      },\n      y: {\n        display: true,\n        type: 'logarithmic',\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Logarithmic Axis \n Data structures ( labels ) \n \n"},{title:"Stacked Linear / Category",frontmatter:{},regularPath:"/samples/scales/stacked.html",relativePath:"samples/scales/stacked.md",key:"v-0649723a",path:"/samples/scales/stacked.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Stacked Linear / Category \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = Utils.months({count: 7});\nconst data = {\n  labels: labels,\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: [10, 30, 50, 20, 25, 44, -10],\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.CHART_COLORS.red,\n    },\n    {\n      label: 'Dataset 2',\n      data: ['ON', 'ON', 'OFF', 'ON', 'OFF', 'OFF', 'ON'],\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.CHART_COLORS.blue,\n      stepped: true,\n      yAxisID: 'y2',\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    responsive: true,\n    plugins: {\n      title: {\n        display: true,\n        text: 'Stacked scales',\n      },\n    },\n    scales: {\n      y: {\n        type: 'linear',\n        position: 'left',\n        stack: 'demo',\n        stackWeight: 2,\n        grid: {\n          borderColor: Utils.CHART_COLORS.red\n        }\n      },\n      y2: {\n        type: 'category',\n        labels: ['ON', 'OFF'],\n        offset: true,\n        position: 'left',\n        stack: 'demo',\n        stackWeight: 1,\n        grid: {\n          borderColor: Utils.CHART_COLORS.blue\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Axes scales \n \n Stacking \n \n \n Data structures ( labels ) \n \n"},{title:"Interface: TooltipLabelStyle",frontmatter:{},regularPath:"/api/interfaces/TooltipLabelStyle.html",relativePath:"api/interfaces/TooltipLabelStyle.md",key:"v-8592c41e",path:"/api/interfaces/TooltipLabelStyle.html",headers:[{level:2,title:"Properties",slug:"properties"},{level:3,title:"backgroundColor",slug:"backgroundcolor"},{level:3,title:"borderColor",slug:"bordercolor"},{level:3,title:"borderDash",slug:"borderdash"},{level:3,title:"borderDashOffset",slug:"borderdashoffset"},{level:3,title:"borderRadius",slug:"borderradius"},{level:3,title:"borderWidth",slug:"borderwidth"}],content:" Interface: TooltipLabelStyle \n Properties \n backgroundColor \n •  backgroundColor :  Color \n Defined in \n index.esm.d.ts:2448 \n borderColor \n •  borderColor :  Color \n Defined in \n index.esm.d.ts:2447 \n borderDash \n •  Optional   borderDash : [ number ,  number ] \n Border dash \n since  3.1.0 \n Defined in \n index.esm.d.ts:2460 \n borderDashOffset \n •  Optional   borderDashOffset :  number \n Border dash offset \n since  3.1.0 \n Defined in \n index.esm.d.ts:2466 \n borderRadius \n •  Optional   borderRadius :  number  |  BorderRadius \n borderRadius \n since  3.1.0 \n Defined in \n index.esm.d.ts:2472 \n borderWidth \n •  Optional   borderWidth :  number \n Width of border line \n since  3.1.0 \n Defined in \n index.esm.d.ts:2454 \n"},{title:"Time Scale - Combo Chart",frontmatter:{},regularPath:"/samples/scales/time-combo.html",relativePath:"samples/scales/time-combo.md",key:"v-44b60cf6",path:"/samples/scales/time-combo.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Time Scale - Combo Chart \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = Utils.numbers({count: chart.data.labels.length, min: 0, max: 100});\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst labels = [];\n\nfor (let i = 0; i  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        text: 'Chart.js Combo Time Scale',\n        display: true\n      }\n    },\n    scales: {\n      x: {\n        type: 'time',\n        display: true,\n        offset: true,\n        time: {\n          unit: 'day'\n        }\n      },\n    },\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Bar \n Line \n Data structures ( labels ) \n Time Scale \n \n"},{title:"Bar Chart",frontmatter:{},regularPath:"/samples/scriptable/bar.html",relativePath:"samples/scriptable/bar.md",key:"v-23b86e93",path:"/samples/scriptable/bar.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bar Chart \n Demo selecting bar color based on the bar's y value. \n \nconst DATA_COUNT = 16;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: -100,\n    max: 100\n  });\n}\n\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [{\n    data: generateData(),\n  }]\n};\n//  \n\n//  \nfunction colorize(opaque) {\n  return (ctx) => {\n    const v = ctx.parsed.y;\n    const c = v  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Bar \n Data structures ( labels ) \n \n Dataset Configuration ( stack ) \n \n \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Bubble Chart",frontmatter:{},regularPath:"/samples/scriptable/bubble.html",relativePath:"samples/scriptable/bubble.md",key:"v-2ca5a245",path:"/samples/scriptable/bubble.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Bubble Chart \n \nconst DATA_COUNT = 16;\nconst MIN_XY = -150;\nconst MAX_XY = 100;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction generateData() {\n  const data = [];\n  let i;\n\n  for (i = 0; i  \n\n//  \nfunction channelValue(x, y, values) {\n  return x  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Bubble \n Options \n \n Scriptable Options \n \n \n \n"},{title:"Line Chart",frontmatter:{},regularPath:"/samples/scriptable/line.html",relativePath:"samples/scriptable/line.md",key:"v-7b63aa76",path:"/samples/scriptable/line.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Line Chart \n \nconst DATA_COUNT = 12;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: 0,\n    max: 100\n  });\n}\n\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [{\n    data: generateData()\n  }]\n};\n//  \n\n//  \nfunction getLineColor(ctx) {\n  return Utils.color(ctx.datasetIndex);\n}\n\nfunction alternatePointStyles(ctx) {\n  const index = ctx.dataIndex;\n  return index % 2 === 0 ? 'circle' : 'rect';\n}\n\nfunction makeHalfAsOpaque(ctx) {\n  return Utils.transparentize(getLineColor(ctx));\n}\n\nfunction adjustRadiusBasedOnData(ctx) {\n  const v = ctx.parsed.y;\n  return v  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Line \n \n Point Styling \n \n \n Options \n \n Scriptable Options \n \n \n Data structures ( labels ) \n \n"},{title:"Pie Chart",frontmatter:{},regularPath:"/samples/scriptable/pie.html",relativePath:"samples/scriptable/pie.md",key:"v-81d9cfbe",path:"/samples/scriptable/pie.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Pie Chart \n \nconst DATA_COUNT = 5;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n  {\n    name: 'Toggle Doughnut View',\n    handler(chart) {\n      if (chart.options.cutout) {\n        chart.options.cutout = 0;\n      } else {\n        chart.options.cutout = '50%';\n      }\n      chart.update();\n    }\n  }\n];\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: -100,\n    max: 100\n  });\n}\n\nconst data = {\n  datasets: [{\n    data: generateData()\n  }]\n};\n//  \n\n//  \nfunction colorize(opaque, hover, ctx) {\n  const v = ctx.parsed;\n  const c = v  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Options \n \n Scriptable Options \n \n \n Doughnut and Pie Charts \n \n"},{title:"Polar Area Chart",frontmatter:{},regularPath:"/samples/scriptable/polar.html",relativePath:"samples/scriptable/polar.md",key:"v-d1d12886",path:"/samples/scriptable/polar.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Polar Area Chart \n \nconst DATA_COUNT = 7;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: 0,\n    max: 100\n  });\n}\n\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [{\n    data: generateData()\n  }]\n};\n//  \n\n//  \nfunction colorize(opaque, hover, ctx) {\n  const v = ctx.raw;\n  const c = v  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Options \n \n Scriptable Options \n \n \n Polar Area Chart \n \n"},{title:"Radar Chart",frontmatter:{},regularPath:"/samples/scriptable/radar.html",relativePath:"samples/scriptable/radar.md",key:"v-3260ba2d",path:"/samples/scriptable/radar.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Radar Chart \n \nconst DATA_COUNT = 7;\nUtils.srand(110);\n\nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data = generateData();\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nfunction generateData() {\n  return Utils.numbers({\n    count: DATA_COUNT,\n    min: 0,\n    max: 100\n  });\n}\n\nconst data = {\n  labels: [['Eating', 'Dinner'], ['Drinking', 'Water'], 'Sleeping', ['Designing', 'Graphics'], 'Coding', 'Cycling', 'Running'],\n  datasets: [{\n    data: generateData()\n  }]\n};\n//  \n\n//  \nfunction getLineColor(ctx) {\n  return Utils.color(ctx.datasetIndex);\n}\n\nfunction alternatePointStyles(ctx) {\n  const index = ctx.dataIndex;\n  return index % 2 === 0 ? 'circle' : 'rect';\n}\n\nfunction makeHalfAsOpaque(ctx) {\n  return Utils.transparentize(getLineColor(ctx));\n}\n\nfunction make20PercentOpaque(ctx) {\n  return Utils.transparentize(getLineColor(ctx), 0.8);\n}\n\nfunction adjustRadiusBasedOnData(ctx) {\n  const v = ctx.parsed.y;\n  return v  \n\nmodule.exports = {\n  actions,\n  config,\n};\n`\"/> #  Docs \n \n Options \n \n Scriptable Options \n \n \n Radar \n \n"},{title:"Basic",frontmatter:{},regularPath:"/samples/subtitle/basic.html",relativePath:"samples/subtitle/basic.md",key:"v-3e0acdf7",path:"/samples/subtitle/basic.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Basic \n This sample shows basic usage of subtitle. \n \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart Title',\n      },\n      subtitle: {\n        display: true,\n        text: 'Chart Subtitle',\n        color: 'blue',\n        font: {\n          size: 12,\n          family: 'tahoma',\n          weight: 'normal',\n          style: 'italic'\n        },\n        padding: {\n          bottom: 10\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Title \n Subtitle \n \n"},{title:"Alignment",frontmatter:{},regularPath:"/samples/title/alignment.html",relativePath:"samples/title/alignment.md",key:"v-2090b8f6",path:"/samples/title/alignment.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Alignment \n This sample show how to configure the alignment of the chart title \n \nconst actions = [\n  {\n    name: 'Title Alignment: start',\n    handler(chart) {\n      chart.options.plugins.title.align = 'start';\n      chart.update();\n    }\n  },\n  {\n    name: 'Title Alignment: center (default)',\n    handler(chart) {\n      chart.options.plugins.title.align = 'center';\n      chart.update();\n    }\n  },\n  {\n    name: 'Title Alignment: end',\n    handler(chart) {\n      chart.options.plugins.title.align = 'end';\n      chart.update();\n    }\n  },\n];\n//  \n\n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart Title',\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Title \n \n"},{title:"External HTML Tooltip",frontmatter:{},regularPath:"/samples/tooltip/html.html",relativePath:"samples/tooltip/html.md",key:"v-388e70b7",path:"/samples/tooltip/html.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" External HTML Tooltip \n This sample shows how to use the external tooltip functionality to generate an HTML tooltip. \n \nconst getOrCreateTooltip = (chart) => {\n  let tooltipEl = chart.canvas.parentNode.querySelector('div');\n\n  if (!tooltipEl) {\n    tooltipEl = document.createElement('div');\n    tooltipEl.style.background = 'rgba(0, 0, 0, 0.7)';\n    tooltipEl.style.borderRadius = '3px';\n    tooltipEl.style.color = 'white';\n    tooltipEl.style.opacity = 1;\n    tooltipEl.style.pointerEvents = 'none';\n    tooltipEl.style.position = 'absolute';\n    tooltipEl.style.transform = 'translate(-50%, 0)';\n    tooltipEl.style.transition = 'all .1s ease';\n\n    const table = document.createElement('table');\n    table.style.margin = '0px';\n\n    tooltipEl.appendChild(table);\n    chart.canvas.parentNode.appendChild(tooltipEl);\n  }\n\n  return tooltipEl;\n};\n\nconst externalTooltipHandler = (context) => {\n  // Tooltip Element\n  const {chart, tooltip} = context;\n  const tooltipEl = getOrCreateTooltip(chart);\n\n  // Hide if no tooltip\n  if (tooltip.opacity === 0) {\n    tooltipEl.style.opacity = 0;\n    return;\n  }\n\n  // Set Text\n  if (tooltip.body) {\n    const titleLines = tooltip.title || [];\n    const bodyLines = tooltip.body.map(b => b.lines);\n\n    const tableHead = document.createElement('thead');\n\n    titleLines.forEach(title => {\n      const tr = document.createElement('tr');\n      tr.style.borderWidth = 0;\n\n      const th = document.createElement('th');\n      th.style.borderWidth = 0;\n      const text = document.createTextNode(title);\n\n      th.appendChild(text);\n      tr.appendChild(th);\n      tableHead.appendChild(tr);\n    });\n\n    const tableBody = document.createElement('tbody');\n    bodyLines.forEach((body, i) => {\n      const colors = tooltip.labelColors[i];\n\n      const span = document.createElement('span');\n      span.style.background = colors.backgroundColor;\n      span.style.borderColor = colors.borderColor;\n      span.style.borderWidth = '2px';\n      span.style.marginRight = '10px';\n      span.style.height = '10px';\n      span.style.width = '10px';\n      span.style.display = 'inline-block';\n\n      const tr = document.createElement('tr');\n      tr.style.backgroundColor = 'inherit';\n      tr.style.borderWidth = 0;\n\n      const td = document.createElement('td');\n      td.style.borderWidth = 0;\n\n      const text = document.createTextNode(body);\n\n      td.appendChild(span);\n      td.appendChild(text);\n      tr.appendChild(td);\n      tableBody.appendChild(tr);\n    });\n\n    const tableRoot = tooltipEl.querySelector('table');\n\n    // Remove old children\n    while (tableRoot.firstChild) {\n      tableRoot.firstChild.remove();\n    }\n\n    // Add new children\n    tableRoot.appendChild(tableHead);\n    tableRoot.appendChild(tableBody);\n  }\n\n  const {offsetLeft: positionX, offsetTop: positionY} = chart.canvas;\n\n  // Display, position, and set styles for font\n  tooltipEl.style.opacity = 1;\n  tooltipEl.style.left = positionX + tooltip.caretX + 'px';\n  tooltipEl.style.top = positionY + tooltip.caretY + 'px';\n  tooltipEl.style.font = tooltip.options.bodyFont.string;\n  tooltipEl.style.padding = tooltip.options.padding + 'px ' + tooltip.options.padding + 'px';\n};\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100, decimals: 0};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    interaction: {\n      mode: 'index',\n      intersect: false,\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Line Chart - External Tooltips'\n      },\n      tooltip: {\n        enabled: false,\n        position: 'nearest',\n        external: externalTooltipHandler\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Tooltip \n \n External (Custom) Tooltips \n \n \n \n"},{title:"Custom Tooltip Content",frontmatter:{},regularPath:"/samples/tooltip/content.html",relativePath:"samples/tooltip/content.md",key:"v-4e932fb6",path:"/samples/tooltip/content.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Custom Tooltip Content \n This sample shows how to use the tooltip callbacks to add additional content to the tooltip. \n \nconst footer = (tooltipItems) => {\n  let sum = 0;\n\n  tooltipItems.forEach(function(tooltipItem) {\n    sum += tooltipItem.parsed.y;\n  });\n  return 'Sum: ' + sum;\n};\n\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100, decimals: 0};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    interaction: {\n      intersect: false,\n      mode: 'index',\n    },\n    plugins: {\n      tooltip: {\n        callbacks: {\n          footer: footer,\n        }\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Tooltip \n \n Tooltip Callbacks \n \n \n \n"},{title:"Interaction Modes",frontmatter:{},regularPath:"/samples/tooltip/interactions.html",relativePath:"samples/tooltip/interactions.md",key:"v-a44d8d6a",path:"/samples/tooltip/interactions.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Interaction Modes \n This sample shows how to use the tooltip position mode setting. \n \nconst actions = [\n  {\n    name: 'Mode: index',\n    handler(chart) {\n      chart.options.interaction.axis = 'xy';\n      chart.options.interaction.mode = 'index';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: dataset',\n    handler(chart) {\n      chart.options.interaction.axis = 'xy';\n      chart.options.interaction.mode = 'dataset';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: point',\n    handler(chart) {\n      chart.options.interaction.axis = 'xy';\n      chart.options.interaction.mode = 'point';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: nearest, axis: xy',\n    handler(chart) {\n      chart.options.interaction.axis = 'xy';\n      chart.options.interaction.mode = 'nearest';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: nearest, axis: x',\n    handler(chart) {\n      chart.options.interaction.axis = 'x';\n      chart.options.interaction.mode = 'nearest';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: nearest, axis: y',\n    handler(chart) {\n      chart.options.interaction.axis = 'y';\n      chart.options.interaction.mode = 'nearest';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: x',\n    handler(chart) {\n      chart.options.interaction.mode = 'x';\n      chart.update();\n    }\n  },\n  {\n    name: 'Mode: y',\n    handler(chart) {\n      chart.options.interaction.mode = 'y';\n      chart.update();\n    }\n  },\n  {\n    name: 'Toggle Intersect',\n    handler(chart) {\n      chart.options.interaction.intersect = !chart.options.interaction.intersect;\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    },\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    interaction: {\n      intersect: false,\n      mode: 'index',\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => {\n          const {axis = 'xy', intersect, mode} = ctx.chart.options.interaction;\n          return 'Mode: ' + mode + ', axis: ' + axis + ', intersect: ' + intersect;\n        }\n      },\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Tooltip \n Interactions \n \n"},{title:"Point Style",frontmatter:{},regularPath:"/samples/tooltip/point-style.html",relativePath:"samples/tooltip/point-style.md",key:"v-378fbdf6",path:"/samples/tooltip/point-style.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Point Style \n This sample shows how to use the dataset point style in the tooltip instead of a rectangle to identify each dataset. \n \nconst actions = [\n  {\n    name: 'Toggle Tooltip Point Style',\n    handler(chart) {\n      chart.options.plugins.tooltip.usePointStyle = !chart.options.plugins.tooltip.usePointStyle;\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Triangles',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n      pointStyle: 'triangle',\n      pointRadius: 6,\n    },\n    {\n      label: 'Circles',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n      pointStyle: 'circle',\n      pointRadius: 6,\n    },\n    {\n      label: 'Stars',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.green,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.green, 0.5),\n      pointStyle: 'star',\n      pointRadius: 6,\n    }\n  ]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    interaction: {\n      mode: 'index',\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => 'Tooltip point style: ' + ctx.chart.options.plugins.tooltip.usePointStyle,\n      },\n      tooltip: {\n        usePointStyle: true,\n      }\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Tooltip \n \n usePointStyle \n \n \n Elements \n \n Point Styles \n \n \n \n"},{title:"Utils",frontmatter:{},regularPath:"/samples/utils.html",relativePath:"samples/utils.md",key:"v-35b265e5",path:"/samples/utils.html",headers:[{level:2,title:"Disclaimer",slug:"disclaimer"},{level:2,title:"Functions",slug:"functions"},{level:2,title:"Components",slug:"components"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Utils \n Disclaimer \n The Utils file contains multiple helper functions that the chart.js sample pages use to generate charts.\nThese functions are subject to change, including but not limited to breaking changes without prior notice. \n Because of this please don't rely on this file in production environments. \n Functions \n import  colorLib  from   '@kurkle/color' ; \n import   { DateTime }   from   'luxon' ; \n import   'chartjs-adapter-luxon' ; \n import   { valueOrDefault }   from   '../../dist/helpers.mjs' ; \n\n // Adapted from http://indiegamr.com/generate-repeatable-random-numbers-in-js/ \n var  _seed  =  Date . now ( ) ; \n\n export   function   srand ( seed )   { \n  _seed  =  seed ; \n } \n\n export   function   rand ( min ,  max )   { \n  min  =   valueOrDefault ( min ,   0 ) ; \n  max  =   valueOrDefault ( max ,   0 ) ; \n  _seed  =   ( _seed  *   9301   +   49297 )   %   233280 ; \n   return  min  +   ( _seed  /   233280 )   *   ( max  -  min ) ; \n } \n\n export   function   numbers ( config )   { \n   var  cfg  =  config  ||   { } ; \n   var  min  =   valueOrDefault ( cfg . min ,   0 ) ; \n   var  max  =   valueOrDefault ( cfg . max ,   100 ) ; \n   var  from  =   valueOrDefault ( cfg . from ,   [ ] ) ; \n   var  count  =   valueOrDefault ( cfg . count ,   8 ) ; \n   var  decimals  =   valueOrDefault ( cfg . decimals ,   8 ) ; \n   var  continuity  =   valueOrDefault ( cfg . continuity ,   1 ) ; \n   var  dfactor  =  Math . pow ( 10 ,  decimals )   ||   0 ; \n   var  data  =   [ ] ; \n   var  i ,  value ; \n\n   for   ( i  =   0 ;  i  <  count ;   ++ i )   { \n    value  =   ( from [ i ]   ||   0 )   +   this . rand ( min ,  max ) ; \n     if   ( this . rand ( )   <=  continuity )   { \n      data . push ( Math . round ( dfactor  *  value )   /  dfactor ) ; \n     }   else   { \n      data . push ( null ) ; \n     } \n   } \n\n   return  data ; \n } \n\n export   function   points ( config )   { \n   const  xs  =   this . numbers ( config ) ; \n   const  ys  =   this . numbers ( config ) ; \n   return  xs . map ( ( x ,  i )   =>   ( { x ,   y :  ys [ i ] } ) ) ; \n } \n\n export   function   bubbles ( config )   { \n   return   this . points ( config ) . map ( pt   =>   { \n    pt . r  =   this . rand ( config . rmin ,  config . rmax ) ; \n     return  pt ; \n   } ) ; \n } \n\n export   function   labels ( config )   { \n   var  cfg  =  config  ||   { } ; \n   var  min  =  cfg . min  ||   0 ; \n   var  max  =  cfg . max  ||   100 ; \n   var  count  =  cfg . count  ||   8 ; \n   var  step  =   ( max  -  min )   /  count ; \n   var  decimals  =  cfg . decimals  ||   8 ; \n   var  dfactor  =  Math . pow ( 10 ,  decimals )   ||   0 ; \n   var  prefix  =  cfg . prefix  ||   '' ; \n   var  values  =   [ ] ; \n   var  i ; \n\n   for   ( i  =  min ;  i  <  max ;  i  +=  step )   { \n    values . push ( prefix  +  Math . round ( dfactor  *  i )   /  dfactor ) ; \n   } \n\n   return  values ; \n } \n\n const   MONTHS   =   [ \n   'January' , \n   'February' , \n   'March' , \n   'April' , \n   'May' , \n   'June' , \n   'July' , \n   'August' , \n   'September' , \n   'October' , \n   'November' , \n   'December' \n ] ; \n\n export   function   months ( config )   { \n   var  cfg  =  config  ||   { } ; \n   var  count  =  cfg . count  ||   12 ; \n   var  section  =  cfg . section ; \n   var  values  =   [ ] ; \n   var  i ,  value ; \n\n   for   ( i  =   0 ;  i  <  count ;   ++ i )   { \n    value  =   MONTHS [ Math . ceil ( i )   %   12 ] ; \n    values . push ( value . substring ( 0 ,  section ) ) ; \n   } \n\n   return  values ; \n } \n\n const   COLORS   =   [ \n   '#4dc9f6' , \n   '#f67019' , \n   '#f53794' , \n   '#537bc4' , \n   '#acc236' , \n   '#166a8f' , \n   '#00a950' , \n   '#58595b' , \n   '#8549ba' \n ] ; \n\n export   function   color ( index )   { \n   return   COLORS [ index  %   COLORS . length ] ; \n } \n\n export   function   transparentize ( value ,  opacity )   { \n   var  alpha  =  opacity  ===   undefined   ?   0.5   :   1   -  opacity ; \n   return   colorLib ( value ) . alpha ( alpha ) . rgbString ( ) ; \n } \n\n export   const   CHART_COLORS   =   { \n   red :   'rgb(255, 99, 132)' , \n   orange :   'rgb(255, 159, 64)' , \n   yellow :   'rgb(255, 205, 86)' , \n   green :   'rgb(75, 192, 192)' , \n   blue :   'rgb(54, 162, 235)' , \n   purple :   'rgb(153, 102, 255)' , \n   grey :   'rgb(201, 203, 207)' \n } ; \n\n const   NAMED_COLORS   =   [ \n   CHART_COLORS . red , \n   CHART_COLORS . orange , \n   CHART_COLORS . yellow , \n   CHART_COLORS . green , \n   CHART_COLORS . blue , \n   CHART_COLORS . purple , \n   CHART_COLORS . grey , \n ] ; \n\n export   function   namedColor ( index )   { \n   return   NAMED_COLORS [ index  %   NAMED_COLORS . length ] ; \n } \n\n export   function   newDate ( days )   { \n   return  DateTime . now ( ) . plus ( { days } ) . toJSDate ( ) ; \n } \n\n export   function   newDateString ( days )   { \n   return  DateTime . now ( ) . plus ( { days } ) . toISO ( ) ; \n } \n\n export   function   parseISODate ( str )   { \n   return  DateTime . fromISO ( str ) ; \n } \n \n File on github \n Components \n Some of the samples make reference to a  components  object. This is an artifact of using a module bundler to build the samples. The creation of that components object is shown below. If chart.js is included as a browser script, these items are accessible via the  Chart  object, i.e  Chart.Tooltip . \n // Add Chart components needed in samples here. \n // Usable through `components[name]`. \n export   { Tooltip }   from   '../../dist/chart.mjs' ; \n \n File on github \n"},{title:"Position",frontmatter:{},regularPath:"/samples/tooltip/position.html",relativePath:"samples/tooltip/position.md",key:"v-31d48fbb",path:"/samples/tooltip/position.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Position \n This sample shows how to use the tooltip position mode setting. \n \nconst actions = [\n  {\n    name: 'Position: average',\n    handler(chart) {\n      chart.options.plugins.tooltip.position = 'average';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: nearest',\n    handler(chart) {\n      chart.options.plugins.tooltip.position = 'nearest';\n      chart.update();\n    }\n  },\n  {\n    name: 'Position: bottom (custom)',\n    handler(chart) {\n      chart.options.plugins.tooltip.position = 'bottom';\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: -100, max: 100};\nconst data = {\n  labels: Utils.months({count: DATA_COUNT}),\n  datasets: [\n    {\n      label: 'Dataset 1',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.red,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    },\n    {\n      label: 'Dataset 2',\n      data: Utils.numbers(NUMBER_CFG),\n      fill: false,\n      borderColor: Utils.CHART_COLORS.blue,\n      backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    },\n  ]\n};\n//  \n\n//  \n// Create a custom tooltip positioner to put at the bottom of the chart area\ncomponents.Tooltip.positioners.bottom = function(items) {\n  const pos = components.Tooltip.positioners.average(items);\n\n  // Happens when nothing is found\n  if (pos === false) {\n    return false;\n  }\n\n  const chart = this.chart;\n\n  return {\n    x: pos.x,\n    y: chart.chartArea.bottom,\n    xAlign: 'center',\n    yAlign: 'bottom',\n  };\n};\n\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    interaction: {\n      intersect: false,\n      mode: 'index',\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: (ctx) => 'Tooltip position mode: ' + ctx.chart.options.plugins.tooltip.position,\n      },\n    }\n  }\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Data structures ( labels ) \n Line \n Tooltip \n \n Position Modes \n Custom Position Modes \n \n \n \n"},{title:"Interface: TooltipCallbacks",frontmatter:{},regularPath:"/api/interfaces/TooltipCallbacks.html",relativePath:"api/interfaces/TooltipCallbacks.md",key:"v-75e164b6",path:"/api/interfaces/TooltipCallbacks.html",headers:[{level:2,title:"Type parameters",slug:"type-parameters"},{level:2,title:"Methods",slug:"methods"},{level:3,title:"afterBody",slug:"afterbody"},{level:3,title:"afterFooter",slug:"afterfooter"},{level:3,title:"afterLabel",slug:"afterlabel"},{level:3,title:"afterTitle",slug:"aftertitle"},{level:3,title:"beforeBody",slug:"beforebody"},{level:3,title:"beforeFooter",slug:"beforefooter"},{level:3,title:"beforeLabel",slug:"beforelabel"},{level:3,title:"beforeTitle",slug:"beforetitle"},{level:3,title:"footer",slug:"footer"},{level:3,title:"label",slug:"label"},{level:3,title:"labelColor",slug:"labelcolor"},{level:3,title:"labelPointStyle",slug:"labelpointstyle"},{level:3,title:"labelTextColor",slug:"labeltextcolor"},{level:3,title:"title",slug:"title"}],content:" Interface: TooltipCallbacks<TType, Model, Item> \n Type parameters \n \n \n \n Name \n Type \n \n \n \n \n TType \n extends  ChartType \n \n \n Model \n TooltipModel < TType > \n \n \n Item \n TooltipItem < TType > \n Methods \n afterBody \n ▸  afterBody ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2564 \n afterFooter \n ▸  afterFooter ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2576 \n afterLabel \n ▸  afterLabel ( tooltipItem ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2568 \n afterTitle \n ▸  afterTitle ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2561 \n beforeBody \n ▸  beforeBody ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2563 \n beforeFooter \n ▸  beforeFooter ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2574 \n beforeLabel \n ▸  beforeLabel ( tooltipItem ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2566 \n beforeTitle \n ▸  beforeTitle ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2559 \n footer \n ▸  footer ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2575 \n label \n ▸  label ( tooltipItem ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2567 \n labelColor \n ▸  labelColor ( tooltipItem ):  TooltipLabelStyle \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n TooltipLabelStyle \n Defined in \n index.esm.d.ts:2570 \n labelPointStyle \n ▸  labelPointStyle ( tooltipItem ):  Object \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n Object \n \n \n \n Name \n Type \n \n \n \n \n pointStyle \n PointStyle \n \n \n rotation \n number \n Defined in \n index.esm.d.ts:2572 \n labelTextColor \n ▸  labelTextColor ( tooltipItem ):  Color \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItem \n Item \n Returns \n Color \n Defined in \n index.esm.d.ts:2571 \n title \n ▸  title ( tooltipItems ):  string  |  string [] \n Parameters \n \n \n \n Name \n Type \n \n \n \n \n tooltipItems \n Item [] \n Returns \n string  |  string [] \n Defined in \n index.esm.d.ts:2560 \n"},{title:"Time Scale - Max Span",frontmatter:{},regularPath:"/samples/scales/time-max-span.html",relativePath:"samples/scales/time-max-span.md",key:"v-2e0fa86a",path:"/samples/scales/time-max-span.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Time Scale - Max Span \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data.forEach(function(dataObj, j) {\n          const newVal = Utils.rand(0, 100);\n\n          if (typeof dataObj === 'object') {\n            dataObj.y = newVal;\n          } else {\n            dataset.data[j] = newVal;\n          }\n        });\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst data = {\n  datasets: [{\n    label: 'Dataset with string point data',\n    backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    borderColor: Utils.CHART_COLORS.red,\n    fill: false,\n    data: [{\n      x: Utils.newDateString(0),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(2),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(4),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(6),\n      y: Utils.rand(0, 100)\n    }],\n  }, {\n    label: 'Dataset with date object point data',\n    backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    borderColor: Utils.CHART_COLORS.blue,\n    fill: false,\n    data: [{\n      x: Utils.newDate(0),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDate(2),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDate(5),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDate(6),\n      y: Utils.rand(0, 100)\n    }]\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    spanGaps: 1000 * 60 * 60 * 24 * 2, // 2 days\n    responsive: true,\n    interaction: {\n      mode: 'nearest',\n    },\n    plugins: {\n      title: {\n        display: true,\n        text: 'Chart.js Time - spanGaps: 172800000 (2 days in ms)'\n      },\n    },\n    scales: {\n      x: {\n        type: 'time',\n        display: true,\n        title: {\n          display: true,\n          text: 'Date'\n        },\n        ticks: {\n          autoSkip: false,\n          maxRotation: 0,\n          major: {\n            enabled: true\n          },\n          // color: function(context) {\n          //   return context.tick && context.tick.major ? '#FF0000' : 'rgba(0,0,0,0.1)';\n          // },\n          font: function(context) {\n            if (context.tick && context.tick.major) {\n              return {\n                weight: 'bold',\n              };\n            }\n          }\n        }\n      },\n      y: {\n        display: true,\n        title: {\n          display: true,\n          text: 'value'\n        }\n      }\n    }\n  },\n};\n//  \n\nmodule.exports = {\n  actions: [],\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n \n spanGaps \n \n \n Time Scale \n \n"},{title:"Time Scale",frontmatter:{},regularPath:"/samples/scales/time-line.html",relativePath:"samples/scales/time-line.md",key:"v-05954049",path:"/samples/scales/time-line.html",headers:[{level:2,title:"Docs",slug:"docs"}],lastUpdated:"8/3/2022, 12:46:38 PM",lastUpdatedTimestamp:1659530798e3,content:" Time Scale \n \nconst actions = [\n  {\n    name: 'Randomize',\n    handler(chart) {\n      chart.data.datasets.forEach(dataset => {\n        dataset.data.forEach(function(dataObj, j) {\n          const newVal = Utils.rand(0, 100);\n\n          if (typeof dataObj === 'object') {\n            dataObj.y = newVal;\n          } else {\n            dataset.data[j] = newVal;\n          }\n        });\n      });\n      chart.update();\n    }\n  },\n];\n//  \n\n//  \nconst DATA_COUNT = 7;\nconst NUMBER_CFG = {count: DATA_COUNT, min: 0, max: 100};\n\nconst data = {\n  labels: [ // Date Objects\n    Utils.newDate(0),\n    Utils.newDate(1),\n    Utils.newDate(2),\n    Utils.newDate(3),\n    Utils.newDate(4),\n    Utils.newDate(5),\n    Utils.newDate(6)\n  ],\n  datasets: [{\n    label: 'My First dataset',\n    backgroundColor: Utils.transparentize(Utils.CHART_COLORS.red, 0.5),\n    borderColor: Utils.CHART_COLORS.red,\n    fill: false,\n    data: Utils.numbers(NUMBER_CFG),\n  }, {\n    label: 'My Second dataset',\n    backgroundColor: Utils.transparentize(Utils.CHART_COLORS.blue, 0.5),\n    borderColor: Utils.CHART_COLORS.blue,\n    fill: false,\n    data: Utils.numbers(NUMBER_CFG),\n  }, {\n    label: 'Dataset with point data',\n    backgroundColor: Utils.transparentize(Utils.CHART_COLORS.green, 0.5),\n    borderColor: Utils.CHART_COLORS.green,\n    fill: false,\n    data: [{\n      x: Utils.newDateString(0),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(5),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(7),\n      y: Utils.rand(0, 100)\n    }, {\n      x: Utils.newDateString(15),\n      y: Utils.rand(0, 100)\n    }],\n  }]\n};\n//  \n\n//  \nconst config = {\n  type: 'line',\n  data: data,\n  options: {\n    plugins: {\n      title: {\n        text: 'Chart.js Time Scale',\n        display: true\n      }\n    },\n    scales: {\n      x: {\n        type: 'time',\n        time: {\n          // Luxon format string\n          tooltipFormat: 'DD T'\n        },\n        title: {\n          display: true,\n          text: 'Date'\n        }\n      },\n      y: {\n        title: {\n          display: true,\n          text: 'value'\n        }\n      }\n    },\n  },\n};\n//  \n\nmodule.exports = {\n  actions: actions,\n  config: config,\n};\n`\"/> #  Docs \n \n Line \n Time Cartesian Axis \n \n"}],themeConfig:{repo:"chartjs/Chart.js",logo:"/favicon.ico",lastUpdated:"Last Updated",searchPlaceholder:"Search...",editLinks:!1,docsDir:"docs",chart:{imports:[["scripts/register.js"],["scripts/utils.js","Utils"],["scripts/helpers.js","helpers"],["scripts/components.js","components"]]},nav:[{text:"Home",link:"/"},{text:"API",link:"/api/"},{text:"Samples",link:"/samples/"},{text:"Ecosystem",ariaLabel:"Community Menu",items:[{text:"Awesome",link:"https://github.com/chartjs/awesome"},{text:"Slack",link:"https://chartjs-slack.herokuapp.com/"},{text:"Stack Overflow",link:"https://stackoverflow.com/questions/tagged/chart.js"}]}],sidebar:{"/api/":{title:"API"},"/samples/":["information",{title:"Bar Charts",children:["bar/border-radius","bar/floating","bar/horizontal","bar/stacked","bar/stacked-groups","bar/vertical"]},{title:"Line Charts",children:["line/interpolation","line/line","line/multi-axis","line/point-styling","line/segments","line/stepped","line/styling"]},{title:"Other charts",children:["other-charts/bubble","other-charts/combo-bar-line","other-charts/doughnut","other-charts/multi-series-pie","other-charts/pie","other-charts/polar-area","other-charts/polar-area-center-labels","other-charts/radar","other-charts/radar-skip-points","other-charts/scatter","other-charts/scatter-multi-axis","other-charts/stacked-bar-line"]},{title:"Area charts",children:["area/line-boundaries","area/line-datasets","area/line-drawtime","area/line-stacked","area/radar"]},{title:"Scales",children:["scales/linear-min-max","scales/linear-min-max-suggested","scales/linear-step-size","scales/log","scales/stacked","scales/time-line","scales/time-max-span","scales/time-combo"]},{title:"Scale Options",children:["scale-options/center","scale-options/grid","scale-options/ticks","scale-options/titles"]},{title:"Legend",children:["legend/events","legend/html","legend/point-style","legend/position","legend/title"]},{title:"Title",children:["title/alignment"]},{title:"Subtitle",children:["subtitle/basic"]},{title:"Tooltip",children:["tooltip/content","tooltip/html","tooltip/interactions","tooltip/point-style","tooltip/position"]},{title:"Scriptable Options",children:["scriptable/bar","scriptable/bubble","scriptable/line","scriptable/pie","scriptable/polar","scriptable/radar"]},{title:"Animations",children:["animations/delay","animations/drop","animations/loop","animations/progressive-line","animations/progressive-line-easing"]},{title:"Advanced",children:["advanced/data-decimation","advanced/derived-axis-type","advanced/derived-chart-type","advanced/linear-gradient","advanced/programmatic-events","advanced/progress-bar","advanced/radial-gradient"]},{title:"Plugins",children:["plugins/chart-area-border","plugins/doughnut-empty-state","plugins/quadrants"]},"utils"],"/":["",{title:"Getting Started",children:["getting-started/","getting-started/installation","getting-started/integration","getting-started/usage","getting-started/v3-migration"]},{title:"General",children:["general/accessibility","general/colors","general/data-structures","general/fonts","general/options","general/padding","general/performance"]},{title:"Configuration",children:["configuration/","configuration/animations","configuration/canvas-background","configuration/decimation","configuration/device-pixel-ratio","configuration/elements","configuration/interactions","configuration/layout","configuration/legend","configuration/locale","configuration/responsive","configuration/subtitle","configuration/title","configuration/tooltip"]},{title:"Chart Types",children:["charts/area","charts/bar","charts/bubble","charts/doughnut","charts/line","charts/mixed","charts/polar","charts/radar","charts/scatter"]},{title:"Axes",children:["axes/",{title:"Cartesian",children:["axes/cartesian/","axes/cartesian/category","axes/cartesian/linear","axes/cartesian/logarithmic","axes/cartesian/time","axes/cartesian/timeseries"]},{title:"Radial",children:["axes/radial/","axes/radial/linear"]},"axes/labelling","axes/styling"]},{title:"Developers",children:["developers/","developers/api","developers/axes","developers/charts","developers/contributing","developers/plugins","developers/publishing",["api/","TypeDoc"],"developers/updates"]}]}}};t(270),t(271);o.a.component("ChartEditor",()=>Promise.all([t.e(0),t.e(3)]).then(t.bind(null,336))),o.a.component("Badge",()=>Promise.all([t.e(0),t.e(5)]).then(t.bind(null,594))),o.a.component("CodeBlock",()=>Promise.all([t.e(0),t.e(6)]).then(t.bind(null,338))),o.a.component("CodeGroup",()=>Promise.all([t.e(0),t.e(7)]).then(t.bind(null,339)));t(272);var nt=t(5);class tt extends nt.d{constructor(e){super(e),this._startValue=void 0,this._valueRange=0}parse(e,n){const t=nt.c.prototype.parse.apply(this,[e,n]);return isFinite(t)&&t>0?t:null}determineDataLimits(){const{min:e,max:n}=this.getMinMax(!0);this.min=isFinite(e)?Math.max(0,e):null,this.max=isFinite(n)?Math.max(0,n):null}buildTicks(){const e=[];let n=Math.floor(Math.log2(this.min||1)),t=Math.ceil(Math.log2(this.max||2));for(;n<=t;)e.push({value:Math.pow(2,n)}),n+=1;return this.min=e[0].value,this.max=e[e.length-1].value,e}configure(){const e=this.min;super.configure(),this._startValue=Math.log2(e),this._valueRange=Math.log2(this.max)-Math.log2(e)}getPixelForValue(e){return void 0!==e&&0!==e||(e=this.min),this.getPixelForDecimal(e===this.min?0:(Math.log2(e)-this._startValue)/this._valueRange)}getValueForPixel(e){const n=this.getDecimalForPixel(e);return Math.pow(2,this._startValue+n*this._valueRange)}}tt.id="log2",tt.defaults={};class at extends nt.a{draw(){super.draw(arguments);var e=this.getMeta().data[0];const{x:n,y:t}=e.getProps(["x","y"]),{radius:a}=e.options;var i=this.chart.ctx;i.save(),i.strokeStyle=this.options.boxStrokeStyle,i.lineWidth=1,i.strokeRect(n-a,t-a,2*a,2*a),i.restore()}}at.id="derivedBubble",at.defaults={boxStrokeStyle:"red"},nt.b.register(at);var it={id:"samples-filler-analyser",beforeInit:function(e,n,t){this.element=document.getElementById(t.target)},afterUpdate:function(e){var n,t,a,i,r=e.data.datasets,o=[];if(this.element){for(t=0,a=r.length;t<a;++t)(n=e.getDatasetMeta(t).$filler)&&(i=r[t],o.push({fill:i.fill,target:n.fill,visible:n.visible,index:t}));this.element.innerHTML="<table><tr><th>Dataset</th><th>Fill</th><th>Target (visibility)</th></tr>"+o.map((function(e){var n=e.target,t="<td><b>"+e.index+"</b></td><td>"+JSON.stringify(e.fill)+"</td>";return n=!1===n?"none":isFinite(n)?"dataset "+n:'boundary "'+n+'"',e.visible?t+="<td>"+n+"</td>":t+="<td>(hidden)</td>","<tr>"+t+"</tr>"})).join("")+"</table>"}}};
/*!
 * @kurkle/color v0.2.1
 * https://github.com/kurkle/color#readme
 * (c) 2022 Jukka Kurkela
 * Released under the MIT License
 */
function rt(e){return e+.5|0}nt.b.register(...nt.g),nt.b.register(tt),nt.b.register(it);const ot=(e,n,t)=>Math.max(Math.min(e,t),n);function st(e){return ot(rt(2.55*e),0,255)}function lt(e){return ot(rt(255*e),0,255)}function dt(e){return ot(rt(e/2.55)/100,0,1)}function ct(e){return ot(rt(100*e),0,100)}const ut={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},ht=[..."0123456789ABCDEF"],pt=e=>ht[15&e],ft=e=>ht[(240&e)>>4]+ht[15&e],mt=e=>(240&e)>>4==(15&e);function gt(e){var n=(e=>mt(e.r)&&mt(e.g)&&mt(e.b)&&mt(e.a))(e)?pt:ft;return e?"#"+n(e.r)+n(e.g)+n(e.b)+((e,n)=>e<255?n(e):"")(e.a,n):void 0}const bt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function vt(e,n,t){const a=n*Math.min(t,1-t),i=(n,i=(n+e/30)%12)=>t-a*Math.max(Math.min(i-3,9-i,1),-1);return[i(0),i(8),i(4)]}function yt(e,n,t){const a=(a,i=(a+e/60)%6)=>t-t*n*Math.max(Math.min(i,4-i,1),0);return[a(5),a(3),a(1)]}function xt(e,n,t){const a=vt(e,1,.5);let i;for(n+t>1&&(i=1/(n+t),n*=i,t*=i),i=0;i<3;i++)a[i]*=1-n-t,a[i]+=n;return a}function Ct(e){const n=e.r/255,t=e.g/255,a=e.b/255,i=Math.max(n,t,a),r=Math.min(n,t,a),o=(i+r)/2;let s,l,d;return i!==r&&(d=i-r,l=o>.5?d/(2-i-r):d/(i+r),s=function(e,n,t,a,i){return e===i?(n-t)/a+(n<t?6:0):n===i?(t-e)/a+2:(e-n)/a+4}(n,t,a,d,i),s=60*s+.5),[0|s,l||0,o]}function Tt(e,n,t,a){return(Array.isArray(n)?e(n[0],n[1],n[2]):e(n,t,a)).map(lt)}function Dt(e,n,t){return Tt(vt,e,n,t)}function wt(e){return(e%360+360)%360}function Ot(e){const n=bt.exec(e);let t,a=255;if(!n)return;n[5]!==t&&(a=n[6]?st(+n[5]):lt(+n[5]));const i=wt(+n[2]),r=+n[3]/100,o=+n[4]/100;return t="hwb"===n[1]?function(e,n,t){return Tt(xt,e,n,t)}(i,r,o):"hsv"===n[1]?function(e,n,t){return Tt(yt,e,n,t)}(i,r,o):Dt(i,r,o),{r:t[0],g:t[1],b:t[2],a:a}}const kt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},St={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Pt;function At(e){Pt||(Pt=function(){const e={},n=Object.keys(St),t=Object.keys(kt);let a,i,r,o,s;for(a=0;a<n.length;a++){for(o=s=n[a],i=0;i<t.length;i++)r=t[i],s=s.replace(r,kt[r]);r=parseInt(St[o],16),e[s]=[r>>16&255,r>>8&255,255&r]}return e}(),Pt.transparent=[0,0,0,0]);const n=Pt[e.toLowerCase()];return n&&{r:n[0],g:n[1],b:n[2],a:4===n.length?n[3]:255}}const Rt=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const It=e=>e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055,_t=e=>e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4);function Lt(e,n,t){if(e){let a=Ct(e);a[n]=Math.max(0,Math.min(a[n]+a[n]*t,0===n?360:1)),a=Dt(a),e.r=a[0],e.g=a[1],e.b=a[2]}}function Et(e,n){return e?Object.assign(n||{},e):e}function Mt(e){var n={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(n={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(n.a=lt(e[3]))):(n=Et(e,{r:0,g:0,b:0,a:1})).a=lt(n.a),n}function jt(e){return"r"===e.charAt(0)?function(e){const n=Rt.exec(e);let t,a,i,r=255;if(n){if(n[7]!==t){const e=+n[7];r=n[8]?st(e):ot(255*e,0,255)}return t=+n[1],a=+n[3],i=+n[5],t=255&(n[2]?st(t):ot(t,0,255)),a=255&(n[4]?st(a):ot(a,0,255)),i=255&(n[6]?st(i):ot(i,0,255)),{r:t,g:a,b:i,a:r}}}(e):Ot(e)}class Ut{constructor(e){if(e instanceof Ut)return e;const n=typeof e;let t;var a,i,r;"object"===n?t=Mt(e):"string"===n&&(r=(a=e).length,"#"===a[0]&&(4===r||5===r?i={r:255&17*ut[a[1]],g:255&17*ut[a[2]],b:255&17*ut[a[3]],a:5===r?17*ut[a[4]]:255}:7!==r&&9!==r||(i={r:ut[a[1]]<<4|ut[a[2]],g:ut[a[3]]<<4|ut[a[4]],b:ut[a[5]]<<4|ut[a[6]],a:9===r?ut[a[7]]<<4|ut[a[8]]:255})),t=i||At(e)||jt(e)),this._rgb=t,this._valid=!!t}get valid(){return this._valid}get rgb(){var e=Et(this._rgb);return e&&(e.a=dt(e.a)),e}set rgb(e){this._rgb=Mt(e)}rgbString(){return this._valid?(e=this._rgb)&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${dt(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`):void 0;var e}hexString(){return this._valid?gt(this._rgb):void 0}hslString(){return this._valid?function(e){if(!e)return;const n=Ct(e),t=n[0],a=ct(n[1]),i=ct(n[2]);return e.a<255?`hsla(${t}, ${a}%, ${i}%, ${dt(e.a)})`:`hsl(${t}, ${a}%, ${i}%)`}(this._rgb):void 0}mix(e,n){if(e){const t=this.rgb,a=e.rgb;let i;const r=n===i?.5:n,o=2*r-1,s=t.a-a.a,l=((o*s==-1?o:(o+s)/(1+o*s))+1)/2;i=1-l,t.r=255&l*t.r+i*a.r+.5,t.g=255&l*t.g+i*a.g+.5,t.b=255&l*t.b+i*a.b+.5,t.a=r*t.a+(1-r)*a.a,this.rgb=t}return this}interpolate(e,n){return e&&(this._rgb=function(e,n,t){const a=_t(dt(e.r)),i=_t(dt(e.g)),r=_t(dt(e.b));return{r:lt(It(a+t*(_t(dt(n.r))-a))),g:lt(It(i+t*(_t(dt(n.g))-i))),b:lt(It(r+t*(_t(dt(n.b))-r))),a:e.a+t*(n.a-e.a)}}(this._rgb,e._rgb,n)),this}clone(){return new Ut(this.rgb)}alpha(e){return this._rgb.a=lt(e),this}clearer(e){return this._rgb.a*=1-e,this}greyscale(){const e=this._rgb,n=rt(.3*e.r+.59*e.g+.11*e.b);return e.r=e.g=e.b=n,this}opaquer(e){return this._rgb.a*=1+e,this}negate(){const e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}lighten(e){return Lt(this._rgb,2,e),this}darken(e){return Lt(this._rgb,2,-e),this}saturate(e){return Lt(this._rgb,1,e),this}desaturate(e){return Lt(this._rgb,1,-e),this}rotate(e){return function(e,n){var t=Ct(e);t[0]=wt(t[0]+n),t=Dt(t),e.r=t[0],e.g=t[1],e.b=t[2]}(this._rgb,e),this}}var Nt=t(8);
/*!
 * chartjs-adapter-luxon v1.1.0
 * https://www.chartjs.org
 * (c) 2021 chartjs-adapter-luxon Contributors
 * Released under the MIT license
 */const Bt={datetime:Nt.DateTime.DATETIME_MED_WITH_SECONDS,millisecond:"h:mm:ss.SSS a",second:Nt.DateTime.TIME_WITH_SECONDS,minute:Nt.DateTime.TIME_SIMPLE,hour:{hour:"numeric"},day:{day:"numeric",month:"short"},week:"DD",month:{month:"short",year:"numeric"},quarter:"'Q'q - yyyy",year:{year:"numeric"}};nt.f._date.override({_id:"luxon",_create:function(e){return Nt.DateTime.fromMillis(e,this.options)},formats:function(){return Bt},parse:function(e,n){const t=this.options;if(null==e)return null;const a=typeof e;return"number"===a?e=this._create(e):"string"===a?e="string"==typeof n?Nt.DateTime.fromFormat(e,n,t):Nt.DateTime.fromISO(e,t):e instanceof Date?e=Nt.DateTime.fromJSDate(e,t):"object"!==a||e instanceof Nt.DateTime||(e=Nt.DateTime.fromObject(e)),e.isValid?e.valueOf():null},format:function(e,n){const t=this._create(e);return"string"==typeof n?t.toFormat(n,this.options):t.toLocaleString(n)},add:function(e,n,t){const a={};return a[t]=n,this._create(e).plus(a).valueOf()},diff:function(e,n,t){return this._create(e).diff(this._create(n)).as(t).valueOf()},startOf:function(e,n,t){if("isoWeek"===n){t=Math.trunc(Math.min(Math.max(0,t),6));const n=this._create(e);return n.minus({days:(n.weekday-t+7)%7}).startOf("day").valueOf()}return n?this._create(e).startOf(n).valueOf():e},endOf:function(e,n){return this._create(e).endOf(n).valueOf()}});var Ft=t(0),zt=Date.now();
/*!
 * Chart.js v3.9.1
 * https://www.chartjs.org
 * (c) 2022 Chart.js Contributors
 * Released under the MIT License
 */function Ht(e){zt=e}function Vt(e,n){return e=Object(Ft.Xb)(e,0),n=Object(Ft.Xb)(n,0),e+(zt=(9301*zt+49297)%233280)/233280*(n-e)}function Wt(e){var n,t,a=e||{},i=Object(Ft.Xb)(a.min,0),r=Object(Ft.Xb)(a.max,100),o=Object(Ft.Xb)(a.from,[]),s=Object(Ft.Xb)(a.count,8),l=Object(Ft.Xb)(a.decimals,8),d=Object(Ft.Xb)(a.continuity,1),c=Math.pow(10,l)||0,u=[];for(n=0;n<s;++n)t=(o[n]||0)+this.rand(i,r),this.rand()<=d?u.push(Math.round(c*t)/c):u.push(null);return u}function Yt(e){const n=this.numbers(e),t=this.numbers(e);return n.map((e,n)=>({x:e,y:t[n]}))}function $t(e){return this.points(e).map(n=>(n.r=this.rand(e.rmin,e.rmax),n))}function Gt(e){var n,t=e||{},a=t.min||0,i=t.max||100,r=(i-a)/(t.count||8),o=t.decimals||8,s=Math.pow(10,o)||0,l=t.prefix||"",d=[];for(n=a;n<i;n+=r)d.push(l+Math.round(s*n)/s);return d}const qt=["January","February","March","April","May","June","July","August","September","October","November","December"];function Xt(e){var n,t,a=e||{},i=a.count||12,r=a.section,o=[];for(n=0;n<i;++n)t=qt[Math.ceil(n)%12],o.push(t.substring(0,r));return o}const Jt=["#4dc9f6","#f67019","#f53794","#537bc4","#acc236","#166a8f","#00a950","#58595b","#8549ba"];function Zt(e){return Jt[e%Jt.length]}function Kt(e,n){var t,a=void 0===n?.5:1-n;return(t=e,new Ut(t)).alpha(a).rgbString()}const Qt={red:"rgb(255, 99, 132)",orange:"rgb(255, 159, 64)",yellow:"rgb(255, 205, 86)",green:"rgb(75, 192, 192)",blue:"rgb(54, 162, 235)",purple:"rgb(153, 102, 255)",grey:"rgb(201, 203, 207)"},ea=[Qt.red,Qt.orange,Qt.yellow,Qt.green,Qt.blue,Qt.purple,Qt.grey];function na(e){return ea[e%ea.length]}function ta(e){return Nt.DateTime.now().plus({days:e}).toJSDate()}function aa(e){return Nt.DateTime.now().plus({days:e}).toISO()}function ia(e){return Nt.DateTime.fromISO(e)}const ra={Utils:a,helpers:i,components:r};o.a.mixin({created(){this.$chart=this.$chart||{},this.$chart.imports=ra}});var oa=t(121),sa=t.n(oa),la=t(68);const da={redirectors:[{base:"/samples",alternative:["information"]}]};var ca=[{},{},({Vue:e})=>{e.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},{},({Vue:e})=>e.use(sa.a),({router:e})=>{var n,t,a,i,r,o;"undefined"!=typeof window&&(n=window,t=document,a="script",i="ga",n.GoogleAnalyticsObject=i,n.ga=n.ga||function(){(n.ga.q=n.ga.q||[]).push(arguments)},n.ga.l=1*new Date,r=t.createElement(a),o=t.getElementsByTagName(a)[0],r.async=1,r.src="https://www.google-analytics.com/analytics.js",o.parentNode.insertBefore(r,o),ga("create","UA-28909194-3","auto"),ga("set","anonymizeIp",!0),e.afterEach((function(n){ga("set","page",e.app.$withBase(n.fullPath)),ga("send","pageview")})))},({router:e,siteData:n})=>{const{routes:t=[]}=e.options,{redirectors:a=[]}=da;function i(e){return t.some(n=>n.path.toLowerCase()===e.toLowerCase())}function r(e){if(i(e))return e;if(!/\/$/.test(e)){const n=e+"/";if(i(n))return n}if(!/\.html$/.test(e)){const n=e.replace(/\/$/,"")+".html";if(i(n))return n}return null}if(da.locales&&n.locales){const e=n.locales,t=Object.keys(e),i=t.map(n=>({key:n.replace(/^\/|\/$/,""),lang:e[n].lang}));"object"!=typeof da.locales&&(da.locales={});const{fallback:r,storage:o=!0}=da.locales;r&&t.unshift(r),a.unshift({storage:o,base:"/",alternative(){if("undefined"!=typeof window&&window.navigator){const e=window.navigator.languages||[window.navigator.language],n=i.find(({lang:n})=>e.includes(n));if(n)return n.key}return t}})}const o=a.map(({base:e="/",storage:n=!1,alternative:t})=>{let a=!1;if(n)if("object"!=typeof n){const t="string"!=typeof n?"vuepress:redirect:"+e:n;a={get:()=>"undefined"==typeof localStorage?null:localStorage.getItem(t),set(e){"undefined"!=typeof localStorage&&localStorage.setItem(t,e)}}}else n.get&&n.set&&(a=n);return{base:e,storage:a,alternative:t}});e.beforeEach((e,n,t)=>{if(r(e.path))return t();let a;for(const n of o){const{base:t="/",storage:i=!1}=n;let{alternative:o}=n;if(!e.path.startsWith(t))continue;const s=e.path.slice(t.length)||"/";if(i){const e=i.get(n);if(e){const n=r(Object(la.join)(t,e,s));if(n){a=n;break}}}if("function"==typeof o&&(o=o(s)),o){"string"==typeof o&&(o=[o]);for(const e of o){const n=r(Object(la.join)(t,e,s));if(n){a=n;break}}if(a)break}}t(a)}),e.afterEach(e=>{if(i(e.path))for(const n of o){const{base:t,storage:a}=n;if(!a||!e.path.startsWith(t))continue;const i=e.path.slice(t.length).split("/")[0];i&&a.set(i,n)}})},({Vue:e})=>{e.component("CodeCopy",En)},({siteData:e,options:n})=>{e.themeConfig.sidebarDepth=0,e.themeConfig.sidebar=Object.assign({},e.themeConfig.sidebar,{"/api/":[{title:"API",children:[["/api/","Exports"],{title:"Enumerations",children:[["enums/DecimationAlgorithm","DecimationAlgorithm"],["enums/UpdateModeEnum","UpdateModeEnum"]]},{title:"Classes",children:[["classes/Animation","Animation"],["classes/Animations","Animations"],["classes/Animator","Animator"],["classes/BasePlatform","BasePlatform"],["classes/BasicPlatform","BasicPlatform"],["classes/Chart","Chart"],["classes/DatasetController","DatasetController"],["classes/DomPlatform","DomPlatform"],["classes/Scale","Scale"]]},{title:"Interfaces",children:[["interfaces/ActiveDataPoint","ActiveDataPoint"],["interfaces/ActiveElement","ActiveElement"],["interfaces/AnimationEvent","AnimationEvent"],["interfaces/ArcBorderRadius","ArcBorderRadius"],["interfaces/ArcElement","ArcElement"],["interfaces/ArcHoverOptions","ArcHoverOptions"],["interfaces/ArcOptions","ArcOptions"],["interfaces/ArcProps","ArcProps"],["interfaces/BarControllerChartOptions","BarControllerChartOptions"],["interfaces/BarControllerDatasetOptions","BarControllerDatasetOptions"],["interfaces/BarElement","BarElement"],["interfaces/BarHoverOptions","BarHoverOptions"],["interfaces/BarOptions","BarOptions"],["interfaces/BarProps","BarProps"],["interfaces/BorderRadius","BorderRadius"],["interfaces/BubbleControllerDatasetOptions","BubbleControllerDatasetOptions"],["interfaces/BubbleDataPoint","BubbleDataPoint"],["interfaces/CartesianScaleOptions","CartesianScaleOptions"],["interfaces/CartesianScaleTypeRegistry","CartesianScaleTypeRegistry"],["interfaces/ChartArea","ChartArea"],["interfaces/ChartComponent","ChartComponent"],["interfaces/ChartConfiguration","ChartConfiguration"],["interfaces/ChartConfigurationCustomTypesPerDataset","ChartConfigurationCustomTypesPerDataset"],["interfaces/ChartData","ChartData"],["interfaces/ChartDataCustomTypesPerDataset","ChartDataCustomTypesPerDataset"],["interfaces/ChartDatasetProperties","ChartDatasetProperties"],["interfaces/ChartDatasetPropertiesCustomTypesPerDataset","ChartDatasetPropertiesCustomTypesPerDataset"],["interfaces/ChartEvent","ChartEvent"],["interfaces/ChartTypeRegistry","ChartTypeRegistry"],["interfaces/CommonElementOptions","CommonElementOptions"],["interfaces/CommonHoverOptions","CommonHoverOptions"],["interfaces/ComplexFillTarget","ComplexFillTarget"],["interfaces/ControllerDatasetOptions","ControllerDatasetOptions"],["interfaces/CoreChartOptions","CoreChartOptions"],["interfaces/CoreInteractionOptions","CoreInteractionOptions"],["interfaces/CoreScaleOptions","CoreScaleOptions"],["interfaces/DatasetControllerChartComponent","DatasetControllerChartComponent"],["interfaces/DateAdapter","DateAdapter"],["interfaces/Defaults","Defaults"],["interfaces/DoughnutAnimationOptions","DoughnutAnimationOptions"],["interfaces/DoughnutController","DoughnutController"],["interfaces/DoughnutControllerChartOptions","DoughnutControllerChartOptions"],["interfaces/DoughnutControllerDatasetOptions","DoughnutControllerDatasetOptions"],["interfaces/DoughnutMetaExtensions","DoughnutMetaExtensions"],["interfaces/Element","Element"],["interfaces/ElementOptionsByType","ElementOptionsByType"],["interfaces/ExtendedPlugin","ExtendedPlugin"],["interfaces/FillerControllerDatasetOptions","FillerControllerDatasetOptions"],["interfaces/FillerOptions","FillerOptions"],["interfaces/FontSpec","FontSpec"],["interfaces/GridLineOptions","GridLineOptions"],["interfaces/InteractionItem","InteractionItem"],["interfaces/InteractionModeMap","InteractionModeMap"],["interfaces/InteractionOptions","InteractionOptions"],["interfaces/LayoutItem","LayoutItem"],["interfaces/LegendElement","LegendElement"],["interfaces/LegendItem","LegendItem"],["interfaces/LegendOptions","LegendOptions"],["interfaces/LineControllerChartOptions","LineControllerChartOptions"],["interfaces/LineControllerDatasetOptions","LineControllerDatasetOptions"],["interfaces/LineElement","LineElement"],["interfaces/LineHoverOptions","LineHoverOptions"],["interfaces/LineOptions","LineOptions"],["interfaces/LineProps","LineProps"],["interfaces/ParsingOptions","ParsingOptions"],["interfaces/Plugin","Plugin"],["interfaces/PluginChartOptions","PluginChartOptions"],["interfaces/PluginOptionsByType","PluginOptionsByType"],["interfaces/Point","Point"],["interfaces/PointElement","PointElement"],["interfaces/PointHoverOptions","PointHoverOptions"],["interfaces/PointOptions","PointOptions"],["interfaces/PointPrefixedHoverOptions","PointPrefixedHoverOptions"],["interfaces/PointPrefixedOptions","PointPrefixedOptions"],["interfaces/PointProps","PointProps"],["interfaces/PolarAreaController","PolarAreaController"],["interfaces/PolarAreaControllerChartOptions","PolarAreaControllerChartOptions"],["interfaces/PolarAreaControllerDatasetOptions","PolarAreaControllerDatasetOptions"],["interfaces/RadarControllerDatasetOptions","RadarControllerDatasetOptions"],["interfaces/RadialLinearScale","RadialLinearScale"],["interfaces/RadialScaleTypeRegistry","RadialScaleTypeRegistry"],["interfaces/Registry","Registry"],["interfaces/ScaleTypeRegistry","ScaleTypeRegistry"],["interfaces/ScatterDataPoint","ScatterDataPoint"],["interfaces/ScriptableCartesianScaleContext","ScriptableCartesianScaleContext"],["interfaces/ScriptableChartContext","ScriptableChartContext"],["interfaces/ScriptableContext","ScriptableContext"],["interfaces/ScriptableLineSegmentContext","ScriptableLineSegmentContext"],["interfaces/ScriptableScaleContext","ScriptableScaleContext"],["interfaces/ScriptableScalePointLabelContext","ScriptableScalePointLabelContext"],["interfaces/ScriptableTooltipContext","ScriptableTooltipContext"],["interfaces/Segment","Segment"],["interfaces/Tick","Tick"],["interfaces/TickOptions","TickOptions"],["interfaces/TimeScale","TimeScale"],["interfaces/TitleOptions","TitleOptions"],["interfaces/Tooltip","Tooltip"],["interfaces/TooltipCallbacks","TooltipCallbacks"],["interfaces/TooltipItem","TooltipItem"],["interfaces/TooltipLabelStyle","TooltipLabelStyle"],["interfaces/TooltipModel","TooltipModel"],["interfaces/TooltipOptions","TooltipOptions"],["interfaces/TooltipPosition","TooltipPosition"],["interfaces/TooltipPositionerMap","TooltipPositionerMap"],["interfaces/TypedRegistry","TypedRegistry"],["interfaces/VisualElement","VisualElement"]]}],initialOpenGroupIndex:-1,collapsable:!1}]})}],ua=[];class ha extends class{constructor(){this.store=new o.a({data:{state:{}}})}$get(e){return this.store.state[e]}$set(e,n){o.a.set(this.store.state,e,n)}$emit(...e){this.store.$emit(...e)}$on(...e){this.store.$on(...e)}}{}Object.assign(ha.prototype,{getPageAsyncComponent:hn,getLayoutAsyncComponent:pn,getAsyncComponent:fn,getVueComponent:mn});var pa={install(e){const n=new ha;e.$vuepress=n,e.prototype.$vuepress=n}};function fa(e,n){const t=n.toLowerCase();return e.options.routes.some(e=>e.path.toLowerCase()===t)}var ma={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(e){const n=this.pageKey||this.$parent.$page.key;return bn("pageKey",n),o.a.component(n)||o.a.component(n,hn(n)),o.a.component(n)?e(n):e("")}},ba={functional:!0,props:{slotKey:String,required:!0},render:(e,{props:n,slots:t})=>e("div",{class:["content__"+n.slotKey]},t()[n.slotKey])},va={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},ya=(t(273),t(274),Object(Ln.a)(va,(function(){var e=this.$createElement,n=this._self._c||e;return n("span",[n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),n("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),xa={functional:!0,render(e,{parent:n,children:t}){if(n._isMounted)return t;n.$once("hook:mounted",()=>{n.$forceUpdate()})}};o.a.config.productionTip=!1,o.a.use(Je),o.a.use(pa),o.a.mixin(function(e,n,t=o.a){!function(e){e.locales&&Object.keys(e.locales).forEach(n=>{e.locales[n].path=n});Object.freeze(e)}(n),t.$vuepress.$set("siteData",n);const a=new(e(t.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(a)),r={};return Object.keys(i).reduce((e,n)=>(n.startsWith("$")&&(e[n]=i[n].get),e),r),{computed:r}}(e=>class{setPage(e){this.__page=e}get $site(){return e}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:e={}}=this.$site;let n,t;for(const a in e)"/"===a?t=e[a]:0===this.$page.path.indexOf(a)&&(n=e[a]);return n||t||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:e}=this.$page.frontmatter;return"string"==typeof e&&e}get $title(){const e=this.$page,{metaTitle:n}=this.$page.frontmatter;if("string"==typeof n)return n;const t=this.$siteTitle,a=e.frontmatter.home?null:e.frontmatter.title||e.title;return t?a?a+" | "+t:t:a||"VuePress"}get $description(){const e=function(e){if(e){const n=e.filter(e=>"description"===e.name)[0];if(n)return n.content}}(this.$page.frontmatter.meta);return e||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(e,n){for(let t=0;t<e.length;t++){const a=e[t];if(a.path.toLowerCase()===n.toLowerCase())return a}return{path:"",frontmatter:{}}}(this.$site.pages,this.$route.path)}},et)),o.a.component("Content",ma),o.a.component("ContentSlotsDistributor",ba),o.a.component("OutboundLink",ya),o.a.component("ClientOnly",xa),o.a.component("Layout",pn("Layout")),o.a.component("NotFound",pn("NotFound")),o.a.prototype.$withBase=function(e){const n=this.$site.base;return"/"===e.charAt(0)?n+e.slice(1):e},window.__VUEPRESS__={version:"1.8.3",hash:"5ea4b3a"},async function(e){const n="undefined"!=typeof window&&window.__VUEPRESS_ROUTER_BASE__?window.__VUEPRESS_ROUTER_BASE__:et.routerBase||et.base,t=new Je({base:n,mode:"history",fallback:!1,routes:Qn,scrollBehavior:(e,n,t)=>t||(e.hash?!o.a.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(e.hash)}:{x:0,y:0})});!function(e){e.beforeEach((n,t,a)=>{if(fa(e,n.path))a();else if(/(\/|\.html)$/.test(n.path))if(/\/$/.test(n.path)){const t=n.path.replace(/\/$/,"")+".html";fa(e,t)?a(t):a()}else a();else{const t=n.path+"/",i=n.path+".html";fa(e,i)?a(i):fa(e,t)?a(t):a()}})}(t);const a={};try{await Promise.all(ca.filter(e=>"function"==typeof e).map(n=>n({Vue:o.a,options:a,router:t,siteData:et,isServer:e})))}catch(e){console.error(e)}return{app:new o.a(Object.assign(a,{router:t,render:e=>e("div",{attrs:{id:"app"}},[e("RouterView",{ref:"layout"}),e("div",{class:"global-ui"},ua.map(n=>e(n)))])})),router:t}}(!1).then(({app:e,router:n})=>{n.onReady(()=>{e.$mount("#app")})})}]);

Youez - 2016 - github.com/yon3zu
LinuXploit