From f0a62017b44e178968065ad8c4ab30cfef03362b Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Thu, 24 Feb 2022 21:30:52 +0100 Subject: [PATCH 01/13] set up basic fetches and printed to page --- code/index.html | 5 ++++ code/script.js | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ code/style.css | 35 +++++++++++++++++++++++- 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/code/index.html b/code/index.html index 2fb5e0ae..50a3a5ab 100644 --- a/code/index.html +++ b/code/index.html @@ -8,8 +8,13 @@ +

GitHub Tracker

+

Projects:

+ +
+
diff --git a/code/script.js b/code/script.js index e69de29b..f5d1523a 100644 --- a/code/script.js +++ b/code/script.js @@ -0,0 +1,71 @@ + +//DOM selectors + +const myProjects = document.getElementById('projects') +const userInfo = document.getElementById('user-info') + +// ### What to include + +// - A list of all repos that are forked ones from Technigo +// - Your username and profile picture +// - Most recent update (push) for each repo +// - Name of your default branch for each repo +// - URL to the actual GitHub repo +// - Number of commit messages for each repo +// - All pull requests +// - A chart of how many projects you've done so far, compared to how many you will do + + +const username = 'Dorothea-B' +const API_URL_USER = `https://api.github.com/users/${username}` +const API_URL = `https://api.github.com/users/${username}/repos` +//const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` +//PR is for Pull Requests - not Projects! + +let reponame + +fetch(API_URL_USER) + .then(res => res.json()) + .then(data => { + console.log(data) + //User info + userInfo.innerHTML += + `${data.name}` + }) + +fetch(API_URL) + .then(res => res.json()) + .then(data => { + console.log(data) + + //HERE STARTS THE PROJECTS + for (let i = 0; i < data.length; i++) + + myProjects.innerHTML += + `
+
${data[i].name}
+
${data[i].git_url}
+ +
` + + + reponame = data[4].name + //Later have to make a loop for this + + // console.log(data[5].name) + // console.log(reponame) + + const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` + + fetch(API_URL_PR) + .then(res => res.json()) + + .then(data => { + console.log(data) + }) + + }) + + + \ No newline at end of file diff --git a/code/style.css b/code/style.css index 7c8ad447..6a72be2b 100644 --- a/code/style.css +++ b/code/style.css @@ -1,3 +1,36 @@ body { background: #FFECE9; -} \ No newline at end of file +} +.userName { + font-size: 3rem; +} + +.userPicture { + width: 200px; + border-radius: 60px; +} + +#projects { + display: flex; + flex-direction: column; + background-color: cornsilk; +} + +.project { + flex: 1; + margin: 1rem; + padding: 1rem; + background-color: cadetblue; + +} +.repoName { +font-size: 1.5rem; +text-align: center; +} + +.repoUrl { + +color: rgb(255, 94, 0); + +} + From 279388a57dbb796b65634a26581ab17746b24b6a Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Thu, 24 Feb 2022 23:32:23 +0100 Subject: [PATCH 02/13] I have no idea what I've done. --- code/script.js | 91 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 18 deletions(-) diff --git a/code/script.js b/code/script.js index f5d1523a..df7de911 100644 --- a/code/script.js +++ b/code/script.js @@ -18,54 +18,109 @@ const userInfo = document.getElementById('user-info') const username = 'Dorothea-B' const API_URL_USER = `https://api.github.com/users/${username}` -const API_URL = `https://api.github.com/users/${username}/repos` +const API_URL_REPO = `https://api.github.com/users/${username}/repos` //const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` //PR is for Pull Requests - not Projects! let reponame +//User info + fetch(API_URL_USER) .then(res => res.json()) .then(data => { console.log(data) - //User info userInfo.innerHTML += `${data.name}` }) -fetch(API_URL) +//HERE STARTS THE PROJECTS + +fetch(API_URL_REPO) .then(res => res.json()) .then(data => { console.log(data) - //HERE STARTS THE PROJECTS for (let i = 0; i < data.length; i++) myProjects.innerHTML += `
-
${data[i].name}
-
${data[i].git_url}
- +
Name: ${data[i].name}
+ Repo url +
Default branch: ${data[i].default_branch}
` + - reponame = data[4].name - //Later have to make a loop for this + + + + const fetchCommits = () => { + + data.forEach((repo) => { + reponame = repo.name + }) + } + fetchCommits(data) + + + const API_REPO_COMMITS = `https://api.github.com/repos/${username}/${data.name}/commits` + + + fetch(API_REPO_COMMITS) + .then(res => res.json()) + + .then(data => { + console.log(data) + + + //for (let y = 0; y < data.length; y++) + + //console.log("Num of commits:", data[y].commit) - // console.log(data[5].name) - // console.log(reponame) + myProjects.innerHTML += - const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` + `
'Latest commit: ', data[0].commit.message, " ", 'Total commits:', data.length
- fetch(API_URL_PR) - .then(res => res.json()) +
Commits: ${data.length}
+ ` + }) + + + + + console.log('Name of repo:', reponame) + + + // const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls?per_page=200` + + // fetch(API_URL_PR) + // .then(res => res.json()) - .then(data => { - console.log(data) - }) + // .then(data => { + // console.log(data) + + // // filter pull requests + + + // }) }) - \ No newline at end of file + // for (let y = 0; y < data.length; y++) + + // reponame = data[y].name + + // console.log('Reponame:', reponame) + // //Later have to make a loop for this + + + + // data.forEach((repo) => { + // reponame = repo.name + // }) + + // console.log(reponame) + //Later have to make a loop for this \ No newline at end of file From 0bf55777165f42694cbb8f1122e82702910c7e8d Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Fri, 25 Feb 2022 16:19:13 +0100 Subject: [PATCH 03/13] added all api-fetch-functionality --- .gitignore | 1 + code/.DS_Store | Bin 0 -> 6148 bytes code/PR.js | 19 +++ code/assets/GitHub-Mark-64px.png | Bin 0 -> 2625 bytes code/assets/GitHub-Mark-Light-64px.png | Bin 0 -> 2330 bytes code/index.html | 12 +- code/script.js | 192 +++++++++++++++++++------ code/style.css | 101 +++++++++++-- 8 files changed, 267 insertions(+), 58 deletions(-) create mode 100644 .gitignore create mode 100644 code/.DS_Store create mode 100644 code/PR.js create mode 100644 code/assets/GitHub-Mark-64px.png create mode 100644 code/assets/GitHub-Mark-Light-64px.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c80900c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +code/secret.js \ No newline at end of file diff --git a/code/.DS_Store b/code/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7dc0d5f920a802bf962597df9fbd69598e584a50 GIT binary patch literal 6148 zcmeHKOHRWu5S@VvMPkz>OJAWk2vs;iF94;8E*hnxu(x`l9)g3g;UK){8IS^&kXWFC zW-9xQJ)bx)s_hXGojSAm!EU=!|Gd~?fOsgbd29F))Wi`1HnKr@G}N* zW>cDT!{~#7U?3RyV1WBWLL;`0*|2OK=t>Cyug9}CphNnFvmvu^zJvqgB2Wm4 KE*SU)2HpT9r7n~J literal 0 HcmV?d00001 diff --git a/code/PR.js b/code/PR.js new file mode 100644 index 00000000..c1dae8a9 --- /dev/null +++ b/code/PR.js @@ -0,0 +1,19 @@ +//INFO FOR EACH PROJECT's PULL REQUESTS +const username = 'Dorothea-B' + + + +const API_URL_PR = `https://api.github.com/repos/Technigo/project-news-site/pulls?per_page=200` + +fetch(API_URL_PR) +.then(res => res.json()) + +.then(pullreqdata => { + + console.log(pullreqdata) + + // filter pull requests + //const filteredPullrequests = pullreqdata.list.filter(item => item.xtextx.includes(${username})) + +}) + diff --git a/code/assets/GitHub-Mark-64px.png b/code/assets/GitHub-Mark-64px.png new file mode 100644 index 0000000000000000000000000000000000000000..182a1a3f734fc1b7d712c68b04c29bad9460d6cd GIT binary patch literal 2625 zcmaJ@dpuNWA3rl=+=}acf|9E@P=bZCA&+qg7et*|Lo`cMQ4SL!u zv;hFnqx;f=RIA70r>U;`S924)Rm*a*H%lB0$B2{JLJ07ThNB>m&SUR{f*^KuO5#1p z6#!6H+z^(S#qg(aU>=seh`~yD0u>toT-_xCHYXkugHg~ylAk{k$56lW5JxEB2QU{v0O z(J_=Dn$JgHsuL9xD;5hVI9zgaGB()}3k!GR2xKyOQG-ZyP$3*dDSRx+6H zxzS&ah4w`*P8AGpv9Q5%s{48!i53cI)dGsN^YTkva!Csa-!~y{IALumC5XsY* z;oO9fP-D5HNp6GjVXS9_c1V2u^I_zB1-k6a`@n;|eN2-wq}`FLV<<0w=RlfKU9(3Z z?Vv$*-_m{)R9A=k2=5$JrJ5 zd(x-6(zYwCSQA3wWMBj;Lem(jL~x}3pjUMga+Tt=q9Zf4cjQq+R^GwOxB}onmdyq9 zYa}1po)-)mjV-^ZRfS$nm0JP%%2J6zkxp^p8J$PEwHnnPw39eZX}|bwVDI+Gee`@Y zbah4{SeoLiGPW@75vPCvM=#55zb)v1eNE+tfD*T%9$`a#UqDqP6flo7k-aV>IQ3KL z?3H`(H3`?q)i9}4YoPsfZeLPwKtG(KQ-oT2jcN(B%hrz*1V7UCp6GY!F4e!okh(0O znQ=jWE*4#p8`djsr?kI5jXKJRYt>(U){i0emy7~ePChu6oUwefQNQixI-(=d{P1%3 zhx=v2`Ry0lVKW&Jksh#X2ZBp#{a!;N+otQU!S}lvS5Tvvl5Ubd2b5Jj5-;BoY_WOF z_XCPI9rvwO_zYof?DOK%D7k0_M-eMq1#4^uYW@wUg*5e?z1mhW|GkISQ*)gK!lPx| zhZQN7o3b?xTTW$o)&y=wPN6(!-WiNpD#qR}nK9og7lxJS9YRlhEp9)yU^-uiJhow- z`8UtZ449xibZb6f>W1(}6}*;8Q}D4jvc47_zV#=gHPpIg&^BV=sY7Dmal^rQ{Rb1n zUwQSwn=K>Hdns)-UfJcmNaEkVZt&=3p#x^9uRr~)MJC(+R7*|u#l#|6Oe!OSxM_Eu zmB;$9eNW8?oI@Ao1juH&%}d;U z?#98zrD2Iola(vNeqXDEj5{li7yeqImbZr^`ax#dw1QXei_~7G_g(WFx2Du3&m=l? z7h;1<#irByqG9b@3u(qlI+?8(e{@D`x>QxAscV^@j}^G0H9KoHh*`OVvLl5^wL?J< z7)$I5W&Q|c2#?m>)|0U<*(h6S(odPBl0+QpHsP-r8hDCI;Xy;ZB-GTjC{Lh z)^{?@)XZUvU2)|rYeZga0RK+{;)>14TJ^#VgLD29(mB!`H~7S*Fw{zJ%hPczWn=cg z8jH%4)vX%o*KhVWOn7IlqI@$mJZW&H8;wZubZI_Uwrk`&rADaRwb@W?@%Lq;XVYdZ zzbfh08?cyaez+qbJi_UZNiw(*%k&9+amj>L{ED$OWuQs3t3SxwFrj;;X7JtUOggr3 z9_gyPyNb>f4!Q6KY~O5*EcJ8lx!Eo+mu1XJ+Yaf*g#ElRyLa`VS#Nr;#Tl#HQCW>m z{&_c0soAKyl5Hh_n6KLo+?X66U)GDrzLZ!MuKsS1=~Z-jmeYyn9r@L5{%zdITF>DU zc(z0NN5gMd71f1LPTcD_?PI}M(r1raF|bl_rTXz3>u}j*j^Bmd){0~OhHAcdT%96T zl^I$j>vYCuJ?O7Db;K6G{^kavEh#naE`IOB!FIb6?Rl2b>{14>p?RueVYk~ro9y;T zIrcx#*ZIGkiL#&hR%UZ~U8&hb7!h+vGUz&Kgw@+NpF@^rzAM$3da`Mn#XcKJdEb+n z%Ja~1JE|B-plr+1ckkS)J%8tndxzxYNf*b|;HiBz2ekdat!a4bi8!V6uKj*dC6Dra z#ewE=I4u9YXWc$ zFQ)EwjtXc}@pjCV#OF{`{F&M=E0)#J@Tkkfv83XA7q4{3`Po^?`^#!I#t(`mS z?yFbdpa!*s0@tn$0{aDCQgU)Bq;savHLt4{2qzE7+ W4I>>0bz>}E>ge79vbNS=9n;FC~MOYyq z5Qu5ON?Ne?^wWKYaP5AUm;6k7ER@nCq#?pMX&OrmLdYE9CJ-6GXT^iTAd9m(`4;E} zfy}Yzg+@pt0@sk(LOz-_L`>RbTB#+~b3MT|& z14UGj%UhW)21C+=LfPqwY$6Bc>x1-?k+cr@pp=D_@sk7+lFS?R)h|hV*O@UW6`Ai_H`049j)JozV)4d8r`BUo7M!zgCCD`;G!S0dV&q zp8LL%~Ba#6Eg$iKtZe$N47EeRXa5>+}e1_})f4LZ~7>us9|I_MOlXiY|*KdQX zeS8~zP@tW6v39VXfr*USwp~rS`=B$j`)nk?@}kq(ClF4d>YOz8hkr;=W~kkm zCW7a<(pcz5X#A0R<9Z{E*BfJ?`u2(tHC?l!+(h-PRUM^q=-1CbjbNI^81U7VyU;3( zT2f^?#ma%q8;EN&iz|Pk@=)pdaMq3d25mbDNrIP#bi|hqP`3*fT}kuvR+%ng#;F!o z!3#SBB2F;iNzfJ(L`*fNFT`NdGQiAH|Ej|Hc2f5bF>p2ufwkUZTFe}(dJ$`MX;C(0 z-V{r-E2m(c5BI}drL(~k6SEswne#fEUdvi&3FiZh%N)80&$C_2kh}Zs$!WSMT5)2L z->t!4_PuW(@0iMUf!tM3EXsxR=8aqQJS!tI77vxXD$Q$NZ1vCFp)TCJPPKgJ6$dq6 z6AvwIT>T_kTfhs9Ro&hblgcP`#)4Y!f6RfcKKz5}fFeLswhx__Ru z`f>qsFw=AMC$D2)!n`KC&FVyxLH=oq<|UuIL`hLk2jvOa!Qq_R3CqNXSp|NlZhBlh z@V0BxvHNAmtK__)^rv^SNw9j3M7}#zg*ToWtbKT~2{x#g2)k9TC|R>Dzhq!T-pA~R z>ZL3u2sdInHHePlU?n!;#-16SNWGJd=j+gQ4vI}N_YbJpa3kc$Q-$nCw8DusXXMl4 z*nJS|qzj=rNJpZI; z$vRbg>YS|lmxjj--{P0zyGBQ?yoS4%MX$EkOMqE$O+Pm%_1o-3WM-q=b4f2dQfTt> zOFR@zTq!4JBAQzKEZEFs#YOE+WUR@=e`!;~PCh-+ddeAuP%>I*Cd8Cb%!1YNZFKDIJTra-- zG#+}%TS;ZSZaqDK8^0CL=AU{B|LU>Hu0mU~}a9D5U= zlszxG=SokFC;8liaQHBlh z2BUO}iYG`REj!%$Xj-syeaVfwq3hF5*L>e!Jm^2?Jo?@}>G*`TrXZHmap&CnfJ4u^ zk68!bvsByruv+!zzl{#!R8}8y9^Ra-sENMbl68A9w_o}?z5eO*E&If08t#Rq+K#s{ zb}mq^_${jVjmeHhTXNWUoFMIe)lJ26`vXz zWvk~HR@whs?OF8cKV8YyEs1et|A`i*;GS`_+RH=ns17TKJg|lJv;Y(H<+2}hIXsat z5ANw;3-!HT?J@e?t>VkCV$sSaXTfoVh-!;h=kN@TPi^X~Dlo@yIP4fl2 z#pt2|1Jj>Ov$71^ei~h1H$uM|R6wY=ZG3Q99U>X|mV`BoS9`4vYw~J@(FazM_8hI9o-&aIo@yE| z6xi92RAt7!kM;6HVQV)mjXu!6Snn}L!YlYRm7CF)XL~-WsBd9Uk6GUDFm8S4@oR}s z!f_@&&0G2FHTy?nQd8F&@&}*SrC)xRgU!h6eepUXk}}=;?q@wX1aZ#AJc}avS@*XR MKo6o-Qerdz3wwRZj{pDw literal 0 HcmV?d00001 diff --git a/code/index.html b/code/index.html index 50a3a5ab..3b639755 100644 --- a/code/index.html +++ b/code/index.html @@ -4,18 +4,24 @@ - Project GitHub Tracker + Dorothea's GitHub Tracker + + + + +

GitHub Tracker

-

Projects:

+
- +

Projects:

+
diff --git a/code/script.js b/code/script.js index df7de911..0a9eb34f 100644 --- a/code/script.js +++ b/code/script.js @@ -3,111 +3,209 @@ const myProjects = document.getElementById('projects') const userInfo = document.getElementById('user-info') +const body = document.getElementById('body') // ### What to include -// - A list of all repos that are forked ones from Technigo -// - Your username and profile picture -// - Most recent update (push) for each repo -// - Name of your default branch for each repo -// - URL to the actual GitHub repo -// - Number of commit messages for each repo -// - All pull requests // - A chart of how many projects you've done so far, compared to how many you will do const username = 'Dorothea-B' const API_URL_USER = `https://api.github.com/users/${username}` const API_URL_REPO = `https://api.github.com/users/${username}/repos` +let reponame + + +const options = { + method: 'GET', + headers: { + Authorization: `token ${API_TOKEN}` // you need to paste your token over here. + } + } + //const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` -//PR is for Pull Requests - not Projects! -let reponame -//User info -fetch(API_URL_USER) + +//--------------------------------------USER INFO +fetch(API_URL_USER, options) .then(res => res.json()) .then(data => { - console.log(data) + console.log('User info:', data) userInfo.innerHTML += - `${data.name}` + ` +
${username}
` }) -//HERE STARTS THE PROJECTS -fetch(API_URL_REPO) +//---------------------------------HERE STARTS THE PROJECTS + +fetch(API_URL_REPO, options) .then(res => res.json()) .then(data => { - console.log(data) + console.log('All repos:', data) + + + //-------filter out only technigo projects + + const myTechnigoRepos = data.filter(repo => repo.name.includes('project-')); + console.log('Filtered:', myTechnigoRepos) + + + + //------function that generates projects html + const printProjects = (data) => { + + //for (let i = 0; i < data.length; i++) + myTechnigoRepos.forEach(repo => { - for (let i = 0; i < data.length; i++) myProjects.innerHTML += `
-
Name: ${data[i].name}
- Repo url -
Default branch: ${data[i].default_branch}
+
${repo.name}
+ + +
Default branch: ${repo.default_branch}
+
Updated: ${new Date(repo.updated_at).toLocaleDateString('en-GB', {year: 'numeric', month: 'long', day: 'numeric'})}
+
Latest push:
+
Commits:
+
Pull requests: Loading...
+
` + }) + } + //------invoking the print function with only filtered repos + printProjects(myTechnigoRepos) + - - - + //------------------PRINTING EACH REPO WITH DYNAMIC ID------------- - const fetchCommits = () => { + myTechnigoRepos.forEach(repo => { - data.forEach((repo) => { - reponame = repo.name - }) - } - fetchCommits(data) + // body.innerHTML += ` + //
+ //

${repo.name}

- const API_REPO_COMMITS = `https://api.github.com/repos/${username}/${data.name}/commits` - + //
+ // ` + console.log('for each repo name:', repo.name) + + + - fetch(API_REPO_COMMITS) + //-------------FETCHING EACH PROJECT's COMMITS + + + const API_REPO_COMMITS = `https://api.github.com/repos/${username}/${repo.name}/commits` + + + fetch(API_REPO_COMMITS, options) .then(res => res.json()) .then(data => { - console.log(data) + console.log('Repo commits:', data) //for (let y = 0; y < data.length; y++) //console.log("Num of commits:", data[y].commit) + document.getElementById(`num-commits-${repo.name}`).innerHTML = `Total commits: ${data.length}` + document.getElementById(`latest-${repo.name}`).innerHTML = `Latest push: ${data[0].commit.message}` - myProjects.innerHTML += - `
'Latest commit: ', data[0].commit.message, " ", 'Total commits:', data.length
+ // body.innerHTML += ` + //
+ //
'Latest commit: ', ${data[0].commit.message}
-
Commits: ${data.length}
- ` + //
Total commits: ${data.length}
+ //
+ + // ` }) + //-------------FETCHING EACH PROJECT's PULL REQUESTS + + const API_PULL_REQS = `https://api.github.com/repos/Technigo/${repo.name}/pulls?per_page=200` + + fetch(API_PULL_REQS, options) + .then(res => res.json()) + + .then(pulls => { + //console.log(pulls) + //--------------Filter to only my pulls + //const myTechnigoPulls = pulls.filter(pull => pull.user.login === repo.owner.login) + pulls.forEach(pull => { - - console.log('Name of repo:', reponame) + if(pull.user.login === username ) { + //console.log('filtered pullrequests:', pull) + document.getElementById(`pull-req-${repo.name}`).innerHTML = `Pull requests: ${pull.html_url}` - // const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls?per_page=200` + + } + // else { + // console.log('no pulls') + // document.getElementById(`pull-req-${repo.name}`).innerHTML = `Pull requestz: 0` + + // } - // fetch(API_URL_PR) - // .then(res => res.json()) + } ) - // .then(data => { - // console.log(data) + + + //pull.name.includes('project-')); + + //if(myTechnigoPulls === '') + + + + }) - // // filter pull requests - // }) + }) + + + + }) + + + + + + + + + + + + + + + + + + + + //data.forEach((repo) => {reponame = repo.name}) + // reponame = data[2].name + // const fetchCommits = () => { + + // data.forEach((repo) => { + // reponame = repo.name + // }) + // } + // fetchCommits(data) + + + // for (let y = 0; y < data.length; y++) diff --git a/code/style.css b/code/style.css index 6a72be2b..0f87d431 100644 --- a/code/style.css +++ b/code/style.css @@ -1,31 +1,88 @@ body { background: #FFECE9; + font-family: 'Miriam Libre', sans-serif; + +} + +header { + background: linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, rgb(248, 175, 19) 100%); + display: flex; + align-items: center; + flex-direction: column; + font-family: 'Urbanist', sans-serif; + +} +h1 { + flex: 1; + color: antiquewhite; +} + +h2 { + flex: 1; + text-align: center; + font-family: 'Urbanist', sans-serif; + font-weight: 500; + color: rgb(157, 82, 172); +} + +/* unvisited link */ +a:link { + color: rgb(201, 113, 55); +} + +/* visited link */ +a:visited { + color: rgb(82, 96, 121); +} + +/* mouse over link */ +a:hover { + color: rgb(224, 53, 139); + cursor: cell; +} + +/* selected link */ +a:active { + color: rgb(224, 53, 139); } -.userName { - font-size: 3rem; + +#user-info { + flex: 1; + text-align: center; + font-size: 2.5rem; + font-weight: 700; + color: rgb(138, 37, 121); + + } + .userPicture { width: 200px; - border-radius: 60px; + border-radius: 100px; } #projects { display: flex; flex-direction: column; - background-color: cornsilk; + /* background-color: cornsilk; */ + align-items: center; } .project { - flex: 1; + min-width: 500px; + max-width: 900px; margin: 1rem; padding: 1rem; - background-color: cadetblue; + border-radius: 3px; + background: rgb(255,255,255); + background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(220,220,245,1) 35%, rgba(255,223,206,1) 100%); + box-shadow: 10px 10px 2px 1px rgba(48, 48, 57, 0.089); } .repoName { -font-size: 1.5rem; -text-align: center; +font-size: 1.3rem; +padding-bottom: 1rem; } .repoUrl { @@ -34,3 +91,31 @@ color: rgb(255, 94, 0); } +.giticon { + width: 20px; +} + +@media (min-width:340px) and (max-width:1038px) { + + .project { + width: 90%; + +} + +} +@media (min-width:1039px) and (max-width:1800px) { + + #projects { + flex-direction: row; + flex-wrap: wrap; + gap: 1rem; + + + } + + .project { + min-width: 43%; + max-width: 44%; +} + +} \ No newline at end of file From 26de968ad72538d17ba67c7783715941387526ec Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Fri, 25 Feb 2022 18:48:02 +0100 Subject: [PATCH 04/13] adding chart --- code/chart.js | 91 + code/index.html | 3 +- code/script.js | 34 +- code/style.css | 7 + node_modules/.package-lock.json | 12 + node_modules/chart.js/LICENSE.md | 9 + node_modules/chart.js/README.md | 38 + node_modules/chart.js/auto/auto.esm.d.ts | 4 + node_modules/chart.js/auto/auto.esm.js | 5 + node_modules/chart.js/auto/auto.js | 1 + node_modules/chart.js/auto/package.json | 8 + node_modules/chart.js/dist/chart.esm.js | 10627 +++++++++++++ node_modules/chart.js/dist/chart.js | 13269 ++++++++++++++++ node_modules/chart.js/dist/chart.min.js | 13 + .../chart.js/dist/chunks/helpers.segment.js | 2503 +++ node_modules/chart.js/dist/helpers.esm.js | 7 + .../chart.js/helpers/helpers.esm.d.ts | 1 + node_modules/chart.js/helpers/helpers.esm.js | 1 + node_modules/chart.js/helpers/helpers.js | 1 + node_modules/chart.js/helpers/package.json | 8 + node_modules/chart.js/package.json | 111 + node_modules/chart.js/types/adapters.d.ts | 63 + node_modules/chart.js/types/animation.d.ts | 33 + node_modules/chart.js/types/basic.d.ts | 3 + node_modules/chart.js/types/color.d.ts | 1 + node_modules/chart.js/types/element.d.ts | 17 + node_modules/chart.js/types/geometric.d.ts | 37 + .../types/helpers/helpers.canvas.d.ts | 101 + .../types/helpers/helpers.collection.d.ts | 20 + .../chart.js/types/helpers/helpers.color.d.ts | 33 + .../chart.js/types/helpers/helpers.core.d.ts | 157 + .../chart.js/types/helpers/helpers.curve.d.ts | 34 + .../chart.js/types/helpers/helpers.dom.d.ts | 20 + .../types/helpers/helpers.easing.d.ts | 5 + .../types/helpers/helpers.extras.d.ts | 23 + .../types/helpers/helpers.interpolation.d.ts | 1 + .../chart.js/types/helpers/helpers.intl.d.ts | 7 + .../chart.js/types/helpers/helpers.math.d.ts | 17 + .../types/helpers/helpers.options.d.ts | 61 + .../chart.js/types/helpers/helpers.rtl.d.ts | 12 + .../types/helpers/helpers.segment.d.ts | 1 + .../chart.js/types/helpers/index.d.ts | 15 + node_modules/chart.js/types/index.esm.d.ts | 3601 +++++ node_modules/chart.js/types/layout.d.ts | 65 + node_modules/chart.js/types/utils.d.ts | 21 + package-lock.json | 24 + package.json | 5 + 47 files changed, 31107 insertions(+), 23 deletions(-) create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/chart.js/LICENSE.md create mode 100644 node_modules/chart.js/README.md create mode 100644 node_modules/chart.js/auto/auto.esm.d.ts create mode 100644 node_modules/chart.js/auto/auto.esm.js create mode 100644 node_modules/chart.js/auto/auto.js create mode 100644 node_modules/chart.js/auto/package.json create mode 100644 node_modules/chart.js/dist/chart.esm.js create mode 100644 node_modules/chart.js/dist/chart.js create mode 100644 node_modules/chart.js/dist/chart.min.js create mode 100644 node_modules/chart.js/dist/chunks/helpers.segment.js create mode 100644 node_modules/chart.js/dist/helpers.esm.js create mode 100644 node_modules/chart.js/helpers/helpers.esm.d.ts create mode 100644 node_modules/chart.js/helpers/helpers.esm.js create mode 100644 node_modules/chart.js/helpers/helpers.js create mode 100644 node_modules/chart.js/helpers/package.json create mode 100644 node_modules/chart.js/package.json create mode 100644 node_modules/chart.js/types/adapters.d.ts create mode 100644 node_modules/chart.js/types/animation.d.ts create mode 100644 node_modules/chart.js/types/basic.d.ts create mode 100644 node_modules/chart.js/types/color.d.ts create mode 100644 node_modules/chart.js/types/element.d.ts create mode 100644 node_modules/chart.js/types/geometric.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.canvas.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.collection.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.color.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.core.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.curve.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.dom.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.easing.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.extras.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.interpolation.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.intl.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.math.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.options.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.rtl.d.ts create mode 100644 node_modules/chart.js/types/helpers/helpers.segment.d.ts create mode 100644 node_modules/chart.js/types/helpers/index.d.ts create mode 100644 node_modules/chart.js/types/index.esm.d.ts create mode 100644 node_modules/chart.js/types/layout.d.ts create mode 100644 node_modules/chart.js/types/utils.d.ts create mode 100644 package-lock.json create mode 100644 package.json diff --git a/code/chart.js b/code/chart.js index 92e85a30..c5e42883 100644 --- a/code/chart.js +++ b/code/chart.js @@ -2,3 +2,94 @@ const ctx = document.getElementById('chart').getContext('2d') //"Draw" the chart here 👇 + + + + const data = { + labels: ['finished','unfinished'], + datasets: [{ + label: 'My First dataset', + backgroundColor: [ + 'rgba(255, 99, 132, 0.2)', + 'rgba(54, 162, 235, 0.2)', + ], + + borderColor: 'rgb(255, 99, 132)', + data: [3, 10], + }] + }; + + const config = { + type: 'pie', + data: data, + options: { + responsive: true, + } + }; + + + + + + const myChart = new Chart( ctx, config ); + + + + + + + + + + +//------- I just couldn't figure out how to reference the variable from script.js, +//--------as it was a local variable. I've seen people do functions but I don't want to +//--------mess up my code. So I fetched the info again instead. + + + + + + +// const data = { + +// data: { +// labels: ['Finsihed', 'TBD'], +// datasets: [{ +// label: 'Project counter', +// data: [12, 19, 3, 5, 2, 3], +// backgroundColor: [ +// 'rgba(255, 99, 132, 0.2)', +// 'rgba(54, 162, 235, 0.2)', + +// ], +// borderColor: [ +// 'rgba(255, 99, 132, 1)', +// 'rgba(54, 162, 235, 1)', + +// ], +// borderWidth: 1 +// }] +// }, +// options: { +// scales: { +// y: { +// beginAtZero: true +// } +// } +// }, +// }; + +// let finishedProj = 5 +// let unfinishedProj = 19 - finishedProj + +// const config = { + +// type: 'pie', +// data: data, +// options: { +// responsive: true +// } +// } + +// const myChart = new Chart(ctx, config); \ No newline at end of file diff --git a/code/index.html b/code/index.html index 3b639755..61529b69 100644 --- a/code/index.html +++ b/code/index.html @@ -9,6 +9,7 @@ + @@ -21,7 +22,7 @@

GitHub Tracker

Projects:

-
+ diff --git a/code/script.js b/code/script.js index 0a9eb34f..32eb6007 100644 --- a/code/script.js +++ b/code/script.js @@ -4,6 +4,8 @@ const myProjects = document.getElementById('projects') const userInfo = document.getElementById('user-info') const body = document.getElementById('body') +//const piechart = document.getElementById('chart'); + // ### What to include @@ -13,7 +15,9 @@ const body = document.getElementById('body') const username = 'Dorothea-B' const API_URL_USER = `https://api.github.com/users/${username}` const API_URL_REPO = `https://api.github.com/users/${username}/repos` -let reponame + +//let reponame + const options = { @@ -53,7 +57,6 @@ fetch(API_URL_REPO, options) console.log('Filtered:', myTechnigoRepos) - //------function that generates projects html const printProjects = (data) => { @@ -112,6 +115,9 @@ fetch(API_URL_REPO, options) //for (let y = 0; y < data.length; y++) //console.log("Num of commits:", data[y].commit) + + //-------printing the pull requests + document.getElementById(`num-commits-${repo.name}`).innerHTML = `Total commits: ${data.length}` document.getElementById(`latest-${repo.name}`).innerHTML = `Latest push: ${data[0].commit.message}` @@ -141,26 +147,17 @@ fetch(API_URL_REPO, options) pulls.forEach(pull => { if(pull.user.login === username ) { - //console.log('filtered pullrequests:', pull) + + //-------printing the pull requests document.getElementById(`pull-req-${repo.name}`).innerHTML = `Pull requests: ${pull.html_url}` - } - // else { - // console.log('no pulls') - // document.getElementById(`pull-req-${repo.name}`).innerHTML = `Pull requestz: 0` - - // } + } ) - - - //pull.name.includes('project-')); - - //if(myTechnigoPulls === '') - + }) @@ -169,18 +166,11 @@ fetch(API_URL_REPO, options) }) - - - }) - - - - diff --git a/code/style.css b/code/style.css index 0f87d431..c877dfa9 100644 --- a/code/style.css +++ b/code/style.css @@ -95,6 +95,13 @@ color: rgb(255, 94, 0); width: 20px; } +#chart { + padding: 2rem; + max-width: 600px; + max-height: 600px; + margin: auto; +} + @media (min-width:340px) and (max-width:1038px) { .project { diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 00000000..28bd1f48 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "project-github-tracker", + "lockfileVersion": 2, + "requires": true, + "packages": { + "node_modules/chart.js": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz", + "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==" + } + } +} diff --git a/node_modules/chart.js/LICENSE.md b/node_modules/chart.js/LICENSE.md new file mode 100644 index 00000000..5060fabc --- /dev/null +++ b/node_modules/chart.js/LICENSE.md @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2014-2021 Chart.js Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/chart.js/README.md b/node_modules/chart.js/README.md new file mode 100644 index 00000000..f485b4eb --- /dev/null +++ b/node_modules/chart.js/README.md @@ -0,0 +1,38 @@ +

+ + https://www.chartjs.org/
+
+ Simple yet flexible JavaScript charting for designers & developers +

+ +

+ Downloads + GitHub Workflow Status + Coverage + Awesome + Slack +

+ +## Documentation + +All the links point to the new version 3 of the lib. + +* [Introduction](https://www.chartjs.org/docs/latest/) +* [Getting Started](https://www.chartjs.org/docs/latest/getting-started/index) +* [General](https://www.chartjs.org/docs/latest/general/data-structures) +* [Configuration](https://www.chartjs.org/docs/latest/configuration/index) +* [Charts](https://www.chartjs.org/docs/latest/charts/line) +* [Axes](https://www.chartjs.org/docs/latest/axes/index) +* [Developers](https://www.chartjs.org/docs/latest/developers/index) +* [Popular Extensions](https://github.com/chartjs/awesome) +* [Samples](https://www.chartjs.org/samples/) + +In case you are looking for the docs of version 2, you will have to specify the specific version in the url like this: [https://www.chartjs.org/docs/2.9.4/](https://www.chartjs.org/docs/2.9.4/) + +## Contributing + +Instructions on building and testing Chart.js can be found in [the documentation](https://www.chartjs.org/docs/master/developers/contributing.html#building-and-testing). Before submitting an issue or a pull request, please take a moment to look over the [contributing guidelines](https://www.chartjs.org/docs/master/developers/contributing) first. For support, please post questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/chartjs) with the `chartjs` tag. + +## License + +Chart.js is available under the [MIT license](LICENSE.md). diff --git a/node_modules/chart.js/auto/auto.esm.d.ts b/node_modules/chart.js/auto/auto.esm.d.ts new file mode 100644 index 00000000..f0bc3805 --- /dev/null +++ b/node_modules/chart.js/auto/auto.esm.d.ts @@ -0,0 +1,4 @@ +import { Chart } from '../types/index.esm'; + +export * from '../types/index.esm'; +export default Chart; diff --git a/node_modules/chart.js/auto/auto.esm.js b/node_modules/chart.js/auto/auto.esm.js new file mode 100644 index 00000000..42626764 --- /dev/null +++ b/node_modules/chart.js/auto/auto.esm.js @@ -0,0 +1,5 @@ +import {Chart, registerables} from '../dist/chart.esm'; + +Chart.register(...registerables); + +export default Chart; diff --git a/node_modules/chart.js/auto/auto.js b/node_modules/chart.js/auto/auto.js new file mode 100644 index 00000000..235580fe --- /dev/null +++ b/node_modules/chart.js/auto/auto.js @@ -0,0 +1 @@ +module.exports = require('../dist/chart'); diff --git a/node_modules/chart.js/auto/package.json b/node_modules/chart.js/auto/package.json new file mode 100644 index 00000000..c2ad5b2c --- /dev/null +++ b/node_modules/chart.js/auto/package.json @@ -0,0 +1,8 @@ +{ + "name": "chart.js-auto", + "private": true, + "description": "auto registering package", + "main": "auto.js", + "module": "auto.esm.js", + "types": "auto.esm.d.ts" +} diff --git a/node_modules/chart.js/dist/chart.esm.js b/node_modules/chart.js/dist/chart.esm.js new file mode 100644 index 00000000..2306fa88 --- /dev/null +++ b/node_modules/chart.js/dist/chart.esm.js @@ -0,0 +1,10627 @@ +/*! + * Chart.js v3.7.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +import { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js'; +export { d as defaults } from './chunks/helpers.segment.js'; + +class Animator { + constructor() { + this._request = null; + this._charts = new Map(); + this._running = false; + this._lastDate = undefined; + } + _notify(chart, anims, date, type) { + const callbacks = anims.listeners[type]; + const numSteps = anims.duration; + callbacks.forEach(fn => fn({ + chart, + initial: anims.initial, + numSteps, + currentStep: Math.min(date - anims.start, numSteps) + })); + } + _refresh() { + if (this._request) { + return; + } + this._running = true; + this._request = requestAnimFrame.call(window, () => { + this._update(); + this._request = null; + if (this._running) { + this._refresh(); + } + }); + } + _update(date = Date.now()) { + let remaining = 0; + this._charts.forEach((anims, chart) => { + if (!anims.running || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + let draw = false; + let item; + for (; i >= 0; --i) { + item = items[i]; + if (item._active) { + if (item._total > anims.duration) { + anims.duration = item._total; + } + item.tick(date); + draw = true; + } else { + items[i] = items[items.length - 1]; + items.pop(); + } + } + if (draw) { + chart.draw(); + this._notify(chart, anims, date, 'progress'); + } + if (!items.length) { + anims.running = false; + this._notify(chart, anims, date, 'complete'); + anims.initial = false; + } + remaining += items.length; + }); + this._lastDate = date; + if (remaining === 0) { + this._running = false; + } + } + _getAnims(chart) { + const charts = this._charts; + let anims = charts.get(chart); + if (!anims) { + anims = { + running: false, + initial: true, + items: [], + listeners: { + complete: [], + progress: [] + } + }; + charts.set(chart, anims); + } + return anims; + } + listen(chart, event, cb) { + this._getAnims(chart).listeners[event].push(cb); + } + add(chart, items) { + if (!items || !items.length) { + return; + } + this._getAnims(chart).items.push(...items); + } + has(chart) { + return this._getAnims(chart).items.length > 0; + } + start(chart) { + const anims = this._charts.get(chart); + if (!anims) { + return; + } + anims.running = true; + anims.start = Date.now(); + anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0); + this._refresh(); + } + running(chart) { + if (!this._running) { + return false; + } + const anims = this._charts.get(chart); + if (!anims || !anims.running || !anims.items.length) { + return false; + } + return true; + } + stop(chart) { + const anims = this._charts.get(chart); + if (!anims || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + for (; i >= 0; --i) { + items[i].cancel(); + } + anims.items = []; + this._notify(chart, anims, Date.now(), 'complete'); + } + remove(chart) { + return this._charts.delete(chart); + } +} +var animator = new Animator(); + +const transparent = 'transparent'; +const interpolators = { + boolean(from, to, factor) { + return factor > 0.5 ? to : from; + }, + color(from, to, factor) { + const c0 = color(from || transparent); + const c1 = c0.valid && color(to || transparent); + return c1 && c1.valid + ? c1.mix(c0, factor).hexString() + : to; + }, + number(from, to, factor) { + return from + (to - from) * factor; + } +}; +class Animation { + constructor(cfg, target, prop, to) { + const currentValue = target[prop]; + to = resolve([cfg.to, to, currentValue, cfg.from]); + const from = resolve([cfg.from, currentValue, to]); + this._active = true; + this._fn = cfg.fn || interpolators[cfg.type || typeof from]; + this._easing = effects[cfg.easing] || effects.linear; + this._start = Math.floor(Date.now() + (cfg.delay || 0)); + this._duration = this._total = Math.floor(cfg.duration); + this._loop = !!cfg.loop; + this._target = target; + this._prop = prop; + this._from = from; + this._to = to; + this._promises = undefined; + } + active() { + return this._active; + } + update(cfg, to, date) { + if (this._active) { + this._notify(false); + const currentValue = this._target[this._prop]; + const elapsed = date - this._start; + const remain = this._duration - elapsed; + this._start = date; + this._duration = Math.floor(Math.max(remain, cfg.duration)); + this._total += elapsed; + this._loop = !!cfg.loop; + this._to = resolve([cfg.to, to, currentValue, cfg.from]); + this._from = resolve([cfg.from, currentValue, to]); + } + } + cancel() { + if (this._active) { + this.tick(Date.now()); + this._active = false; + this._notify(false); + } + } + tick(date) { + const elapsed = date - this._start; + const duration = this._duration; + const prop = this._prop; + const from = this._from; + const loop = this._loop; + const to = this._to; + let factor; + this._active = from !== to && (loop || (elapsed < duration)); + if (!this._active) { + this._target[prop] = to; + this._notify(true); + return; + } + if (elapsed < 0) { + this._target[prop] = from; + return; + } + factor = (elapsed / duration) % 2; + factor = loop && factor > 1 ? 2 - factor : factor; + factor = this._easing(Math.min(1, Math.max(0, factor))); + this._target[prop] = this._fn(from, to, factor); + } + wait() { + const promises = this._promises || (this._promises = []); + return new Promise((res, rej) => { + promises.push({res, rej}); + }); + } + _notify(resolved) { + const method = resolved ? 'res' : 'rej'; + const promises = this._promises || []; + for (let i = 0; i < promises.length; i++) { + promises[i][method](); + } + } +} + +const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension']; +const colors = ['color', 'borderColor', 'backgroundColor']; +defaults.set('animation', { + delay: undefined, + duration: 1000, + easing: 'easeOutQuart', + fn: undefined, + from: undefined, + loop: undefined, + to: undefined, + type: undefined, +}); +const animationOptions = Object.keys(defaults.animation); +defaults.describe('animation', { + _fallback: false, + _indexable: false, + _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn', +}); +defaults.set('animations', { + colors: { + type: 'color', + properties: colors + }, + numbers: { + type: 'number', + properties: numbers + }, +}); +defaults.describe('animations', { + _fallback: 'animation', +}); +defaults.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: v => v | 0 + }, + } + } +}); +class Animations { + constructor(chart, config) { + this._chart = chart; + this._properties = new Map(); + this.configure(config); + } + configure(config) { + if (!isObject(config)) { + return; + } + const animatedProps = this._properties; + Object.getOwnPropertyNames(config).forEach(key => { + const cfg = config[key]; + if (!isObject(cfg)) { + return; + } + const resolved = {}; + for (const option of animationOptions) { + resolved[option] = cfg[option]; + } + (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => { + if (prop === key || !animatedProps.has(prop)) { + animatedProps.set(prop, resolved); + } + }); + }); + } + _animateOptions(target, values) { + const newOptions = values.options; + const options = resolveTargetOptions(target, newOptions); + if (!options) { + return []; + } + const animations = this._createAnimations(options, newOptions); + if (newOptions.$shared) { + awaitAll(target.options.$animations, newOptions).then(() => { + target.options = newOptions; + }, () => { + }); + } + return animations; + } + _createAnimations(target, values) { + const animatedProps = this._properties; + const animations = []; + const running = target.$animations || (target.$animations = {}); + const props = Object.keys(values); + const date = Date.now(); + let i; + for (i = props.length - 1; i >= 0; --i) { + const prop = props[i]; + if (prop.charAt(0) === '$') { + continue; + } + if (prop === 'options') { + animations.push(...this._animateOptions(target, values)); + continue; + } + const value = values[prop]; + let animation = running[prop]; + const cfg = animatedProps.get(prop); + if (animation) { + if (cfg && animation.active()) { + animation.update(cfg, value, date); + continue; + } else { + animation.cancel(); + } + } + if (!cfg || !cfg.duration) { + target[prop] = value; + continue; + } + running[prop] = animation = new Animation(cfg, target, prop, value); + animations.push(animation); + } + return animations; + } + update(target, values) { + if (this._properties.size === 0) { + Object.assign(target, values); + return; + } + const animations = this._createAnimations(target, values); + if (animations.length) { + animator.add(this._chart, animations); + return true; + } + } +} +function awaitAll(animations, properties) { + const running = []; + const keys = Object.keys(properties); + for (let i = 0; i < keys.length; i++) { + const anim = animations[keys[i]]; + if (anim && anim.active()) { + running.push(anim.wait()); + } + } + return Promise.all(running); +} +function resolveTargetOptions(target, newOptions) { + if (!newOptions) { + return; + } + let options = target.options; + if (!options) { + target.options = newOptions; + return; + } + if (options.$shared) { + target.options = options = Object.assign({}, options, {$shared: false, $animations: {}}); + } + return options; +} + +function scaleClip(scale, allowedOverflow) { + const opts = scale && scale.options || {}; + const reverse = opts.reverse; + const min = opts.min === undefined ? allowedOverflow : 0; + const max = opts.max === undefined ? allowedOverflow : 0; + return { + start: reverse ? max : min, + end: reverse ? min : max + }; +} +function defaultClip(xScale, yScale, allowedOverflow) { + if (allowedOverflow === false) { + return false; + } + const x = scaleClip(xScale, allowedOverflow); + const y = scaleClip(yScale, allowedOverflow); + return { + top: y.end, + right: x.end, + bottom: y.start, + left: x.start + }; +} +function toClip(value) { + let t, r, b, l; + if (isObject(value)) { + t = value.top; + r = value.right; + b = value.bottom; + l = value.left; + } else { + t = r = b = l = value; + } + return { + top: t, + right: r, + bottom: b, + left: l, + disabled: value === false + }; +} +function getSortedDatasetIndices(chart, filterVisible) { + const keys = []; + const metasets = chart._getSortedDatasetMetas(filterVisible); + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + keys.push(metasets[i].index); + } + return keys; +} +function applyStack(stack, value, dsIndex, options = {}) { + const keys = stack.keys; + const singleMode = options.mode === 'single'; + let i, ilen, datasetIndex, otherValue; + if (value === null) { + return; + } + for (i = 0, ilen = keys.length; i < ilen; ++i) { + datasetIndex = +keys[i]; + if (datasetIndex === dsIndex) { + if (options.all) { + continue; + } + break; + } + otherValue = stack.values[datasetIndex]; + if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) { + value += otherValue; + } + } + return value; +} +function convertObjectDataToArray(data) { + const keys = Object.keys(data); + const adata = new Array(keys.length); + let i, ilen, key; + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + adata[i] = { + x: key, + y: data[key] + }; + } + return adata; +} +function isStacked(scale, meta) { + const stacked = scale && scale.options.stacked; + return stacked || (stacked === undefined && meta.stack !== undefined); +} +function getStackKey(indexScale, valueScale, meta) { + return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`; +} +function getUserBounds(scale) { + const {min, max, minDefined, maxDefined} = scale.getUserBounds(); + return { + min: minDefined ? min : Number.NEGATIVE_INFINITY, + max: maxDefined ? max : Number.POSITIVE_INFINITY + }; +} +function getOrCreateStack(stacks, stackKey, indexValue) { + const subStack = stacks[stackKey] || (stacks[stackKey] = {}); + return subStack[indexValue] || (subStack[indexValue] = {}); +} +function getLastIndexInStack(stack, vScale, positive, type) { + for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) { + const value = stack[meta.index]; + if ((positive && value > 0) || (!positive && value < 0)) { + return meta.index; + } + } + return null; +} +function updateStacks(controller, parsed) { + const {chart, _cachedMeta: meta} = controller; + const stacks = chart._stacks || (chart._stacks = {}); + const {iScale, vScale, index: datasetIndex} = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const key = getStackKey(iScale, vScale, meta); + const ilen = parsed.length; + let stack; + for (let i = 0; i < ilen; ++i) { + const item = parsed[i]; + const {[iAxis]: index, [vAxis]: value} = item; + const itemStacks = item._stacks || (item._stacks = {}); + stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index); + stack[datasetIndex] = value; + stack._top = getLastIndexInStack(stack, vScale, true, meta.type); + stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type); + } +} +function getFirstScaleId(chart, axis) { + const scales = chart.scales; + return Object.keys(scales).filter(key => scales[key].axis === axis).shift(); +} +function createDatasetContext(parent, index) { + return createContext(parent, + { + active: false, + dataset: undefined, + datasetIndex: index, + index, + mode: 'default', + type: 'dataset' + } + ); +} +function createDataContext(parent, index, element) { + return createContext(parent, { + active: false, + dataIndex: index, + parsed: undefined, + raw: undefined, + element, + index, + mode: 'default', + type: 'data' + }); +} +function clearStacks(meta, items) { + const datasetIndex = meta.controller.index; + const axis = meta.vScale && meta.vScale.axis; + if (!axis) { + return; + } + items = items || meta._parsed; + for (const parsed of items) { + const stacks = parsed._stacks; + if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) { + return; + } + delete stacks[axis][datasetIndex]; + } +} +const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none'; +const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); +const createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked + && {keys: getSortedDatasetIndices(chart, true), values: null}; +class DatasetController { + constructor(chart, datasetIndex) { + this.chart = chart; + this._ctx = chart.ctx; + this.index = datasetIndex; + this._cachedDataOpts = {}; + this._cachedMeta = this.getMeta(); + this._type = this._cachedMeta.type; + this.options = undefined; + this._parsing = false; + this._data = undefined; + this._objectData = undefined; + this._sharedOptions = undefined; + this._drawStart = undefined; + this._drawCount = undefined; + this.enableOptionSharing = false; + this.$context = undefined; + this._syncList = []; + this.initialize(); + } + initialize() { + const meta = this._cachedMeta; + this.configure(); + this.linkScales(); + meta._stacked = isStacked(meta.vScale, meta); + this.addElements(); + } + updateIndex(datasetIndex) { + if (this.index !== datasetIndex) { + clearStacks(this._cachedMeta); + } + this.index = datasetIndex; + } + linkScales() { + const chart = this.chart; + const meta = this._cachedMeta; + const dataset = this.getDataset(); + const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y; + const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x')); + const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y')); + const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r')); + const indexAxis = meta.indexAxis; + const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid); + const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid); + meta.xScale = this.getScaleForId(xid); + meta.yScale = this.getScaleForId(yid); + meta.rScale = this.getScaleForId(rid); + meta.iScale = this.getScaleForId(iid); + meta.vScale = this.getScaleForId(vid); + } + getDataset() { + return this.chart.data.datasets[this.index]; + } + getMeta() { + return this.chart.getDatasetMeta(this.index); + } + getScaleForId(scaleID) { + return this.chart.scales[scaleID]; + } + _getOtherScale(scale) { + const meta = this._cachedMeta; + return scale === meta.iScale + ? meta.vScale + : meta.iScale; + } + reset() { + this._update('reset'); + } + _destroy() { + const meta = this._cachedMeta; + if (this._data) { + unlistenArrayEvents(this._data, this); + } + if (meta._stacked) { + clearStacks(meta); + } + } + _dataCheck() { + const dataset = this.getDataset(); + const data = dataset.data || (dataset.data = []); + const _data = this._data; + if (isObject(data)) { + this._data = convertObjectDataToArray(data); + } else if (_data !== data) { + if (_data) { + unlistenArrayEvents(_data, this); + const meta = this._cachedMeta; + clearStacks(meta); + meta._parsed = []; + } + if (data && Object.isExtensible(data)) { + listenArrayEvents(data, this); + } + this._syncList = []; + this._data = data; + } + } + addElements() { + const meta = this._cachedMeta; + this._dataCheck(); + if (this.datasetElementType) { + meta.dataset = new this.datasetElementType(); + } + } + buildOrUpdateElements(resetNewElements) { + const meta = this._cachedMeta; + const dataset = this.getDataset(); + let stackChanged = false; + this._dataCheck(); + const oldStacked = meta._stacked; + meta._stacked = isStacked(meta.vScale, meta); + if (meta.stack !== dataset.stack) { + stackChanged = true; + clearStacks(meta); + meta.stack = dataset.stack; + } + this._resyncElements(resetNewElements); + if (stackChanged || oldStacked !== meta._stacked) { + updateStacks(this, meta._parsed); + } + } + configure() { + const config = this.chart.config; + const scopeKeys = config.datasetScopeKeys(this._type); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true); + this.options = config.createResolver(scopes, this.getContext()); + this._parsing = this.options.parsing; + this._cachedDataOpts = {}; + } + parse(start, count) { + const {_cachedMeta: meta, _data: data} = this; + const {iScale, _stacked} = meta; + const iAxis = iScale.axis; + let sorted = start === 0 && count === data.length ? true : meta._sorted; + let prev = start > 0 && meta._parsed[start - 1]; + let i, cur, parsed; + if (this._parsing === false) { + meta._parsed = data; + meta._sorted = true; + parsed = data; + } else { + if (isArray(data[start])) { + parsed = this.parseArrayData(meta, data, start, count); + } else if (isObject(data[start])) { + parsed = this.parseObjectData(meta, data, start, count); + } else { + parsed = this.parsePrimitiveData(meta, data, start, count); + } + const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]); + for (i = 0; i < count; ++i) { + meta._parsed[i + start] = cur = parsed[i]; + if (sorted) { + if (isNotInOrderComparedToPrev()) { + sorted = false; + } + prev = cur; + } + } + meta._sorted = sorted; + } + if (_stacked) { + updateStacks(this, parsed); + } + } + parsePrimitiveData(meta, data, start, count) { + const {iScale, vScale} = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = new Array(count); + let i, ilen, index; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + parsed[i] = { + [iAxis]: singleScale || iScale.parse(labels[index], index), + [vAxis]: vScale.parse(data[index], index) + }; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const {xScale, yScale} = meta; + const parsed = new Array(count); + let i, ilen, index, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + item = data[index]; + parsed[i] = { + x: xScale.parse(item[0], index), + y: yScale.parse(item[1], index) + }; + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const {xScale, yScale} = meta; + const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing; + const parsed = new Array(count); + let i, ilen, index, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + item = data[index]; + parsed[i] = { + x: xScale.parse(resolveObjectKey(item, xAxisKey), index), + y: yScale.parse(resolveObjectKey(item, yAxisKey), index) + }; + } + return parsed; + } + getParsed(index) { + return this._cachedMeta._parsed[index]; + } + getDataElement(index) { + return this._cachedMeta.data[index]; + } + applyStack(scale, parsed, mode) { + const chart = this.chart; + const meta = this._cachedMeta; + const value = parsed[scale.axis]; + const stack = { + keys: getSortedDatasetIndices(chart, true), + values: parsed._stacks[scale.axis] + }; + return applyStack(stack, value, meta.index, {mode}); + } + updateRangeFromParsed(range, scale, parsed, stack) { + const parsedValue = parsed[scale.axis]; + let value = parsedValue === null ? NaN : parsedValue; + const values = stack && parsed._stacks[scale.axis]; + if (stack && values) { + stack.values = values; + value = applyStack(stack, parsedValue, this._cachedMeta.index); + } + range.min = Math.min(range.min, value); + range.max = Math.max(range.max, value); + } + getMinMax(scale, canStack) { + const meta = this._cachedMeta; + const _parsed = meta._parsed; + const sorted = meta._sorted && scale === meta.iScale; + const ilen = _parsed.length; + const otherScale = this._getOtherScale(scale); + const stack = createStack(canStack, meta, this.chart); + const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY}; + const {min: otherMin, max: otherMax} = getUserBounds(otherScale); + let i, parsed; + function _skip() { + parsed = _parsed[i]; + const otherValue = parsed[otherScale.axis]; + return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; + } + for (i = 0; i < ilen; ++i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range, scale, parsed, stack); + if (sorted) { + break; + } + } + if (sorted) { + for (i = ilen - 1; i >= 0; --i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range, scale, parsed, stack); + break; + } + } + return range; + } + getAllParsedValues(scale) { + const parsed = this._cachedMeta._parsed; + const values = []; + let i, ilen, value; + for (i = 0, ilen = parsed.length; i < ilen; ++i) { + value = parsed[i][scale.axis]; + if (isNumberFinite(value)) { + values.push(value); + } + } + return values; + } + getMaxOverflow() { + return false; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const iScale = meta.iScale; + const vScale = meta.vScale; + const parsed = this.getParsed(index); + return { + label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '', + value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : '' + }; + } + _update(mode) { + const meta = this._cachedMeta; + this.update(mode || 'default'); + meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow()))); + } + update(mode) {} + draw() { + const ctx = this._ctx; + const chart = this.chart; + const meta = this._cachedMeta; + const elements = meta.data || []; + const area = chart.chartArea; + const active = []; + const start = this._drawStart || 0; + const count = this._drawCount || (elements.length - start); + const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop; + let i; + if (meta.dataset) { + meta.dataset.draw(ctx, area, start, count); + } + for (i = start; i < start + count; ++i) { + const element = elements[i]; + if (element.hidden) { + continue; + } + if (element.active && drawActiveElementsOnTop) { + active.push(element); + } else { + element.draw(ctx, area); + } + } + for (i = 0; i < active.length; ++i) { + active[i].draw(ctx, area); + } + } + getStyle(index, active) { + const mode = active ? 'active' : 'default'; + return index === undefined && this._cachedMeta.dataset + ? this.resolveDatasetElementOptions(mode) + : this.resolveDataElementOptions(index || 0, mode); + } + getContext(index, active, mode) { + const dataset = this.getDataset(); + let context; + if (index >= 0 && index < this._cachedMeta.data.length) { + const element = this._cachedMeta.data[index]; + context = element.$context || + (element.$context = createDataContext(this.getContext(), index, element)); + context.parsed = this.getParsed(index); + context.raw = dataset.data[index]; + context.index = context.dataIndex = index; + } else { + context = this.$context || + (this.$context = createDatasetContext(this.chart.getContext(), this.index)); + context.dataset = dataset; + context.index = context.datasetIndex = this.index; + } + context.active = !!active; + context.mode = mode; + return context; + } + resolveDatasetElementOptions(mode) { + return this._resolveElementOptions(this.datasetElementType.id, mode); + } + resolveDataElementOptions(index, mode) { + return this._resolveElementOptions(this.dataElementType.id, mode, index); + } + _resolveElementOptions(elementType, mode = 'default', index) { + const active = mode === 'active'; + const cache = this._cachedDataOpts; + const cacheKey = elementType + '-' + mode; + const cached = cache[cacheKey]; + const sharing = this.enableOptionSharing && defined(index); + if (cached) { + return cloneIfNotShared(cached, sharing); + } + const config = this.chart.config; + const scopeKeys = config.datasetElementScopeKeys(this._type, elementType); + const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, '']; + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + const names = Object.keys(defaults.elements[elementType]); + const context = () => this.getContext(index, active); + const values = config.resolveNamedOptions(scopes, names, context, prefixes); + if (values.$shared) { + values.$shared = sharing; + cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing)); + } + return values; + } + _resolveAnimations(index, transition, active) { + const chart = this.chart; + const cache = this._cachedDataOpts; + const cacheKey = `animation-${transition}`; + const cached = cache[cacheKey]; + if (cached) { + return cached; + } + let options; + if (chart.options.animation !== false) { + const config = this.chart.config; + const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + options = config.createResolver(scopes, this.getContext(index, active, transition)); + } + const animations = new Animations(chart, options && options.animations); + if (options && options._cacheable) { + cache[cacheKey] = Object.freeze(animations); + } + return animations; + } + getSharedOptions(options) { + if (!options.$shared) { + return; + } + return this._sharedOptions || (this._sharedOptions = Object.assign({}, options)); + } + includeOptions(mode, sharedOptions) { + return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled; + } + updateElement(element, index, properties, mode) { + if (isDirectUpdateMode(mode)) { + Object.assign(element, properties); + } else { + this._resolveAnimations(index, mode).update(element, properties); + } + } + updateSharedOptions(sharedOptions, mode, newOptions) { + if (sharedOptions && !isDirectUpdateMode(mode)) { + this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions); + } + } + _setStyle(element, index, mode, active) { + element.active = active; + const options = this.getStyle(index, active); + this._resolveAnimations(index, mode, active).update(element, { + options: (!active && this.getSharedOptions(options)) || options + }); + } + removeHoverStyle(element, datasetIndex, index) { + this._setStyle(element, index, 'active', false); + } + setHoverStyle(element, datasetIndex, index) { + this._setStyle(element, index, 'active', true); + } + _removeDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, undefined, 'active', false); + } + } + _setDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, undefined, 'active', true); + } + } + _resyncElements(resetNewElements) { + const data = this._data; + const elements = this._cachedMeta.data; + for (const [method, arg1, arg2] of this._syncList) { + this[method](arg1, arg2); + } + this._syncList = []; + const numMeta = elements.length; + const numData = data.length; + const count = Math.min(numData, numMeta); + if (count) { + this.parse(0, count); + } + if (numData > numMeta) { + this._insertElements(numMeta, numData - numMeta, resetNewElements); + } else if (numData < numMeta) { + this._removeElements(numData, numMeta - numData); + } + } + _insertElements(start, count, resetNewElements = true) { + const meta = this._cachedMeta; + const data = meta.data; + const end = start + count; + let i; + const move = (arr) => { + arr.length += count; + for (i = arr.length - 1; i >= end; i--) { + arr[i] = arr[i - count]; + } + }; + move(data); + for (i = start; i < end; ++i) { + data[i] = new this.dataElementType(); + } + if (this._parsing) { + move(meta._parsed); + } + this.parse(start, count); + if (resetNewElements) { + this.updateElements(data, start, count, 'reset'); + } + } + updateElements(element, start, count, mode) {} + _removeElements(start, count) { + const meta = this._cachedMeta; + if (this._parsing) { + const removed = meta._parsed.splice(start, count); + if (meta._stacked) { + clearStacks(meta, removed); + } + } + meta.data.splice(start, count); + } + _sync(args) { + if (this._parsing) { + this._syncList.push(args); + } else { + const [method, arg1, arg2] = args; + this[method](arg1, arg2); + } + this.chart._dataChanges.push([this.index, ...args]); + } + _onDataPush() { + const count = arguments.length; + this._sync(['_insertElements', this.getDataset().data.length - count, count]); + } + _onDataPop() { + this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]); + } + _onDataShift() { + this._sync(['_removeElements', 0, 1]); + } + _onDataSplice(start, count) { + if (count) { + this._sync(['_removeElements', start, count]); + } + const newCount = arguments.length - 2; + if (newCount) { + this._sync(['_insertElements', start, newCount]); + } + } + _onDataUnshift() { + this._sync(['_insertElements', 0, arguments.length]); + } +} +DatasetController.defaults = {}; +DatasetController.prototype.datasetElementType = null; +DatasetController.prototype.dataElementType = null; + +function getAllScaleValues(scale, type) { + if (!scale._cache.$bar) { + const visibleMetas = scale.getMatchingVisibleMetas(type); + let values = []; + for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) { + values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale)); + } + scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b)); + } + return scale._cache.$bar; +} +function computeMinSampleSize(meta) { + const scale = meta.iScale; + const values = getAllScaleValues(scale, meta.type); + let min = scale._length; + let i, ilen, curr, prev; + const updateMinAndPrev = () => { + if (curr === 32767 || curr === -32768) { + return; + } + if (defined(prev)) { + min = Math.min(min, Math.abs(curr - prev) || min); + } + prev = curr; + }; + for (i = 0, ilen = values.length; i < ilen; ++i) { + curr = scale.getPixelForValue(values[i]); + updateMinAndPrev(); + } + prev = undefined; + for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) { + curr = scale.getPixelForTick(i); + updateMinAndPrev(); + } + return min; +} +function computeFitCategoryTraits(index, ruler, options, stackCount) { + const thickness = options.barThickness; + let size, ratio; + if (isNullOrUndef(thickness)) { + size = ruler.min * options.categoryPercentage; + ratio = options.barPercentage; + } else { + size = thickness * stackCount; + ratio = 1; + } + return { + chunk: size / stackCount, + ratio, + start: ruler.pixels[index] - (size / 2) + }; +} +function computeFlexCategoryTraits(index, ruler, options, stackCount) { + const pixels = ruler.pixels; + const curr = pixels[index]; + let prev = index > 0 ? pixels[index - 1] : null; + let next = index < pixels.length - 1 ? pixels[index + 1] : null; + const percent = options.categoryPercentage; + if (prev === null) { + prev = curr - (next === null ? ruler.end - ruler.start : next - curr); + } + if (next === null) { + next = curr + curr - prev; + } + const start = curr - (curr - Math.min(prev, next)) / 2 * percent; + const size = Math.abs(next - prev) / 2 * percent; + return { + chunk: size / stackCount, + ratio: options.barPercentage, + start + }; +} +function parseFloatBar(entry, item, vScale, i) { + const startValue = vScale.parse(entry[0], i); + const endValue = vScale.parse(entry[1], i); + const min = Math.min(startValue, endValue); + const max = Math.max(startValue, endValue); + let barStart = min; + let barEnd = max; + if (Math.abs(min) > Math.abs(max)) { + barStart = max; + barEnd = min; + } + item[vScale.axis] = barEnd; + item._custom = { + barStart, + barEnd, + start: startValue, + end: endValue, + min, + max + }; +} +function parseValue(entry, item, vScale, i) { + if (isArray(entry)) { + parseFloatBar(entry, item, vScale, i); + } else { + item[vScale.axis] = vScale.parse(entry, i); + } + return item; +} +function parseArrayOrPrimitive(meta, data, start, count) { + const iScale = meta.iScale; + const vScale = meta.vScale; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = []; + let i, ilen, item, entry; + for (i = start, ilen = start + count; i < ilen; ++i) { + entry = data[i]; + item = {}; + item[iScale.axis] = singleScale || iScale.parse(labels[i], i); + parsed.push(parseValue(entry, item, vScale, i)); + } + return parsed; +} +function isFloatBar(custom) { + return custom && custom.barStart !== undefined && custom.barEnd !== undefined; +} +function barSign(size, vScale, actualBase) { + if (size !== 0) { + return sign(size); + } + return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1); +} +function borderProps(properties) { + let reverse, start, end, top, bottom; + if (properties.horizontal) { + reverse = properties.base > properties.x; + start = 'left'; + end = 'right'; + } else { + reverse = properties.base < properties.y; + start = 'bottom'; + end = 'top'; + } + if (reverse) { + top = 'end'; + bottom = 'start'; + } else { + top = 'start'; + bottom = 'end'; + } + return {start, end, reverse, top, bottom}; +} +function setBorderSkipped(properties, options, stack, index) { + let edge = options.borderSkipped; + const res = {}; + if (!edge) { + properties.borderSkipped = res; + return; + } + const {start, end, reverse, top, bottom} = borderProps(properties); + if (edge === 'middle' && stack) { + properties.enableBorderRadius = true; + if ((stack._top || 0) === index) { + edge = top; + } else if ((stack._bottom || 0) === index) { + edge = bottom; + } else { + res[parseEdge(bottom, start, end, reverse)] = true; + edge = top; + } + } + res[parseEdge(edge, start, end, reverse)] = true; + properties.borderSkipped = res; +} +function parseEdge(edge, a, b, reverse) { + if (reverse) { + edge = swap(edge, a, b); + edge = startEnd(edge, b, a); + } else { + edge = startEnd(edge, a, b); + } + return edge; +} +function swap(orig, v1, v2) { + return orig === v1 ? v2 : orig === v2 ? v1 : orig; +} +function startEnd(v, start, end) { + return v === 'start' ? start : v === 'end' ? end : v; +} +function setInflateAmount(properties, {inflateAmount}, ratio) { + properties.inflateAmount = inflateAmount === 'auto' + ? ratio === 1 ? 0.33 : 0 + : inflateAmount; +} +class BarController extends DatasetController { + parsePrimitiveData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseArrayData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseObjectData(meta, data, start, count) { + const {iScale, vScale} = meta; + const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing; + const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey; + const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey; + const parsed = []; + let i, ilen, item, obj; + for (i = start, ilen = start + count; i < ilen; ++i) { + obj = data[i]; + item = {}; + item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i); + parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i)); + } + return parsed; + } + updateRangeFromParsed(range, scale, parsed, stack) { + super.updateRangeFromParsed(range, scale, parsed, stack); + const custom = parsed._custom; + if (custom && scale === this._cachedMeta.vScale) { + range.min = Math.min(range.min, custom.min); + range.max = Math.max(range.max, custom.max); + } + } + getMaxOverflow() { + return 0; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const {iScale, vScale} = meta; + const parsed = this.getParsed(index); + const custom = parsed._custom; + const value = isFloatBar(custom) + ? '[' + custom.start + ', ' + custom.end + ']' + : '' + vScale.getLabelForValue(parsed[vScale.axis]); + return { + label: '' + iScale.getLabelForValue(parsed[iScale.axis]), + value + }; + } + initialize() { + this.enableOptionSharing = true; + super.initialize(); + const meta = this._cachedMeta; + meta.stack = this.getDataset().stack; + } + update(mode) { + const meta = this._cachedMeta; + this.updateElements(meta.data, 0, meta.data.length, mode); + } + updateElements(bars, start, count, mode) { + const reset = mode === 'reset'; + const {index, _cachedMeta: {vScale}} = this; + const base = vScale.getBasePixel(); + const horizontal = vScale.isHorizontal(); + const ruler = this._getRuler(); + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + this.updateSharedOptions(sharedOptions, mode, firstOpts); + for (let i = start; i < start + count; i++) { + const parsed = this.getParsed(i); + const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i); + const ipixels = this._calculateBarIndexPixels(i, ruler); + const stack = (parsed._stacks || {})[vScale.axis]; + const properties = { + horizontal, + base: vpixels.base, + enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom), + x: horizontal ? vpixels.head : ipixels.center, + y: horizontal ? ipixels.center : vpixels.head, + height: horizontal ? ipixels.size : Math.abs(vpixels.size), + width: horizontal ? Math.abs(vpixels.size) : ipixels.size + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode); + } + const options = properties.options || bars[i].options; + setBorderSkipped(properties, options, stack, index); + setInflateAmount(properties, options, ruler.ratio); + this.updateElement(bars[i], i, properties, mode); + } + } + _getStacks(last, dataIndex) { + const meta = this._cachedMeta; + const iScale = meta.iScale; + const metasets = iScale.getMatchingVisibleMetas(this._type); + const stacked = iScale.options.stacked; + const ilen = metasets.length; + const stacks = []; + let i, item; + for (i = 0; i < ilen; ++i) { + item = metasets[i]; + if (!item.controller.options.grouped) { + continue; + } + if (typeof dataIndex !== 'undefined') { + const val = item.controller.getParsed(dataIndex)[ + item.controller._cachedMeta.vScale.axis + ]; + if (isNullOrUndef(val) || isNaN(val)) { + continue; + } + } + if (stacked === false || stacks.indexOf(item.stack) === -1 || + (stacked === undefined && item.stack === undefined)) { + stacks.push(item.stack); + } + if (item.index === last) { + break; + } + } + if (!stacks.length) { + stacks.push(undefined); + } + return stacks; + } + _getStackCount(index) { + return this._getStacks(undefined, index).length; + } + _getStackIndex(datasetIndex, name, dataIndex) { + const stacks = this._getStacks(datasetIndex, dataIndex); + const index = (name !== undefined) + ? stacks.indexOf(name) + : -1; + return (index === -1) + ? stacks.length - 1 + : index; + } + _getRuler() { + const opts = this.options; + const meta = this._cachedMeta; + const iScale = meta.iScale; + const pixels = []; + let i, ilen; + for (i = 0, ilen = meta.data.length; i < ilen; ++i) { + pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i)); + } + const barThickness = opts.barThickness; + const min = barThickness || computeMinSampleSize(meta); + return { + min, + pixels, + start: iScale._startPixel, + end: iScale._endPixel, + stackCount: this._getStackCount(), + scale: iScale, + grouped: opts.grouped, + ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage + }; + } + _calculateBarValuePixels(index) { + const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this; + const actualBase = baseValue || 0; + const parsed = this.getParsed(index); + const custom = parsed._custom; + const floating = isFloatBar(custom); + let value = parsed[vScale.axis]; + let start = 0; + let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value; + let head, size; + if (length !== value) { + start = length - value; + length = value; + } + if (floating) { + value = custom.barStart; + length = custom.barEnd - custom.barStart; + if (value !== 0 && sign(value) !== sign(custom.barEnd)) { + start = 0; + } + start += value; + } + const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start; + let base = vScale.getPixelForValue(startValue); + if (this.chart.getDataVisibility(index)) { + head = vScale.getPixelForValue(start + length); + } else { + head = base; + } + size = head - base; + if (Math.abs(size) < minBarLength) { + size = barSign(size, vScale, actualBase) * minBarLength; + if (value === actualBase) { + base -= size / 2; + } + head = base + size; + } + if (base === vScale.getPixelForValue(actualBase)) { + const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2; + base += halfGrid; + size -= halfGrid; + } + return { + size, + base, + head, + center: head + size / 2 + }; + } + _calculateBarIndexPixels(index, ruler) { + const scale = ruler.scale; + const options = this.options; + const skipNull = options.skipNull; + const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); + let center, size; + if (ruler.grouped) { + const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount; + const range = options.barThickness === 'flex' + ? computeFlexCategoryTraits(index, ruler, options, stackCount) + : computeFitCategoryTraits(index, ruler, options, stackCount); + const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined); + center = range.start + (range.chunk * stackIndex) + (range.chunk / 2); + size = Math.min(maxBarThickness, range.chunk * range.ratio); + } else { + center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index); + size = Math.min(maxBarThickness, ruler.min * ruler.ratio); + } + return { + base: center - size / 2, + head: center + size / 2, + center, + size + }; + } + draw() { + const meta = this._cachedMeta; + const vScale = meta.vScale; + const rects = meta.data; + const ilen = rects.length; + let i = 0; + for (; i < ilen; ++i) { + if (this.getParsed(i)[vScale.axis] !== null) { + rects[i].draw(this._ctx); + } + } + } +} +BarController.id = 'bar'; +BarController.defaults = { + datasetElementType: false, + dataElementType: 'bar', + categoryPercentage: 0.8, + barPercentage: 0.9, + grouped: true, + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'base', 'width', 'height'] + } + } +}; +BarController.overrides = { + scales: { + _index_: { + type: 'category', + offset: true, + grid: { + offset: true + } + }, + _value_: { + type: 'linear', + beginAtZero: true, + } + } +}; + +class BubbleController extends DatasetController { + initialize() { + this.enableOptionSharing = true; + super.initialize(); + } + parsePrimitiveData(meta, data, start, count) { + const parsed = super.parsePrimitiveData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + parsed[i]._custom = this.resolveDataElementOptions(i + start).radius; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const parsed = super.parseArrayData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const parsed = super.parseObjectData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + getMaxOverflow() { + const data = this._cachedMeta.data; + let max = 0; + for (let i = data.length - 1; i >= 0; --i) { + max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2); + } + return max > 0 && max; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const {xScale, yScale} = meta; + const parsed = this.getParsed(index); + const x = xScale.getLabelForValue(parsed.x); + const y = yScale.getLabelForValue(parsed.y); + const r = parsed._custom; + return { + label: meta.label, + value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')' + }; + } + update(mode) { + const points = this._cachedMeta.data; + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === 'reset'; + const {iScale, vScale} = this._cachedMeta; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const parsed = !reset && this.getParsed(i); + const properties = {}; + const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]); + const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]); + properties.skip = isNaN(iPixel) || isNaN(vPixel); + if (includeOptions) { + properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode); + if (reset) { + properties.options.radius = 0; + } + } + this.updateElement(point, i, properties, mode); + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + resolveDataElementOptions(index, mode) { + const parsed = this.getParsed(index); + let values = super.resolveDataElementOptions(index, mode); + if (values.$shared) { + values = Object.assign({}, values, {$shared: false}); + } + const radius = values.radius; + if (mode !== 'active') { + values.radius = 0; + } + values.radius += valueOrDefault(parsed && parsed._custom, radius); + return values; + } +} +BubbleController.id = 'bubble'; +BubbleController.defaults = { + datasetElementType: false, + dataElementType: 'point', + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'borderWidth', 'radius'] + } + } +}; +BubbleController.overrides = { + scales: { + x: { + type: 'linear' + }, + y: { + type: 'linear' + } + }, + plugins: { + tooltip: { + callbacks: { + title() { + return ''; + } + } + } + } +}; + +function getRatioAndOffset(rotation, circumference, cutout) { + let ratioX = 1; + let ratioY = 1; + let offsetX = 0; + let offsetY = 0; + if (circumference < TAU) { + const startAngle = rotation; + const endAngle = startAngle + circumference; + const startX = Math.cos(startAngle); + const startY = Math.sin(startAngle); + const endX = Math.cos(endAngle); + const endY = Math.sin(endAngle); + const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout); + const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout); + const maxX = calcMax(0, startX, endX); + const maxY = calcMax(HALF_PI, startY, endY); + const minX = calcMin(PI, startX, endX); + const minY = calcMin(PI + HALF_PI, startY, endY); + ratioX = (maxX - minX) / 2; + ratioY = (maxY - minY) / 2; + offsetX = -(maxX + minX) / 2; + offsetY = -(maxY + minY) / 2; + } + return {ratioX, ratioY, offsetX, offsetY}; +} +class DoughnutController extends DatasetController { + constructor(chart, datasetIndex) { + super(chart, datasetIndex); + this.enableOptionSharing = true; + this.innerRadius = undefined; + this.outerRadius = undefined; + this.offsetX = undefined; + this.offsetY = undefined; + } + linkScales() {} + parse(start, count) { + const data = this.getDataset().data; + const meta = this._cachedMeta; + if (this._parsing === false) { + meta._parsed = data; + } else { + let getter = (i) => +data[i]; + if (isObject(data[start])) { + const {key = 'value'} = this._parsing; + getter = (i) => +resolveObjectKey(data[i], key); + } + let i, ilen; + for (i = start, ilen = start + count; i < ilen; ++i) { + meta._parsed[i] = getter(i); + } + } + } + _getRotation() { + return toRadians(this.options.rotation - 90); + } + _getCircumference() { + return toRadians(this.options.circumference); + } + _getRotationExtents() { + let min = TAU; + let max = -TAU; + for (let i = 0; i < this.chart.data.datasets.length; ++i) { + if (this.chart.isDatasetVisible(i)) { + const controller = this.chart.getDatasetMeta(i).controller; + const rotation = controller._getRotation(); + const circumference = controller._getCircumference(); + min = Math.min(min, rotation); + max = Math.max(max, rotation + circumference); + } + } + return { + rotation: min, + circumference: max - min, + }; + } + update(mode) { + const chart = this.chart; + const {chartArea} = chart; + const meta = this._cachedMeta; + const arcs = meta.data; + const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing; + const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); + const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1); + const chartWeight = this._getRingWeight(this.index); + const {circumference, rotation} = this._getRotationExtents(); + const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout); + const maxWidth = (chartArea.width - spacing) / ratioX; + const maxHeight = (chartArea.height - spacing) / ratioY; + const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); + const outerRadius = toDimension(this.options.radius, maxRadius); + const innerRadius = Math.max(outerRadius * cutout, 0); + const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal(); + this.offsetX = offsetX * outerRadius; + this.offsetY = offsetY * outerRadius; + meta.total = this.calculateTotal(); + this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index); + this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0); + this.updateElements(arcs, 0, arcs.length, mode); + } + _circumference(i, reset) { + const opts = this.options; + const meta = this._cachedMeta; + const circumference = this._getCircumference(); + if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) { + return 0; + } + return this.calculateCircumference(meta._parsed[i] * circumference / TAU); + } + updateElements(arcs, start, count, mode) { + const reset = mode === 'reset'; + const chart = this.chart; + const chartArea = chart.chartArea; + const opts = chart.options; + const animationOpts = opts.animation; + const centerX = (chartArea.left + chartArea.right) / 2; + const centerY = (chartArea.top + chartArea.bottom) / 2; + const animateScale = reset && animationOpts.animateScale; + const innerRadius = animateScale ? 0 : this.innerRadius; + const outerRadius = animateScale ? 0 : this.outerRadius; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + let startAngle = this._getRotation(); + let i; + for (i = 0; i < start; ++i) { + startAngle += this._circumference(i, reset); + } + for (i = start; i < start + count; ++i) { + const circumference = this._circumference(i, reset); + const arc = arcs[i]; + const properties = { + x: centerX + this.offsetX, + y: centerY + this.offsetY, + startAngle, + endAngle: startAngle + circumference, + circumference, + outerRadius, + innerRadius + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode); + } + startAngle += circumference; + this.updateElement(arc, i, properties, mode); + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + calculateTotal() { + const meta = this._cachedMeta; + const metaData = meta.data; + let total = 0; + let i; + for (i = 0; i < metaData.length; i++) { + const value = meta._parsed[i]; + if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) { + total += Math.abs(value); + } + } + return total; + } + calculateCircumference(value) { + const total = this._cachedMeta.total; + if (total > 0 && !isNaN(value)) { + return TAU * (Math.abs(value) / total); + } + return 0; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const chart = this.chart; + const labels = chart.data.labels || []; + const value = formatNumber(meta._parsed[index], chart.options.locale); + return { + label: labels[index] || '', + value, + }; + } + getMaxBorderWidth(arcs) { + let max = 0; + const chart = this.chart; + let i, ilen, meta, controller, options; + if (!arcs) { + for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { + if (chart.isDatasetVisible(i)) { + meta = chart.getDatasetMeta(i); + arcs = meta.data; + controller = meta.controller; + break; + } + } + } + if (!arcs) { + return 0; + } + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + options = controller.resolveDataElementOptions(i); + if (options.borderAlign !== 'inner') { + max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0); + } + } + return max; + } + getMaxOffset(arcs) { + let max = 0; + for (let i = 0, ilen = arcs.length; i < ilen; ++i) { + const options = this.resolveDataElementOptions(i); + max = Math.max(max, options.offset || 0, options.hoverOffset || 0); + } + return max; + } + _getRingWeightOffset(datasetIndex) { + let ringWeightOffset = 0; + for (let i = 0; i < datasetIndex; ++i) { + if (this.chart.isDatasetVisible(i)) { + ringWeightOffset += this._getRingWeight(i); + } + } + return ringWeightOffset; + } + _getRingWeight(datasetIndex) { + return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0); + } + _getVisibleDatasetWeightTotal() { + return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; + } +} +DoughnutController.id = 'doughnut'; +DoughnutController.defaults = { + datasetElementType: false, + dataElementType: 'arc', + animation: { + animateRotate: true, + animateScale: false + }, + 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', +}; +DoughnutController.descriptors = { + _scriptable: (name) => name !== 'spacing', + _indexable: (name) => name !== 'spacing', +}; +DoughnutController.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + const {labels: {pointStyle}} = chart.legend.options; + return data.labels.map((label, i) => { + const meta = chart.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + strokeStyle: style.borderColor, + lineWidth: style.borderWidth, + pointStyle: pointStyle, + hidden: !chart.getDataVisibility(i), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + }, + tooltip: { + callbacks: { + title() { + return ''; + }, + label(tooltipItem) { + let dataLabel = tooltipItem.label; + const value = ': ' + tooltipItem.formattedValue; + if (isArray(dataLabel)) { + dataLabel = dataLabel.slice(); + dataLabel[0] += value; + } else { + dataLabel += value; + } + return dataLabel; + } + } + } + } +}; + +class LineController extends DatasetController { + initialize() { + this.enableOptionSharing = true; + super.initialize(); + } + update(mode) { + const meta = this._cachedMeta; + const {dataset: line, data: points = [], _dataset} = meta; + const animationsDisabled = this.chart._animationsDisabled; + let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled); + this._drawStart = start; + this._drawCount = count; + if (scaleRangesChanged(meta)) { + start = 0; + count = points.length; + } + line._chart = this.chart; + line._datasetIndex = this.index; + line._decimated = !!_dataset._decimated; + line.points = points; + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + options.segment = this.options.segment; + this.updateElement(line, undefined, { + animated: !animationsDisabled, + options + }, mode); + this.updateElements(points, start, count, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === 'reset'; + const {iScale, vScale, _stacked, _dataset} = this._cachedMeta; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const {spanGaps, segment} = this.options; + const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY; + const directUpdate = this.chart._animationsDisabled || reset || mode === 'none'; + let prevParsed = start > 0 && this.getParsed(start - 1); + for (let i = start; i < start + count; ++i) { + const point = points[i]; + const parsed = this.getParsed(i); + const properties = directUpdate ? point : {}; + const nullData = isNullOrUndef(parsed[vAxis]); + const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i); + const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i); + properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData; + properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength; + if (segment) { + properties.parsed = parsed; + properties.raw = _dataset.data[i]; + } + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode); + } + if (!directUpdate) { + this.updateElement(point, i, properties, mode); + } + prevParsed = parsed; + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + getMaxOverflow() { + const meta = this._cachedMeta; + const dataset = meta.dataset; + const border = dataset.options && dataset.options.borderWidth || 0; + const data = meta.data || []; + if (!data.length) { + return border; + } + const firstPoint = data[0].size(this.resolveDataElementOptions(0)); + const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1)); + return Math.max(border, firstPoint, lastPoint) / 2; + } + draw() { + const meta = this._cachedMeta; + meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis); + super.draw(); + } +} +LineController.id = 'line'; +LineController.defaults = { + datasetElementType: 'line', + dataElementType: 'point', + showLine: true, + spanGaps: false, +}; +LineController.overrides = { + scales: { + _index_: { + type: 'category', + }, + _value_: { + type: 'linear', + }, + } +}; +function getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) { + const pointCount = points.length; + let start = 0; + let count = pointCount; + if (meta._sorted) { + const {iScale, _parsed} = meta; + const axis = iScale.axis; + const {min, max, minDefined, maxDefined} = iScale.getUserBounds(); + if (minDefined) { + start = _limitValue(Math.min( + _lookupByKey(_parsed, iScale.axis, min).lo, + animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), + 0, pointCount - 1); + } + if (maxDefined) { + count = _limitValue(Math.max( + _lookupByKey(_parsed, iScale.axis, max).hi + 1, + animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), + start, pointCount) - start; + } else { + count = pointCount - start; + } + } + return {start, count}; +} +function scaleRangesChanged(meta) { + const {xScale, yScale, _scaleRanges} = meta; + const newRanges = { + xmin: xScale.min, + xmax: xScale.max, + ymin: yScale.min, + ymax: yScale.max + }; + if (!_scaleRanges) { + meta._scaleRanges = newRanges; + return true; + } + const changed = _scaleRanges.xmin !== xScale.min + || _scaleRanges.xmax !== xScale.max + || _scaleRanges.ymin !== yScale.min + || _scaleRanges.ymax !== yScale.max; + Object.assign(_scaleRanges, newRanges); + return changed; +} + +class PolarAreaController extends DatasetController { + constructor(chart, datasetIndex) { + super(chart, datasetIndex); + this.innerRadius = undefined; + this.outerRadius = undefined; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const chart = this.chart; + const labels = chart.data.labels || []; + const value = formatNumber(meta._parsed[index].r, chart.options.locale); + return { + label: labels[index] || '', + value, + }; + } + update(mode) { + const arcs = this._cachedMeta.data; + this._updateRadius(); + this.updateElements(arcs, 0, arcs.length, mode); + } + _updateRadius() { + const chart = this.chart; + const chartArea = chart.chartArea; + const opts = chart.options; + const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); + const outerRadius = Math.max(minSize / 2, 0); + const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); + const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount(); + this.outerRadius = outerRadius - (radiusLength * this.index); + this.innerRadius = this.outerRadius - radiusLength; + } + updateElements(arcs, start, count, mode) { + const reset = mode === 'reset'; + const chart = this.chart; + const dataset = this.getDataset(); + const opts = chart.options; + const animationOpts = opts.animation; + const scale = this._cachedMeta.rScale; + const centerX = scale.xCenter; + const centerY = scale.yCenter; + const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI; + let angle = datasetStartAngle; + let i; + const defaultAngle = 360 / this.countVisibleElements(); + for (i = 0; i < start; ++i) { + angle += this._computeAngle(i, mode, defaultAngle); + } + for (i = start; i < start + count; i++) { + const arc = arcs[i]; + let startAngle = angle; + let endAngle = angle + this._computeAngle(i, mode, defaultAngle); + let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0; + angle = endAngle; + if (reset) { + if (animationOpts.animateScale) { + outerRadius = 0; + } + if (animationOpts.animateRotate) { + startAngle = endAngle = datasetStartAngle; + } + } + const properties = { + x: centerX, + y: centerY, + innerRadius: 0, + outerRadius, + startAngle, + endAngle, + options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode) + }; + this.updateElement(arc, i, properties, mode); + } + } + countVisibleElements() { + const dataset = this.getDataset(); + const meta = this._cachedMeta; + let count = 0; + meta.data.forEach((element, index) => { + if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) { + count++; + } + }); + return count; + } + _computeAngle(index, mode, defaultAngle) { + return this.chart.getDataVisibility(index) + ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) + : 0; + } +} +PolarAreaController.id = 'polarArea'; +PolarAreaController.defaults = { + dataElementType: 'arc', + animation: { + animateRotate: true, + animateScale: true + }, + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'] + }, + }, + indexAxis: 'r', + startAngle: 0, +}; +PolarAreaController.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + const {labels: {pointStyle}} = chart.legend.options; + return data.labels.map((label, i) => { + const meta = chart.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + strokeStyle: style.borderColor, + lineWidth: style.borderWidth, + pointStyle: pointStyle, + hidden: !chart.getDataVisibility(i), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + }, + tooltip: { + callbacks: { + title() { + return ''; + }, + label(context) { + return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue; + } + } + } + }, + scales: { + r: { + type: 'radialLinear', + angleLines: { + display: false + }, + beginAtZero: true, + grid: { + circular: true + }, + pointLabels: { + display: false + }, + startAngle: 0 + } + } +}; + +class PieController extends DoughnutController { +} +PieController.id = 'pie'; +PieController.defaults = { + cutout: 0, + rotation: 0, + circumference: 360, + radius: '100%' +}; + +class RadarController extends DatasetController { + getLabelAndValue(index) { + const vScale = this._cachedMeta.vScale; + const parsed = this.getParsed(index); + return { + label: vScale.getLabels()[index], + value: '' + vScale.getLabelForValue(parsed[vScale.axis]) + }; + } + update(mode) { + const meta = this._cachedMeta; + const line = meta.dataset; + const points = meta.data || []; + const labels = meta.iScale.getLabels(); + line.points = points; + if (mode !== 'resize') { + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + const properties = { + _loop: true, + _fullLoop: labels.length === points.length, + options + }; + this.updateElement(line, undefined, properties, mode); + } + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const dataset = this.getDataset(); + const scale = this._cachedMeta.rScale; + const reset = mode === 'reset'; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode); + const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]); + const x = reset ? scale.xCenter : pointPosition.x; + const y = reset ? scale.yCenter : pointPosition.y; + const properties = { + x, + y, + angle: pointPosition.angle, + skip: isNaN(x) || isNaN(y), + options + }; + this.updateElement(point, i, properties, mode); + } + } +} +RadarController.id = 'radar'; +RadarController.defaults = { + datasetElementType: 'line', + dataElementType: 'point', + indexAxis: 'r', + showLine: true, + elements: { + line: { + fill: 'start' + } + }, +}; +RadarController.overrides = { + aspectRatio: 1, + scales: { + r: { + type: 'radialLinear', + } + } +}; + +class ScatterController extends LineController { +} +ScatterController.id = 'scatter'; +ScatterController.defaults = { + showLine: false, + fill: false +}; +ScatterController.overrides = { + interaction: { + mode: 'point' + }, + plugins: { + tooltip: { + callbacks: { + title() { + return ''; + }, + label(item) { + return '(' + item.label + ', ' + item.formattedValue + ')'; + } + } + } + }, + scales: { + x: { + type: 'linear' + }, + y: { + type: 'linear' + } + } +}; + +var controllers = /*#__PURE__*/Object.freeze({ +__proto__: null, +BarController: BarController, +BubbleController: BubbleController, +DoughnutController: DoughnutController, +LineController: LineController, +PolarAreaController: PolarAreaController, +PieController: PieController, +RadarController: RadarController, +ScatterController: ScatterController +}); + +function abstract() { + throw new Error('This method is not implemented: Check that a complete date adapter is provided.'); +} +class DateAdapter { + constructor(options) { + this.options = options || {}; + } + formats() { + return abstract(); + } + parse(value, format) { + return abstract(); + } + format(timestamp, format) { + return abstract(); + } + add(timestamp, amount, unit) { + return abstract(); + } + diff(a, b, unit) { + return abstract(); + } + startOf(timestamp, unit, weekday) { + return abstract(); + } + endOf(timestamp, unit) { + return abstract(); + } +} +DateAdapter.override = function(members) { + Object.assign(DateAdapter.prototype, members); +}; +var adapters = { + _date: DateAdapter +}; + +function getRelativePosition(e, chart) { + if ('native' in e) { + return { + x: e.x, + y: e.y + }; + } + return getRelativePosition$1(e, chart); +} +function evaluateAllVisibleItems(chart, handler) { + const metasets = chart.getSortedVisibleDatasetMetas(); + let index, data, element; + for (let i = 0, ilen = metasets.length; i < ilen; ++i) { + ({index, data} = metasets[i]); + for (let j = 0, jlen = data.length; j < jlen; ++j) { + element = data[j]; + if (!element.skip) { + handler(element, index, j); + } + } + } +} +function binarySearch(metaset, axis, value, intersect) { + const {controller, data, _sorted} = metaset; + const iScale = controller._cachedMeta.iScale; + if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) { + const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey; + if (!intersect) { + return lookupMethod(data, axis, value); + } else if (controller._sharedOptions) { + const el = data[0]; + const range = typeof el.getRange === 'function' && el.getRange(axis); + if (range) { + const start = lookupMethod(data, axis, value - range); + const end = lookupMethod(data, axis, value + range); + return {lo: start.lo, hi: end.hi}; + } + } + } + return {lo: 0, hi: data.length - 1}; +} +function optimizedEvaluateItems(chart, axis, position, handler, intersect) { + const metasets = chart.getSortedVisibleDatasetMetas(); + const value = position[axis]; + for (let i = 0, ilen = metasets.length; i < ilen; ++i) { + const {index, data} = metasets[i]; + const {lo, hi} = binarySearch(metasets[i], axis, value, intersect); + for (let j = lo; j <= hi; ++j) { + const element = data[j]; + if (!element.skip) { + handler(element, index, j); + } + } + } +} +function getDistanceMetricForAxis(axis) { + const useX = axis.indexOf('x') !== -1; + const useY = axis.indexOf('y') !== -1; + return function(pt1, pt2) { + const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; + const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; + return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); + }; +} +function getIntersectItems(chart, position, axis, useFinalPosition) { + const items = []; + if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) { + return items; + } + const evaluationFunc = function(element, datasetIndex, index) { + if (element.inRange(position.x, position.y, useFinalPosition)) { + items.push({element, datasetIndex, index}); + } + }; + optimizedEvaluateItems(chart, axis, position, evaluationFunc, true); + return items; +} +function getNearestRadialItems(chart, position, axis, useFinalPosition) { + let items = []; + function evaluationFunc(element, datasetIndex, index) { + const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition); + const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y}); + if (_angleBetween(angle, startAngle, endAngle)) { + items.push({element, datasetIndex, index}); + } + } + optimizedEvaluateItems(chart, axis, position, evaluationFunc); + return items; +} +function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) { + let items = []; + const distanceMetric = getDistanceMetricForAxis(axis); + let minDistance = Number.POSITIVE_INFINITY; + function evaluationFunc(element, datasetIndex, index) { + const inRange = element.inRange(position.x, position.y, useFinalPosition); + if (intersect && !inRange) { + return; + } + const center = element.getCenterPoint(useFinalPosition); + const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding); + if (!pointInArea && !inRange) { + return; + } + const distance = distanceMetric(position, center); + if (distance < minDistance) { + items = [{element, datasetIndex, index}]; + minDistance = distance; + } else if (distance === minDistance) { + items.push({element, datasetIndex, index}); + } + } + optimizedEvaluateItems(chart, axis, position, evaluationFunc); + return items; +} +function getNearestItems(chart, position, axis, intersect, useFinalPosition) { + if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) { + return []; + } + return axis === 'r' && !intersect + ? getNearestRadialItems(chart, position, axis, useFinalPosition) + : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition); +} +function getAxisItems(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const items = []; + const axis = options.axis; + const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange'; + let intersectsItem = false; + evaluateAllVisibleItems(chart, (element, datasetIndex, index) => { + if (element[rangeMethod](position[axis], useFinalPosition)) { + items.push({element, datasetIndex, index}); + } + if (element.inRange(position.x, position.y, useFinalPosition)) { + intersectsItem = true; + } + }); + if (options.intersect && !intersectsItem) { + return []; + } + return items; +} +var Interaction = { + modes: { + index(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'x'; + const items = options.intersect + ? getIntersectItems(chart, position, axis, useFinalPosition) + : getNearestItems(chart, position, axis, false, useFinalPosition); + const elements = []; + if (!items.length) { + return []; + } + chart.getSortedVisibleDatasetMetas().forEach((meta) => { + const index = items[0].index; + const element = meta.data[index]; + if (element && !element.skip) { + elements.push({element, datasetIndex: meta.index, index}); + } + }); + return elements; + }, + dataset(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + let items = options.intersect + ? getIntersectItems(chart, position, axis, useFinalPosition) : + getNearestItems(chart, position, axis, false, useFinalPosition); + if (items.length > 0) { + const datasetIndex = items[0].datasetIndex; + const data = chart.getDatasetMeta(datasetIndex).data; + items = []; + for (let i = 0; i < data.length; ++i) { + items.push({element: data[i], datasetIndex, index: i}); + } + } + return items; + }, + point(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + return getIntersectItems(chart, position, axis, useFinalPosition); + }, + nearest(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + return getNearestItems(chart, position, axis, options.intersect, useFinalPosition); + }, + x(chart, e, options, useFinalPosition) { + return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition); + }, + y(chart, e, options, useFinalPosition) { + return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition); + } + } +}; + +const STATIC_POSITIONS = ['left', 'top', 'right', 'bottom']; +function filterByPosition(array, position) { + return array.filter(v => v.pos === position); +} +function filterDynamicPositionByAxis(array, axis) { + return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis); +} +function sortByWeight(array, reverse) { + return array.sort((a, b) => { + const v0 = reverse ? b : a; + const v1 = reverse ? a : b; + return v0.weight === v1.weight ? + v0.index - v1.index : + v0.weight - v1.weight; + }); +} +function wrapBoxes(boxes) { + const layoutBoxes = []; + let i, ilen, box, pos, stack, stackWeight; + for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { + box = boxes[i]; + ({position: pos, options: {stack, stackWeight = 1}} = box); + layoutBoxes.push({ + index: i, + box, + pos, + horizontal: box.isHorizontal(), + weight: box.weight, + stack: stack && (pos + stack), + stackWeight + }); + } + return layoutBoxes; +} +function buildStacks(layouts) { + const stacks = {}; + for (const wrap of layouts) { + const {stack, pos, stackWeight} = wrap; + if (!stack || !STATIC_POSITIONS.includes(pos)) { + continue; + } + const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0}); + _stack.count++; + _stack.weight += stackWeight; + } + return stacks; +} +function setLayoutDims(layouts, params) { + const stacks = buildStacks(layouts); + const {vBoxMaxWidth, hBoxMaxHeight} = params; + let i, ilen, layout; + for (i = 0, ilen = layouts.length; i < ilen; ++i) { + layout = layouts[i]; + const {fullSize} = layout.box; + const stack = stacks[layout.stack]; + const factor = stack && layout.stackWeight / stack.weight; + if (layout.horizontal) { + layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth; + layout.height = hBoxMaxHeight; + } else { + layout.width = vBoxMaxWidth; + layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight; + } + } + return stacks; +} +function buildLayoutBoxes(boxes) { + const layoutBoxes = wrapBoxes(boxes); + const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true); + const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true); + const right = sortByWeight(filterByPosition(layoutBoxes, 'right')); + const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true); + const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom')); + const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x'); + const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y'); + return { + fullSize, + leftAndTop: left.concat(top), + rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal), + chartArea: filterByPosition(layoutBoxes, 'chartArea'), + vertical: left.concat(right).concat(centerVertical), + horizontal: top.concat(bottom).concat(centerHorizontal) + }; +} +function getCombinedMax(maxPadding, chartArea, a, b) { + return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); +} +function updateMaxPadding(maxPadding, boxPadding) { + maxPadding.top = Math.max(maxPadding.top, boxPadding.top); + maxPadding.left = Math.max(maxPadding.left, boxPadding.left); + maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); + maxPadding.right = Math.max(maxPadding.right, boxPadding.right); +} +function updateDims(chartArea, params, layout, stacks) { + const {pos, box} = layout; + const maxPadding = chartArea.maxPadding; + if (!isObject(pos)) { + if (layout.size) { + chartArea[pos] -= layout.size; + } + const stack = stacks[layout.stack] || {size: 0, count: 1}; + stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width); + layout.size = stack.size / stack.count; + chartArea[pos] += layout.size; + } + if (box.getPadding) { + updateMaxPadding(maxPadding, box.getPadding()); + } + const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right')); + const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom')); + const widthChanged = newWidth !== chartArea.w; + const heightChanged = newHeight !== chartArea.h; + chartArea.w = newWidth; + chartArea.h = newHeight; + return layout.horizontal + ? {same: widthChanged, other: heightChanged} + : {same: heightChanged, other: widthChanged}; +} +function handleMaxPadding(chartArea) { + const maxPadding = chartArea.maxPadding; + function updatePos(pos) { + const change = Math.max(maxPadding[pos] - chartArea[pos], 0); + chartArea[pos] += change; + return change; + } + chartArea.y += updatePos('top'); + chartArea.x += updatePos('left'); + updatePos('right'); + updatePos('bottom'); +} +function getMargins(horizontal, chartArea) { + const maxPadding = chartArea.maxPadding; + function marginForPositions(positions) { + const margin = {left: 0, top: 0, right: 0, bottom: 0}; + positions.forEach((pos) => { + margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); + }); + return margin; + } + return horizontal + ? marginForPositions(['left', 'right']) + : marginForPositions(['top', 'bottom']); +} +function fitBoxes(boxes, chartArea, params, stacks) { + const refitBoxes = []; + let i, ilen, layout, box, refit, changed; + for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { + layout = boxes[i]; + box = layout.box; + box.update( + layout.width || chartArea.w, + layout.height || chartArea.h, + getMargins(layout.horizontal, chartArea) + ); + const {same, other} = updateDims(chartArea, params, layout, stacks); + refit |= same && refitBoxes.length; + changed = changed || other; + if (!box.fullSize) { + refitBoxes.push(layout); + } + } + return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed; +} +function setBoxDims(box, left, top, width, height) { + box.top = top; + box.left = left; + box.right = left + width; + box.bottom = top + height; + box.width = width; + box.height = height; +} +function placeBoxes(boxes, chartArea, params, stacks) { + const userPadding = params.padding; + let {x, y} = chartArea; + for (const layout of boxes) { + const box = layout.box; + const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1}; + const weight = (layout.stackWeight / stack.weight) || 1; + if (layout.horizontal) { + const width = chartArea.w * weight; + const height = stack.size || box.height; + if (defined(stack.start)) { + y = stack.start; + } + if (box.fullSize) { + setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height); + } else { + setBoxDims(box, chartArea.left + stack.placed, y, width, height); + } + stack.start = y; + stack.placed += width; + y = box.bottom; + } else { + const height = chartArea.h * weight; + const width = stack.size || box.width; + if (defined(stack.start)) { + x = stack.start; + } + if (box.fullSize) { + setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top); + } else { + setBoxDims(box, x, chartArea.top + stack.placed, width, height); + } + stack.start = x; + stack.placed += height; + x = box.right; + } + } + chartArea.x = x; + chartArea.y = y; +} +defaults.set('layout', { + autoPadding: true, + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0 + } +}); +var layouts = { + addBox(chart, item) { + if (!chart.boxes) { + chart.boxes = []; + } + item.fullSize = item.fullSize || false; + item.position = item.position || 'top'; + item.weight = item.weight || 0; + item._layers = item._layers || function() { + return [{ + z: 0, + draw(chartArea) { + item.draw(chartArea); + } + }]; + }; + chart.boxes.push(item); + }, + removeBox(chart, layoutItem) { + const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; + if (index !== -1) { + chart.boxes.splice(index, 1); + } + }, + configure(chart, item, options) { + item.fullSize = options.fullSize; + item.position = options.position; + item.weight = options.weight; + }, + update(chart, width, height, minPadding) { + if (!chart) { + return; + } + const padding = toPadding(chart.options.layout.padding); + const availableWidth = Math.max(width - padding.width, 0); + const availableHeight = Math.max(height - padding.height, 0); + const boxes = buildLayoutBoxes(chart.boxes); + const verticalBoxes = boxes.vertical; + const horizontalBoxes = boxes.horizontal; + each(chart.boxes, box => { + if (typeof box.beforeLayout === 'function') { + box.beforeLayout(); + } + }); + const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => + wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1; + const params = Object.freeze({ + outerWidth: width, + outerHeight: height, + padding, + availableWidth, + availableHeight, + vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount, + hBoxMaxHeight: availableHeight / 2 + }); + const maxPadding = Object.assign({}, padding); + updateMaxPadding(maxPadding, toPadding(minPadding)); + const chartArea = Object.assign({ + maxPadding, + w: availableWidth, + h: availableHeight, + x: padding.left, + y: padding.top + }, padding); + const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); + fitBoxes(boxes.fullSize, chartArea, params, stacks); + fitBoxes(verticalBoxes, chartArea, params, stacks); + if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) { + fitBoxes(verticalBoxes, chartArea, params, stacks); + } + handleMaxPadding(chartArea); + placeBoxes(boxes.leftAndTop, chartArea, params, stacks); + chartArea.x += chartArea.w; + chartArea.y += chartArea.h; + placeBoxes(boxes.rightAndBottom, chartArea, params, stacks); + chart.chartArea = { + left: chartArea.left, + top: chartArea.top, + right: chartArea.left + chartArea.w, + bottom: chartArea.top + chartArea.h, + height: chartArea.h, + width: chartArea.w, + }; + each(boxes.chartArea, (layout) => { + const box = layout.box; + Object.assign(box, chart.chartArea); + box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0}); + }); + } +}; + +class BasePlatform { + acquireContext(canvas, aspectRatio) {} + releaseContext(context) { + return false; + } + addEventListener(chart, type, listener) {} + removeEventListener(chart, type, listener) {} + getDevicePixelRatio() { + return 1; + } + getMaximumSize(element, width, height, aspectRatio) { + width = Math.max(0, width || element.width); + height = height || element.height; + return { + width, + height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height) + }; + } + isAttached(canvas) { + return true; + } + updateConfig(config) { + } +} + +class BasicPlatform extends BasePlatform { + acquireContext(item) { + return item && item.getContext && item.getContext('2d') || null; + } + updateConfig(config) { + config.options.animation = false; + } +} + +const EXPANDO_KEY = '$chartjs'; +const EVENT_TYPES = { + touchstart: 'mousedown', + touchmove: 'mousemove', + touchend: 'mouseup', + pointerenter: 'mouseenter', + pointerdown: 'mousedown', + pointermove: 'mousemove', + pointerup: 'mouseup', + pointerleave: 'mouseout', + pointerout: 'mouseout' +}; +const isNullOrEmpty = value => value === null || value === ''; +function initCanvas(canvas, aspectRatio) { + const style = canvas.style; + const renderHeight = canvas.getAttribute('height'); + const renderWidth = canvas.getAttribute('width'); + canvas[EXPANDO_KEY] = { + initial: { + height: renderHeight, + width: renderWidth, + style: { + display: style.display, + height: style.height, + width: style.width + } + } + }; + style.display = style.display || 'block'; + style.boxSizing = style.boxSizing || 'border-box'; + if (isNullOrEmpty(renderWidth)) { + const displayWidth = readUsedSize(canvas, 'width'); + if (displayWidth !== undefined) { + canvas.width = displayWidth; + } + } + if (isNullOrEmpty(renderHeight)) { + if (canvas.style.height === '') { + canvas.height = canvas.width / (aspectRatio || 2); + } else { + const displayHeight = readUsedSize(canvas, 'height'); + if (displayHeight !== undefined) { + canvas.height = displayHeight; + } + } + } + return canvas; +} +const eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false; +function addListener(node, type, listener) { + node.addEventListener(type, listener, eventListenerOptions); +} +function removeListener(chart, type, listener) { + chart.canvas.removeEventListener(type, listener, eventListenerOptions); +} +function fromNativeEvent(event, chart) { + const type = EVENT_TYPES[event.type] || event.type; + const {x, y} = getRelativePosition$1(event, chart); + return { + type, + chart, + native: event, + x: x !== undefined ? x : null, + y: y !== undefined ? y : null, + }; +} +function nodeListContains(nodeList, canvas) { + for (const node of nodeList) { + if (node === canvas || node.contains(canvas)) { + return true; + } + } +} +function createAttachObserver(chart, type, listener) { + const canvas = chart.canvas; + const observer = new MutationObserver(entries => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.addedNodes, canvas); + trigger = trigger && !nodeListContains(entry.removedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, {childList: true, subtree: true}); + return observer; +} +function createDetachObserver(chart, type, listener) { + const canvas = chart.canvas; + const observer = new MutationObserver(entries => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.removedNodes, canvas); + trigger = trigger && !nodeListContains(entry.addedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, {childList: true, subtree: true}); + return observer; +} +const drpListeningCharts = new Map(); +let oldDevicePixelRatio = 0; +function onWindowResize() { + const dpr = window.devicePixelRatio; + if (dpr === oldDevicePixelRatio) { + return; + } + oldDevicePixelRatio = dpr; + drpListeningCharts.forEach((resize, chart) => { + if (chart.currentDevicePixelRatio !== dpr) { + resize(); + } + }); +} +function listenDevicePixelRatioChanges(chart, resize) { + if (!drpListeningCharts.size) { + window.addEventListener('resize', onWindowResize); + } + drpListeningCharts.set(chart, resize); +} +function unlistenDevicePixelRatioChanges(chart) { + drpListeningCharts.delete(chart); + if (!drpListeningCharts.size) { + window.removeEventListener('resize', onWindowResize); + } +} +function createResizeObserver(chart, type, listener) { + const canvas = chart.canvas; + const container = canvas && _getParentNode(canvas); + if (!container) { + return; + } + const resize = throttled((width, height) => { + const w = container.clientWidth; + listener(width, height); + if (w < container.clientWidth) { + listener(); + } + }, window); + const observer = new ResizeObserver(entries => { + const entry = entries[0]; + const width = entry.contentRect.width; + const height = entry.contentRect.height; + if (width === 0 && height === 0) { + return; + } + resize(width, height); + }); + observer.observe(container); + listenDevicePixelRatioChanges(chart, resize); + return observer; +} +function releaseObserver(chart, type, observer) { + if (observer) { + observer.disconnect(); + } + if (type === 'resize') { + unlistenDevicePixelRatioChanges(chart); + } +} +function createProxyAndListen(chart, type, listener) { + const canvas = chart.canvas; + const proxy = throttled((event) => { + if (chart.ctx !== null) { + listener(fromNativeEvent(event, chart)); + } + }, chart, (args) => { + const event = args[0]; + return [event, event.offsetX, event.offsetY]; + }); + addListener(canvas, type, proxy); + return proxy; +} +class DomPlatform extends BasePlatform { + acquireContext(canvas, aspectRatio) { + const context = canvas && canvas.getContext && canvas.getContext('2d'); + if (context && context.canvas === canvas) { + initCanvas(canvas, aspectRatio); + return context; + } + return null; + } + releaseContext(context) { + const canvas = context.canvas; + if (!canvas[EXPANDO_KEY]) { + return false; + } + const initial = canvas[EXPANDO_KEY].initial; + ['height', 'width'].forEach((prop) => { + const value = initial[prop]; + if (isNullOrUndef(value)) { + canvas.removeAttribute(prop); + } else { + canvas.setAttribute(prop, value); + } + }); + const style = initial.style || {}; + Object.keys(style).forEach((key) => { + canvas.style[key] = style[key]; + }); + canvas.width = canvas.width; + delete canvas[EXPANDO_KEY]; + return true; + } + addEventListener(chart, type, listener) { + this.removeEventListener(chart, type); + const proxies = chart.$proxies || (chart.$proxies = {}); + const handlers = { + attach: createAttachObserver, + detach: createDetachObserver, + resize: createResizeObserver + }; + const handler = handlers[type] || createProxyAndListen; + proxies[type] = handler(chart, type, listener); + } + removeEventListener(chart, type) { + const proxies = chart.$proxies || (chart.$proxies = {}); + const proxy = proxies[type]; + if (!proxy) { + return; + } + const handlers = { + attach: releaseObserver, + detach: releaseObserver, + resize: releaseObserver + }; + const handler = handlers[type] || removeListener; + handler(chart, type, proxy); + proxies[type] = undefined; + } + getDevicePixelRatio() { + return window.devicePixelRatio; + } + getMaximumSize(canvas, width, height, aspectRatio) { + return getMaximumSize(canvas, width, height, aspectRatio); + } + isAttached(canvas) { + const container = _getParentNode(canvas); + return !!(container && container.isConnected); + } +} + +function _detectPlatform(canvas) { + if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) { + return BasicPlatform; + } + return DomPlatform; +} + +class Element { + constructor() { + this.x = undefined; + this.y = undefined; + this.active = false; + this.options = undefined; + this.$animations = undefined; + } + tooltipPosition(useFinalPosition) { + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return {x, y}; + } + hasValue() { + return isNumber(this.x) && isNumber(this.y); + } + getProps(props, final) { + const anims = this.$animations; + if (!final || !anims) { + return this; + } + const ret = {}; + props.forEach(prop => { + ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop]; + }); + return ret; + } +} +Element.defaults = {}; +Element.defaultRoutes = undefined; + +const formatters = { + values(value) { + return isArray(value) ? value : '' + value; + }, + numeric(tickValue, index, ticks) { + if (tickValue === 0) { + return '0'; + } + const locale = this.chart.options.locale; + let notation; + let delta = tickValue; + if (ticks.length > 1) { + const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value)); + if (maxTick < 1e-4 || maxTick > 1e+15) { + notation = 'scientific'; + } + delta = calculateDelta(tickValue, ticks); + } + const logDelta = log10(Math.abs(delta)); + const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); + const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal}; + Object.assign(options, this.options.ticks.format); + return formatNumber(tickValue, locale, options); + }, + logarithmic(tickValue, index, ticks) { + if (tickValue === 0) { + return '0'; + } + const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue)))); + if (remain === 1 || remain === 2 || remain === 5) { + return formatters.numeric.call(this, tickValue, index, ticks); + } + return ''; + } +}; +function calculateDelta(tickValue, ticks) { + let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value; + if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) { + delta = tickValue - Math.floor(tickValue); + } + return delta; +} +var Ticks = {formatters}; + +defaults.set('scale', { + display: true, + offset: false, + reverse: false, + beginAtZero: false, + bounds: 'ticks', + grace: 0, + grid: { + display: true, + lineWidth: 1, + drawBorder: true, + drawOnChartArea: true, + drawTicks: true, + tickLength: 8, + tickWidth: (_ctx, options) => options.lineWidth, + tickColor: (_ctx, options) => options.color, + offset: false, + borderDash: [], + borderDashOffset: 0.0, + borderWidth: 1 + }, + title: { + display: false, + text: '', + padding: { + top: 4, + bottom: 4 + } + }, + ticks: { + minRotation: 0, + maxRotation: 50, + mirror: false, + textStrokeWidth: 0, + textStrokeColor: '', + padding: 3, + display: true, + autoSkip: true, + autoSkipPadding: 3, + labelOffset: 0, + callback: Ticks.formatters.values, + minor: {}, + major: {}, + align: 'center', + crossAlign: 'near', + showLabelBackdrop: false, + backdropColor: 'rgba(255, 255, 255, 0.75)', + backdropPadding: 2, + } +}); +defaults.route('scale.ticks', 'color', '', 'color'); +defaults.route('scale.grid', 'color', '', 'borderColor'); +defaults.route('scale.grid', 'borderColor', '', 'borderColor'); +defaults.route('scale.title', 'color', '', 'color'); +defaults.describe('scale', { + _fallback: false, + _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser', + _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash', +}); +defaults.describe('scales', { + _fallback: 'scale', +}); +defaults.describe('scale.ticks', { + _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback', + _indexable: (name) => name !== 'backdropPadding', +}); + +function autoSkip(scale, ticks) { + const tickOpts = scale.options.ticks; + const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale); + const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : []; + const numMajorIndices = majorIndices.length; + const first = majorIndices[0]; + const last = majorIndices[numMajorIndices - 1]; + const newTicks = []; + if (numMajorIndices > ticksLimit) { + skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit); + return newTicks; + } + const spacing = calculateSpacing(majorIndices, ticks, ticksLimit); + if (numMajorIndices > 0) { + let i, ilen; + const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null; + skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first); + for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) { + skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]); + } + skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing); + return newTicks; + } + skip(ticks, newTicks, spacing); + return newTicks; +} +function determineMaxTicks(scale) { + const offset = scale.options.offset; + const tickLength = scale._tickSize(); + const maxScale = scale._length / tickLength + (offset ? 0 : 1); + const maxChart = scale._maxLength / tickLength; + return Math.floor(Math.min(maxScale, maxChart)); +} +function calculateSpacing(majorIndices, ticks, ticksLimit) { + const evenMajorSpacing = getEvenSpacing(majorIndices); + const spacing = ticks.length / ticksLimit; + if (!evenMajorSpacing) { + return Math.max(spacing, 1); + } + const factors = _factorize(evenMajorSpacing); + for (let i = 0, ilen = factors.length - 1; i < ilen; i++) { + const factor = factors[i]; + if (factor > spacing) { + return factor; + } + } + return Math.max(spacing, 1); +} +function getMajorIndices(ticks) { + const result = []; + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (ticks[i].major) { + result.push(i); + } + } + return result; +} +function skipMajors(ticks, newTicks, majorIndices, spacing) { + let count = 0; + let next = majorIndices[0]; + let i; + spacing = Math.ceil(spacing); + for (i = 0; i < ticks.length; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = majorIndices[count * spacing]; + } + } +} +function skip(ticks, newTicks, spacing, majorStart, majorEnd) { + const start = valueOrDefault(majorStart, 0); + const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length); + let count = 0; + let length, i, next; + spacing = Math.ceil(spacing); + if (majorEnd) { + length = majorEnd - majorStart; + spacing = length / Math.floor(length / spacing); + } + next = start; + while (next < 0) { + count++; + next = Math.round(start + count * spacing); + } + for (i = Math.max(start, 0); i < end; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = Math.round(start + count * spacing); + } + } +} +function getEvenSpacing(arr) { + const len = arr.length; + let i, diff; + if (len < 2) { + return false; + } + for (diff = arr[0], i = 1; i < len; ++i) { + if (arr[i] - arr[i - 1] !== diff) { + return false; + } + } + return diff; +} + +const reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align; +const offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset; +function sample(arr, numItems) { + const result = []; + const increment = arr.length / numItems; + const len = arr.length; + let i = 0; + for (; i < len; i += increment) { + result.push(arr[Math.floor(i)]); + } + return result; +} +function getPixelForGridLine(scale, index, offsetGridLines) { + const length = scale.ticks.length; + const validIndex = Math.min(index, length - 1); + const start = scale._startPixel; + const end = scale._endPixel; + const epsilon = 1e-6; + let lineValue = scale.getPixelForTick(validIndex); + let offset; + if (offsetGridLines) { + if (length === 1) { + offset = Math.max(lineValue - start, end - lineValue); + } else if (index === 0) { + offset = (scale.getPixelForTick(1) - lineValue) / 2; + } else { + offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2; + } + lineValue += validIndex < index ? offset : -offset; + if (lineValue < start - epsilon || lineValue > end + epsilon) { + return; + } + } + return lineValue; +} +function garbageCollect(caches, length) { + each(caches, (cache) => { + const gc = cache.gc; + const gcLen = gc.length / 2; + let i; + if (gcLen > length) { + for (i = 0; i < gcLen; ++i) { + delete cache.data[gc[i]]; + } + gc.splice(0, gcLen); + } + }); +} +function getTickMarkLength(options) { + return options.drawTicks ? options.tickLength : 0; +} +function getTitleHeight(options, fallback) { + if (!options.display) { + return 0; + } + const font = toFont(options.font, fallback); + const padding = toPadding(options.padding); + const lines = isArray(options.text) ? options.text.length : 1; + return (lines * font.lineHeight) + padding.height; +} +function createScaleContext(parent, scale) { + return createContext(parent, { + scale, + type: 'scale' + }); +} +function createTickContext(parent, index, tick) { + return createContext(parent, { + tick, + index, + type: 'tick' + }); +} +function titleAlign(align, position, reverse) { + let ret = _toLeftRightCenter(align); + if ((reverse && position !== 'right') || (!reverse && position === 'right')) { + ret = reverseAlign(ret); + } + return ret; +} +function titleArgs(scale, offset, position, align) { + const {top, left, bottom, right, chart} = scale; + const {chartArea, scales} = chart; + let rotation = 0; + let maxWidth, titleX, titleY; + const height = bottom - top; + const width = right - left; + if (scale.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleY = scales[positionAxisID].getPixelForValue(value) + height - offset; + } else if (position === 'center') { + titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset; + } else { + titleY = offsetFromEdge(scale, position, offset); + } + maxWidth = right - left; + } else { + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleX = scales[positionAxisID].getPixelForValue(value) - width + offset; + } else if (position === 'center') { + titleX = (chartArea.left + chartArea.right) / 2 - width + offset; + } else { + titleX = offsetFromEdge(scale, position, offset); + } + titleY = _alignStartEnd(align, bottom, top); + rotation = position === 'left' ? -HALF_PI : HALF_PI; + } + return {titleX, titleY, maxWidth, rotation}; +} +class Scale extends Element { + constructor(cfg) { + super(); + this.id = cfg.id; + this.type = cfg.type; + this.options = undefined; + this.ctx = cfg.ctx; + this.chart = cfg.chart; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.width = undefined; + this.height = undefined; + this._margins = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + this.maxWidth = undefined; + this.maxHeight = undefined; + this.paddingTop = undefined; + this.paddingBottom = undefined; + this.paddingLeft = undefined; + this.paddingRight = undefined; + this.axis = undefined; + this.labelRotation = undefined; + this.min = undefined; + this.max = undefined; + this._range = undefined; + this.ticks = []; + this._gridLineItems = null; + this._labelItems = null; + this._labelSizes = null; + this._length = 0; + this._maxLength = 0; + this._longestTextCache = {}; + this._startPixel = undefined; + this._endPixel = undefined; + this._reversePixels = false; + this._userMax = undefined; + this._userMin = undefined; + this._suggestedMax = undefined; + this._suggestedMin = undefined; + this._ticksLength = 0; + this._borderValue = 0; + this._cache = {}; + this._dataLimitsCached = false; + this.$context = undefined; + } + init(options) { + this.options = options.setContext(this.getContext()); + this.axis = options.axis; + this._userMin = this.parse(options.min); + this._userMax = this.parse(options.max); + this._suggestedMin = this.parse(options.suggestedMin); + this._suggestedMax = this.parse(options.suggestedMax); + } + parse(raw, index) { + return raw; + } + getUserBounds() { + let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this; + _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY); + _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY); + _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY); + _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY); + return { + min: finiteOrDefault(_userMin, _suggestedMin), + max: finiteOrDefault(_userMax, _suggestedMax), + minDefined: isNumberFinite(_userMin), + maxDefined: isNumberFinite(_userMax) + }; + } + getMinMax(canStack) { + let {min, max, minDefined, maxDefined} = this.getUserBounds(); + let range; + if (minDefined && maxDefined) { + return {min, max}; + } + const metas = this.getMatchingVisibleMetas(); + for (let i = 0, ilen = metas.length; i < ilen; ++i) { + range = metas[i].controller.getMinMax(this, canStack); + if (!minDefined) { + min = Math.min(min, range.min); + } + if (!maxDefined) { + max = Math.max(max, range.max); + } + } + min = maxDefined && min > max ? max : min; + max = minDefined && min > max ? min : max; + return { + min: finiteOrDefault(min, finiteOrDefault(max, min)), + max: finiteOrDefault(max, finiteOrDefault(min, max)) + }; + } + getPadding() { + return { + left: this.paddingLeft || 0, + top: this.paddingTop || 0, + right: this.paddingRight || 0, + bottom: this.paddingBottom || 0 + }; + } + getTicks() { + return this.ticks; + } + getLabels() { + const data = this.chart.data; + return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || []; + } + beforeLayout() { + this._cache = {}; + this._dataLimitsCached = false; + } + beforeUpdate() { + callback(this.options.beforeUpdate, [this]); + } + update(maxWidth, maxHeight, margins) { + const {beginAtZero, grace, ticks: tickOpts} = this.options; + const sampleSize = tickOpts.sampleSize; + this.beforeUpdate(); + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins = Object.assign({ + left: 0, + right: 0, + top: 0, + bottom: 0 + }, margins); + this.ticks = null; + this._labelSizes = null; + this._gridLineItems = null; + this._labelItems = null; + this.beforeSetDimensions(); + this.setDimensions(); + this.afterSetDimensions(); + this._maxLength = this.isHorizontal() + ? this.width + margins.left + margins.right + : this.height + margins.top + margins.bottom; + if (!this._dataLimitsCached) { + this.beforeDataLimits(); + this.determineDataLimits(); + this.afterDataLimits(); + this._range = _addGrace(this, grace, beginAtZero); + this._dataLimitsCached = true; + } + this.beforeBuildTicks(); + this.ticks = this.buildTicks() || []; + this.afterBuildTicks(); + const samplingEnabled = sampleSize < this.ticks.length; + this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks); + this.configure(); + this.beforeCalculateLabelRotation(); + this.calculateLabelRotation(); + this.afterCalculateLabelRotation(); + if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) { + this.ticks = autoSkip(this, this.ticks); + this._labelSizes = null; + } + if (samplingEnabled) { + this._convertTicksToLabels(this.ticks); + } + this.beforeFit(); + this.fit(); + this.afterFit(); + this.afterUpdate(); + } + configure() { + let reversePixels = this.options.reverse; + let startPixel, endPixel; + if (this.isHorizontal()) { + startPixel = this.left; + endPixel = this.right; + } else { + startPixel = this.top; + endPixel = this.bottom; + reversePixels = !reversePixels; + } + this._startPixel = startPixel; + this._endPixel = endPixel; + this._reversePixels = reversePixels; + this._length = endPixel - startPixel; + this._alignToPixels = this.options.alignToPixels; + } + afterUpdate() { + callback(this.options.afterUpdate, [this]); + } + beforeSetDimensions() { + callback(this.options.beforeSetDimensions, [this]); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = 0; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = 0; + this.bottom = this.height; + } + this.paddingLeft = 0; + this.paddingTop = 0; + this.paddingRight = 0; + this.paddingBottom = 0; + } + afterSetDimensions() { + callback(this.options.afterSetDimensions, [this]); + } + _callHooks(name) { + this.chart.notifyPlugins(name, this.getContext()); + callback(this.options[name], [this]); + } + beforeDataLimits() { + this._callHooks('beforeDataLimits'); + } + determineDataLimits() {} + afterDataLimits() { + this._callHooks('afterDataLimits'); + } + beforeBuildTicks() { + this._callHooks('beforeBuildTicks'); + } + buildTicks() { + return []; + } + afterBuildTicks() { + this._callHooks('afterBuildTicks'); + } + beforeTickToLabelConversion() { + callback(this.options.beforeTickToLabelConversion, [this]); + } + generateTickLabels(ticks) { + const tickOpts = this.options.ticks; + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + tick = ticks[i]; + tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this); + } + } + afterTickToLabelConversion() { + callback(this.options.afterTickToLabelConversion, [this]); + } + beforeCalculateLabelRotation() { + callback(this.options.beforeCalculateLabelRotation, [this]); + } + calculateLabelRotation() { + const options = this.options; + const tickOpts = options.ticks; + const numTicks = this.ticks.length; + const minRotation = tickOpts.minRotation || 0; + const maxRotation = tickOpts.maxRotation; + let labelRotation = minRotation; + let tickWidth, maxHeight, maxLabelDiagonal; + if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) { + this.labelRotation = minRotation; + return; + } + const labelSizes = this._getLabelSizes(); + const maxLabelWidth = labelSizes.widest.width; + const maxLabelHeight = labelSizes.highest.height; + const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth); + tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1); + if (maxLabelWidth + 6 > tickWidth) { + tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1)); + maxHeight = this.maxHeight - getTickMarkLength(options.grid) + - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font); + maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight); + labelRotation = toDegrees(Math.min( + Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), + Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1)) + )); + labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation)); + } + this.labelRotation = labelRotation; + } + afterCalculateLabelRotation() { + callback(this.options.afterCalculateLabelRotation, [this]); + } + beforeFit() { + callback(this.options.beforeFit, [this]); + } + fit() { + const minSize = { + width: 0, + height: 0 + }; + const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this; + const display = this._isVisible(); + const isHorizontal = this.isHorizontal(); + if (display) { + const titleHeight = getTitleHeight(titleOpts, chart.options.font); + if (isHorizontal) { + minSize.width = this.maxWidth; + minSize.height = getTickMarkLength(gridOpts) + titleHeight; + } else { + minSize.height = this.maxHeight; + minSize.width = getTickMarkLength(gridOpts) + titleHeight; + } + if (tickOpts.display && this.ticks.length) { + const {first, last, widest, highest} = this._getLabelSizes(); + const tickPadding = tickOpts.padding * 2; + const angleRadians = toRadians(this.labelRotation); + const cos = Math.cos(angleRadians); + const sin = Math.sin(angleRadians); + if (isHorizontal) { + const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height; + minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding); + } else { + const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; + minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding); + } + this._calculatePadding(first, last, sin, cos); + } + } + this._handleMargins(); + if (isHorizontal) { + this.width = this._length = chart.width - this._margins.left - this._margins.right; + this.height = minSize.height; + } else { + this.width = minSize.width; + this.height = this._length = chart.height - this._margins.top - this._margins.bottom; + } + } + _calculatePadding(first, last, sin, cos) { + const {ticks: {align, padding}, position} = this.options; + const isRotated = this.labelRotation !== 0; + const labelsBelowTicks = position !== 'top' && this.axis === 'x'; + if (this.isHorizontal()) { + const offsetLeft = this.getPixelForTick(0) - this.left; + const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1); + let paddingLeft = 0; + let paddingRight = 0; + if (isRotated) { + if (labelsBelowTicks) { + paddingLeft = cos * first.width; + paddingRight = sin * last.height; + } else { + paddingLeft = sin * first.height; + paddingRight = cos * last.width; + } + } else if (align === 'start') { + paddingRight = last.width; + } else if (align === 'end') { + paddingLeft = first.width; + } else { + paddingLeft = first.width / 2; + paddingRight = last.width / 2; + } + this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0); + this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0); + } else { + let paddingTop = last.height / 2; + let paddingBottom = first.height / 2; + if (align === 'start') { + paddingTop = 0; + paddingBottom = first.height; + } else if (align === 'end') { + paddingTop = last.height; + paddingBottom = 0; + } + this.paddingTop = paddingTop + padding; + this.paddingBottom = paddingBottom + padding; + } + } + _handleMargins() { + if (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() { + callback(this.options.afterFit, [this]); + } + isHorizontal() { + const {axis, position} = this.options; + return position === 'top' || position === 'bottom' || axis === 'x'; + } + isFullSize() { + return this.options.fullSize; + } + _convertTicksToLabels(ticks) { + this.beforeTickToLabelConversion(); + this.generateTickLabels(ticks); + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (isNullOrUndef(ticks[i].label)) { + ticks.splice(i, 1); + ilen--; + i--; + } + } + this.afterTickToLabelConversion(); + } + _getLabelSizes() { + let labelSizes = this._labelSizes; + if (!labelSizes) { + const sampleSize = this.options.ticks.sampleSize; + let ticks = this.ticks; + if (sampleSize < ticks.length) { + ticks = sample(ticks, sampleSize); + } + this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length); + } + return labelSizes; + } + _computeLabelSizes(ticks, length) { + const {ctx, _longestTextCache: caches} = this; + const widths = []; + const heights = []; + let widestLabelSize = 0; + let highestLabelSize = 0; + let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel; + for (i = 0; i < length; ++i) { + label = ticks[i].label; + tickFont = this._resolveTickFontOptions(i); + ctx.font = fontString = tickFont.string; + cache = caches[fontString] = caches[fontString] || {data: {}, gc: []}; + lineHeight = tickFont.lineHeight; + width = height = 0; + if (!isNullOrUndef(label) && !isArray(label)) { + width = _measureText(ctx, cache.data, cache.gc, width, label); + height = lineHeight; + } else if (isArray(label)) { + for (j = 0, jlen = label.length; j < jlen; ++j) { + nestedLabel = label[j]; + if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) { + width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel); + height += lineHeight; + } + } + } + widths.push(width); + heights.push(height); + widestLabelSize = Math.max(width, widestLabelSize); + highestLabelSize = Math.max(height, highestLabelSize); + } + garbageCollect(caches, length); + const widest = widths.indexOf(widestLabelSize); + const highest = heights.indexOf(highestLabelSize); + const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0}); + return { + first: valueAt(0), + last: valueAt(length - 1), + widest: valueAt(widest), + highest: valueAt(highest), + widths, + heights, + }; + } + getLabelForValue(value) { + return value; + } + getPixelForValue(value, index) { + return NaN; + } + getValueForPixel(pixel) {} + getPixelForTick(index) { + const ticks = this.ticks; + if (index < 0 || index > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index].value); + } + getPixelForDecimal(decimal) { + if (this._reversePixels) { + decimal = 1 - decimal; + } + const pixel = this._startPixel + decimal * this._length; + return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel); + } + getDecimalForPixel(pixel) { + const decimal = (pixel - this._startPixel) / this._length; + return this._reversePixels ? 1 - decimal : decimal; + } + getBasePixel() { + return this.getPixelForValue(this.getBaseValue()); + } + getBaseValue() { + const {min, max} = this; + return min < 0 && max < 0 ? max : + min > 0 && max > 0 ? min : + 0; + } + getContext(index) { + const ticks = this.ticks || []; + if (index >= 0 && index < ticks.length) { + const tick = ticks[index]; + return tick.$context || + (tick.$context = createTickContext(this.getContext(), index, tick)); + } + return this.$context || + (this.$context = createScaleContext(this.chart.getContext(), this)); + } + _tickSize() { + const optionTicks = this.options.ticks; + const rot = toRadians(this.labelRotation); + const cos = Math.abs(Math.cos(rot)); + const sin = Math.abs(Math.sin(rot)); + const labelSizes = this._getLabelSizes(); + const padding = optionTicks.autoSkipPadding || 0; + const w = labelSizes ? labelSizes.widest.width + padding : 0; + const h = labelSizes ? labelSizes.highest.height + padding : 0; + return this.isHorizontal() + ? h * cos > w * sin ? w / cos : h / sin + : h * sin < w * cos ? h / cos : w / sin; + } + _isVisible() { + const display = this.options.display; + if (display !== 'auto') { + return !!display; + } + return this.getMatchingVisibleMetas().length > 0; + } + _computeGridLineItems(chartArea) { + const axis = this.axis; + const chart = this.chart; + const options = this.options; + const {grid, position} = options; + const offset = grid.offset; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const ticksLength = ticks.length + (offset ? 1 : 0); + const tl = getTickMarkLength(grid); + const items = []; + const borderOpts = grid.setContext(this.getContext()); + const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0; + const axisHalfWidth = axisWidth / 2; + const alignBorderValue = function(pixel) { + return _alignPixel(chart, pixel, axisWidth); + }; + let borderValue, i, lineValue, alignedLineValue; + let tx1, ty1, tx2, ty2, x1, y1, x2, y2; + if (position === 'top') { + borderValue = alignBorderValue(this.bottom); + ty1 = this.bottom - tl; + ty2 = borderValue - axisHalfWidth; + y1 = alignBorderValue(chartArea.top) + axisHalfWidth; + y2 = chartArea.bottom; + } else if (position === 'bottom') { + borderValue = alignBorderValue(this.top); + y1 = chartArea.top; + y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth; + ty1 = borderValue + axisHalfWidth; + ty2 = this.top + tl; + } else if (position === 'left') { + borderValue = alignBorderValue(this.right); + tx1 = this.right - tl; + tx2 = borderValue - axisHalfWidth; + x1 = alignBorderValue(chartArea.left) + axisHalfWidth; + x2 = chartArea.right; + } else if (position === 'right') { + borderValue = alignBorderValue(this.left); + x1 = chartArea.left; + x2 = alignBorderValue(chartArea.right) - axisHalfWidth; + tx1 = borderValue + axisHalfWidth; + tx2 = this.left + tl; + } else if (axis === 'x') { + if (position === 'center') { + borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + y1 = chartArea.top; + y2 = chartArea.bottom; + ty1 = borderValue + axisHalfWidth; + ty2 = ty1 + tl; + } else if (axis === 'y') { + if (position === 'center') { + borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + tx1 = borderValue - axisHalfWidth; + tx2 = tx1 - tl; + x1 = chartArea.left; + x2 = chartArea.right; + } + const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength); + const step = Math.max(1, Math.ceil(ticksLength / limit)); + for (i = 0; i < ticksLength; i += step) { + const optsAtIndex = grid.setContext(this.getContext(i)); + const lineWidth = optsAtIndex.lineWidth; + const lineColor = optsAtIndex.color; + const borderDash = grid.borderDash || []; + const borderDashOffset = optsAtIndex.borderDashOffset; + const tickWidth = optsAtIndex.tickWidth; + const tickColor = optsAtIndex.tickColor; + const tickBorderDash = optsAtIndex.tickBorderDash || []; + const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset; + lineValue = getPixelForGridLine(this, i, offset); + if (lineValue === undefined) { + continue; + } + alignedLineValue = _alignPixel(chart, lineValue, lineWidth); + if (isHorizontal) { + tx1 = tx2 = x1 = x2 = alignedLineValue; + } else { + ty1 = ty2 = y1 = y2 = alignedLineValue; + } + items.push({ + tx1, + ty1, + tx2, + ty2, + x1, + y1, + x2, + y2, + width: lineWidth, + color: lineColor, + borderDash, + borderDashOffset, + tickWidth, + tickColor, + tickBorderDash, + tickBorderDashOffset, + }); + } + this._ticksLength = ticksLength; + this._borderValue = borderValue; + return items; + } + _computeLabelItems(chartArea) { + const axis = this.axis; + const options = this.options; + const {position, ticks: optionTicks} = options; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const {align, crossAlign, padding, mirror} = optionTicks; + const tl = getTickMarkLength(options.grid); + const tickAndPadding = tl + padding; + const hTickAndPadding = mirror ? -padding : tickAndPadding; + const rotation = -toRadians(this.labelRotation); + const items = []; + let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; + let textBaseline = 'middle'; + if (position === 'top') { + y = this.bottom - hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === 'bottom') { + y = this.top + hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === 'left') { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (position === 'right') { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (axis === 'x') { + if (position === 'center') { + y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding; + } + textAlign = this._getXAxisLabelAlignment(); + } else if (axis === 'y') { + if (position === 'center') { + x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + x = this.chart.scales[positionAxisID].getPixelForValue(value); + } + textAlign = this._getYAxisLabelAlignment(tl).textAlign; + } + if (axis === 'y') { + if (align === 'start') { + textBaseline = 'top'; + } else if (align === 'end') { + textBaseline = 'bottom'; + } + } + const labelSizes = this._getLabelSizes(); + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + label = tick.label; + const optsAtIndex = optionTicks.setContext(this.getContext(i)); + pixel = this.getPixelForTick(i) + optionTicks.labelOffset; + font = this._resolveTickFontOptions(i); + lineHeight = font.lineHeight; + lineCount = isArray(label) ? label.length : 1; + const halfCount = lineCount / 2; + const color = optsAtIndex.color; + const strokeColor = optsAtIndex.textStrokeColor; + const strokeWidth = optsAtIndex.textStrokeWidth; + if (isHorizontal) { + x = pixel; + if (position === 'top') { + if (crossAlign === 'near' || rotation !== 0) { + textOffset = -lineCount * lineHeight + lineHeight / 2; + } else if (crossAlign === 'center') { + textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; + } else { + textOffset = -labelSizes.highest.height + lineHeight / 2; + } + } else { + if (crossAlign === 'near' || rotation !== 0) { + textOffset = lineHeight / 2; + } else if (crossAlign === 'center') { + textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; + } else { + textOffset = labelSizes.highest.height - lineCount * lineHeight; + } + } + if (mirror) { + textOffset *= -1; + } + } else { + y = pixel; + textOffset = (1 - lineCount) * lineHeight / 2; + } + let backdrop; + if (optsAtIndex.showLabelBackdrop) { + const labelPadding = toPadding(optsAtIndex.backdropPadding); + const height = labelSizes.heights[i]; + const width = labelSizes.widths[i]; + let top = y + textOffset - labelPadding.top; + let left = x - labelPadding.left; + switch (textBaseline) { + case 'middle': + top -= height / 2; + break; + case 'bottom': + top -= height; + break; + } + switch (textAlign) { + case 'center': + left -= width / 2; + break; + case 'right': + left -= width; + break; + } + backdrop = { + left, + top, + width: width + labelPadding.width, + height: height + labelPadding.height, + color: optsAtIndex.backdropColor, + }; + } + items.push({ + rotation, + label, + font, + color, + strokeColor, + strokeWidth, + textOffset, + textAlign, + textBaseline, + translation: [x, y], + backdrop, + }); + } + return items; + } + _getXAxisLabelAlignment() { + const {position, ticks} = this.options; + const rotation = -toRadians(this.labelRotation); + if (rotation) { + return position === 'top' ? 'left' : 'right'; + } + let align = 'center'; + if (ticks.align === 'start') { + align = 'left'; + } else if (ticks.align === 'end') { + align = 'right'; + } + return align; + } + _getYAxisLabelAlignment(tl) { + const {position, ticks: {crossAlign, mirror, padding}} = this.options; + const labelSizes = this._getLabelSizes(); + const tickAndPadding = tl + padding; + const widest = labelSizes.widest.width; + let textAlign; + let x; + if (position === 'left') { + if (mirror) { + x = this.right + padding; + if (crossAlign === 'near') { + textAlign = 'left'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x += (widest / 2); + } else { + textAlign = 'right'; + x += widest; + } + } else { + x = this.right - tickAndPadding; + if (crossAlign === 'near') { + textAlign = 'right'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x -= (widest / 2); + } else { + textAlign = 'left'; + x = this.left; + } + } + } else if (position === 'right') { + if (mirror) { + x = this.left + padding; + if (crossAlign === 'near') { + textAlign = 'right'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x -= (widest / 2); + } else { + textAlign = 'left'; + x -= widest; + } + } else { + x = this.left + tickAndPadding; + if (crossAlign === 'near') { + textAlign = 'left'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x += widest / 2; + } else { + textAlign = 'right'; + x = this.right; + } + } + } else { + textAlign = 'right'; + } + return {textAlign, x}; + } + _computeLabelArea() { + if (this.options.ticks.mirror) { + return; + } + const chart = this.chart; + const position = this.options.position; + if (position === 'left' || position === 'right') { + return {top: 0, left: this.left, bottom: chart.height, right: this.right}; + } if (position === 'top' || position === 'bottom') { + return {top: this.top, left: 0, bottom: this.bottom, right: chart.width}; + } + } + drawBackground() { + const {ctx, options: {backgroundColor}, left, top, width, height} = this; + if (backgroundColor) { + ctx.save(); + ctx.fillStyle = backgroundColor; + ctx.fillRect(left, top, width, height); + ctx.restore(); + } + } + getLineWidthForValue(value) { + const grid = this.options.grid; + if (!this._isVisible() || !grid.display) { + return 0; + } + const ticks = this.ticks; + const index = ticks.findIndex(t => t.value === value); + if (index >= 0) { + const opts = grid.setContext(this.getContext(index)); + return opts.lineWidth; + } + return 0; + } + drawGrid(chartArea) { + const grid = this.options.grid; + const ctx = this.ctx; + const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea)); + let i, ilen; + const drawLine = (p1, p2, style) => { + if (!style.width || !style.color) { + return; + } + ctx.save(); + ctx.lineWidth = style.width; + ctx.strokeStyle = style.color; + ctx.setLineDash(style.borderDash || []); + ctx.lineDashOffset = style.borderDashOffset; + ctx.beginPath(); + ctx.moveTo(p1.x, p1.y); + ctx.lineTo(p2.x, p2.y); + ctx.stroke(); + ctx.restore(); + }; + if (grid.display) { + for (i = 0, ilen = items.length; i < ilen; ++i) { + const item = items[i]; + if (grid.drawOnChartArea) { + drawLine( + {x: item.x1, y: item.y1}, + {x: item.x2, y: item.y2}, + item + ); + } + if (grid.drawTicks) { + drawLine( + {x: item.tx1, y: item.ty1}, + {x: item.tx2, y: item.ty2}, + { + color: item.tickColor, + width: item.tickWidth, + borderDash: item.tickBorderDash, + borderDashOffset: item.tickBorderDashOffset + } + ); + } + } + } + } + drawBorder() { + const {chart, ctx, options: {grid}} = this; + const borderOpts = grid.setContext(this.getContext()); + const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0; + if (!axisWidth) { + return; + } + const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth; + const borderValue = this._borderValue; + let x1, x2, y1, y2; + if (this.isHorizontal()) { + x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2; + x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2; + y1 = y2 = borderValue; + } else { + y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2; + y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2; + x1 = x2 = borderValue; + } + ctx.save(); + ctx.lineWidth = borderOpts.borderWidth; + ctx.strokeStyle = borderOpts.borderColor; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.restore(); + } + drawLabels(chartArea) { + const optionTicks = this.options.ticks; + if (!optionTicks.display) { + return; + } + const ctx = this.ctx; + const area = this._computeLabelArea(); + if (area) { + clipArea(ctx, area); + } + const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea)); + let i, ilen; + for (i = 0, ilen = items.length; i < ilen; ++i) { + const item = items[i]; + const tickFont = item.font; + const label = item.label; + if (item.backdrop) { + ctx.fillStyle = item.backdrop.color; + ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height); + } + let y = item.textOffset; + renderText(ctx, label, 0, y, tickFont, item); + } + if (area) { + unclipArea(ctx); + } + } + drawTitle() { + const {ctx, options: {position, title, reverse}} = this; + if (!title.display) { + return; + } + const font = toFont(title.font); + const padding = toPadding(title.padding); + const align = title.align; + let offset = font.lineHeight / 2; + if (position === 'bottom' || position === 'center' || isObject(position)) { + offset += padding.bottom; + if (isArray(title.text)) { + offset += font.lineHeight * (title.text.length - 1); + } + } else { + offset += padding.top; + } + const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align); + renderText(ctx, title.text, 0, 0, font, { + color: title.color, + maxWidth, + rotation, + textAlign: titleAlign(align, position, reverse), + textBaseline: 'middle', + translation: [titleX, titleY], + }); + } + draw(chartArea) { + if (!this._isVisible()) { + return; + } + this.drawBackground(); + this.drawGrid(chartArea); + this.drawBorder(); + this.drawTitle(); + this.drawLabels(chartArea); + } + _layers() { + const opts = this.options; + const tz = opts.ticks && opts.ticks.z || 0; + const gz = valueOrDefault(opts.grid && opts.grid.z, -1); + if (!this._isVisible() || this.draw !== Scale.prototype.draw) { + return [{ + z: tz, + draw: (chartArea) => { + this.draw(chartArea); + } + }]; + } + return [{ + z: gz, + draw: (chartArea) => { + this.drawBackground(); + this.drawGrid(chartArea); + this.drawTitle(); + } + }, { + z: gz + 1, + draw: () => { + this.drawBorder(); + } + }, { + z: tz, + draw: (chartArea) => { + this.drawLabels(chartArea); + } + }]; + } + getMatchingVisibleMetas(type) { + const metas = this.chart.getSortedVisibleDatasetMetas(); + const axisID = this.axis + 'AxisID'; + const result = []; + let i, ilen; + for (i = 0, ilen = metas.length; i < ilen; ++i) { + const meta = metas[i]; + if (meta[axisID] === this.id && (!type || meta.type === type)) { + result.push(meta); + } + } + return result; + } + _resolveTickFontOptions(index) { + const opts = this.options.ticks.setContext(this.getContext(index)); + return toFont(opts.font); + } + _maxDigits() { + const fontSize = this._resolveTickFontOptions(0).lineHeight; + return (this.isHorizontal() ? this.width : this.height) / fontSize; + } +} + +class TypedRegistry { + constructor(type, scope, override) { + this.type = type; + this.scope = scope; + this.override = override; + this.items = Object.create(null); + } + isForType(type) { + return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype); + } + register(item) { + const proto = Object.getPrototypeOf(item); + let parentScope; + if (isIChartComponent(proto)) { + parentScope = this.register(proto); + } + const items = this.items; + const id = item.id; + const scope = this.scope + '.' + id; + if (!id) { + throw new Error('class does not have id: ' + item); + } + if (id in items) { + return scope; + } + items[id] = item; + registerDefaults(item, scope, parentScope); + if (this.override) { + defaults.override(item.id, item.overrides); + } + return scope; + } + get(id) { + return this.items[id]; + } + unregister(item) { + const items = this.items; + const id = item.id; + const scope = this.scope; + if (id in items) { + delete items[id]; + } + if (scope && id in defaults[scope]) { + delete defaults[scope][id]; + if (this.override) { + delete overrides[id]; + } + } + } +} +function registerDefaults(item, scope, parentScope) { + const itemDefaults = merge(Object.create(null), [ + parentScope ? defaults.get(parentScope) : {}, + defaults.get(scope), + item.defaults + ]); + defaults.set(scope, itemDefaults); + if (item.defaultRoutes) { + routeDefaults(scope, item.defaultRoutes); + } + if (item.descriptors) { + defaults.describe(scope, item.descriptors); + } +} +function routeDefaults(scope, routes) { + Object.keys(routes).forEach(property => { + const propertyParts = property.split('.'); + const sourceName = propertyParts.pop(); + const sourceScope = [scope].concat(propertyParts).join('.'); + const parts = routes[property].split('.'); + const targetName = parts.pop(); + const targetScope = parts.join('.'); + defaults.route(sourceScope, sourceName, targetScope, targetName); + }); +} +function isIChartComponent(proto) { + return 'id' in proto && 'defaults' in proto; +} + +class Registry { + constructor() { + this.controllers = new TypedRegistry(DatasetController, 'datasets', true); + this.elements = new TypedRegistry(Element, 'elements'); + this.plugins = new TypedRegistry(Object, 'plugins'); + this.scales = new TypedRegistry(Scale, 'scales'); + this._typedRegistries = [this.controllers, this.scales, this.elements]; + } + add(...args) { + this._each('register', args); + } + remove(...args) { + this._each('unregister', args); + } + addControllers(...args) { + this._each('register', args, this.controllers); + } + addElements(...args) { + this._each('register', args, this.elements); + } + addPlugins(...args) { + this._each('register', args, this.plugins); + } + addScales(...args) { + this._each('register', args, this.scales); + } + getController(id) { + return this._get(id, this.controllers, 'controller'); + } + getElement(id) { + return this._get(id, this.elements, 'element'); + } + getPlugin(id) { + return this._get(id, this.plugins, 'plugin'); + } + getScale(id) { + return this._get(id, this.scales, 'scale'); + } + removeControllers(...args) { + this._each('unregister', args, this.controllers); + } + removeElements(...args) { + this._each('unregister', args, this.elements); + } + removePlugins(...args) { + this._each('unregister', args, this.plugins); + } + removeScales(...args) { + this._each('unregister', args, this.scales); + } + _each(method, args, typedRegistry) { + [...args].forEach(arg => { + const reg = typedRegistry || this._getRegistryForType(arg); + if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) { + this._exec(method, reg, arg); + } else { + each(arg, item => { + const itemReg = typedRegistry || this._getRegistryForType(item); + this._exec(method, itemReg, item); + }); + } + }); + } + _exec(method, registry, component) { + const camelMethod = _capitalize(method); + callback(component['before' + camelMethod], [], component); + registry[method](component); + callback(component['after' + camelMethod], [], component); + } + _getRegistryForType(type) { + for (let i = 0; i < this._typedRegistries.length; i++) { + const reg = this._typedRegistries[i]; + if (reg.isForType(type)) { + return reg; + } + } + return this.plugins; + } + _get(id, typedRegistry, type) { + const item = typedRegistry.get(id); + if (item === undefined) { + throw new Error('"' + id + '" is not a registered ' + type + '.'); + } + return item; + } +} +var registry = new Registry(); + +class PluginService { + constructor() { + this._init = []; + } + notify(chart, hook, args, filter) { + if (hook === 'beforeInit') { + this._init = this._createDescriptors(chart, true); + this._notify(this._init, chart, 'install'); + } + const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart); + const result = this._notify(descriptors, chart, hook, args); + if (hook === 'afterDestroy') { + this._notify(descriptors, chart, 'stop'); + this._notify(this._init, chart, 'uninstall'); + } + return result; + } + _notify(descriptors, chart, hook, args) { + args = args || {}; + for (const descriptor of descriptors) { + const plugin = descriptor.plugin; + const method = plugin[hook]; + const params = [chart, args, descriptor.options]; + if (callback(method, params, plugin) === false && args.cancelable) { + return false; + } + } + return true; + } + invalidate() { + if (!isNullOrUndef(this._cache)) { + this._oldCache = this._cache; + this._cache = undefined; + } + } + _descriptors(chart) { + if (this._cache) { + return this._cache; + } + const descriptors = this._cache = this._createDescriptors(chart); + this._notifyStateChanges(chart); + return descriptors; + } + _createDescriptors(chart, all) { + const config = chart && chart.config; + const options = valueOrDefault(config.options && config.options.plugins, {}); + const plugins = allPlugins(config); + return options === false && !all ? [] : createDescriptors(chart, plugins, options, all); + } + _notifyStateChanges(chart) { + const previousDescriptors = this._oldCache || []; + const descriptors = this._cache; + const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id)); + this._notify(diff(previousDescriptors, descriptors), chart, 'stop'); + this._notify(diff(descriptors, previousDescriptors), chart, 'start'); + } +} +function allPlugins(config) { + const plugins = []; + const keys = Object.keys(registry.plugins.items); + for (let i = 0; i < keys.length; i++) { + plugins.push(registry.getPlugin(keys[i])); + } + const local = config.plugins || []; + for (let i = 0; i < local.length; i++) { + const plugin = local[i]; + if (plugins.indexOf(plugin) === -1) { + plugins.push(plugin); + } + } + return plugins; +} +function getOpts(options, all) { + if (!all && options === false) { + return null; + } + if (options === true) { + return {}; + } + return options; +} +function createDescriptors(chart, plugins, options, all) { + const result = []; + const context = chart.getContext(); + for (let i = 0; i < plugins.length; i++) { + const plugin = plugins[i]; + const id = plugin.id; + const opts = getOpts(options[id], all); + if (opts === null) { + continue; + } + result.push({ + plugin, + options: pluginOpts(chart.config, plugin, opts, context) + }); + } + return result; +} +function pluginOpts(config, plugin, opts, context) { + const keys = config.pluginScopeKeys(plugin); + const scopes = config.getOptionScopes(opts, keys); + return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true}); +} + +function getIndexAxis(type, options) { + const datasetDefaults = defaults.datasets[type] || {}; + const datasetOptions = (options.datasets || {})[type] || {}; + return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x'; +} +function getAxisFromDefaultScaleID(id, indexAxis) { + let axis = id; + if (id === '_index_') { + axis = indexAxis; + } else if (id === '_value_') { + axis = indexAxis === 'x' ? 'y' : 'x'; + } + return axis; +} +function getDefaultScaleIDFromAxis(axis, indexAxis) { + return axis === indexAxis ? '_index_' : '_value_'; +} +function axisFromPosition(position) { + if (position === 'top' || position === 'bottom') { + return 'x'; + } + if (position === 'left' || position === 'right') { + return 'y'; + } +} +function determineAxis(id, scaleOptions) { + if (id === 'x' || id === 'y') { + return id; + } + return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase(); +} +function mergeScaleConfig(config, options) { + const chartDefaults = overrides[config.type] || {scales: {}}; + const configScales = options.scales || {}; + const chartIndexAxis = getIndexAxis(config.type, options); + const firstIDs = Object.create(null); + const scales = Object.create(null); + Object.keys(configScales).forEach(id => { + const scaleConf = configScales[id]; + if (!isObject(scaleConf)) { + return console.error(`Invalid scale configuration for scale: ${id}`); + } + if (scaleConf._proxy) { + return console.warn(`Ignoring resolver passed as options for scale: ${id}`); + } + const axis = determineAxis(id, scaleConf); + const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); + const defaultScaleOptions = chartDefaults.scales || {}; + firstIDs[axis] = firstIDs[axis] || id; + scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]); + }); + config.data.datasets.forEach(dataset => { + const type = dataset.type || config.type; + const indexAxis = dataset.indexAxis || getIndexAxis(type, options); + const datasetDefaults = overrides[type] || {}; + const defaultScaleOptions = datasetDefaults.scales || {}; + Object.keys(defaultScaleOptions).forEach(defaultID => { + const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); + const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis; + scales[id] = scales[id] || Object.create(null); + mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]); + }); + }); + Object.keys(scales).forEach(key => { + const scale = scales[key]; + mergeIf(scale, [defaults.scales[scale.type], defaults.scale]); + }); + return scales; +} +function initOptions(config) { + const options = config.options || (config.options = {}); + options.plugins = valueOrDefault(options.plugins, {}); + options.scales = mergeScaleConfig(config, options); +} +function initData(data) { + data = data || {}; + data.datasets = data.datasets || []; + data.labels = data.labels || []; + return data; +} +function initConfig(config) { + config = config || {}; + config.data = initData(config.data); + initOptions(config); + return config; +} +const keyCache = new Map(); +const keysCached = new Set(); +function cachedKeys(cacheKey, generate) { + let keys = keyCache.get(cacheKey); + if (!keys) { + keys = generate(); + keyCache.set(cacheKey, keys); + keysCached.add(keys); + } + return keys; +} +const addIfFound = (set, obj, key) => { + const opts = resolveObjectKey(obj, key); + if (opts !== undefined) { + set.add(opts); + } +}; +class Config { + constructor(config) { + this._config = initConfig(config); + this._scopeCache = new Map(); + this._resolverCache = new Map(); + } + get platform() { + return this._config.platform; + } + get type() { + return this._config.type; + } + set type(type) { + this._config.type = type; + } + get data() { + return this._config.data; + } + set data(data) { + this._config.data = initData(data); + } + get options() { + return this._config.options; + } + set options(options) { + this._config.options = options; + } + get plugins() { + return this._config.plugins; + } + update() { + const config = this._config; + this.clearCache(); + initOptions(config); + } + clearCache() { + this._scopeCache.clear(); + this._resolverCache.clear(); + } + datasetScopeKeys(datasetType) { + return cachedKeys(datasetType, + () => [[ + `datasets.${datasetType}`, + '' + ]]); + } + datasetAnimationScopeKeys(datasetType, transition) { + return cachedKeys(`${datasetType}.transition.${transition}`, + () => [ + [ + `datasets.${datasetType}.transitions.${transition}`, + `transitions.${transition}`, + ], + [ + `datasets.${datasetType}`, + '' + ] + ]); + } + datasetElementScopeKeys(datasetType, elementType) { + return cachedKeys(`${datasetType}-${elementType}`, + () => [[ + `datasets.${datasetType}.elements.${elementType}`, + `datasets.${datasetType}`, + `elements.${elementType}`, + '' + ]]); + } + pluginScopeKeys(plugin) { + const id = plugin.id; + const type = this.type; + return cachedKeys(`${type}-plugin-${id}`, + () => [[ + `plugins.${id}`, + ...plugin.additionalOptionScopes || [], + ]]); + } + _cachedScopes(mainScope, resetCache) { + const _scopeCache = this._scopeCache; + let cache = _scopeCache.get(mainScope); + if (!cache || resetCache) { + cache = new Map(); + _scopeCache.set(mainScope, cache); + } + return cache; + } + getOptionScopes(mainScope, keyLists, resetCache) { + const {options, type} = this; + const cache = this._cachedScopes(mainScope, resetCache); + const cached = cache.get(keyLists); + if (cached) { + return cached; + } + const scopes = new Set(); + keyLists.forEach(keys => { + if (mainScope) { + scopes.add(mainScope); + keys.forEach(key => addIfFound(scopes, mainScope, key)); + } + keys.forEach(key => addIfFound(scopes, options, key)); + keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key)); + keys.forEach(key => addIfFound(scopes, defaults, key)); + keys.forEach(key => addIfFound(scopes, descriptors, key)); + }); + const array = Array.from(scopes); + if (array.length === 0) { + array.push(Object.create(null)); + } + if (keysCached.has(keyLists)) { + cache.set(keyLists, array); + } + return array; + } + chartOptionScopes() { + const {options, type} = this; + return [ + options, + overrides[type] || {}, + defaults.datasets[type] || {}, + {type}, + defaults, + descriptors + ]; + } + resolveNamedOptions(scopes, names, context, prefixes = ['']) { + const result = {$shared: true}; + const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes); + let options = resolver; + if (needContext(resolver, names)) { + result.$shared = false; + context = isFunction(context) ? context() : context; + const subResolver = this.createResolver(scopes, context, subPrefixes); + options = _attachContext(resolver, context, subResolver); + } + for (const prop of names) { + result[prop] = options[prop]; + } + return result; + } + createResolver(scopes, context, prefixes = [''], descriptorDefaults) { + const {resolver} = getResolver(this._resolverCache, scopes, prefixes); + return isObject(context) + ? _attachContext(resolver, context, undefined, descriptorDefaults) + : resolver; + } +} +function getResolver(resolverCache, scopes, prefixes) { + let cache = resolverCache.get(scopes); + if (!cache) { + cache = new Map(); + resolverCache.set(scopes, cache); + } + const cacheKey = prefixes.join(); + let cached = cache.get(cacheKey); + if (!cached) { + const resolver = _createResolver(scopes, prefixes); + cached = { + resolver, + subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover')) + }; + cache.set(cacheKey, cached); + } + return cached; +} +const hasFunction = value => isObject(value) + && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false); +function needContext(proxy, names) { + const {isScriptable, isIndexable} = _descriptors(proxy); + for (const prop of names) { + const scriptable = isScriptable(prop); + const indexable = isIndexable(prop); + const value = (indexable || scriptable) && proxy[prop]; + if ((scriptable && (isFunction(value) || hasFunction(value))) + || (indexable && isArray(value))) { + return true; + } + } + return false; +} + +var version = "3.7.1"; + +const KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea']; +function positionIsHorizontal(position, axis) { + return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x'); +} +function compare2Level(l1, l2) { + return function(a, b) { + return a[l1] === b[l1] + ? a[l2] - b[l2] + : a[l1] - b[l1]; + }; +} +function onAnimationsComplete(context) { + const chart = context.chart; + const animationOptions = chart.options.animation; + chart.notifyPlugins('afterRender'); + callback(animationOptions && animationOptions.onComplete, [context], chart); +} +function onAnimationProgress(context) { + const chart = context.chart; + const animationOptions = chart.options.animation; + callback(animationOptions && animationOptions.onProgress, [context], chart); +} +function getCanvas(item) { + if (_isDomSupported() && typeof item === 'string') { + item = document.getElementById(item); + } else if (item && item.length) { + item = item[0]; + } + if (item && item.canvas) { + item = item.canvas; + } + return item; +} +const instances = {}; +const getChart = (key) => { + const canvas = getCanvas(key); + return Object.values(instances).filter((c) => c.canvas === canvas).pop(); +}; +function moveNumericKeys(obj, start, move) { + const keys = Object.keys(obj); + for (const key of keys) { + const intKey = +key; + if (intKey >= start) { + const value = obj[key]; + delete obj[key]; + if (move > 0 || intKey > start) { + obj[intKey + move] = value; + } + } + } +} +function determineLastEvent(e, lastEvent, inChartArea, isClick) { + if (!inChartArea || e.type === 'mouseout') { + return null; + } + if (isClick) { + return lastEvent; + } + return e; +} +class Chart { + constructor(item, userConfig) { + const config = this.config = new Config(userConfig); + const initialCanvas = getCanvas(item); + const existingChart = getChart(initialCanvas); + if (existingChart) { + throw new Error( + 'Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + + ' must be destroyed before the canvas can be reused.' + ); + } + const options = config.createResolver(config.chartOptionScopes(), this.getContext()); + this.platform = new (config.platform || _detectPlatform(initialCanvas))(); + this.platform.updateConfig(config); + const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); + const canvas = context && context.canvas; + const height = canvas && canvas.height; + const width = canvas && canvas.width; + this.id = uid(); + this.ctx = context; + this.canvas = canvas; + this.width = width; + this.height = height; + this._options = options; + this._aspectRatio = this.aspectRatio; + this._layers = []; + this._metasets = []; + this._stacks = undefined; + this.boxes = []; + this.currentDevicePixelRatio = undefined; + this.chartArea = undefined; + this._active = []; + this._lastEvent = undefined; + this._listeners = {}; + this._responsiveListeners = undefined; + this._sortedMetasets = []; + this.scales = {}; + this._plugins = new PluginService(); + this.$proxies = {}; + this._hiddenIndices = {}; + this.attached = false; + this._animationsDisabled = undefined; + this.$context = undefined; + this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0); + this._dataChanges = []; + instances[this.id] = this; + if (!context || !canvas) { + console.error("Failed to create chart: can't acquire context from the given item"); + return; + } + animator.listen(this, 'complete', onAnimationsComplete); + animator.listen(this, 'progress', onAnimationProgress); + this._initialize(); + if (this.attached) { + this.update(); + } + } + get aspectRatio() { + const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this; + if (!isNullOrUndef(aspectRatio)) { + return aspectRatio; + } + if (maintainAspectRatio && _aspectRatio) { + return _aspectRatio; + } + return height ? width / height : null; + } + get data() { + return this.config.data; + } + set data(data) { + this.config.data = data; + } + get options() { + return this._options; + } + set options(options) { + this.config.options = options; + } + _initialize() { + this.notifyPlugins('beforeInit'); + if (this.options.responsive) { + this.resize(); + } else { + retinaScale(this, this.options.devicePixelRatio); + } + this.bindEvents(); + this.notifyPlugins('afterInit'); + return this; + } + clear() { + clearCanvas(this.canvas, this.ctx); + return this; + } + stop() { + animator.stop(this); + return this; + } + resize(width, height) { + if (!animator.running(this)) { + this._resize(width, height); + } else { + this._resizeBeforeDraw = {width, height}; + } + } + _resize(width, height) { + const options = this.options; + const canvas = this.canvas; + const aspectRatio = options.maintainAspectRatio && this.aspectRatio; + const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio); + const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio(); + const mode = this.width ? 'resize' : 'attach'; + this.width = newSize.width; + this.height = newSize.height; + this._aspectRatio = this.aspectRatio; + if (!retinaScale(this, newRatio, true)) { + return; + } + this.notifyPlugins('resize', {size: newSize}); + callback(options.onResize, [this, newSize], this); + if (this.attached) { + if (this._doResize(mode)) { + this.render(); + } + } + } + ensureScalesHaveIDs() { + const options = this.options; + const scalesOptions = options.scales || {}; + each(scalesOptions, (axisOptions, axisID) => { + axisOptions.id = axisID; + }); + } + buildOrUpdateScales() { + const options = this.options; + const scaleOpts = options.scales; + const scales = this.scales; + const updated = Object.keys(scales).reduce((obj, id) => { + obj[id] = false; + return obj; + }, {}); + let items = []; + if (scaleOpts) { + items = items.concat( + Object.keys(scaleOpts).map((id) => { + const scaleOptions = scaleOpts[id]; + const axis = determineAxis(id, scaleOptions); + const isRadial = axis === 'r'; + const isHorizontal = axis === 'x'; + return { + options: scaleOptions, + dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left', + dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear' + }; + }) + ); + } + each(items, (item) => { + const scaleOptions = item.options; + const id = scaleOptions.id; + const axis = determineAxis(id, scaleOptions); + const scaleType = valueOrDefault(scaleOptions.type, item.dtype); + if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) { + scaleOptions.position = item.dposition; + } + updated[id] = true; + let scale = null; + if (id in scales && scales[id].type === scaleType) { + scale = scales[id]; + } else { + const scaleClass = registry.getScale(scaleType); + scale = new scaleClass({ + id, + type: scaleType, + ctx: this.ctx, + chart: this + }); + scales[scale.id] = scale; + } + scale.init(scaleOptions, options); + }); + each(updated, (hasUpdated, id) => { + if (!hasUpdated) { + delete scales[id]; + } + }); + each(scales, (scale) => { + layouts.configure(this, scale, scale.options); + layouts.addBox(this, scale); + }); + } + _updateMetasets() { + const metasets = this._metasets; + const numData = this.data.datasets.length; + const numMeta = metasets.length; + metasets.sort((a, b) => a.index - b.index); + if (numMeta > numData) { + for (let i = numData; i < numMeta; ++i) { + this._destroyDatasetMeta(i); + } + metasets.splice(numData, numMeta - numData); + } + this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index')); + } + _removeUnreferencedMetasets() { + const {_metasets: metasets, data: {datasets}} = this; + if (metasets.length > datasets.length) { + delete this._stacks; + } + metasets.forEach((meta, index) => { + if (datasets.filter(x => x === meta._dataset).length === 0) { + this._destroyDatasetMeta(index); + } + }); + } + buildOrUpdateControllers() { + const newControllers = []; + const datasets = this.data.datasets; + let i, ilen; + this._removeUnreferencedMetasets(); + for (i = 0, ilen = datasets.length; i < ilen; i++) { + const dataset = datasets[i]; + let meta = this.getDatasetMeta(i); + const type = dataset.type || this.config.type; + if (meta.type && meta.type !== type) { + this._destroyDatasetMeta(i); + meta = this.getDatasetMeta(i); + } + meta.type = type; + meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options); + meta.order = dataset.order || 0; + meta.index = i; + meta.label = '' + dataset.label; + meta.visible = this.isDatasetVisible(i); + if (meta.controller) { + meta.controller.updateIndex(i); + meta.controller.linkScales(); + } else { + const ControllerClass = registry.getController(type); + const {datasetElementType, dataElementType} = defaults.datasets[type]; + Object.assign(ControllerClass.prototype, { + dataElementType: registry.getElement(dataElementType), + datasetElementType: datasetElementType && registry.getElement(datasetElementType) + }); + meta.controller = new ControllerClass(this, i); + newControllers.push(meta.controller); + } + } + this._updateMetasets(); + return newControllers; + } + _resetElements() { + each(this.data.datasets, (dataset, datasetIndex) => { + this.getDatasetMeta(datasetIndex).controller.reset(); + }, this); + } + reset() { + this._resetElements(); + this.notifyPlugins('reset'); + } + update(mode) { + const config = this.config; + config.update(); + const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); + const animsDisabled = this._animationsDisabled = !options.animation; + this._updateScales(); + this._checkEventBindings(); + this._updateHiddenIndices(); + this._plugins.invalidate(); + if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) { + return; + } + const newControllers = this.buildOrUpdateControllers(); + this.notifyPlugins('beforeElementsUpdate'); + let minPadding = 0; + for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) { + const {controller} = this.getDatasetMeta(i); + const reset = !animsDisabled && newControllers.indexOf(controller) === -1; + controller.buildOrUpdateElements(reset); + minPadding = Math.max(+controller.getMaxOverflow(), minPadding); + } + minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; + this._updateLayout(minPadding); + if (!animsDisabled) { + each(newControllers, (controller) => { + controller.reset(); + }); + } + this._updateDatasets(mode); + this.notifyPlugins('afterUpdate', {mode}); + this._layers.sort(compare2Level('z', '_idx')); + const {_active, _lastEvent} = this; + if (_lastEvent) { + this._eventHandler(_lastEvent, true); + } else if (_active.length) { + this._updateHoverStyles(_active, _active, true); + } + this.render(); + } + _updateScales() { + each(this.scales, (scale) => { + layouts.removeBox(this, scale); + }); + this.ensureScalesHaveIDs(); + this.buildOrUpdateScales(); + } + _checkEventBindings() { + const options = this.options; + const existingEvents = new Set(Object.keys(this._listeners)); + const newEvents = new Set(options.events); + if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { + this.unbindEvents(); + this.bindEvents(); + } + } + _updateHiddenIndices() { + const {_hiddenIndices} = this; + const changes = this._getUniformDataChanges() || []; + for (const {method, start, count} of changes) { + const move = method === '_removeElements' ? -count : count; + moveNumericKeys(_hiddenIndices, start, move); + } + } + _getUniformDataChanges() { + const _dataChanges = this._dataChanges; + if (!_dataChanges || !_dataChanges.length) { + return; + } + this._dataChanges = []; + const datasetCount = this.data.datasets.length; + const makeSet = (idx) => new Set( + _dataChanges + .filter(c => c[0] === idx) + .map((c, i) => i + ',' + c.splice(1).join(',')) + ); + const changeSet = makeSet(0); + for (let i = 1; i < datasetCount; i++) { + if (!setsEqual(changeSet, makeSet(i))) { + return; + } + } + return Array.from(changeSet) + .map(c => c.split(',')) + .map(a => ({method: a[1], start: +a[2], count: +a[3]})); + } + _updateLayout(minPadding) { + if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) { + return; + } + layouts.update(this, this.width, this.height, minPadding); + const area = this.chartArea; + const noArea = area.width <= 0 || area.height <= 0; + this._layers = []; + each(this.boxes, (box) => { + if (noArea && box.position === 'chartArea') { + return; + } + if (box.configure) { + box.configure(); + } + this._layers.push(...box._layers()); + }, this); + this._layers.forEach((item, index) => { + item._idx = index; + }); + this.notifyPlugins('afterLayout'); + } + _updateDatasets(mode) { + if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) { + return; + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this.getDatasetMeta(i).controller.configure(); + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode); + } + this.notifyPlugins('afterDatasetsUpdate', {mode}); + } + _updateDataset(index, mode) { + const meta = this.getDatasetMeta(index); + const args = {meta, index, mode, cancelable: true}; + if (this.notifyPlugins('beforeDatasetUpdate', args) === false) { + return; + } + meta.controller._update(mode); + args.cancelable = false; + this.notifyPlugins('afterDatasetUpdate', args); + } + render() { + if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) { + return; + } + if (animator.has(this)) { + if (this.attached && !animator.running(this)) { + animator.start(this); + } + } else { + this.draw(); + onAnimationsComplete({chart: this}); + } + } + draw() { + let i; + if (this._resizeBeforeDraw) { + const {width, height} = this._resizeBeforeDraw; + this._resize(width, height); + this._resizeBeforeDraw = null; + } + this.clear(); + if (this.width <= 0 || this.height <= 0) { + return; + } + if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) { + return; + } + const layers = this._layers; + for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { + layers[i].draw(this.chartArea); + } + this._drawDatasets(); + for (; i < layers.length; ++i) { + layers[i].draw(this.chartArea); + } + this.notifyPlugins('afterDraw'); + } + _getSortedDatasetMetas(filterVisible) { + const metasets = this._sortedMetasets; + const result = []; + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + const meta = metasets[i]; + if (!filterVisible || meta.visible) { + result.push(meta); + } + } + return result; + } + getSortedVisibleDatasetMetas() { + return this._getSortedDatasetMetas(true); + } + _drawDatasets() { + if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) { + return; + } + const metasets = this.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + this._drawDataset(metasets[i]); + } + this.notifyPlugins('afterDatasetsDraw'); + } + _drawDataset(meta) { + const ctx = this.ctx; + const clip = meta._clip; + const useClip = !clip.disabled; + const area = this.chartArea; + const args = { + meta, + index: meta.index, + cancelable: true + }; + if (this.notifyPlugins('beforeDatasetDraw', args) === false) { + return; + } + if (useClip) { + clipArea(ctx, { + left: clip.left === false ? 0 : area.left - clip.left, + right: clip.right === false ? this.width : area.right + clip.right, + top: clip.top === false ? 0 : area.top - clip.top, + bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom + }); + } + meta.controller.draw(); + if (useClip) { + unclipArea(ctx); + } + args.cancelable = false; + this.notifyPlugins('afterDatasetDraw', args); + } + getElementsAtEventForMode(e, mode, options, useFinalPosition) { + const method = Interaction.modes[mode]; + if (typeof method === 'function') { + return method(this, e, options, useFinalPosition); + } + return []; + } + getDatasetMeta(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + const metasets = this._metasets; + let meta = metasets.filter(x => x && x._dataset === dataset).pop(); + if (!meta) { + meta = { + type: null, + data: [], + dataset: null, + controller: null, + hidden: null, + xAxisID: null, + yAxisID: null, + order: dataset && dataset.order || 0, + index: datasetIndex, + _dataset: dataset, + _parsed: [], + _sorted: false + }; + metasets.push(meta); + } + return meta; + } + getContext() { + return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'})); + } + getVisibleDatasetCount() { + return this.getSortedVisibleDatasetMetas().length; + } + isDatasetVisible(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + if (!dataset) { + return false; + } + const meta = this.getDatasetMeta(datasetIndex); + return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden; + } + setDatasetVisibility(datasetIndex, visible) { + const meta = this.getDatasetMeta(datasetIndex); + meta.hidden = !visible; + } + toggleDataVisibility(index) { + this._hiddenIndices[index] = !this._hiddenIndices[index]; + } + getDataVisibility(index) { + return !this._hiddenIndices[index]; + } + _updateVisibility(datasetIndex, dataIndex, visible) { + const mode = visible ? 'show' : 'hide'; + const meta = this.getDatasetMeta(datasetIndex); + const anims = meta.controller._resolveAnimations(undefined, mode); + if (defined(dataIndex)) { + meta.data[dataIndex].hidden = !visible; + this.update(); + } else { + this.setDatasetVisibility(datasetIndex, visible); + anims.update(meta, {visible}); + this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined); + } + } + hide(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, false); + } + show(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, true); + } + _destroyDatasetMeta(datasetIndex) { + const meta = this._metasets[datasetIndex]; + if (meta && meta.controller) { + meta.controller._destroy(); + } + delete this._metasets[datasetIndex]; + } + _stop() { + let i, ilen; + this.stop(); + animator.remove(this); + for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._destroyDatasetMeta(i); + } + } + destroy() { + this.notifyPlugins('beforeDestroy'); + const {canvas, ctx} = this; + this._stop(); + this.config.clearCache(); + if (canvas) { + this.unbindEvents(); + clearCanvas(canvas, ctx); + this.platform.releaseContext(ctx); + this.canvas = null; + this.ctx = null; + } + this.notifyPlugins('destroy'); + delete instances[this.id]; + this.notifyPlugins('afterDestroy'); + } + toBase64Image(...args) { + return this.canvas.toDataURL(...args); + } + bindEvents() { + this.bindUserEvents(); + if (this.options.responsive) { + this.bindResponsiveEvents(); + } else { + this.attached = true; + } + } + bindUserEvents() { + const listeners = this._listeners; + const platform = this.platform; + const _add = (type, listener) => { + platform.addEventListener(this, type, listener); + listeners[type] = listener; + }; + const listener = (e, x, y) => { + e.offsetX = x; + e.offsetY = y; + this._eventHandler(e); + }; + each(this.options.events, (type) => _add(type, listener)); + } + bindResponsiveEvents() { + if (!this._responsiveListeners) { + this._responsiveListeners = {}; + } + const listeners = this._responsiveListeners; + const platform = this.platform; + const _add = (type, listener) => { + platform.addEventListener(this, type, listener); + listeners[type] = listener; + }; + const _remove = (type, listener) => { + if (listeners[type]) { + platform.removeEventListener(this, type, listener); + delete listeners[type]; + } + }; + const listener = (width, height) => { + if (this.canvas) { + this.resize(width, height); + } + }; + let detached; + const attached = () => { + _remove('attach', attached); + this.attached = true; + this.resize(); + _add('resize', listener); + _add('detach', detached); + }; + detached = () => { + this.attached = false; + _remove('resize', listener); + this._stop(); + this._resize(0, 0); + _add('attach', attached); + }; + if (platform.isAttached(this.canvas)) { + attached(); + } else { + detached(); + } + } + unbindEvents() { + each(this._listeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._listeners = {}; + each(this._responsiveListeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._responsiveListeners = undefined; + } + updateHoverStyle(items, mode, enabled) { + const prefix = enabled ? 'set' : 'remove'; + let meta, item, i, ilen; + if (mode === 'dataset') { + meta = this.getDatasetMeta(items[0].datasetIndex); + meta.controller['_' + prefix + 'DatasetHoverStyle'](); + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + item = items[i]; + const controller = item && this.getDatasetMeta(item.datasetIndex).controller; + if (controller) { + controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index); + } + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements) { + const lastActive = this._active || []; + const active = activeElements.map(({datasetIndex, index}) => { + const meta = this.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error('No dataset found at index ' + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index], + index, + }; + }); + const changed = !_elementsEqual(active, lastActive); + if (changed) { + this._active = active; + this._lastEvent = null; + this._updateHoverStyles(active, lastActive); + } + } + notifyPlugins(hook, args, filter) { + return this._plugins.notify(this, hook, args, filter); + } + _updateHoverStyles(active, lastActive, replay) { + const hoverOptions = this.options.hover; + const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index)); + const deactivated = diff(lastActive, active); + const activated = replay ? active : diff(active, lastActive); + if (deactivated.length) { + this.updateHoverStyle(deactivated, hoverOptions.mode, false); + } + if (activated.length && hoverOptions.mode) { + this.updateHoverStyle(activated, hoverOptions.mode, true); + } + } + _eventHandler(e, replay) { + const args = { + event: e, + replay, + cancelable: true, + inChartArea: _isPointInArea(e, this.chartArea, this._minPadding) + }; + const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type); + if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) { + return; + } + const changed = this._handleEvent(e, replay, args.inChartArea); + args.cancelable = false; + this.notifyPlugins('afterEvent', args, eventFilter); + if (changed || args.changed) { + this.render(); + } + return this; + } + _handleEvent(e, replay, inChartArea) { + const {_active: lastActive = [], options} = this; + const useFinalPosition = replay; + const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition); + const isClick = _isClickEvent(e); + const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick); + if (inChartArea) { + this._lastEvent = null; + callback(options.onHover, [e, active, this], this); + if (isClick) { + callback(options.onClick, [e, active, this], this); + } + } + const changed = !_elementsEqual(active, lastActive); + if (changed || replay) { + this._active = active; + this._updateHoverStyles(active, lastActive, replay); + } + this._lastEvent = lastEvent; + return changed; + } + _getActiveElements(e, lastActive, inChartArea, useFinalPosition) { + if (e.type === 'mouseout') { + return []; + } + if (!inChartArea) { + return lastActive; + } + const hoverOptions = this.options.hover; + return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition); + } +} +const invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate()); +const enumerable = true; +Object.defineProperties(Chart, { + defaults: { + enumerable, + value: defaults + }, + instances: { + enumerable, + value: instances + }, + overrides: { + enumerable, + value: overrides + }, + registry: { + enumerable, + value: registry + }, + version: { + enumerable, + value: version + }, + getChart: { + enumerable, + value: getChart + }, + register: { + enumerable, + value: (...items) => { + registry.add(...items); + invalidatePlugins(); + } + }, + unregister: { + enumerable, + value: (...items) => { + registry.remove(...items); + invalidatePlugins(); + } + } +}); + +function clipArc(ctx, element, endAngle) { + const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element; + let angleMargin = pixelMargin / outerRadius; + ctx.beginPath(); + ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin); + if (innerRadius > pixelMargin) { + angleMargin = pixelMargin / innerRadius; + ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true); + } else { + ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI); + } + ctx.closePath(); + ctx.clip(); +} +function toRadiusCorners(value) { + return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']); +} +function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) { + const o = toRadiusCorners(arc.options.borderRadius); + const halfThickness = (outerRadius - innerRadius) / 2; + const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); + const computeOuterLimit = (val) => { + const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2; + return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit)); + }; + return { + outerStart: computeOuterLimit(o.outerStart), + outerEnd: computeOuterLimit(o.outerEnd), + innerStart: _limitValue(o.innerStart, 0, innerLimit), + innerEnd: _limitValue(o.innerEnd, 0, innerLimit), + }; +} +function rThetaToXY(r, theta, x, y) { + return { + x: x + r * Math.cos(theta), + y: y + r * Math.sin(theta), + }; +} +function pathArc(ctx, element, offset, spacing, end) { + const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element; + const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); + const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; + let spacingOffset = 0; + const alpha = end - start; + if (spacing) { + const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; + const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; + const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; + const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha; + spacingOffset = (alpha - adjustedAngle) / 2; + } + const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius; + const angleOffset = (alpha - beta) / 2; + const startAngle = start + angleOffset + spacingOffset; + const endAngle = end - angleOffset - spacingOffset; + const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle); + const outerStartAdjustedRadius = outerRadius - outerStart; + const outerEndAdjustedRadius = outerRadius - outerEnd; + const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius; + const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius; + const innerStartAdjustedRadius = innerRadius + innerStart; + const innerEndAdjustedRadius = innerRadius + innerEnd; + const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius; + const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius; + ctx.beginPath(); + ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle); + if (outerEnd > 0) { + const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI); + } + const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y); + ctx.lineTo(p4.x, p4.y); + if (innerEnd > 0) { + const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI); + } + ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true); + if (innerStart > 0) { + const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI); + } + const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y); + ctx.lineTo(p8.x, p8.y); + if (outerStart > 0) { + const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle); + } + ctx.closePath(); +} +function drawArc(ctx, element, offset, spacing) { + const {fullCircles, startAngle, circumference} = element; + let endAngle = element.endAngle; + if (fullCircles) { + pathArc(ctx, element, offset, spacing, startAngle + TAU); + for (let i = 0; i < fullCircles; ++i) { + ctx.fill(); + } + if (!isNaN(circumference)) { + endAngle = startAngle + circumference % TAU; + if (circumference % TAU === 0) { + endAngle += TAU; + } + } + } + pathArc(ctx, element, offset, spacing, endAngle); + ctx.fill(); + return endAngle; +} +function drawFullCircleBorders(ctx, element, inner) { + const {x, y, startAngle, pixelMargin, fullCircles} = element; + const outerRadius = Math.max(element.outerRadius - pixelMargin, 0); + const innerRadius = element.innerRadius + pixelMargin; + let i; + if (inner) { + clipArc(ctx, element, startAngle + TAU); + } + ctx.beginPath(); + ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true); + for (i = 0; i < fullCircles; ++i) { + ctx.stroke(); + } + ctx.beginPath(); + ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU); + for (i = 0; i < fullCircles; ++i) { + ctx.stroke(); + } +} +function drawBorder(ctx, element, offset, spacing, endAngle) { + const {options} = element; + const {borderWidth, borderJoinStyle} = options; + const inner = options.borderAlign === 'inner'; + if (!borderWidth) { + return; + } + if (inner) { + ctx.lineWidth = borderWidth * 2; + ctx.lineJoin = borderJoinStyle || 'round'; + } else { + ctx.lineWidth = borderWidth; + ctx.lineJoin = borderJoinStyle || 'bevel'; + } + if (element.fullCircles) { + drawFullCircleBorders(ctx, element, inner); + } + if (inner) { + clipArc(ctx, element, endAngle); + } + pathArc(ctx, element, offset, spacing, endAngle); + ctx.stroke(); +} +class ArcElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.circumference = undefined; + this.startAngle = undefined; + this.endAngle = undefined; + this.innerRadius = undefined; + this.outerRadius = undefined; + this.pixelMargin = 0; + this.fullCircles = 0; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(chartX, chartY, useFinalPosition) { + const point = this.getProps(['x', 'y'], useFinalPosition); + const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY}); + const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([ + 'startAngle', + 'endAngle', + 'innerRadius', + 'outerRadius', + 'circumference' + ], useFinalPosition); + const rAdjust = this.options.spacing / 2; + const _circumference = valueOrDefault(circumference, endAngle - startAngle); + const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle); + const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); + return (betweenAngles && withinRadius); + } + getCenterPoint(useFinalPosition) { + const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([ + 'x', + 'y', + 'startAngle', + 'endAngle', + 'innerRadius', + 'outerRadius', + 'circumference', + ], useFinalPosition); + const {offset, spacing} = this.options; + const halfAngle = (startAngle + endAngle) / 2; + const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; + return { + x: x + Math.cos(halfAngle) * halfRadius, + y: y + Math.sin(halfAngle) * halfRadius + }; + } + tooltipPosition(useFinalPosition) { + return this.getCenterPoint(useFinalPosition); + } + draw(ctx) { + const {options, circumference} = this; + const offset = (options.offset || 0) / 2; + const spacing = (options.spacing || 0) / 2; + this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0; + this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; + if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) { + return; + } + ctx.save(); + let radiusOffset = 0; + if (offset) { + radiusOffset = offset / 2; + const halfAngle = (this.startAngle + this.endAngle) / 2; + ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset); + if (this.circumference >= PI) { + radiusOffset = offset; + } + } + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + const endAngle = drawArc(ctx, this, radiusOffset, spacing); + drawBorder(ctx, this, radiusOffset, spacing, endAngle); + ctx.restore(); + } +} +ArcElement.id = 'arc'; +ArcElement.defaults = { + borderAlign: 'center', + borderColor: '#fff', + borderJoinStyle: undefined, + borderRadius: 0, + borderWidth: 2, + offset: 0, + spacing: 0, + angle: undefined, +}; +ArcElement.defaultRoutes = { + backgroundColor: 'backgroundColor' +}; + +function setStyle(ctx, options, style = options) { + ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle); + ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash)); + ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset); + ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle); + ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth); + ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor); +} +function lineTo(ctx, previous, target) { + ctx.lineTo(target.x, target.y); +} +function getLineMethod(options) { + if (options.stepped) { + return _steppedLineTo; + } + if (options.tension || options.cubicInterpolationMode === 'monotone') { + return _bezierCurveTo; + } + return lineTo; +} +function pathVars(points, segment, params = {}) { + const count = points.length; + const {start: paramsStart = 0, end: paramsEnd = count - 1} = params; + const {start: segmentStart, end: segmentEnd} = segment; + const start = Math.max(paramsStart, segmentStart); + const end = Math.min(paramsEnd, segmentEnd); + const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd; + return { + count, + start, + loop: segment.loop, + ilen: end < start && !outside ? count + end - start : end - start + }; +} +function pathSegment(ctx, line, segment, params) { + const {points, options} = line; + const {count, start, loop, ilen} = pathVars(points, segment, params); + const lineMethod = getLineMethod(options); + let {move = true, reverse} = params || {}; + let i, point, prev; + for (i = 0; i <= ilen; ++i) { + point = points[(start + (reverse ? ilen - i : i)) % count]; + if (point.skip) { + continue; + } else if (move) { + ctx.moveTo(point.x, point.y); + move = false; + } else { + lineMethod(ctx, prev, point, reverse, options.stepped); + } + prev = point; + } + if (loop) { + point = points[(start + (reverse ? ilen : 0)) % count]; + lineMethod(ctx, prev, point, reverse, options.stepped); + } + return !!loop; +} +function fastPathSegment(ctx, line, segment, params) { + const points = line.points; + const {count, start, ilen} = pathVars(points, segment, params); + const {move = true, reverse} = params || {}; + let avgX = 0; + let countX = 0; + let i, point, prevX, minY, maxY, lastY; + const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count; + const drawX = () => { + if (minY !== maxY) { + ctx.lineTo(avgX, maxY); + ctx.lineTo(avgX, minY); + ctx.lineTo(avgX, lastY); + } + }; + if (move) { + point = points[pointIndex(0)]; + ctx.moveTo(point.x, point.y); + } + for (i = 0; i <= ilen; ++i) { + point = points[pointIndex(i)]; + if (point.skip) { + continue; + } + const x = point.x; + const y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + } else if (y > maxY) { + maxY = y; + } + avgX = (countX * avgX + x) / ++countX; + } else { + drawX(); + ctx.lineTo(x, y); + prevX = truncX; + countX = 0; + minY = maxY = y; + } + lastY = y; + } + drawX(); +} +function _getSegmentMethod(line) { + const opts = line.options; + const borderDash = opts.borderDash && opts.borderDash.length; + const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash; + return useFastPath ? fastPathSegment : pathSegment; +} +function _getInterpolationMethod(options) { + if (options.stepped) { + return _steppedInterpolation; + } + if (options.tension || options.cubicInterpolationMode === 'monotone') { + return _bezierInterpolation; + } + return _pointInLine; +} +function strokePathWithCache(ctx, line, start, count) { + let path = line._path; + if (!path) { + path = line._path = new Path2D(); + if (line.path(path, start, count)) { + path.closePath(); + } + } + setStyle(ctx, line.options); + ctx.stroke(path); +} +function strokePathDirect(ctx, line, start, count) { + const {segments, options} = line; + const segmentMethod = _getSegmentMethod(line); + for (const segment of segments) { + setStyle(ctx, options, segment.style); + ctx.beginPath(); + if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) { + ctx.closePath(); + } + ctx.stroke(); + } +} +const usePath2D = typeof Path2D === 'function'; +function draw(ctx, line, start, count) { + if (usePath2D && !line.options.segment) { + strokePathWithCache(ctx, line, start, count); + } else { + strokePathDirect(ctx, line, start, count); + } +} +class LineElement extends Element { + constructor(cfg) { + super(); + this.animated = true; + this.options = undefined; + this._chart = undefined; + this._loop = undefined; + this._fullLoop = undefined; + this._path = undefined; + this._points = undefined; + this._segments = undefined; + this._decimated = false; + this._pointsUpdated = false; + this._datasetIndex = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + updateControlPoints(chartArea, indexAxis) { + const options = this.options; + if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) { + const loop = options.spanGaps ? this._loop : this._fullLoop; + _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis); + this._pointsUpdated = true; + } + } + set points(points) { + this._points = points; + delete this._segments; + delete this._path; + this._pointsUpdated = false; + } + get points() { + return this._points; + } + get segments() { + return this._segments || (this._segments = _computeSegments(this, this.options.segment)); + } + first() { + const segments = this.segments; + const points = this.points; + return segments.length && points[segments[0].start]; + } + last() { + const segments = this.segments; + const points = this.points; + const count = segments.length; + return count && points[segments[count - 1].end]; + } + interpolate(point, property) { + const options = this.options; + const value = point[property]; + const points = this.points; + const segments = _boundSegments(this, {property, start: value, end: value}); + if (!segments.length) { + return; + } + const result = []; + const _interpolate = _getInterpolationMethod(options); + let i, ilen; + for (i = 0, ilen = segments.length; i < ilen; ++i) { + const {start, end} = segments[i]; + const p1 = points[start]; + const p2 = points[end]; + if (p1 === p2) { + result.push(p1); + continue; + } + const t = Math.abs((value - p1[property]) / (p2[property] - p1[property])); + const interpolated = _interpolate(p1, p2, t, options.stepped); + interpolated[property] = point[property]; + result.push(interpolated); + } + return result.length === 1 ? result[0] : result; + } + pathSegment(ctx, segment, params) { + const segmentMethod = _getSegmentMethod(this); + return segmentMethod(ctx, this, segment, params); + } + path(ctx, start, count) { + const segments = this.segments; + const segmentMethod = _getSegmentMethod(this); + let loop = this._loop; + start = start || 0; + count = count || (this.points.length - start); + for (const segment of segments) { + loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1}); + } + return !!loop; + } + draw(ctx, chartArea, start, count) { + const options = this.options || {}; + const points = this.points || []; + if (points.length && options.borderWidth) { + ctx.save(); + draw(ctx, this, start, count); + ctx.restore(); + } + if (this.animated) { + this._pointsUpdated = false; + this._path = undefined; + } + } +} +LineElement.id = 'line'; +LineElement.defaults = { + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderWidth: 3, + capBezierPoints: true, + cubicInterpolationMode: 'default', + fill: false, + spanGaps: false, + stepped: false, + tension: 0, +}; +LineElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; +LineElement.descriptors = { + _scriptable: true, + _indexable: (name) => name !== 'borderDash' && name !== 'fill', +}; + +function inRange$1(el, pos, axis, useFinalPosition) { + const options = el.options; + const {[axis]: value} = el.getProps([axis], useFinalPosition); + return (Math.abs(pos - value) < options.radius + options.hitRadius); +} +class PointElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.parsed = undefined; + this.skip = undefined; + this.stop = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(mouseX, mouseY, useFinalPosition) { + const options = this.options; + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2)); + } + inXRange(mouseX, useFinalPosition) { + return inRange$1(this, mouseX, 'x', useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange$1(this, mouseY, 'y', useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return {x, y}; + } + size(options) { + options = options || this.options || {}; + let radius = options.radius || 0; + radius = Math.max(radius, radius && options.hoverRadius || 0); + const borderWidth = radius && options.borderWidth || 0; + return (radius + borderWidth) * 2; + } + draw(ctx, area) { + const options = this.options; + if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) { + return; + } + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.fillStyle = options.backgroundColor; + drawPoint(ctx, options, this.x, this.y); + } + getRange() { + const options = this.options || {}; + return options.radius + options.hitRadius; + } +} +PointElement.id = 'point'; +PointElement.defaults = { + borderWidth: 1, + hitRadius: 1, + hoverBorderWidth: 1, + hoverRadius: 4, + pointStyle: 'circle', + radius: 3, + rotation: 0 +}; +PointElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; + +function getBarBounds(bar, useFinalPosition) { + const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition); + let left, right, top, bottom, half; + if (bar.horizontal) { + half = height / 2; + left = Math.min(x, base); + right = Math.max(x, base); + top = y - half; + bottom = y + half; + } else { + half = width / 2; + left = x - half; + right = x + half; + top = Math.min(y, base); + bottom = Math.max(y, base); + } + return {left, top, right, bottom}; +} +function skipOrLimit(skip, value, min, max) { + return skip ? 0 : _limitValue(value, min, max); +} +function parseBorderWidth(bar, maxW, maxH) { + const value = bar.options.borderWidth; + const skip = bar.borderSkipped; + const o = toTRBL(value); + return { + t: skipOrLimit(skip.top, o.top, 0, maxH), + r: skipOrLimit(skip.right, o.right, 0, maxW), + b: skipOrLimit(skip.bottom, o.bottom, 0, maxH), + l: skipOrLimit(skip.left, o.left, 0, maxW) + }; +} +function parseBorderRadius(bar, maxW, maxH) { + const {enableBorderRadius} = bar.getProps(['enableBorderRadius']); + const value = bar.options.borderRadius; + const o = toTRBLCorners(value); + const maxR = Math.min(maxW, maxH); + const skip = bar.borderSkipped; + const enableBorder = enableBorderRadius || isObject(value); + return { + topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR), + topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR), + bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR), + bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR) + }; +} +function boundingRects(bar) { + const bounds = getBarBounds(bar); + const width = bounds.right - bounds.left; + const height = bounds.bottom - bounds.top; + const border = parseBorderWidth(bar, width / 2, height / 2); + const radius = parseBorderRadius(bar, width / 2, height / 2); + return { + outer: { + x: bounds.left, + y: bounds.top, + w: width, + h: height, + radius + }, + inner: { + x: bounds.left + border.l, + y: bounds.top + border.t, + w: width - border.l - border.r, + h: height - border.t - border.b, + radius: { + topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)), + topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)), + bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)), + bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)), + } + } + }; +} +function inRange(bar, x, y, useFinalPosition) { + const skipX = x === null; + const skipY = y === null; + const skipBoth = skipX && skipY; + const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition); + return bounds + && (skipX || _isBetween(x, bounds.left, bounds.right)) + && (skipY || _isBetween(y, bounds.top, bounds.bottom)); +} +function hasRadius(radius) { + return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight; +} +function addNormalRectPath(ctx, rect) { + ctx.rect(rect.x, rect.y, rect.w, rect.h); +} +function inflateRect(rect, amount, refRect = {}) { + const x = rect.x !== refRect.x ? -amount : 0; + const y = rect.y !== refRect.y ? -amount : 0; + const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x; + const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y; + return { + x: rect.x + x, + y: rect.y + y, + w: rect.w + w, + h: rect.h + h, + radius: rect.radius + }; +} +class BarElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.horizontal = undefined; + this.base = undefined; + this.width = undefined; + this.height = undefined; + this.inflateAmount = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + draw(ctx) { + const {inflateAmount, options: {borderColor, backgroundColor}} = this; + const {inner, outer} = boundingRects(this); + const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath; + ctx.save(); + if (outer.w !== inner.w || outer.h !== inner.h) { + ctx.beginPath(); + addRectPath(ctx, inflateRect(outer, inflateAmount, inner)); + ctx.clip(); + addRectPath(ctx, inflateRect(inner, -inflateAmount, outer)); + ctx.fillStyle = borderColor; + ctx.fill('evenodd'); + } + ctx.beginPath(); + addRectPath(ctx, inflateRect(inner, inflateAmount)); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + inRange(mouseX, mouseY, useFinalPosition) { + return inRange(this, mouseX, mouseY, useFinalPosition); + } + inXRange(mouseX, useFinalPosition) { + return inRange(this, mouseX, null, useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange(this, null, mouseY, useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition); + return { + x: horizontal ? (x + base) / 2 : x, + y: horizontal ? y : (y + base) / 2 + }; + } + getRange(axis) { + return axis === 'x' ? this.width / 2 : this.height / 2; + } +} +BarElement.id = 'bar'; +BarElement.defaults = { + borderSkipped: 'start', + borderWidth: 0, + borderRadius: 0, + inflateAmount: 'auto', + pointStyle: undefined +}; +BarElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; + +var elements = /*#__PURE__*/Object.freeze({ +__proto__: null, +ArcElement: ArcElement, +LineElement: LineElement, +PointElement: PointElement, +BarElement: BarElement +}); + +function lttbDecimation(data, start, count, availableWidth, options) { + const samples = options.samples || availableWidth; + if (samples >= count) { + return data.slice(start, start + count); + } + const decimated = []; + const bucketWidth = (count - 2) / (samples - 2); + let sampledIndex = 0; + const endIndex = start + count - 1; + let a = start; + let i, maxAreaPoint, maxArea, area, nextA; + decimated[sampledIndex++] = data[a]; + for (i = 0; i < samples - 2; i++) { + let avgX = 0; + let avgY = 0; + let j; + const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start; + const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start; + const avgRangeLength = avgRangeEnd - avgRangeStart; + for (j = avgRangeStart; j < avgRangeEnd; j++) { + avgX += data[j].x; + avgY += data[j].y; + } + avgX /= avgRangeLength; + avgY /= avgRangeLength; + const rangeOffs = Math.floor(i * bucketWidth) + 1 + start; + const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start; + const {x: pointAx, y: pointAy} = data[a]; + maxArea = area = -1; + for (j = rangeOffs; j < rangeTo; j++) { + area = 0.5 * Math.abs( + (pointAx - avgX) * (data[j].y - pointAy) - + (pointAx - data[j].x) * (avgY - pointAy) + ); + if (area > maxArea) { + maxArea = area; + maxAreaPoint = data[j]; + nextA = j; + } + } + decimated[sampledIndex++] = maxAreaPoint; + a = nextA; + } + decimated[sampledIndex++] = data[endIndex]; + return decimated; +} +function minMaxDecimation(data, start, count, availableWidth) { + let avgX = 0; + let countX = 0; + let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY; + const decimated = []; + const endIndex = start + count - 1; + const xMin = data[start].x; + const xMax = data[endIndex].x; + const dx = xMax - xMin; + for (i = start; i < start + count; ++i) { + point = data[i]; + x = (point.x - xMin) / dx * availableWidth; + y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + minIndex = i; + } else if (y > maxY) { + maxY = y; + maxIndex = i; + } + avgX = (countX * avgX + point.x) / ++countX; + } else { + const lastIndex = i - 1; + if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) { + const intermediateIndex1 = Math.min(minIndex, maxIndex); + const intermediateIndex2 = Math.max(minIndex, maxIndex); + if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex1], + x: avgX, + }); + } + if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex2], + x: avgX + }); + } + } + if (i > 0 && lastIndex !== startIndex) { + decimated.push(data[lastIndex]); + } + decimated.push(point); + prevX = truncX; + countX = 0; + minY = maxY = y; + minIndex = maxIndex = startIndex = i; + } + } + return decimated; +} +function cleanDecimatedDataset(dataset) { + if (dataset._decimated) { + const data = dataset._data; + delete dataset._decimated; + delete dataset._data; + Object.defineProperty(dataset, 'data', {value: data}); + } +} +function cleanDecimatedData(chart) { + chart.data.datasets.forEach((dataset) => { + cleanDecimatedDataset(dataset); + }); +} +function getStartAndCountOfVisiblePointsSimplified(meta, points) { + const pointCount = points.length; + let start = 0; + let count; + const {iScale} = meta; + const {min, max, minDefined, maxDefined} = iScale.getUserBounds(); + if (minDefined) { + start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1); + } + if (maxDefined) { + count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start; + } else { + count = pointCount - start; + } + return {start, count}; +} +var plugin_decimation = { + id: 'decimation', + defaults: { + algorithm: 'min-max', + enabled: false, + }, + beforeElementsUpdate: (chart, args, options) => { + if (!options.enabled) { + cleanDecimatedData(chart); + return; + } + const availableWidth = chart.width; + chart.data.datasets.forEach((dataset, datasetIndex) => { + const {_data, indexAxis} = dataset; + const meta = chart.getDatasetMeta(datasetIndex); + const data = _data || dataset.data; + if (resolve([indexAxis, chart.options.indexAxis]) === 'y') { + return; + } + if (meta.type !== 'line') { + return; + } + const xAxis = chart.scales[meta.xAxisID]; + if (xAxis.type !== 'linear' && xAxis.type !== 'time') { + return; + } + if (chart.options.parsing) { + return; + } + let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data); + const threshold = options.threshold || 4 * availableWidth; + if (count <= threshold) { + cleanDecimatedDataset(dataset); + return; + } + if (isNullOrUndef(_data)) { + dataset._data = data; + delete dataset.data; + Object.defineProperty(dataset, 'data', { + configurable: true, + enumerable: true, + get: function() { + return this._decimated; + }, + set: function(d) { + this._data = d; + } + }); + } + let decimated; + switch (options.algorithm) { + case 'lttb': + decimated = lttbDecimation(data, start, count, availableWidth, options); + break; + case 'min-max': + decimated = minMaxDecimation(data, start, count, availableWidth); + break; + default: + throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`); + } + dataset._decimated = decimated; + }); + }, + destroy(chart) { + cleanDecimatedData(chart); + } +}; + +function getLineByIndex(chart, index) { + const meta = chart.getDatasetMeta(index); + const visible = meta && chart.isDatasetVisible(index); + return visible ? meta.dataset : null; +} +function parseFillOption(line) { + const options = line.options; + const fillOption = options.fill; + let fill = valueOrDefault(fillOption && fillOption.target, fillOption); + if (fill === undefined) { + fill = !!options.backgroundColor; + } + if (fill === false || fill === null) { + return false; + } + if (fill === true) { + return 'origin'; + } + return fill; +} +function decodeFill(line, index, count) { + const fill = parseFillOption(line); + if (isObject(fill)) { + return isNaN(fill.value) ? false : fill; + } + let target = parseFloat(fill); + if (isNumberFinite(target) && Math.floor(target) === target) { + if (fill[0] === '-' || fill[0] === '+') { + target = index + target; + } + if (target === index || target < 0 || target >= count) { + return false; + } + return target; + } + return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill; +} +function computeLinearBoundary(source) { + const {scale = {}, fill} = source; + let target = null; + let horizontal; + if (fill === 'start') { + target = scale.bottom; + } else if (fill === 'end') { + target = scale.top; + } else if (isObject(fill)) { + target = scale.getPixelForValue(fill.value); + } else if (scale.getBasePixel) { + target = scale.getBasePixel(); + } + if (isNumberFinite(target)) { + horizontal = scale.isHorizontal(); + return { + x: horizontal ? target : null, + y: horizontal ? null : target + }; + } + return null; +} +class simpleArc { + constructor(opts) { + this.x = opts.x; + this.y = opts.y; + this.radius = opts.radius; + } + pathSegment(ctx, bounds, opts) { + const {x, y, radius} = this; + bounds = bounds || {start: 0, end: TAU}; + ctx.arc(x, y, radius, bounds.end, bounds.start, true); + return !opts.bounds; + } + interpolate(point) { + const {x, y, radius} = this; + const angle = point.angle; + return { + x: x + Math.cos(angle) * radius, + y: y + Math.sin(angle) * radius, + angle + }; + } +} +function computeCircularBoundary(source) { + const {scale, fill} = source; + const options = scale.options; + const length = scale.getLabels().length; + const target = []; + const start = options.reverse ? scale.max : scale.min; + const end = options.reverse ? scale.min : scale.max; + let i, center, value; + if (fill === 'start') { + value = start; + } else if (fill === 'end') { + value = end; + } else if (isObject(fill)) { + value = fill.value; + } else { + value = scale.getBaseValue(); + } + if (options.grid.circular) { + center = scale.getPointPositionForValue(0, start); + return new simpleArc({ + x: center.x, + y: center.y, + radius: scale.getDistanceFromCenterForValue(value) + }); + } + for (i = 0; i < length; ++i) { + target.push(scale.getPointPositionForValue(i, value)); + } + return target; +} +function computeBoundary(source) { + const scale = source.scale || {}; + if (scale.getPointPositionForValue) { + return computeCircularBoundary(source); + } + return computeLinearBoundary(source); +} +function findSegmentEnd(start, end, points) { + for (;end > start; end--) { + const point = points[end]; + if (!isNaN(point.x) && !isNaN(point.y)) { + break; + } + } + return end; +} +function pointsFromSegments(boundary, line) { + const {x = null, y = null} = boundary || {}; + const linePoints = line.points; + const points = []; + line.segments.forEach(({start, end}) => { + end = findSegmentEnd(start, end, linePoints); + const first = linePoints[start]; + const last = linePoints[end]; + if (y !== null) { + points.push({x: first.x, y}); + points.push({x: last.x, y}); + } else if (x !== null) { + points.push({x, y: first.y}); + points.push({x, y: last.y}); + } + }); + return points; +} +function buildStackLine(source) { + const {scale, index, line} = source; + const points = []; + const segments = line.segments; + const sourcePoints = line.points; + const linesBelow = getLinesBelow(scale, index); + linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line)); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + for (let j = segment.start; j <= segment.end; j++) { + addPointsBelow(points, sourcePoints[j], linesBelow); + } + } + return new LineElement({points, options: {}}); +} +function getLinesBelow(scale, index) { + const below = []; + const metas = scale.getMatchingVisibleMetas('line'); + for (let i = 0; i < metas.length; i++) { + const meta = metas[i]; + if (meta.index === index) { + break; + } + if (!meta.hidden) { + below.unshift(meta.dataset); + } + } + return below; +} +function addPointsBelow(points, sourcePoint, linesBelow) { + const postponed = []; + for (let j = 0; j < linesBelow.length; j++) { + const line = linesBelow[j]; + const {first, last, point} = findPoint(line, sourcePoint, 'x'); + if (!point || (first && last)) { + continue; + } + if (first) { + postponed.unshift(point); + } else { + points.push(point); + if (!last) { + break; + } + } + } + points.push(...postponed); +} +function findPoint(line, sourcePoint, property) { + const point = line.interpolate(sourcePoint, property); + if (!point) { + return {}; + } + const pointValue = point[property]; + const segments = line.segments; + const linePoints = line.points; + let first = false; + let last = false; + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + const firstValue = linePoints[segment.start][property]; + const lastValue = linePoints[segment.end][property]; + if (_isBetween(pointValue, firstValue, lastValue)) { + first = pointValue === firstValue; + last = pointValue === lastValue; + break; + } + } + return {first, last, point}; +} +function getTarget(source) { + const {chart, fill, line} = source; + if (isNumberFinite(fill)) { + return getLineByIndex(chart, fill); + } + if (fill === 'stack') { + return buildStackLine(source); + } + if (fill === 'shape') { + return true; + } + const boundary = computeBoundary(source); + if (boundary instanceof simpleArc) { + return boundary; + } + return createBoundaryLine(boundary, line); +} +function createBoundaryLine(boundary, line) { + let points = []; + let _loop = false; + if (isArray(boundary)) { + _loop = true; + points = boundary; + } else { + points = pointsFromSegments(boundary, line); + } + return points.length ? new LineElement({ + points, + options: {tension: 0}, + _loop, + _fullLoop: _loop + }) : null; +} +function resolveTarget(sources, index, propagate) { + const source = sources[index]; + let fill = source.fill; + const visited = [index]; + let target; + if (!propagate) { + return fill; + } + while (fill !== false && visited.indexOf(fill) === -1) { + if (!isNumberFinite(fill)) { + return fill; + } + target = sources[fill]; + if (!target) { + return false; + } + if (target.visible) { + return fill; + } + visited.push(fill); + fill = target.fill; + } + return false; +} +function _clip(ctx, target, clipY) { + const {segments, points} = target; + let first = true; + let lineLoop = false; + ctx.beginPath(); + for (const segment of segments) { + const {start, end} = segment; + const firstPoint = points[start]; + const lastPoint = points[findSegmentEnd(start, end, points)]; + if (first) { + ctx.moveTo(firstPoint.x, firstPoint.y); + first = false; + } else { + ctx.lineTo(firstPoint.x, clipY); + ctx.lineTo(firstPoint.x, firstPoint.y); + } + lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop}); + if (lineLoop) { + ctx.closePath(); + } else { + ctx.lineTo(lastPoint.x, clipY); + } + } + ctx.lineTo(target.first().x, clipY); + ctx.closePath(); + ctx.clip(); +} +function getBounds(property, first, last, loop) { + if (loop) { + return; + } + let start = first[property]; + let end = last[property]; + if (property === 'angle') { + start = _normalizeAngle(start); + end = _normalizeAngle(end); + } + return {property, start, end}; +} +function _getEdge(a, b, prop, fn) { + if (a && b) { + return fn(a[prop], b[prop]); + } + return a ? a[prop] : b ? b[prop] : 0; +} +function _segments(line, target, property) { + const segments = line.segments; + const points = line.points; + const tpoints = target.points; + const parts = []; + for (const segment of segments) { + let {start, end} = segment; + end = findSegmentEnd(start, end, points); + const bounds = getBounds(property, points[start], points[end], segment.loop); + if (!target.segments) { + parts.push({ + source: segment, + target: bounds, + start: points[start], + end: points[end] + }); + continue; + } + const targetSegments = _boundSegments(target, bounds); + for (const tgt of targetSegments) { + const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop); + const fillSources = _boundSegment(segment, points, subBounds); + for (const fillSource of fillSources) { + parts.push({ + source: fillSource, + target: tgt, + start: { + [property]: _getEdge(bounds, subBounds, 'start', Math.max) + }, + end: { + [property]: _getEdge(bounds, subBounds, 'end', Math.min) + } + }); + } + } + } + return parts; +} +function clipBounds(ctx, scale, bounds) { + const {top, bottom} = scale.chart.chartArea; + const {property, start, end} = bounds || {}; + if (property === 'x') { + ctx.beginPath(); + ctx.rect(start, top, end - start, bottom - top); + ctx.clip(); + } +} +function interpolatedLineTo(ctx, target, point, property) { + const interpolatedPoint = target.interpolate(point, property); + if (interpolatedPoint) { + ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y); + } +} +function _fill(ctx, cfg) { + const {line, target, property, color, scale} = cfg; + const segments = _segments(line, target, property); + for (const {source: src, target: tgt, start, end} of segments) { + const {style: {backgroundColor = color} = {}} = src; + const notShape = target !== true; + ctx.save(); + ctx.fillStyle = backgroundColor; + clipBounds(ctx, scale, notShape && getBounds(property, start, end)); + ctx.beginPath(); + const lineLoop = !!line.pathSegment(ctx, src); + let loop; + if (notShape) { + if (lineLoop) { + ctx.closePath(); + } else { + interpolatedLineTo(ctx, target, end, property); + } + const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true}); + loop = lineLoop && targetLoop; + if (!loop) { + interpolatedLineTo(ctx, target, start, property); + } + } + ctx.closePath(); + ctx.fill(loop ? 'evenodd' : 'nonzero'); + ctx.restore(); + } +} +function doFill(ctx, cfg) { + const {line, target, above, below, area, scale} = cfg; + const property = line._loop ? 'angle' : cfg.axis; + ctx.save(); + if (property === 'x' && below !== above) { + _clip(ctx, target, area.top); + _fill(ctx, {line, target, color: above, scale, property}); + ctx.restore(); + ctx.save(); + _clip(ctx, target, area.bottom); + } + _fill(ctx, {line, target, color: below, scale, property}); + ctx.restore(); +} +function drawfill(ctx, source, area) { + const target = getTarget(source); + const {line, scale, axis} = source; + const lineOpts = line.options; + const fillOption = lineOpts.fill; + const color = lineOpts.backgroundColor; + const {above = color, below = color} = fillOption || {}; + if (target && line.points.length) { + clipArea(ctx, area); + doFill(ctx, {line, target, above, below, area, scale, axis}); + unclipArea(ctx); + } +} +var plugin_filler = { + id: 'filler', + afterDatasetsUpdate(chart, _args, options) { + const count = (chart.data.datasets || []).length; + const sources = []; + let meta, i, line, source; + for (i = 0; i < count; ++i) { + meta = chart.getDatasetMeta(i); + line = meta.dataset; + source = null; + if (line && line.options && line instanceof LineElement) { + source = { + visible: chart.isDatasetVisible(i), + index: i, + fill: decodeFill(line, i, count), + chart, + axis: meta.controller.options.indexAxis, + scale: meta.vScale, + line, + }; + } + meta.$filler = source; + sources.push(source); + } + for (i = 0; i < count; ++i) { + source = sources[i]; + if (!source || source.fill === false) { + continue; + } + source.fill = resolveTarget(sources, i, options.propagate); + } + }, + beforeDraw(chart, _args, options) { + const draw = options.drawTime === 'beforeDraw'; + const metasets = chart.getSortedVisibleDatasetMetas(); + const area = chart.chartArea; + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (!source) { + continue; + } + source.line.updateControlPoints(area, source.axis); + if (draw) { + drawfill(chart.ctx, source, area); + } + } + }, + beforeDatasetsDraw(chart, _args, options) { + if (options.drawTime !== 'beforeDatasetsDraw') { + return; + } + const metasets = chart.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (source) { + drawfill(chart.ctx, source, chart.chartArea); + } + } + }, + beforeDatasetDraw(chart, args, options) { + const source = args.meta.$filler; + if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') { + return; + } + drawfill(chart.ctx, source, chart.chartArea); + }, + defaults: { + propagate: true, + drawTime: 'beforeDatasetDraw' + } +}; + +const getBoxSize = (labelOpts, fontSize) => { + let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts; + if (labelOpts.usePointStyle) { + boxHeight = Math.min(boxHeight, fontSize); + boxWidth = Math.min(boxWidth, fontSize); + } + return { + boxWidth, + boxHeight, + itemHeight: Math.max(fontSize, boxHeight) + }; +}; +const itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index; +class Legend extends Element { + constructor(config) { + super(); + this._added = false; + this.legendHitBoxes = []; + this._hoveredItem = null; + this.doughnutMode = false; + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this.legendItems = undefined; + this.columnSizes = undefined; + this.lineWidths = undefined; + this.maxHeight = undefined; + this.maxWidth = undefined; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.height = undefined; + this.width = undefined; + this._margins = undefined; + this.position = undefined; + this.weight = undefined; + this.fullSize = undefined; + } + update(maxWidth, maxHeight, margins) { + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins; + this.setDimensions(); + this.buildLabels(); + this.fit(); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = this._margins.left; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = this._margins.top; + this.bottom = this.height; + } + } + buildLabels() { + const labelOpts = this.options.labels || {}; + let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || []; + if (labelOpts.filter) { + legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data)); + } + if (labelOpts.sort) { + legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data)); + } + if (this.options.reverse) { + legendItems.reverse(); + } + this.legendItems = legendItems; + } + fit() { + const {options, ctx} = this; + if (!options.display) { + this.width = this.height = 0; + return; + } + const labelOpts = options.labels; + const labelFont = toFont(labelOpts.font); + const fontSize = labelFont.size; + const titleHeight = this._computeTitleHeight(); + const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize); + let width, height; + ctx.font = labelFont.string; + if (this.isHorizontal()) { + width = this.maxWidth; + height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10; + } else { + height = this.maxHeight; + width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10; + } + this.width = Math.min(width, options.maxWidth || this.maxWidth); + this.height = Math.min(height, options.maxHeight || this.maxHeight); + } + _fitRows(titleHeight, fontSize, boxWidth, itemHeight) { + const {ctx, maxWidth, options: {labels: {padding}}} = this; + const hitboxes = this.legendHitBoxes = []; + const lineWidths = this.lineWidths = [0]; + const lineHeight = itemHeight + padding; + let totalHeight = titleHeight; + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + let row = -1; + let top = -lineHeight; + this.legendItems.forEach((legendItem, i) => { + const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) { + totalHeight += lineHeight; + lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0; + top += lineHeight; + row++; + } + hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight}; + lineWidths[lineWidths.length - 1] += itemWidth + padding; + }); + return totalHeight; + } + _fitCols(titleHeight, fontSize, boxWidth, itemHeight) { + const {ctx, maxHeight, options: {labels: {padding}}} = this; + const hitboxes = this.legendHitBoxes = []; + const columnSizes = this.columnSizes = []; + const heightLimit = maxHeight - titleHeight; + let totalWidth = padding; + let currentColWidth = 0; + let currentColHeight = 0; + let left = 0; + let col = 0; + this.legendItems.forEach((legendItem, i) => { + const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { + totalWidth += currentColWidth + padding; + columnSizes.push({width: currentColWidth, height: currentColHeight}); + left += currentColWidth + padding; + col++; + currentColWidth = currentColHeight = 0; + } + hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight}; + currentColWidth = Math.max(currentColWidth, itemWidth); + currentColHeight += itemHeight + padding; + }); + totalWidth += currentColWidth; + columnSizes.push({width: currentColWidth, height: currentColHeight}); + return totalWidth; + } + adjustHitBoxes() { + if (!this.options.display) { + return; + } + const titleHeight = this._computeTitleHeight(); + const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this; + const rtlHelper = getRtlAdapter(rtl, this.left, this.width); + if (this.isHorizontal()) { + let row = 0; + let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + for (const hitbox of hitboxes) { + if (row !== hitbox.row) { + row = hitbox.row; + left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + } + hitbox.top += this.top + titleHeight + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width); + left += hitbox.width + padding; + } + } else { + let col = 0; + let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + for (const hitbox of hitboxes) { + if (hitbox.col !== col) { + col = hitbox.col; + top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + } + hitbox.top = top; + hitbox.left += this.left + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width); + top += hitbox.height + padding; + } + } + } + isHorizontal() { + return this.options.position === 'top' || this.options.position === 'bottom'; + } + draw() { + if (this.options.display) { + const ctx = this.ctx; + clipArea(ctx, this); + this._draw(); + unclipArea(ctx); + } + } + _draw() { + const {options: opts, columnSizes, lineWidths, ctx} = this; + const {align, labels: labelOpts} = opts; + const defaultColor = defaults.color; + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const labelFont = toFont(labelOpts.font); + const {color: fontColor, padding} = labelOpts; + const fontSize = labelFont.size; + const halfFontSize = fontSize / 2; + let cursor; + this.drawTitle(); + ctx.textAlign = rtlHelper.textAlign('left'); + ctx.textBaseline = 'middle'; + ctx.lineWidth = 0.5; + ctx.font = labelFont.string; + const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize); + const drawLegendBox = function(x, y, legendItem) { + if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) { + return; + } + ctx.save(); + const lineWidth = valueOrDefault(legendItem.lineWidth, 1); + ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor); + ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt'); + ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0); + ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter'); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor); + ctx.setLineDash(valueOrDefault(legendItem.lineDash, [])); + if (labelOpts.usePointStyle) { + const drawOptions = { + radius: boxWidth * Math.SQRT2 / 2, + pointStyle: legendItem.pointStyle, + rotation: legendItem.rotation, + borderWidth: lineWidth + }; + const centerX = rtlHelper.xPlus(x, boxWidth / 2); + const centerY = y + halfFontSize; + drawPoint(ctx, drawOptions, centerX, centerY); + } else { + const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0); + const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth); + const borderRadius = toTRBLCorners(legendItem.borderRadius); + ctx.beginPath(); + if (Object.values(borderRadius).some(v => v !== 0)) { + addRoundedRectPath(ctx, { + x: xBoxLeft, + y: yBoxTop, + w: boxWidth, + h: boxHeight, + radius: borderRadius, + }); + } else { + ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight); + } + ctx.fill(); + if (lineWidth !== 0) { + ctx.stroke(); + } + } + ctx.restore(); + }; + const fillText = function(x, y, legendItem) { + renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, { + strikethrough: legendItem.hidden, + textAlign: rtlHelper.textAlign(legendItem.textAlign) + }); + }; + const isHorizontal = this.isHorizontal(); + const titleHeight = this._computeTitleHeight(); + if (isHorizontal) { + cursor = { + x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]), + y: this.top + padding + titleHeight, + line: 0 + }; + } else { + cursor = { + x: this.left + padding, + y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height), + line: 0 + }; + } + overrideTextDirection(this.ctx, opts.textDirection); + const lineHeight = itemHeight + padding; + this.legendItems.forEach((legendItem, i) => { + ctx.strokeStyle = legendItem.fontColor || fontColor; + ctx.fillStyle = legendItem.fontColor || fontColor; + const textWidth = ctx.measureText(legendItem.text).width; + const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); + const width = boxWidth + halfFontSize + textWidth; + let x = cursor.x; + let y = cursor.y; + rtlHelper.setWidth(this.width); + if (isHorizontal) { + if (i > 0 && x + width + padding > this.right) { + y = cursor.y += lineHeight; + cursor.line++; + x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]); + } + } else if (i > 0 && y + lineHeight > this.bottom) { + x = cursor.x = x + columnSizes[cursor.line].width + padding; + cursor.line++; + y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height); + } + const realX = rtlHelper.x(x); + drawLegendBox(realX, y, legendItem); + x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl); + fillText(rtlHelper.x(x), y, legendItem); + if (isHorizontal) { + cursor.x += width + padding; + } else { + cursor.y += lineHeight; + } + }); + restoreTextDirection(this.ctx, opts.textDirection); + } + drawTitle() { + const opts = this.options; + const titleOpts = opts.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + if (!titleOpts.display) { + return; + } + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const ctx = this.ctx; + const position = titleOpts.position; + const halfFontSize = titleFont.size / 2; + const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize; + let y; + let left = this.left; + let maxWidth = this.width; + if (this.isHorizontal()) { + maxWidth = Math.max(...this.lineWidths); + y = this.top + topPaddingPlusHalfFontSize; + left = _alignStartEnd(opts.align, left, this.right - maxWidth); + } else { + const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0); + y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight()); + } + const x = _alignStartEnd(position, left, left + maxWidth); + ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position)); + ctx.textBaseline = 'middle'; + ctx.strokeStyle = titleOpts.color; + ctx.fillStyle = titleOpts.color; + ctx.font = titleFont.string; + renderText(ctx, titleOpts.text, x, y, titleFont); + } + _computeTitleHeight() { + const titleOpts = this.options.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0; + } + _getLegendItemAt(x, y) { + let i, hitBox, lh; + if (_isBetween(x, this.left, this.right) + && _isBetween(y, this.top, this.bottom)) { + lh = this.legendHitBoxes; + for (i = 0; i < lh.length; ++i) { + hitBox = lh[i]; + if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) + && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) { + return this.legendItems[i]; + } + } + } + return null; + } + handleEvent(e) { + const opts = this.options; + if (!isListened(e.type, opts)) { + return; + } + const hoveredItem = this._getLegendItemAt(e.x, e.y); + if (e.type === 'mousemove') { + const previous = this._hoveredItem; + const sameItem = itemsEqual(previous, hoveredItem); + if (previous && !sameItem) { + callback(opts.onLeave, [e, previous, this], this); + } + this._hoveredItem = hoveredItem; + if (hoveredItem && !sameItem) { + callback(opts.onHover, [e, hoveredItem, this], this); + } + } else if (hoveredItem) { + callback(opts.onClick, [e, hoveredItem, this], this); + } + } +} +function isListened(type, opts) { + if (type === 'mousemove' && (opts.onHover || opts.onLeave)) { + return true; + } + if (opts.onClick && (type === 'click' || type === 'mouseup')) { + return true; + } + return false; +} +var plugin_legend = { + id: 'legend', + _element: Legend, + start(chart, _args, options) { + const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart}); + layouts.configure(chart, legend, options); + layouts.addBox(chart, legend); + }, + stop(chart) { + layouts.removeBox(chart, chart.legend); + delete chart.legend; + }, + beforeUpdate(chart, _args, options) { + const legend = chart.legend; + layouts.configure(chart, legend, options); + legend.options = options; + }, + afterUpdate(chart) { + const legend = chart.legend; + legend.buildLabels(); + legend.adjustHitBoxes(); + }, + afterEvent(chart, args) { + if (!args.replay) { + chart.legend.handleEvent(args.event); + } + }, + defaults: { + display: true, + position: 'top', + align: 'center', + fullSize: true, + reverse: false, + weight: 1000, + onClick(e, legendItem, legend) { + const index = legendItem.datasetIndex; + const ci = legend.chart; + if (ci.isDatasetVisible(index)) { + ci.hide(index); + legendItem.hidden = true; + } else { + ci.show(index); + legendItem.hidden = false; + } + }, + onHover: null, + onLeave: null, + labels: { + color: (ctx) => ctx.chart.options.color, + boxWidth: 40, + padding: 10, + generateLabels(chart) { + const datasets = chart.data.datasets; + const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options; + return chart._getSortedDatasetMetas().map((meta) => { + const style = meta.controller.getStyle(usePointStyle ? 0 : undefined); + const borderWidth = toPadding(style.borderWidth); + return { + text: datasets[meta.index].label, + fillStyle: style.backgroundColor, + fontColor: color, + hidden: !meta.visible, + lineCap: style.borderCapStyle, + lineDash: style.borderDash, + lineDashOffset: style.borderDashOffset, + lineJoin: style.borderJoinStyle, + lineWidth: (borderWidth.width + borderWidth.height) / 4, + strokeStyle: style.borderColor, + pointStyle: pointStyle || style.pointStyle, + rotation: style.rotation, + textAlign: textAlign || style.textAlign, + borderRadius: 0, + datasetIndex: meta.index + }; + }, this); + } + }, + title: { + color: (ctx) => ctx.chart.options.color, + display: false, + position: 'center', + text: '', + } + }, + descriptors: { + _scriptable: (name) => !name.startsWith('on'), + labels: { + _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name), + } + }, +}; + +class Title extends Element { + constructor(config) { + super(); + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this._padding = undefined; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.width = undefined; + this.height = undefined; + this.position = undefined; + this.weight = undefined; + this.fullSize = undefined; + } + update(maxWidth, maxHeight) { + const opts = this.options; + this.left = 0; + this.top = 0; + if (!opts.display) { + this.width = this.height = this.right = this.bottom = 0; + return; + } + this.width = this.right = maxWidth; + this.height = this.bottom = maxHeight; + const lineCount = isArray(opts.text) ? opts.text.length : 1; + this._padding = toPadding(opts.padding); + const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height; + if (this.isHorizontal()) { + this.height = textSize; + } else { + this.width = textSize; + } + } + isHorizontal() { + const pos = this.options.position; + return pos === 'top' || pos === 'bottom'; + } + _drawArgs(offset) { + const {top, left, bottom, right, options} = this; + const align = options.align; + let rotation = 0; + let maxWidth, titleX, titleY; + if (this.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + titleY = top + offset; + maxWidth = right - left; + } else { + if (options.position === 'left') { + titleX = left + offset; + titleY = _alignStartEnd(align, bottom, top); + rotation = PI * -0.5; + } else { + titleX = right - offset; + titleY = _alignStartEnd(align, top, bottom); + rotation = PI * 0.5; + } + maxWidth = bottom - top; + } + return {titleX, titleY, maxWidth, rotation}; + } + draw() { + const ctx = this.ctx; + const opts = this.options; + if (!opts.display) { + return; + } + const fontOpts = toFont(opts.font); + const lineHeight = fontOpts.lineHeight; + const offset = lineHeight / 2 + this._padding.top; + const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset); + renderText(ctx, opts.text, 0, 0, fontOpts, { + color: opts.color, + maxWidth, + rotation, + textAlign: _toLeftRightCenter(opts.align), + textBaseline: 'middle', + translation: [titleX, titleY], + }); + } +} +function createTitle(chart, titleOpts) { + const title = new Title({ + ctx: chart.ctx, + options: titleOpts, + chart + }); + layouts.configure(chart, title, titleOpts); + layouts.addBox(chart, title); + chart.titleBlock = title; +} +var plugin_title = { + id: 'title', + _element: Title, + start(chart, _args, options) { + createTitle(chart, options); + }, + stop(chart) { + const titleBlock = chart.titleBlock; + layouts.removeBox(chart, titleBlock); + delete chart.titleBlock; + }, + beforeUpdate(chart, _args, options) { + const title = chart.titleBlock; + layouts.configure(chart, title, options); + title.options = options; + }, + defaults: { + align: 'center', + display: false, + font: { + weight: 'bold', + }, + fullSize: true, + padding: 10, + position: 'top', + text: '', + weight: 2000 + }, + defaultRoutes: { + color: 'color' + }, + descriptors: { + _scriptable: true, + _indexable: false, + }, +}; + +const map = new WeakMap(); +var plugin_subtitle = { + id: 'subtitle', + start(chart, _args, options) { + const title = new Title({ + ctx: chart.ctx, + options, + chart + }); + layouts.configure(chart, title, options); + layouts.addBox(chart, title); + map.set(chart, title); + }, + stop(chart) { + layouts.removeBox(chart, map.get(chart)); + map.delete(chart); + }, + beforeUpdate(chart, _args, options) { + const title = map.get(chart); + layouts.configure(chart, title, options); + title.options = options; + }, + defaults: { + align: 'center', + display: false, + font: { + weight: 'normal', + }, + fullSize: true, + padding: 0, + position: 'top', + text: '', + weight: 1500 + }, + defaultRoutes: { + color: 'color' + }, + descriptors: { + _scriptable: true, + _indexable: false, + }, +}; + +const positioners = { + average(items) { + if (!items.length) { + return false; + } + let i, len; + let x = 0; + let y = 0; + let count = 0; + for (i = 0, len = items.length; i < len; ++i) { + const el = items[i].element; + if (el && el.hasValue()) { + const pos = el.tooltipPosition(); + x += pos.x; + y += pos.y; + ++count; + } + } + return { + x: x / count, + y: y / count + }; + }, + nearest(items, eventPosition) { + if (!items.length) { + return false; + } + let x = eventPosition.x; + let y = eventPosition.y; + let minDistance = Number.POSITIVE_INFINITY; + let i, len, nearestElement; + for (i = 0, len = items.length; i < len; ++i) { + const el = items[i].element; + if (el && el.hasValue()) { + const center = el.getCenterPoint(); + const d = distanceBetweenPoints(eventPosition, center); + if (d < minDistance) { + minDistance = d; + nearestElement = el; + } + } + } + if (nearestElement) { + const tp = nearestElement.tooltipPosition(); + x = tp.x; + y = tp.y; + } + return { + x, + y + }; + } +}; +function pushOrConcat(base, toPush) { + if (toPush) { + if (isArray(toPush)) { + Array.prototype.push.apply(base, toPush); + } else { + base.push(toPush); + } + } + return base; +} +function splitNewlines(str) { + if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) { + return str.split('\n'); + } + return str; +} +function createTooltipItem(chart, item) { + const {element, datasetIndex, index} = item; + const controller = chart.getDatasetMeta(datasetIndex).controller; + const {label, value} = controller.getLabelAndValue(index); + return { + chart, + label, + parsed: controller.getParsed(index), + raw: chart.data.datasets[datasetIndex].data[index], + formattedValue: value, + dataset: controller.getDataset(), + dataIndex: index, + datasetIndex, + element + }; +} +function getTooltipSize(tooltip, options) { + const ctx = tooltip.chart.ctx; + const {body, footer, title} = tooltip; + const {boxWidth, boxHeight} = options; + const bodyFont = toFont(options.bodyFont); + const titleFont = toFont(options.titleFont); + const footerFont = toFont(options.footerFont); + const titleLineCount = title.length; + const footerLineCount = footer.length; + const bodyLineItemCount = body.length; + const padding = toPadding(options.padding); + let height = padding.height; + let width = 0; + let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0); + combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length; + if (titleLineCount) { + height += titleLineCount * titleFont.lineHeight + + (titleLineCount - 1) * options.titleSpacing + + options.titleMarginBottom; + } + if (combinedBodyLength) { + const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight; + height += bodyLineItemCount * bodyLineHeight + + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + + (combinedBodyLength - 1) * options.bodySpacing; + } + if (footerLineCount) { + height += options.footerMarginTop + + footerLineCount * footerFont.lineHeight + + (footerLineCount - 1) * options.footerSpacing; + } + let widthPadding = 0; + const maxLineWidth = function(line) { + width = Math.max(width, ctx.measureText(line).width + widthPadding); + }; + ctx.save(); + ctx.font = titleFont.string; + each(tooltip.title, maxLineWidth); + ctx.font = bodyFont.string; + each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth); + widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0; + each(body, (bodyItem) => { + each(bodyItem.before, maxLineWidth); + each(bodyItem.lines, maxLineWidth); + each(bodyItem.after, maxLineWidth); + }); + widthPadding = 0; + ctx.font = footerFont.string; + each(tooltip.footer, maxLineWidth); + ctx.restore(); + width += padding.width; + return {width, height}; +} +function determineYAlign(chart, size) { + const {y, height} = size; + if (y < height / 2) { + return 'top'; + } else if (y > (chart.height - height / 2)) { + return 'bottom'; + } + return 'center'; +} +function doesNotFitWithAlign(xAlign, chart, options, size) { + const {x, width} = size; + const caret = options.caretSize + options.caretPadding; + if (xAlign === 'left' && x + width + caret > chart.width) { + return true; + } + if (xAlign === 'right' && x - width - caret < 0) { + return true; + } +} +function determineXAlign(chart, options, size, yAlign) { + const {x, width} = size; + const {width: chartWidth, chartArea: {left, right}} = chart; + let xAlign = 'center'; + if (yAlign === 'center') { + xAlign = x <= (left + right) / 2 ? 'left' : 'right'; + } else if (x <= width / 2) { + xAlign = 'left'; + } else if (x >= chartWidth - width / 2) { + xAlign = 'right'; + } + if (doesNotFitWithAlign(xAlign, chart, options, size)) { + xAlign = 'center'; + } + return xAlign; +} +function determineAlignment(chart, options, size) { + const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size); + return { + xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign), + yAlign + }; +} +function alignX(size, xAlign) { + let {x, width} = size; + if (xAlign === 'right') { + x -= width; + } else if (xAlign === 'center') { + x -= (width / 2); + } + return x; +} +function alignY(size, yAlign, paddingAndSize) { + let {y, height} = size; + if (yAlign === 'top') { + y += paddingAndSize; + } else if (yAlign === 'bottom') { + y -= height + paddingAndSize; + } else { + y -= (height / 2); + } + return y; +} +function getBackgroundPoint(options, size, alignment, chart) { + const {caretSize, caretPadding, cornerRadius} = options; + const {xAlign, yAlign} = alignment; + const paddingAndSize = caretSize + caretPadding; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); + let x = alignX(size, xAlign); + const y = alignY(size, yAlign, paddingAndSize); + if (yAlign === 'center') { + if (xAlign === 'left') { + x += paddingAndSize; + } else if (xAlign === 'right') { + x -= paddingAndSize; + } + } else if (xAlign === 'left') { + x -= Math.max(topLeft, bottomLeft) + caretSize; + } else if (xAlign === 'right') { + x += Math.max(topRight, bottomRight) + caretSize; + } + return { + x: _limitValue(x, 0, chart.width - size.width), + y: _limitValue(y, 0, chart.height - size.height) + }; +} +function getAlignedX(tooltip, align, options) { + const padding = toPadding(options.padding); + return align === 'center' + ? tooltip.x + tooltip.width / 2 + : align === 'right' + ? tooltip.x + tooltip.width - padding.right + : tooltip.x + padding.left; +} +function getBeforeAfterBodyLines(callback) { + return pushOrConcat([], splitNewlines(callback)); +} +function createTooltipContext(parent, tooltip, tooltipItems) { + return createContext(parent, { + tooltip, + tooltipItems, + type: 'tooltip' + }); +} +function overrideCallbacks(callbacks, context) { + const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks; + return override ? callbacks.override(override) : callbacks; +} +class Tooltip extends Element { + constructor(config) { + super(); + this.opacity = 0; + this._active = []; + this._eventPosition = undefined; + this._size = undefined; + this._cachedAnimations = undefined; + this._tooltipItems = []; + this.$animations = undefined; + this.$context = undefined; + this.chart = config.chart || config._chart; + this._chart = this.chart; + this.options = config.options; + this.dataPoints = undefined; + this.title = undefined; + this.beforeBody = undefined; + this.body = undefined; + this.afterBody = undefined; + this.footer = undefined; + this.xAlign = undefined; + this.yAlign = undefined; + this.x = undefined; + this.y = undefined; + this.height = undefined; + this.width = undefined; + this.caretX = undefined; + this.caretY = undefined; + this.labelColors = undefined; + this.labelPointStyles = undefined; + this.labelTextColors = undefined; + } + initialize(options) { + this.options = options; + this._cachedAnimations = undefined; + this.$context = undefined; + } + _resolveAnimations() { + const cached = this._cachedAnimations; + if (cached) { + return cached; + } + const chart = this.chart; + const options = this.options.setContext(this.getContext()); + const opts = options.enabled && chart.options.animation && options.animations; + const animations = new Animations(this.chart, opts); + if (opts._cacheable) { + this._cachedAnimations = Object.freeze(animations); + } + return animations; + } + getContext() { + return this.$context || + (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems)); + } + getTitle(context, options) { + const {callbacks} = options; + const beforeTitle = callbacks.beforeTitle.apply(this, [context]); + const title = callbacks.title.apply(this, [context]); + const afterTitle = callbacks.afterTitle.apply(this, [context]); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeTitle)); + lines = pushOrConcat(lines, splitNewlines(title)); + lines = pushOrConcat(lines, splitNewlines(afterTitle)); + return lines; + } + getBeforeBody(tooltipItems, options) { + return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems])); + } + getBody(tooltipItems, options) { + const {callbacks} = options; + const bodyItems = []; + each(tooltipItems, (context) => { + const bodyItem = { + before: [], + lines: [], + after: [] + }; + const scoped = overrideCallbacks(callbacks, context); + pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context))); + pushOrConcat(bodyItem.lines, scoped.label.call(this, context)); + pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context))); + bodyItems.push(bodyItem); + }); + return bodyItems; + } + getAfterBody(tooltipItems, options) { + return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems])); + } + getFooter(tooltipItems, options) { + const {callbacks} = options; + const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]); + const footer = callbacks.footer.apply(this, [tooltipItems]); + const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeFooter)); + lines = pushOrConcat(lines, splitNewlines(footer)); + lines = pushOrConcat(lines, splitNewlines(afterFooter)); + return lines; + } + _createItems(options) { + const active = this._active; + const data = this.chart.data; + const labelColors = []; + const labelPointStyles = []; + const labelTextColors = []; + let tooltipItems = []; + let i, len; + for (i = 0, len = active.length; i < len; ++i) { + tooltipItems.push(createTooltipItem(this.chart, active[i])); + } + if (options.filter) { + tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data)); + } + if (options.itemSort) { + tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data)); + } + each(tooltipItems, (context) => { + const scoped = overrideCallbacks(options.callbacks, context); + labelColors.push(scoped.labelColor.call(this, context)); + labelPointStyles.push(scoped.labelPointStyle.call(this, context)); + labelTextColors.push(scoped.labelTextColor.call(this, context)); + }); + this.labelColors = labelColors; + this.labelPointStyles = labelPointStyles; + this.labelTextColors = labelTextColors; + this.dataPoints = tooltipItems; + return tooltipItems; + } + update(changed, replay) { + const options = this.options.setContext(this.getContext()); + const active = this._active; + let properties; + let tooltipItems = []; + if (!active.length) { + if (this.opacity !== 0) { + properties = { + opacity: 0 + }; + } + } else { + const position = positioners[options.position].call(this, active, this._eventPosition); + tooltipItems = this._createItems(options); + this.title = this.getTitle(tooltipItems, options); + this.beforeBody = this.getBeforeBody(tooltipItems, options); + this.body = this.getBody(tooltipItems, options); + this.afterBody = this.getAfterBody(tooltipItems, options); + this.footer = this.getFooter(tooltipItems, options); + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, size); + const alignment = determineAlignment(this.chart, options, positionAndSize); + const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart); + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + properties = { + opacity: 1, + x: backgroundPoint.x, + y: backgroundPoint.y, + width: size.width, + height: size.height, + caretX: position.x, + caretY: position.y + }; + } + this._tooltipItems = tooltipItems; + this.$context = undefined; + if (properties) { + this._resolveAnimations().update(this, properties); + } + if (changed && options.external) { + options.external.call(this, {chart: this.chart, tooltip: this, replay}); + } + } + drawCaret(tooltipPoint, ctx, size, options) { + const caretPosition = this.getCaretPosition(tooltipPoint, size, options); + ctx.lineTo(caretPosition.x1, caretPosition.y1); + ctx.lineTo(caretPosition.x2, caretPosition.y2); + ctx.lineTo(caretPosition.x3, caretPosition.y3); + } + getCaretPosition(tooltipPoint, size, options) { + const {xAlign, yAlign} = this; + const {caretSize, cornerRadius} = options; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); + const {x: ptX, y: ptY} = tooltipPoint; + const {width, height} = size; + let x1, x2, x3, y1, y2, y3; + if (yAlign === 'center') { + y2 = ptY + (height / 2); + if (xAlign === 'left') { + x1 = ptX; + x2 = x1 - caretSize; + y1 = y2 + caretSize; + y3 = y2 - caretSize; + } else { + x1 = ptX + width; + x2 = x1 + caretSize; + y1 = y2 - caretSize; + y3 = y2 + caretSize; + } + x3 = x1; + } else { + if (xAlign === 'left') { + x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize); + } else if (xAlign === 'right') { + x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; + } else { + x2 = this.caretX; + } + if (yAlign === 'top') { + y1 = ptY; + y2 = y1 - caretSize; + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } else { + y1 = ptY + height; + y2 = y1 + caretSize; + x1 = x2 + caretSize; + x3 = x2 - caretSize; + } + y3 = y1; + } + return {x1, x2, x3, y1, y2, y3}; + } + drawTitle(pt, ctx, options) { + const title = this.title; + const length = title.length; + let titleFont, titleSpacing, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.titleAlign, options); + ctx.textAlign = rtlHelper.textAlign(options.titleAlign); + ctx.textBaseline = 'middle'; + titleFont = toFont(options.titleFont); + titleSpacing = options.titleSpacing; + ctx.fillStyle = options.titleColor; + ctx.font = titleFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2); + pt.y += titleFont.lineHeight + titleSpacing; + if (i + 1 === length) { + pt.y += options.titleMarginBottom - titleSpacing; + } + } + } + } + _drawColorBox(ctx, pt, i, rtlHelper, options) { + const labelColors = this.labelColors[i]; + const labelPointStyle = this.labelPointStyles[i]; + const {boxHeight, boxWidth, boxPadding} = options; + const bodyFont = toFont(options.bodyFont); + const colorX = getAlignedX(this, 'left', options); + const rtlColorX = rtlHelper.x(colorX); + const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0; + const colorY = pt.y + yOffSet; + if (options.usePointStyle) { + const drawOptions = { + radius: Math.min(boxWidth, boxHeight) / 2, + pointStyle: labelPointStyle.pointStyle, + rotation: labelPointStyle.rotation, + borderWidth: 1 + }; + const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2; + const centerY = colorY + boxHeight / 2; + ctx.strokeStyle = options.multiKeyBackground; + ctx.fillStyle = options.multiKeyBackground; + drawPoint(ctx, drawOptions, centerX, centerY); + ctx.strokeStyle = labelColors.borderColor; + ctx.fillStyle = labelColors.backgroundColor; + drawPoint(ctx, drawOptions, centerX, centerY); + } else { + ctx.lineWidth = labelColors.borderWidth || 1; + ctx.strokeStyle = labelColors.borderColor; + ctx.setLineDash(labelColors.borderDash || []); + ctx.lineDashOffset = labelColors.borderDashOffset || 0; + const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding); + const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2); + const borderRadius = toTRBLCorners(labelColors.borderRadius); + if (Object.values(borderRadius).some(v => v !== 0)) { + ctx.beginPath(); + ctx.fillStyle = options.multiKeyBackground; + addRoundedRectPath(ctx, { + x: outerX, + y: colorY, + w: boxWidth, + h: boxHeight, + radius: borderRadius, + }); + ctx.fill(); + ctx.stroke(); + ctx.fillStyle = labelColors.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x: innerX, + y: colorY + 1, + w: boxWidth - 2, + h: boxHeight - 2, + radius: borderRadius, + }); + ctx.fill(); + } else { + ctx.fillStyle = options.multiKeyBackground; + ctx.fillRect(outerX, colorY, boxWidth, boxHeight); + ctx.strokeRect(outerX, colorY, boxWidth, boxHeight); + ctx.fillStyle = labelColors.backgroundColor; + ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2); + } + } + ctx.fillStyle = this.labelTextColors[i]; + } + drawBody(pt, ctx, options) { + const {body} = this; + const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options; + const bodyFont = toFont(options.bodyFont); + let bodyLineHeight = bodyFont.lineHeight; + let xLinePadding = 0; + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + const fillLineOfText = function(line) { + ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2); + pt.y += bodyLineHeight + bodySpacing; + }; + const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign); + let bodyItem, textColor, lines, i, j, ilen, jlen; + ctx.textAlign = bodyAlign; + ctx.textBaseline = 'middle'; + ctx.font = bodyFont.string; + pt.x = getAlignedX(this, bodyAlignForCalculation, options); + ctx.fillStyle = options.bodyColor; + each(this.beforeBody, fillLineOfText); + xLinePadding = displayColors && bodyAlignForCalculation !== 'right' + ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding) + : 0; + for (i = 0, ilen = body.length; i < ilen; ++i) { + bodyItem = body[i]; + textColor = this.labelTextColors[i]; + ctx.fillStyle = textColor; + each(bodyItem.before, fillLineOfText); + lines = bodyItem.lines; + if (displayColors && lines.length) { + this._drawColorBox(ctx, pt, i, rtlHelper, options); + bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight); + } + for (j = 0, jlen = lines.length; j < jlen; ++j) { + fillLineOfText(lines[j]); + bodyLineHeight = bodyFont.lineHeight; + } + each(bodyItem.after, fillLineOfText); + } + xLinePadding = 0; + bodyLineHeight = bodyFont.lineHeight; + each(this.afterBody, fillLineOfText); + pt.y -= bodySpacing; + } + drawFooter(pt, ctx, options) { + const footer = this.footer; + const length = footer.length; + let footerFont, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.footerAlign, options); + pt.y += options.footerMarginTop; + ctx.textAlign = rtlHelper.textAlign(options.footerAlign); + ctx.textBaseline = 'middle'; + footerFont = toFont(options.footerFont); + ctx.fillStyle = options.footerColor; + ctx.font = footerFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2); + pt.y += footerFont.lineHeight + options.footerSpacing; + } + } + } + drawBackground(pt, ctx, tooltipSize, options) { + const {xAlign, yAlign} = this; + const {x, y} = pt; + const {width, height} = tooltipSize; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius); + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.beginPath(); + ctx.moveTo(x + topLeft, y); + if (yAlign === 'top') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width - topRight, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); + if (yAlign === 'center' && xAlign === 'right') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width, y + height - bottomRight); + ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); + if (yAlign === 'bottom') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + bottomLeft, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); + if (yAlign === 'center' && xAlign === 'left') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x, y + topLeft); + ctx.quadraticCurveTo(x, y, x + topLeft, y); + ctx.closePath(); + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } + } + _updateAnimationTarget(options) { + const chart = this.chart; + const anims = this.$animations; + const animX = anims && anims.x; + const animY = anims && anims.y; + if (animX || animY) { + const position = positioners[options.position].call(this, this._active, this._eventPosition); + if (!position) { + return; + } + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, this._size); + const alignment = determineAlignment(chart, options, positionAndSize); + const point = getBackgroundPoint(options, positionAndSize, alignment, chart); + if (animX._to !== point.x || animY._to !== point.y) { + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + this.width = size.width; + this.height = size.height; + this.caretX = position.x; + this.caretY = position.y; + this._resolveAnimations().update(this, point); + } + } + } + draw(ctx) { + const options = this.options.setContext(this.getContext()); + let opacity = this.opacity; + if (!opacity) { + return; + } + this._updateAnimationTarget(options); + const tooltipSize = { + width: this.width, + height: this.height + }; + const pt = { + x: this.x, + y: this.y + }; + opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity; + const padding = toPadding(options.padding); + const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length; + if (options.enabled && hasTooltipContent) { + ctx.save(); + ctx.globalAlpha = opacity; + this.drawBackground(pt, ctx, tooltipSize, options); + overrideTextDirection(ctx, options.textDirection); + pt.y += padding.top; + this.drawTitle(pt, ctx, options); + this.drawBody(pt, ctx, options); + this.drawFooter(pt, ctx, options); + restoreTextDirection(ctx, options.textDirection); + ctx.restore(); + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements, eventPosition) { + const lastActive = this._active; + const active = activeElements.map(({datasetIndex, index}) => { + const meta = this.chart.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error('Cannot find a dataset at index ' + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index], + index, + }; + }); + const changed = !_elementsEqual(lastActive, active); + const positionChanged = this._positionChanged(active, eventPosition); + if (changed || positionChanged) { + this._active = active; + this._eventPosition = eventPosition; + this._ignoreReplayEvents = true; + this.update(true); + } + } + handleEvent(e, replay, inChartArea = true) { + if (replay && this._ignoreReplayEvents) { + return false; + } + this._ignoreReplayEvents = false; + const options = this.options; + const lastActive = this._active || []; + const active = this._getActiveElements(e, lastActive, replay, inChartArea); + const positionChanged = this._positionChanged(active, e); + const changed = replay || !_elementsEqual(active, lastActive) || positionChanged; + if (changed) { + this._active = active; + if (options.enabled || options.external) { + this._eventPosition = { + x: e.x, + y: e.y + }; + this.update(true, replay); + } + } + return changed; + } + _getActiveElements(e, lastActive, replay, inChartArea) { + const options = this.options; + if (e.type === 'mouseout') { + return []; + } + if (!inChartArea) { + return lastActive; + } + const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay); + if (options.reverse) { + active.reverse(); + } + return active; + } + _positionChanged(active, e) { + const {caretX, caretY, options} = this; + const position = positioners[options.position].call(this, active, e); + return position !== false && (caretX !== position.x || caretY !== position.y); + } +} +Tooltip.positioners = positioners; +var plugin_tooltip = { + id: 'tooltip', + _element: Tooltip, + positioners, + afterInit(chart, _args, options) { + if (options) { + chart.tooltip = new Tooltip({chart, options}); + } + }, + beforeUpdate(chart, _args, options) { + if (chart.tooltip) { + chart.tooltip.initialize(options); + } + }, + reset(chart, _args, options) { + if (chart.tooltip) { + chart.tooltip.initialize(options); + } + }, + afterDraw(chart) { + const tooltip = chart.tooltip; + const args = { + tooltip + }; + if (chart.notifyPlugins('beforeTooltipDraw', args) === false) { + return; + } + if (tooltip) { + tooltip.draw(chart.ctx); + } + chart.notifyPlugins('afterTooltipDraw', args); + }, + afterEvent(chart, args) { + if (chart.tooltip) { + const useFinalPosition = args.replay; + if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) { + args.changed = true; + } + } + }, + defaults: { + enabled: true, + 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: (ctx, opts) => opts.bodyFont.size, + boxWidth: (ctx, opts) => opts.bodyFont.size, + multiKeyBackground: '#fff', + displayColors: true, + 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: noop, + title(tooltipItems) { + if (tooltipItems.length > 0) { + const item = tooltipItems[0]; + const labels = item.chart.data.labels; + const labelCount = labels ? labels.length : 0; + if (this && this.options && this.options.mode === 'dataset') { + return item.dataset.label || ''; + } else if (item.label) { + return item.label; + } else if (labelCount > 0 && item.dataIndex < labelCount) { + return labels[item.dataIndex]; + } + } + return ''; + }, + afterTitle: noop, + beforeBody: noop, + beforeLabel: noop, + label(tooltipItem) { + if (this && this.options && this.options.mode === 'dataset') { + return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue; + } + let label = tooltipItem.dataset.label || ''; + if (label) { + label += ': '; + } + const value = tooltipItem.formattedValue; + if (!isNullOrUndef(value)) { + label += value; + } + return label; + }, + labelColor(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + borderColor: options.borderColor, + backgroundColor: options.backgroundColor, + borderWidth: options.borderWidth, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderRadius: 0, + }; + }, + labelTextColor() { + return this.options.bodyColor; + }, + labelPointStyle(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + pointStyle: options.pointStyle, + rotation: options.rotation, + }; + }, + afterLabel: noop, + afterBody: noop, + beforeFooter: noop, + footer: noop, + afterFooter: noop + } + }, + defaultRoutes: { + bodyFont: 'font', + footerFont: 'font', + titleFont: 'font' + }, + descriptors: { + _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external', + _indexable: false, + callbacks: { + _scriptable: false, + _indexable: false, + }, + animation: { + _fallback: false + }, + animations: { + _fallback: 'animation' + } + }, + additionalOptionScopes: ['interaction'] +}; + +var plugins = /*#__PURE__*/Object.freeze({ +__proto__: null, +Decimation: plugin_decimation, +Filler: plugin_filler, +Legend: plugin_legend, +SubTitle: plugin_subtitle, +Title: plugin_title, +Tooltip: plugin_tooltip +}); + +const addIfString = (labels, raw, index, addedLabels) => { + if (typeof raw === 'string') { + index = labels.push(raw) - 1; + addedLabels.unshift({index, label: raw}); + } else if (isNaN(raw)) { + index = null; + } + return index; +}; +function findOrAddLabel(labels, raw, index, addedLabels) { + const first = labels.indexOf(raw); + if (first === -1) { + return addIfString(labels, raw, index, addedLabels); + } + const last = labels.lastIndexOf(raw); + return first !== last ? index : first; +} +const validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max); +class CategoryScale extends Scale { + constructor(cfg) { + super(cfg); + this._startValue = undefined; + this._valueRange = 0; + this._addedLabels = []; + } + init(scaleOptions) { + const added = this._addedLabels; + if (added.length) { + const labels = this.getLabels(); + for (const {index, label} of added) { + if (labels[index] === label) { + labels.splice(index, 1); + } + } + this._addedLabels = []; + } + super.init(scaleOptions); + } + parse(raw, index) { + if (isNullOrUndef(raw)) { + return null; + } + const labels = this.getLabels(); + index = isFinite(index) && labels[index] === raw ? index + : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels); + return validIndex(index, labels.length - 1); + } + determineDataLimits() { + const {minDefined, maxDefined} = this.getUserBounds(); + let {min, max} = this.getMinMax(true); + if (this.options.bounds === 'ticks') { + if (!minDefined) { + min = 0; + } + if (!maxDefined) { + max = this.getLabels().length - 1; + } + } + this.min = min; + this.max = max; + } + buildTicks() { + const min = this.min; + const max = this.max; + const offset = this.options.offset; + const ticks = []; + let labels = this.getLabels(); + labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1); + this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); + this._startValue = this.min - (offset ? 0.5 : 0); + for (let value = min; value <= max; value++) { + ticks.push({value}); + } + return ticks; + } + getLabelForValue(value) { + const labels = this.getLabels(); + if (value >= 0 && value < labels.length) { + return labels[value]; + } + return value; + } + configure() { + super.configure(); + if (!this.isHorizontal()) { + this._reversePixels = !this._reversePixels; + } + } + getPixelForValue(value) { + if (typeof value !== 'number') { + value = this.parse(value); + } + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getPixelForTick(index) { + const ticks = this.ticks; + if (index < 0 || index > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index].value); + } + getValueForPixel(pixel) { + return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); + } + getBasePixel() { + return this.bottom; + } +} +CategoryScale.id = 'category'; +CategoryScale.defaults = { + ticks: { + callback: CategoryScale.prototype.getLabelForValue + } +}; + +function generateTicks$1(generationOptions, dataRange) { + const ticks = []; + const MIN_SPACING = 1e-14; + const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions; + const unit = step || 1; + const maxSpaces = maxTicks - 1; + const {min: rmin, max: rmax} = dataRange; + const minDefined = !isNullOrUndef(min); + const maxDefined = !isNullOrUndef(max); + const countDefined = !isNullOrUndef(count); + const minSpacing = (rmax - rmin) / (maxDigits + 1); + let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit; + let factor, niceMin, niceMax, numSpaces; + if (spacing < MIN_SPACING && !minDefined && !maxDefined) { + return [{value: rmin}, {value: rmax}]; + } + numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); + if (numSpaces > maxSpaces) { + spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit; + } + if (!isNullOrUndef(precision)) { + factor = Math.pow(10, precision); + spacing = Math.ceil(spacing * factor) / factor; + } + if (bounds === 'ticks') { + niceMin = Math.floor(rmin / spacing) * spacing; + niceMax = Math.ceil(rmax / spacing) * spacing; + } else { + niceMin = rmin; + niceMax = rmax; + } + if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) { + numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks)); + spacing = (max - min) / numSpaces; + niceMin = min; + niceMax = max; + } else if (countDefined) { + niceMin = minDefined ? min : niceMin; + niceMax = maxDefined ? max : niceMax; + numSpaces = count - 1; + spacing = (niceMax - niceMin) / numSpaces; + } else { + numSpaces = (niceMax - niceMin) / spacing; + if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) { + numSpaces = Math.round(numSpaces); + } else { + numSpaces = Math.ceil(numSpaces); + } + } + const decimalPlaces = Math.max( + _decimalPlaces(spacing), + _decimalPlaces(niceMin) + ); + factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision); + niceMin = Math.round(niceMin * factor) / factor; + niceMax = Math.round(niceMax * factor) / factor; + let j = 0; + if (minDefined) { + if (includeBounds && niceMin !== min) { + ticks.push({value: min}); + if (niceMin < min) { + j++; + } + if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) { + j++; + } + } else if (niceMin < min) { + j++; + } + } + for (; j < numSpaces; ++j) { + ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor}); + } + if (maxDefined && includeBounds && niceMax !== max) { + if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) { + ticks[ticks.length - 1].value = max; + } else { + ticks.push({value: max}); + } + } else if (!maxDefined || niceMax === max) { + ticks.push({value: niceMax}); + } + return ticks; +} +function relativeLabelSize(value, minSpacing, {horizontal, minRotation}) { + const rad = toRadians(minRotation); + const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001; + const length = 0.75 * minSpacing * ('' + value).length; + return Math.min(minSpacing / ratio, length); +} +class LinearScaleBase extends Scale { + constructor(cfg) { + super(cfg); + this.start = undefined; + this.end = undefined; + this._startValue = undefined; + this._endValue = undefined; + this._valueRange = 0; + } + parse(raw, index) { + if (isNullOrUndef(raw)) { + return null; + } + if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) { + return null; + } + return +raw; + } + handleTickRangeOptions() { + const {beginAtZero} = this.options; + const {minDefined, maxDefined} = this.getUserBounds(); + let {min, max} = this; + const setMin = v => (min = minDefined ? min : v); + const setMax = v => (max = maxDefined ? max : v); + if (beginAtZero) { + const minSign = sign(min); + const maxSign = sign(max); + if (minSign < 0 && maxSign < 0) { + setMax(0); + } else if (minSign > 0 && maxSign > 0) { + setMin(0); + } + } + if (min === max) { + let offset = 1; + if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) { + offset = Math.abs(max * 0.05); + } + setMax(max + offset); + if (!beginAtZero) { + setMin(min - offset); + } + } + this.min = min; + this.max = max; + } + getTickLimit() { + const tickOpts = this.options.ticks; + let {maxTicksLimit, stepSize} = tickOpts; + let maxTicks; + if (stepSize) { + maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1; + if (maxTicks > 1000) { + console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`); + maxTicks = 1000; + } + } else { + maxTicks = this.computeTickLimit(); + maxTicksLimit = maxTicksLimit || 11; + } + if (maxTicksLimit) { + maxTicks = Math.min(maxTicksLimit, maxTicks); + } + return maxTicks; + } + computeTickLimit() { + return Number.POSITIVE_INFINITY; + } + buildTicks() { + const opts = this.options; + const tickOpts = opts.ticks; + let maxTicks = this.getTickLimit(); + maxTicks = Math.max(2, maxTicks); + const numericGeneratorOptions = { + maxTicks, + bounds: opts.bounds, + min: opts.min, + max: opts.max, + precision: tickOpts.precision, + step: tickOpts.stepSize, + count: tickOpts.count, + maxDigits: this._maxDigits(), + horizontal: this.isHorizontal(), + minRotation: tickOpts.minRotation || 0, + includeBounds: tickOpts.includeBounds !== false + }; + const dataRange = this._range || this; + const ticks = generateTicks$1(numericGeneratorOptions, dataRange); + if (opts.bounds === 'ticks') { + _setMinAndMaxByKey(ticks, this, 'value'); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + configure() { + const ticks = this.ticks; + let start = this.min; + let end = this.max; + super.configure(); + if (this.options.offset && ticks.length) { + const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2; + start -= offset; + end += offset; + } + this._startValue = start; + this._endValue = end; + this._valueRange = end - start; + } + getLabelForValue(value) { + return formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } +} + +class LinearScale extends LinearScaleBase { + determineDataLimits() { + const {min, max} = this.getMinMax(true); + this.min = isNumberFinite(min) ? min : 0; + this.max = isNumberFinite(max) ? max : 1; + this.handleTickRangeOptions(); + } + computeTickLimit() { + const horizontal = this.isHorizontal(); + const length = horizontal ? this.width : this.height; + const minRotation = toRadians(this.options.ticks.minRotation); + const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001; + const tickFont = this._resolveTickFontOptions(0); + return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio)); + } + getPixelForValue(value) { + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange; + } +} +LinearScale.id = 'linear'; +LinearScale.defaults = { + ticks: { + callback: Ticks.formatters.numeric + } +}; + +function isMajor(tickVal) { + const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal)))); + return remain === 1; +} +function generateTicks(generationOptions, dataRange) { + const endExp = Math.floor(log10(dataRange.max)); + const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp)); + const ticks = []; + let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min)))); + let exp = Math.floor(log10(tickVal)); + let significand = Math.floor(tickVal / Math.pow(10, exp)); + let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; + do { + ticks.push({value: tickVal, major: isMajor(tickVal)}); + ++significand; + if (significand === 10) { + significand = 1; + ++exp; + precision = exp >= 0 ? 1 : precision; + } + tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision; + } while (exp < endExp || (exp === endExp && significand < endSignificand)); + const lastTick = finiteOrDefault(generationOptions.max, tickVal); + ticks.push({value: lastTick, major: isMajor(tickVal)}); + return ticks; +} +class LogarithmicScale extends Scale { + constructor(cfg) { + super(cfg); + this.start = undefined; + this.end = undefined; + this._startValue = undefined; + this._valueRange = 0; + } + parse(raw, index) { + const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]); + if (value === 0) { + this._zero = true; + return undefined; + } + return isNumberFinite(value) && value > 0 ? value : null; + } + determineDataLimits() { + const {min, max} = this.getMinMax(true); + this.min = isNumberFinite(min) ? Math.max(0, min) : null; + this.max = isNumberFinite(max) ? Math.max(0, max) : null; + if (this.options.beginAtZero) { + this._zero = true; + } + this.handleTickRangeOptions(); + } + handleTickRangeOptions() { + const {minDefined, maxDefined} = this.getUserBounds(); + let min = this.min; + let max = this.max; + const setMin = v => (min = minDefined ? min : v); + const setMax = v => (max = maxDefined ? max : v); + const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m); + if (min === max) { + if (min <= 0) { + setMin(1); + setMax(10); + } else { + setMin(exp(min, -1)); + setMax(exp(max, +1)); + } + } + if (min <= 0) { + setMin(exp(max, -1)); + } + if (max <= 0) { + setMax(exp(min, +1)); + } + if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) { + setMin(exp(min, -1)); + } + this.min = min; + this.max = max; + } + buildTicks() { + const opts = this.options; + const generationOptions = { + min: this._userMin, + max: this._userMax + }; + const ticks = generateTicks(generationOptions, this); + if (opts.bounds === 'ticks') { + _setMinAndMaxByKey(ticks, this, 'value'); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + getLabelForValue(value) { + return value === undefined + ? '0' + : formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } + configure() { + const start = this.min; + super.configure(); + this._startValue = log10(start); + this._valueRange = log10(this.max) - log10(start); + } + getPixelForValue(value) { + if (value === undefined || value === 0) { + value = this.min; + } + if (value === null || isNaN(value)) { + return NaN; + } + return this.getPixelForDecimal(value === this.min + ? 0 + : (log10(value) - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + const decimal = this.getDecimalForPixel(pixel); + return Math.pow(10, this._startValue + decimal * this._valueRange); + } +} +LogarithmicScale.id = 'logarithmic'; +LogarithmicScale.defaults = { + ticks: { + callback: Ticks.formatters.logarithmic, + major: { + enabled: true + } + } +}; + +function getTickBackdropHeight(opts) { + const tickOpts = opts.ticks; + if (tickOpts.display && opts.display) { + const padding = toPadding(tickOpts.backdropPadding); + return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height; + } + return 0; +} +function measureLabelSize(ctx, font, label) { + label = isArray(label) ? label : [label]; + return { + w: _longestText(ctx, font.string, label), + h: label.length * font.lineHeight + }; +} +function determineLimits(angle, pos, size, min, max) { + if (angle === min || angle === max) { + return { + start: pos - (size / 2), + end: pos + (size / 2) + }; + } else if (angle < min || angle > max) { + return { + start: pos - size, + end: pos + }; + } + return { + start: pos, + end: pos + size + }; +} +function fitWithPointLabels(scale) { + const orig = { + l: scale.left + scale._padding.left, + r: scale.right - scale._padding.right, + t: scale.top + scale._padding.top, + b: scale.bottom - scale._padding.bottom + }; + const limits = Object.assign({}, orig); + const labelSizes = []; + const padding = []; + const valueCount = scale._pointLabels.length; + const pointLabelOpts = scale.options.pointLabels; + const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0; + for (let i = 0; i < valueCount; i++) { + const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i)); + padding[i] = opts.padding; + const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle); + const plFont = toFont(opts.font); + const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]); + labelSizes[i] = textSize; + const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle); + const angle = Math.round(toDegrees(angleRadians)); + const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); + const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); + updateLimits(limits, orig, angleRadians, hLimits, vLimits); + } + scale.setCenterPoint( + orig.l - limits.l, + limits.r - orig.r, + orig.t - limits.t, + limits.b - orig.b + ); + scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding); +} +function updateLimits(limits, orig, angle, hLimits, vLimits) { + const sin = Math.abs(Math.sin(angle)); + const cos = Math.abs(Math.cos(angle)); + let x = 0; + let y = 0; + if (hLimits.start < orig.l) { + x = (orig.l - hLimits.start) / sin; + limits.l = Math.min(limits.l, orig.l - x); + } else if (hLimits.end > orig.r) { + x = (hLimits.end - orig.r) / sin; + limits.r = Math.max(limits.r, orig.r + x); + } + if (vLimits.start < orig.t) { + y = (orig.t - vLimits.start) / cos; + limits.t = Math.min(limits.t, orig.t - y); + } else if (vLimits.end > orig.b) { + y = (vLimits.end - orig.b) / cos; + limits.b = Math.max(limits.b, orig.b + y); + } +} +function buildPointLabelItems(scale, labelSizes, padding) { + const items = []; + const valueCount = scale._pointLabels.length; + const opts = scale.options; + const extra = getTickBackdropHeight(opts) / 2; + const outerDistance = scale.drawingArea; + const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0; + for (let i = 0; i < valueCount; i++) { + const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle); + const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI))); + const size = labelSizes[i]; + const y = yForAngle(pointLabelPosition.y, size.h, angle); + const textAlign = getTextAlignForAngle(angle); + const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign); + items.push({ + x: pointLabelPosition.x, + y, + textAlign, + left, + top: y, + right: left + size.w, + bottom: y + size.h + }); + } + return items; +} +function getTextAlignForAngle(angle) { + if (angle === 0 || angle === 180) { + return 'center'; + } else if (angle < 180) { + return 'left'; + } + return 'right'; +} +function leftForTextAlign(x, w, align) { + if (align === 'right') { + x -= w; + } else if (align === 'center') { + x -= (w / 2); + } + return x; +} +function yForAngle(y, h, angle) { + if (angle === 90 || angle === 270) { + y -= (h / 2); + } else if (angle > 270 || angle < 90) { + y -= h; + } + return y; +} +function drawPointLabels(scale, labelCount) { + const {ctx, options: {pointLabels}} = scale; + for (let i = labelCount - 1; i >= 0; i--) { + const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i)); + const plFont = toFont(optsAtIndex.font); + const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i]; + const {backdropColor} = optsAtIndex; + if (!isNullOrUndef(backdropColor)) { + const padding = toPadding(optsAtIndex.backdropPadding); + ctx.fillStyle = backdropColor; + ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height); + } + renderText( + ctx, + scale._pointLabels[i], + x, + y + (plFont.lineHeight / 2), + plFont, + { + color: optsAtIndex.color, + textAlign: textAlign, + textBaseline: 'middle' + } + ); + } +} +function pathRadiusLine(scale, radius, circular, labelCount) { + const {ctx} = scale; + if (circular) { + ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU); + } else { + let pointPosition = scale.getPointPosition(0, radius); + ctx.moveTo(pointPosition.x, pointPosition.y); + for (let i = 1; i < labelCount; i++) { + pointPosition = scale.getPointPosition(i, radius); + ctx.lineTo(pointPosition.x, pointPosition.y); + } + } +} +function drawRadiusLine(scale, gridLineOpts, radius, labelCount) { + const ctx = scale.ctx; + const circular = gridLineOpts.circular; + const {color, lineWidth} = gridLineOpts; + if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) { + return; + } + ctx.save(); + ctx.strokeStyle = color; + ctx.lineWidth = lineWidth; + ctx.setLineDash(gridLineOpts.borderDash); + ctx.lineDashOffset = gridLineOpts.borderDashOffset; + ctx.beginPath(); + pathRadiusLine(scale, radius, circular, labelCount); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); +} +function createPointLabelContext(parent, index, label) { + return createContext(parent, { + label, + index, + type: 'pointLabel' + }); +} +class RadialLinearScale extends LinearScaleBase { + constructor(cfg) { + super(cfg); + this.xCenter = undefined; + this.yCenter = undefined; + this.drawingArea = undefined; + this._pointLabels = []; + this._pointLabelItems = []; + } + setDimensions() { + const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2); + const w = this.width = this.maxWidth - padding.width; + const h = this.height = this.maxHeight - padding.height; + this.xCenter = Math.floor(this.left + w / 2 + padding.left); + this.yCenter = Math.floor(this.top + h / 2 + padding.top); + this.drawingArea = Math.floor(Math.min(w, h) / 2); + } + determineDataLimits() { + const {min, max} = this.getMinMax(false); + this.min = isNumberFinite(min) && !isNaN(min) ? min : 0; + this.max = isNumberFinite(max) && !isNaN(max) ? max : 0; + this.handleTickRangeOptions(); + } + computeTickLimit() { + return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); + } + generateTickLabels(ticks) { + LinearScaleBase.prototype.generateTickLabels.call(this, ticks); + this._pointLabels = this.getLabels() + .map((value, index) => { + const label = callback(this.options.pointLabels.callback, [value, index], this); + return label || label === 0 ? label : ''; + }) + .filter((v, i) => this.chart.getDataVisibility(i)); + } + fit() { + const opts = this.options; + if (opts.display && opts.pointLabels.display) { + fitWithPointLabels(this); + } else { + this.setCenterPoint(0, 0, 0, 0); + } + } + setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) { + this.xCenter += Math.floor((leftMovement - rightMovement) / 2); + this.yCenter += Math.floor((topMovement - bottomMovement) / 2); + this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement)); + } + getIndexAngle(index) { + const angleMultiplier = TAU / (this._pointLabels.length || 1); + const startAngle = this.options.startAngle || 0; + return _normalizeAngle(index * angleMultiplier + toRadians(startAngle)); + } + getDistanceFromCenterForValue(value) { + if (isNullOrUndef(value)) { + return NaN; + } + const scalingFactor = this.drawingArea / (this.max - this.min); + if (this.options.reverse) { + return (this.max - value) * scalingFactor; + } + return (value - this.min) * scalingFactor; + } + getValueForDistanceFromCenter(distance) { + if (isNullOrUndef(distance)) { + return NaN; + } + const scaledDistance = distance / (this.drawingArea / (this.max - this.min)); + return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance; + } + getPointLabelContext(index) { + const pointLabels = this._pointLabels || []; + if (index >= 0 && index < pointLabels.length) { + const pointLabel = pointLabels[index]; + return createPointLabelContext(this.getContext(), index, pointLabel); + } + } + getPointPosition(index, distanceFromCenter, additionalAngle = 0) { + const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle; + return { + x: Math.cos(angle) * distanceFromCenter + this.xCenter, + y: Math.sin(angle) * distanceFromCenter + this.yCenter, + angle + }; + } + getPointPositionForValue(index, value) { + return this.getPointPosition(index, this.getDistanceFromCenterForValue(value)); + } + getBasePosition(index) { + return this.getPointPositionForValue(index || 0, this.getBaseValue()); + } + getPointLabelPosition(index) { + const {left, top, right, bottom} = this._pointLabelItems[index]; + return { + left, + top, + right, + bottom, + }; + } + drawBackground() { + const {backgroundColor, grid: {circular}} = this.options; + if (backgroundColor) { + const ctx = this.ctx; + ctx.save(); + ctx.beginPath(); + pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length); + ctx.closePath(); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + } + drawGrid() { + const ctx = this.ctx; + const opts = this.options; + const {angleLines, grid} = opts; + const labelCount = this._pointLabels.length; + let i, offset, position; + if (opts.pointLabels.display) { + drawPointLabels(this, labelCount); + } + if (grid.display) { + this.ticks.forEach((tick, index) => { + if (index !== 0) { + offset = this.getDistanceFromCenterForValue(tick.value); + const optsAtIndex = grid.setContext(this.getContext(index - 1)); + drawRadiusLine(this, optsAtIndex, offset, labelCount); + } + }); + } + if (angleLines.display) { + ctx.save(); + for (i = labelCount - 1; i >= 0; i--) { + const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i)); + const {color, lineWidth} = optsAtIndex; + if (!lineWidth || !color) { + continue; + } + ctx.lineWidth = lineWidth; + ctx.strokeStyle = color; + ctx.setLineDash(optsAtIndex.borderDash); + ctx.lineDashOffset = optsAtIndex.borderDashOffset; + offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max); + position = this.getPointPosition(i, offset); + ctx.beginPath(); + ctx.moveTo(this.xCenter, this.yCenter); + ctx.lineTo(position.x, position.y); + ctx.stroke(); + } + ctx.restore(); + } + } + drawBorder() {} + drawLabels() { + const ctx = this.ctx; + const opts = this.options; + const tickOpts = opts.ticks; + if (!tickOpts.display) { + return; + } + const startAngle = this.getIndexAngle(0); + let offset, width; + ctx.save(); + ctx.translate(this.xCenter, this.yCenter); + ctx.rotate(startAngle); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + this.ticks.forEach((tick, index) => { + if (index === 0 && !opts.reverse) { + return; + } + const optsAtIndex = tickOpts.setContext(this.getContext(index)); + const tickFont = toFont(optsAtIndex.font); + offset = this.getDistanceFromCenterForValue(this.ticks[index].value); + if (optsAtIndex.showLabelBackdrop) { + ctx.font = tickFont.string; + width = ctx.measureText(tick.label).width; + ctx.fillStyle = optsAtIndex.backdropColor; + const padding = toPadding(optsAtIndex.backdropPadding); + ctx.fillRect( + -width / 2 - padding.left, + -offset - tickFont.size / 2 - padding.top, + width + padding.width, + tickFont.size + padding.height + ); + } + renderText(ctx, tick.label, 0, -offset, tickFont, { + color: optsAtIndex.color, + }); + }); + ctx.restore(); + } + drawTitle() {} +} +RadialLinearScale.id = 'radialLinear'; +RadialLinearScale.defaults = { + display: true, + animate: true, + position: 'chartArea', + angleLines: { + display: true, + lineWidth: 1, + borderDash: [], + borderDashOffset: 0.0 + }, + grid: { + circular: false + }, + startAngle: 0, + ticks: { + showLabelBackdrop: true, + callback: Ticks.formatters.numeric + }, + pointLabels: { + backdropColor: undefined, + backdropPadding: 2, + display: true, + font: { + size: 10 + }, + callback(label) { + return label; + }, + padding: 5, + centerPointLabels: false + } +}; +RadialLinearScale.defaultRoutes = { + 'angleLines.color': 'borderColor', + 'pointLabels.color': 'color', + 'ticks.color': 'color' +}; +RadialLinearScale.descriptors = { + angleLines: { + _fallback: 'grid' + } +}; + +const INTERVALS = { + millisecond: {common: true, size: 1, steps: 1000}, + second: {common: true, size: 1000, steps: 60}, + minute: {common: true, size: 60000, steps: 60}, + hour: {common: true, size: 3600000, steps: 24}, + day: {common: true, size: 86400000, steps: 30}, + week: {common: false, size: 604800000, steps: 4}, + month: {common: true, size: 2.628e9, steps: 12}, + quarter: {common: false, size: 7.884e9, steps: 4}, + year: {common: true, size: 3.154e10} +}; +const UNITS = (Object.keys(INTERVALS)); +function sorter(a, b) { + return a - b; +} +function parse(scale, input) { + if (isNullOrUndef(input)) { + return null; + } + const adapter = scale._adapter; + const {parser, round, isoWeekday} = scale._parseOpts; + let value = input; + if (typeof parser === 'function') { + value = parser(value); + } + if (!isNumberFinite(value)) { + value = typeof parser === 'string' + ? adapter.parse(value, parser) + : adapter.parse(value); + } + if (value === null) { + return null; + } + if (round) { + value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) + ? adapter.startOf(value, 'isoWeek', isoWeekday) + : adapter.startOf(value, round); + } + return +value; +} +function determineUnitForAutoTicks(minUnit, min, max, capacity) { + const ilen = UNITS.length; + for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { + const interval = INTERVALS[UNITS[i]]; + const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER; + if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { + return UNITS[i]; + } + } + return UNITS[ilen - 1]; +} +function determineUnitForFormatting(scale, numTicks, minUnit, min, max) { + for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) { + const unit = UNITS[i]; + if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) { + return unit; + } + } + return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; +} +function determineMajorUnit(unit) { + for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { + if (INTERVALS[UNITS[i]].common) { + return UNITS[i]; + } + } +} +function addTick(ticks, time, timestamps) { + if (!timestamps) { + ticks[time] = true; + } else if (timestamps.length) { + const {lo, hi} = _lookup(timestamps, time); + const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi]; + ticks[timestamp] = true; + } +} +function setMajorTicks(scale, ticks, map, majorUnit) { + const adapter = scale._adapter; + const first = +adapter.startOf(ticks[0].value, majorUnit); + const last = ticks[ticks.length - 1].value; + let major, index; + for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) { + index = map[major]; + if (index >= 0) { + ticks[index].major = true; + } + } + return ticks; +} +function ticksFromTimestamps(scale, values, majorUnit) { + const ticks = []; + const map = {}; + const ilen = values.length; + let i, value; + for (i = 0; i < ilen; ++i) { + value = values[i]; + map[value] = i; + ticks.push({ + value, + major: false + }); + } + return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit); +} +class TimeScale extends Scale { + constructor(props) { + super(props); + this._cache = { + data: [], + labels: [], + all: [] + }; + this._unit = 'day'; + this._majorUnit = undefined; + this._offsets = {}; + this._normalized = false; + this._parseOpts = undefined; + } + init(scaleOpts, opts) { + const time = scaleOpts.time || (scaleOpts.time = {}); + const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date); + mergeIf(time.displayFormats, adapter.formats()); + this._parseOpts = { + parser: time.parser, + round: time.round, + isoWeekday: time.isoWeekday + }; + super.init(scaleOpts); + this._normalized = opts.normalized; + } + parse(raw, index) { + if (raw === undefined) { + return null; + } + return parse(this, raw); + } + beforeLayout() { + super.beforeLayout(); + this._cache = { + data: [], + labels: [], + all: [] + }; + } + determineDataLimits() { + const options = this.options; + const adapter = this._adapter; + const unit = options.time.unit || 'day'; + let {min, max, minDefined, maxDefined} = this.getUserBounds(); + function _applyBounds(bounds) { + if (!minDefined && !isNaN(bounds.min)) { + min = Math.min(min, bounds.min); + } + if (!maxDefined && !isNaN(bounds.max)) { + max = Math.max(max, bounds.max); + } + } + if (!minDefined || !maxDefined) { + _applyBounds(this._getLabelBounds()); + if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') { + _applyBounds(this.getMinMax(false)); + } + } + min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); + max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; + this.min = Math.min(min, max - 1); + this.max = Math.max(min + 1, max); + } + _getLabelBounds() { + const arr = this.getLabelTimestamps(); + let min = Number.POSITIVE_INFINITY; + let max = Number.NEGATIVE_INFINITY; + if (arr.length) { + min = arr[0]; + max = arr[arr.length - 1]; + } + return {min, max}; + } + buildTicks() { + const options = this.options; + const timeOpts = options.time; + const tickOpts = options.ticks; + const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate(); + if (options.bounds === 'ticks' && timestamps.length) { + this.min = this._userMin || timestamps[0]; + this.max = this._userMax || timestamps[timestamps.length - 1]; + } + const min = this.min; + const max = this.max; + const ticks = _filterBetween(timestamps, min, max); + this._unit = timeOpts.unit || (tickOpts.autoSkip + ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) + : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max)); + this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined + : determineMajorUnit(this._unit); + this.initOffsets(timestamps); + if (options.reverse) { + ticks.reverse(); + } + return ticksFromTimestamps(this, ticks, this._majorUnit); + } + initOffsets(timestamps) { + let start = 0; + let end = 0; + let first, last; + if (this.options.offset && timestamps.length) { + first = this.getDecimalForValue(timestamps[0]); + if (timestamps.length === 1) { + start = 1 - first; + } else { + start = (this.getDecimalForValue(timestamps[1]) - first) / 2; + } + last = this.getDecimalForValue(timestamps[timestamps.length - 1]); + if (timestamps.length === 1) { + end = last; + } else { + end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2; + } + } + const limit = timestamps.length < 3 ? 0.5 : 0.25; + start = _limitValue(start, 0, limit); + end = _limitValue(end, 0, limit); + this._offsets = {start, end, factor: 1 / (start + 1 + end)}; + } + _generate() { + const adapter = this._adapter; + const min = this.min; + const max = this.max; + const options = this.options; + const timeOpts = options.time; + const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min)); + const stepSize = valueOrDefault(timeOpts.stepSize, 1); + const weekday = minor === 'week' ? timeOpts.isoWeekday : false; + const hasWeekday = isNumber(weekday) || weekday === true; + const ticks = {}; + let first = min; + let time, count; + if (hasWeekday) { + first = +adapter.startOf(first, 'isoWeek', weekday); + } + first = +adapter.startOf(first, hasWeekday ? 'day' : minor); + if (adapter.diff(max, min, minor) > 100000 * stepSize) { + throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor); + } + const timestamps = options.ticks.source === 'data' && this.getDataTimestamps(); + for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) { + addTick(ticks, time, timestamps); + } + if (time === max || options.bounds === 'ticks' || count === 1) { + addTick(ticks, time, timestamps); + } + return Object.keys(ticks).sort((a, b) => a - b).map(x => +x); + } + getLabelForValue(value) { + const adapter = this._adapter; + const timeOpts = this.options.time; + if (timeOpts.tooltipFormat) { + return adapter.format(value, timeOpts.tooltipFormat); + } + return adapter.format(value, timeOpts.displayFormats.datetime); + } + _tickFormatFunction(time, index, ticks, format) { + const options = this.options; + const formats = options.time.displayFormats; + const unit = this._unit; + const majorUnit = this._majorUnit; + const minorFormat = unit && formats[unit]; + const majorFormat = majorUnit && formats[majorUnit]; + const tick = ticks[index]; + const major = majorUnit && majorFormat && tick && tick.major; + const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat)); + const formatter = options.ticks.callback; + return formatter ? callback(formatter, [label, index, ticks], this) : label; + } + generateTickLabels(ticks) { + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + tick.label = this._tickFormatFunction(tick.value, i, ticks); + } + } + getDecimalForValue(value) { + return value === null ? NaN : (value - this.min) / (this.max - this.min); + } + getPixelForValue(value) { + const offsets = this._offsets; + const pos = this.getDecimalForValue(value); + return this.getPixelForDecimal((offsets.start + pos) * offsets.factor); + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return this.min + pos * (this.max - this.min); + } + _getLabelSize(label) { + const ticksOpts = this.options.ticks; + const tickLabelWidth = this.ctx.measureText(label).width; + const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation); + const cosRotation = Math.cos(angle); + const sinRotation = Math.sin(angle); + const tickFontSize = this._resolveTickFontOptions(0).size; + return { + w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation), + h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation) + }; + } + _getLabelCapacity(exampleTime) { + const timeOpts = this.options.time; + const displayFormats = timeOpts.displayFormats; + const format = displayFormats[timeOpts.unit] || displayFormats.millisecond; + const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format); + const size = this._getLabelSize(exampleLabel); + const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1; + return capacity > 0 ? capacity : 1; + } + getDataTimestamps() { + let timestamps = this._cache.data || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const metas = this.getMatchingVisibleMetas(); + if (this._normalized && metas.length) { + return (this._cache.data = metas[0].controller.getAllParsedValues(this)); + } + for (i = 0, ilen = metas.length; i < ilen; ++i) { + timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this)); + } + return (this._cache.data = this.normalize(timestamps)); + } + getLabelTimestamps() { + const timestamps = this._cache.labels || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const labels = this.getLabels(); + for (i = 0, ilen = labels.length; i < ilen; ++i) { + timestamps.push(parse(this, labels[i])); + } + return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps)); + } + normalize(values) { + return _arrayUnique(values.sort(sorter)); + } +} +TimeScale.id = 'time'; +TimeScale.defaults = { + bounds: 'data', + adapters: {}, + time: { + parser: false, + unit: false, + round: false, + isoWeekday: false, + minUnit: 'millisecond', + displayFormats: {} + }, + ticks: { + source: 'auto', + major: { + enabled: false + } + } +}; + +function interpolate(table, val, reverse) { + let lo = 0; + let hi = table.length - 1; + let prevSource, nextSource, prevTarget, nextTarget; + if (reverse) { + if (val >= table[lo].pos && val <= table[hi].pos) { + ({lo, hi} = _lookupByKey(table, 'pos', val)); + } + ({pos: prevSource, time: prevTarget} = table[lo]); + ({pos: nextSource, time: nextTarget} = table[hi]); + } else { + if (val >= table[lo].time && val <= table[hi].time) { + ({lo, hi} = _lookupByKey(table, 'time', val)); + } + ({time: prevSource, pos: prevTarget} = table[lo]); + ({time: nextSource, pos: nextTarget} = table[hi]); + } + const span = nextSource - prevSource; + return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget; +} +class TimeSeriesScale extends TimeScale { + constructor(props) { + super(props); + this._table = []; + this._minPos = undefined; + this._tableRange = undefined; + } + initOffsets() { + const timestamps = this._getTimestampsForTable(); + const table = this._table = this.buildLookupTable(timestamps); + this._minPos = interpolate(table, this.min); + this._tableRange = interpolate(table, this.max) - this._minPos; + super.initOffsets(timestamps); + } + buildLookupTable(timestamps) { + const {min, max} = this; + const items = []; + const table = []; + let i, ilen, prev, curr, next; + for (i = 0, ilen = timestamps.length; i < ilen; ++i) { + curr = timestamps[i]; + if (curr >= min && curr <= max) { + items.push(curr); + } + } + if (items.length < 2) { + return [ + {time: min, pos: 0}, + {time: max, pos: 1} + ]; + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + next = items[i + 1]; + prev = items[i - 1]; + curr = items[i]; + if (Math.round((next + prev) / 2) !== curr) { + table.push({time: curr, pos: i / (ilen - 1)}); + } + } + return table; + } + _getTimestampsForTable() { + let timestamps = this._cache.all || []; + if (timestamps.length) { + return timestamps; + } + const data = this.getDataTimestamps(); + const label = this.getLabelTimestamps(); + if (data.length && label.length) { + timestamps = this.normalize(data.concat(label)); + } else { + timestamps = data.length ? data : label; + } + timestamps = this._cache.all = timestamps; + return timestamps; + } + getDecimalForValue(value) { + return (interpolate(this._table, value) - this._minPos) / this._tableRange; + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return interpolate(this._table, decimal * this._tableRange + this._minPos, true); + } +} +TimeSeriesScale.id = 'timeseries'; +TimeSeriesScale.defaults = TimeScale.defaults; + +var scales = /*#__PURE__*/Object.freeze({ +__proto__: null, +CategoryScale: CategoryScale, +LinearScale: LinearScale, +LogarithmicScale: LogarithmicScale, +RadialLinearScale: RadialLinearScale, +TimeScale: TimeScale, +TimeSeriesScale: TimeSeriesScale +}); + +const registerables = [ + controllers, + elements, + plugins, + scales, +]; + +export { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales }; diff --git a/node_modules/chart.js/dist/chart.js b/node_modules/chart.js/dist/chart.js new file mode 100644 index 00000000..58990616 --- /dev/null +++ b/node_modules/chart.js/dist/chart.js @@ -0,0 +1,13269 @@ +/*! + * Chart.js v3.7.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : +typeof define === 'function' && define.amd ? define(factory) : +(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chart = factory()); +})(this, (function () { 'use strict'; + +function fontString(pixelSize, fontStyle, fontFamily) { + return fontStyle + ' ' + pixelSize + 'px ' + fontFamily; +} +const requestAnimFrame = (function() { + if (typeof window === 'undefined') { + return function(callback) { + return callback(); + }; + } + return window.requestAnimationFrame; +}()); +function throttled(fn, thisArg, updateFn) { + const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args)); + let ticking = false; + let args = []; + return function(...rest) { + args = updateArgs(rest); + if (!ticking) { + ticking = true; + requestAnimFrame.call(window, () => { + ticking = false; + fn.apply(thisArg, args); + }); + } + }; +} +function debounce(fn, delay) { + let timeout; + return function(...args) { + if (delay) { + clearTimeout(timeout); + timeout = setTimeout(fn, delay, args); + } else { + fn.apply(this, args); + } + return delay; + }; +} +const _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center'; +const _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2; +const _textX = (align, left, right, rtl) => { + const check = rtl ? 'left' : 'right'; + return align === check ? right : align === 'center' ? (left + right) / 2 : left; +}; + +class Animator { + constructor() { + this._request = null; + this._charts = new Map(); + this._running = false; + this._lastDate = undefined; + } + _notify(chart, anims, date, type) { + const callbacks = anims.listeners[type]; + const numSteps = anims.duration; + callbacks.forEach(fn => fn({ + chart, + initial: anims.initial, + numSteps, + currentStep: Math.min(date - anims.start, numSteps) + })); + } + _refresh() { + if (this._request) { + return; + } + this._running = true; + this._request = requestAnimFrame.call(window, () => { + this._update(); + this._request = null; + if (this._running) { + this._refresh(); + } + }); + } + _update(date = Date.now()) { + let remaining = 0; + this._charts.forEach((anims, chart) => { + if (!anims.running || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + let draw = false; + let item; + for (; i >= 0; --i) { + item = items[i]; + if (item._active) { + if (item._total > anims.duration) { + anims.duration = item._total; + } + item.tick(date); + draw = true; + } else { + items[i] = items[items.length - 1]; + items.pop(); + } + } + if (draw) { + chart.draw(); + this._notify(chart, anims, date, 'progress'); + } + if (!items.length) { + anims.running = false; + this._notify(chart, anims, date, 'complete'); + anims.initial = false; + } + remaining += items.length; + }); + this._lastDate = date; + if (remaining === 0) { + this._running = false; + } + } + _getAnims(chart) { + const charts = this._charts; + let anims = charts.get(chart); + if (!anims) { + anims = { + running: false, + initial: true, + items: [], + listeners: { + complete: [], + progress: [] + } + }; + charts.set(chart, anims); + } + return anims; + } + listen(chart, event, cb) { + this._getAnims(chart).listeners[event].push(cb); + } + add(chart, items) { + if (!items || !items.length) { + return; + } + this._getAnims(chart).items.push(...items); + } + has(chart) { + return this._getAnims(chart).items.length > 0; + } + start(chart) { + const anims = this._charts.get(chart); + if (!anims) { + return; + } + anims.running = true; + anims.start = Date.now(); + anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0); + this._refresh(); + } + running(chart) { + if (!this._running) { + return false; + } + const anims = this._charts.get(chart); + if (!anims || !anims.running || !anims.items.length) { + return false; + } + return true; + } + stop(chart) { + const anims = this._charts.get(chart); + if (!anims || !anims.items.length) { + return; + } + const items = anims.items; + let i = items.length - 1; + for (; i >= 0; --i) { + items[i].cancel(); + } + anims.items = []; + this._notify(chart, anims, Date.now(), 'complete'); + } + remove(chart) { + return this._charts.delete(chart); + } +} +var animator = new Animator(); + +/*! + * @kurkle/color v0.1.9 + * https://github.com/kurkle/color#readme + * (c) 2020 Jukka Kurkela + * Released under the MIT License + */ +const map$1 = {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}; +const hex = '0123456789ABCDEF'; +const h1 = (b) => hex[b & 0xF]; +const h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; +const eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF)); +function isShort(v) { + return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); +} +function hexParse(str) { + var len = str.length; + var ret; + if (str[0] === '#') { + if (len === 4 || len === 5) { + ret = { + r: 255 & map$1[str[1]] * 17, + g: 255 & map$1[str[2]] * 17, + b: 255 & map$1[str[3]] * 17, + a: len === 5 ? map$1[str[4]] * 17 : 255 + }; + } else if (len === 7 || len === 9) { + ret = { + r: map$1[str[1]] << 4 | map$1[str[2]], + g: map$1[str[3]] << 4 | map$1[str[4]], + b: map$1[str[5]] << 4 | map$1[str[6]], + a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255 + }; + } + } + return ret; +} +function hexString(v) { + var f = isShort(v) ? h1 : h2; + return v + ? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') + : v; +} +function round(v) { + return v + 0.5 | 0; +} +const lim = (v, l, h) => Math.max(Math.min(v, h), l); +function p2b(v) { + return lim(round(v * 2.55), 0, 255); +} +function n2b(v) { + return lim(round(v * 255), 0, 255); +} +function b2n(v) { + return lim(round(v / 2.55) / 100, 0, 1); +} +function n2p(v) { + return lim(round(v * 100), 0, 100); +} +const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; +function rgbParse(str) { + const m = RGB_RE.exec(str); + let a = 255; + let r, g, b; + if (!m) { + return; + } + if (m[7] !== r) { + const v = +m[7]; + a = 255 & (m[8] ? p2b(v) : v * 255); + } + r = +m[1]; + g = +m[3]; + b = +m[5]; + r = 255 & (m[2] ? p2b(r) : r); + g = 255 & (m[4] ? p2b(g) : g); + b = 255 & (m[6] ? p2b(b) : b); + return { + r: r, + g: g, + b: b, + a: a + }; +} +function rgbString(v) { + return v && ( + v.a < 255 + ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` + : `rgb(${v.r}, ${v.g}, ${v.b})` + ); +} +const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; +function hsl2rgbn(h, s, l) { + const a = s * Math.min(l, 1 - l); + const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + return [f(0), f(8), f(4)]; +} +function hsv2rgbn(h, s, v) { + const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); + return [f(5), f(3), f(1)]; +} +function hwb2rgbn(h, w, b) { + const rgb = hsl2rgbn(h, 1, 0.5); + let i; + if (w + b > 1) { + i = 1 / (w + b); + w *= i; + b *= i; + } + for (i = 0; i < 3; i++) { + rgb[i] *= 1 - w - b; + rgb[i] += w; + } + return rgb; +} +function rgb2hsl(v) { + const range = 255; + const r = v.r / range; + const g = v.g / range; + const b = v.b / range; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const l = (max + min) / 2; + let h, s, d; + if (max !== min) { + d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + h = max === r + ? ((g - b) / d) + (g < b ? 6 : 0) + : max === g + ? (b - r) / d + 2 + : (r - g) / d + 4; + h = h * 60 + 0.5; + } + return [h | 0, s || 0, l]; +} +function calln(f, a, b, c) { + return ( + Array.isArray(a) + ? f(a[0], a[1], a[2]) + : f(a, b, c) + ).map(n2b); +} +function hsl2rgb(h, s, l) { + return calln(hsl2rgbn, h, s, l); +} +function hwb2rgb(h, w, b) { + return calln(hwb2rgbn, h, w, b); +} +function hsv2rgb(h, s, v) { + return calln(hsv2rgbn, h, s, v); +} +function hue(h) { + return (h % 360 + 360) % 360; +} +function hueParse(str) { + const m = HUE_RE.exec(str); + let a = 255; + let v; + if (!m) { + return; + } + if (m[5] !== v) { + a = m[6] ? p2b(+m[5]) : n2b(+m[5]); + } + const h = hue(+m[2]); + const p1 = +m[3] / 100; + const p2 = +m[4] / 100; + if (m[1] === 'hwb') { + v = hwb2rgb(h, p1, p2); + } else if (m[1] === 'hsv') { + v = hsv2rgb(h, p1, p2); + } else { + v = hsl2rgb(h, p1, p2); + } + return { + r: v[0], + g: v[1], + b: v[2], + a: a + }; +} +function rotate(v, deg) { + var h = rgb2hsl(v); + h[0] = hue(h[0] + deg); + h = hsl2rgb(h); + v.r = h[0]; + v.g = h[1]; + v.b = h[2]; +} +function hslString(v) { + if (!v) { + return; + } + const a = rgb2hsl(v); + const h = a[0]; + const s = n2p(a[1]); + const l = n2p(a[2]); + return v.a < 255 + ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` + : `hsl(${h}, ${s}%, ${l}%)`; +} +const map$1$1 = { + 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' +}; +const names = { + 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' +}; +function unpack() { + const unpacked = {}; + const keys = Object.keys(names); + const tkeys = Object.keys(map$1$1); + let i, j, k, ok, nk; + for (i = 0; i < keys.length; i++) { + ok = nk = keys[i]; + for (j = 0; j < tkeys.length; j++) { + k = tkeys[j]; + nk = nk.replace(k, map$1$1[k]); + } + k = parseInt(names[ok], 16); + unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; + } + return unpacked; +} +let names$1; +function nameParse(str) { + if (!names$1) { + names$1 = unpack(); + names$1.transparent = [0, 0, 0, 0]; + } + const a = names$1[str.toLowerCase()]; + return a && { + r: a[0], + g: a[1], + b: a[2], + a: a.length === 4 ? a[3] : 255 + }; +} +function modHSL(v, i, ratio) { + if (v) { + let tmp = rgb2hsl(v); + tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); + tmp = hsl2rgb(tmp); + v.r = tmp[0]; + v.g = tmp[1]; + v.b = tmp[2]; + } +} +function clone$1(v, proto) { + return v ? Object.assign(proto || {}, v) : v; +} +function fromObject(input) { + var v = {r: 0, g: 0, b: 0, a: 255}; + if (Array.isArray(input)) { + if (input.length >= 3) { + v = {r: input[0], g: input[1], b: input[2], a: 255}; + if (input.length > 3) { + v.a = n2b(input[3]); + } + } + } else { + v = clone$1(input, {r: 0, g: 0, b: 0, a: 1}); + v.a = n2b(v.a); + } + return v; +} +function functionParse(str) { + if (str.charAt(0) === 'r') { + return rgbParse(str); + } + return hueParse(str); +} +class Color { + constructor(input) { + if (input instanceof Color) { + return input; + } + const type = typeof input; + let v; + if (type === 'object') { + v = fromObject(input); + } else if (type === 'string') { + v = hexParse(input) || nameParse(input) || functionParse(input); + } + this._rgb = v; + this._valid = !!v; + } + get valid() { + return this._valid; + } + get rgb() { + var v = clone$1(this._rgb); + if (v) { + v.a = b2n(v.a); + } + return v; + } + set rgb(obj) { + this._rgb = fromObject(obj); + } + rgbString() { + return this._valid ? rgbString(this._rgb) : this._rgb; + } + hexString() { + return this._valid ? hexString(this._rgb) : this._rgb; + } + hslString() { + return this._valid ? hslString(this._rgb) : this._rgb; + } + mix(color, weight) { + const me = this; + if (color) { + const c1 = me.rgb; + const c2 = color.rgb; + let w2; + const p = weight === w2 ? 0.5 : weight; + const w = 2 * p - 1; + const a = c1.a - c2.a; + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + w2 = 1 - w1; + c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5; + c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5; + c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5; + c1.a = p * c1.a + (1 - p) * c2.a; + me.rgb = c1; + } + return me; + } + clone() { + return new Color(this.rgb); + } + alpha(a) { + this._rgb.a = n2b(a); + return this; + } + clearer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 - ratio; + return this; + } + greyscale() { + const rgb = this._rgb; + const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); + rgb.r = rgb.g = rgb.b = val; + return this; + } + opaquer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 + ratio; + return this; + } + negate() { + const v = this._rgb; + v.r = 255 - v.r; + v.g = 255 - v.g; + v.b = 255 - v.b; + return this; + } + lighten(ratio) { + modHSL(this._rgb, 2, ratio); + return this; + } + darken(ratio) { + modHSL(this._rgb, 2, -ratio); + return this; + } + saturate(ratio) { + modHSL(this._rgb, 1, ratio); + return this; + } + desaturate(ratio) { + modHSL(this._rgb, 1, -ratio); + return this; + } + rotate(deg) { + rotate(this._rgb, deg); + return this; + } +} +function index_esm(input) { + return new Color(input); +} + +const isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern; +function color(value) { + return isPatternOrGradient(value) ? value : index_esm(value); +} +function getHoverColor(value) { + return isPatternOrGradient(value) + ? value + : index_esm(value).saturate(0.5).darken(0.1).hexString(); +} + +function noop() {} +const uid = (function() { + let id = 0; + return function() { + return id++; + }; +}()); +function isNullOrUndef(value) { + return value === null || typeof value === 'undefined'; +} +function isArray(value) { + if (Array.isArray && Array.isArray(value)) { + return true; + } + const type = Object.prototype.toString.call(value); + if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') { + return true; + } + return false; +} +function isObject(value) { + return value !== null && Object.prototype.toString.call(value) === '[object Object]'; +} +const isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value); +function finiteOrDefault(value, defaultValue) { + return isNumberFinite(value) ? value : defaultValue; +} +function valueOrDefault(value, defaultValue) { + return typeof value === 'undefined' ? defaultValue : value; +} +const toPercentage = (value, dimension) => + typeof value === 'string' && value.endsWith('%') ? + parseFloat(value) / 100 + : value / dimension; +const toDimension = (value, dimension) => + typeof value === 'string' && value.endsWith('%') ? + parseFloat(value) / 100 * dimension + : +value; +function callback(fn, args, thisArg) { + if (fn && typeof fn.call === 'function') { + return fn.apply(thisArg, args); + } +} +function each(loopable, fn, thisArg, reverse) { + let i, len, keys; + if (isArray(loopable)) { + len = loopable.length; + if (reverse) { + for (i = len - 1; i >= 0; i--) { + fn.call(thisArg, loopable[i], i); + } + } else { + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[i], i); + } + } + } else if (isObject(loopable)) { + keys = Object.keys(loopable); + len = keys.length; + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[keys[i]], keys[i]); + } + } +} +function _elementsEqual(a0, a1) { + let i, ilen, v0, v1; + if (!a0 || !a1 || a0.length !== a1.length) { + return false; + } + for (i = 0, ilen = a0.length; i < ilen; ++i) { + v0 = a0[i]; + v1 = a1[i]; + if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) { + return false; + } + } + return true; +} +function clone(source) { + if (isArray(source)) { + return source.map(clone); + } + if (isObject(source)) { + const target = Object.create(null); + const keys = Object.keys(source); + const klen = keys.length; + let k = 0; + for (; k < klen; ++k) { + target[keys[k]] = clone(source[keys[k]]); + } + return target; + } + return source; +} +function isValidKey(key) { + return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1; +} +function _merger(key, target, source, options) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + merge(tval, sval, options); + } else { + target[key] = clone(sval); + } +} +function merge(target, source, options) { + const sources = isArray(source) ? source : [source]; + const ilen = sources.length; + if (!isObject(target)) { + return target; + } + options = options || {}; + const merger = options.merger || _merger; + for (let i = 0; i < ilen; ++i) { + source = sources[i]; + if (!isObject(source)) { + continue; + } + const keys = Object.keys(source); + for (let k = 0, klen = keys.length; k < klen; ++k) { + merger(keys[k], target, source, options); + } + } + return target; +} +function mergeIf(target, source) { + return merge(target, source, {merger: _mergerIf}); +} +function _mergerIf(key, target, source) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + mergeIf(tval, sval); + } else if (!Object.prototype.hasOwnProperty.call(target, key)) { + target[key] = clone(sval); + } +} +function _deprecated(scope, value, previous, current) { + if (value !== undefined) { + console.warn(scope + ': "' + previous + + '" is deprecated. Please use "' + current + '" instead'); + } +} +const emptyString = ''; +const dot = '.'; +function indexOfDotOrLength(key, start) { + const idx = key.indexOf(dot, start); + return idx === -1 ? key.length : idx; +} +function resolveObjectKey(obj, key) { + if (key === emptyString) { + return obj; + } + let pos = 0; + let idx = indexOfDotOrLength(key, pos); + while (obj && idx > pos) { + obj = obj[key.substr(pos, idx - pos)]; + pos = idx + 1; + idx = indexOfDotOrLength(key, pos); + } + return obj; +} +function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} +const defined = (value) => typeof value !== 'undefined'; +const isFunction = (value) => typeof value === 'function'; +const setsEqual = (a, b) => { + if (a.size !== b.size) { + return false; + } + for (const item of a) { + if (!b.has(item)) { + return false; + } + } + return true; +}; +function _isClickEvent(e) { + return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu'; +} + +const overrides = Object.create(null); +const descriptors = Object.create(null); +function getScope$1(node, key) { + if (!key) { + return node; + } + const keys = key.split('.'); + for (let i = 0, n = keys.length; i < n; ++i) { + const k = keys[i]; + node = node[k] || (node[k] = Object.create(null)); + } + return node; +} +function set(root, scope, values) { + if (typeof scope === 'string') { + return merge(getScope$1(root, scope), values); + } + return merge(getScope$1(root, ''), scope); +} +class Defaults { + constructor(_descriptors) { + this.animation = undefined; + this.backgroundColor = 'rgba(0,0,0,0.1)'; + this.borderColor = 'rgba(0,0,0,0.1)'; + this.color = '#666'; + this.datasets = {}; + this.devicePixelRatio = (context) => context.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 = (ctx, options) => getHoverColor(options.backgroundColor); + this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor); + this.hoverColor = (ctx, options) => getHoverColor(options.color); + this.indexAxis = 'x'; + this.interaction = { + mode: 'nearest', + intersect: true + }; + this.maintainAspectRatio = true; + this.onHover = null; + this.onClick = null; + this.parsing = true; + this.plugins = {}; + this.responsive = true; + this.scale = undefined; + this.scales = {}; + this.showLine = true; + this.drawActiveElementsOnTop = true; + this.describe(_descriptors); + } + set(scope, values) { + return set(this, scope, values); + } + get(scope) { + return getScope$1(this, scope); + } + describe(scope, values) { + return set(descriptors, scope, values); + } + override(scope, values) { + return set(overrides, scope, values); + } + route(scope, name, targetScope, targetName) { + const scopeObject = getScope$1(this, scope); + const targetScopeObject = getScope$1(this, targetScope); + const privateName = '_' + name; + Object.defineProperties(scopeObject, { + [privateName]: { + value: scopeObject[name], + writable: true + }, + [name]: { + enumerable: true, + get() { + const local = this[privateName]; + const target = targetScopeObject[targetName]; + if (isObject(local)) { + return Object.assign({}, target, local); + } + return valueOrDefault(local, target); + }, + set(value) { + this[privateName] = value; + } + } + }); + } +} +var defaults = new Defaults({ + _scriptable: (name) => !name.startsWith('on'), + _indexable: (name) => name !== 'events', + hover: { + _fallback: 'interaction' + }, + interaction: { + _scriptable: false, + _indexable: false, + } +}); + +const PI = Math.PI; +const TAU = 2 * PI; +const PITAU = TAU + PI; +const INFINITY = Number.POSITIVE_INFINITY; +const RAD_PER_DEG = PI / 180; +const HALF_PI = PI / 2; +const QUARTER_PI = PI / 4; +const TWO_THIRDS_PI = PI * 2 / 3; +const log10 = Math.log10; +const sign = Math.sign; +function niceNum(range) { + const roundedRange = Math.round(range); + range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range; + const niceRange = Math.pow(10, Math.floor(log10(range))); + const fraction = range / niceRange; + const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; + return niceFraction * niceRange; +} +function _factorize(value) { + const result = []; + const sqrt = Math.sqrt(value); + let i; + for (i = 1; i < sqrt; i++) { + if (value % i === 0) { + result.push(i); + result.push(value / i); + } + } + if (sqrt === (sqrt | 0)) { + result.push(sqrt); + } + result.sort((a, b) => a - b).pop(); + return result; +} +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} +function almostEquals(x, y, epsilon) { + return Math.abs(x - y) < epsilon; +} +function almostWhole(x, epsilon) { + const rounded = Math.round(x); + return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x); +} +function _setMinAndMaxByKey(array, target, property) { + let i, ilen, value; + for (i = 0, ilen = array.length; i < ilen; i++) { + value = array[i][property]; + if (!isNaN(value)) { + target.min = Math.min(target.min, value); + target.max = Math.max(target.max, value); + } + } +} +function toRadians(degrees) { + return degrees * (PI / 180); +} +function toDegrees(radians) { + return radians * (180 / PI); +} +function _decimalPlaces(x) { + if (!isNumberFinite(x)) { + return; + } + let e = 1; + let p = 0; + while (Math.round(x * e) / e !== x) { + e *= 10; + p++; + } + return p; +} +function getAngleFromPoint(centrePoint, anglePoint) { + const distanceFromXCenter = anglePoint.x - centrePoint.x; + const distanceFromYCenter = anglePoint.y - centrePoint.y; + const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); + let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); + if (angle < (-0.5 * PI)) { + angle += TAU; + } + return { + angle, + distance: radialDistanceFromCenter + }; +} +function distanceBetweenPoints(pt1, pt2) { + return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); +} +function _angleDiff(a, b) { + return (a - b + PITAU) % TAU - PI; +} +function _normalizeAngle(a) { + return (a % TAU + TAU) % TAU; +} +function _angleBetween(angle, start, end, sameAngleIsFullCircle) { + const a = _normalizeAngle(angle); + const s = _normalizeAngle(start); + const e = _normalizeAngle(end); + const angleToStart = _normalizeAngle(s - a); + const angleToEnd = _normalizeAngle(e - a); + const startToAngle = _normalizeAngle(a - s); + const endToAngle = _normalizeAngle(a - e); + return a === s || a === e || (sameAngleIsFullCircle && s === e) + || (angleToStart > angleToEnd && startToAngle < endToAngle); +} +function _limitValue(value, min, max) { + return Math.max(min, Math.min(max, value)); +} +function _int16Range(value) { + return _limitValue(value, -32768, 32767); +} +function _isBetween(value, start, end, epsilon = 1e-6) { + return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon; +} + +function toFontString(font) { + if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) { + return null; + } + return (font.style ? font.style + ' ' : '') + + (font.weight ? font.weight + ' ' : '') + + font.size + 'px ' + + font.family; +} +function _measureText(ctx, data, gc, longest, string) { + let textWidth = data[string]; + if (!textWidth) { + textWidth = data[string] = ctx.measureText(string).width; + gc.push(string); + } + if (textWidth > longest) { + longest = textWidth; + } + return longest; +} +function _longestText(ctx, font, arrayOfThings, cache) { + cache = cache || {}; + let data = cache.data = cache.data || {}; + let gc = cache.garbageCollect = cache.garbageCollect || []; + if (cache.font !== font) { + data = cache.data = {}; + gc = cache.garbageCollect = []; + cache.font = font; + } + ctx.save(); + ctx.font = font; + let longest = 0; + const ilen = arrayOfThings.length; + let i, j, jlen, thing, nestedThing; + for (i = 0; i < ilen; i++) { + thing = arrayOfThings[i]; + if (thing !== undefined && thing !== null && isArray(thing) !== true) { + longest = _measureText(ctx, data, gc, longest, thing); + } else if (isArray(thing)) { + for (j = 0, jlen = thing.length; j < jlen; j++) { + nestedThing = thing[j]; + if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) { + longest = _measureText(ctx, data, gc, longest, nestedThing); + } + } + } + } + ctx.restore(); + const gcLen = gc.length / 2; + if (gcLen > arrayOfThings.length) { + for (i = 0; i < gcLen; i++) { + delete data[gc[i]]; + } + gc.splice(0, gcLen); + } + return longest; +} +function _alignPixel(chart, pixel, width) { + const devicePixelRatio = chart.currentDevicePixelRatio; + const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0; + return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; +} +function clearCanvas(canvas, ctx) { + ctx = ctx || canvas.getContext('2d'); + ctx.save(); + ctx.resetTransform(); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.restore(); +} +function drawPoint(ctx, options, x, y) { + let type, xOffset, yOffset, size, cornerRadius; + const style = options.pointStyle; + const rotation = options.rotation; + const radius = options.radius; + let rad = (rotation || 0) * RAD_PER_DEG; + if (style && typeof style === 'object') { + type = style.toString(); + if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { + ctx.save(); + ctx.translate(x, y); + ctx.rotate(rad); + ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); + ctx.restore(); + return; + } + } + if (isNaN(radius) || radius <= 0) { + return; + } + ctx.beginPath(); + switch (style) { + default: + ctx.arc(x, y, radius, 0, TAU); + ctx.closePath(); + break; + case 'triangle': + ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + ctx.closePath(); + break; + case 'rectRounded': + cornerRadius = radius * 0.516; + size = radius - cornerRadius; + xOffset = Math.cos(rad + QUARTER_PI) * size; + yOffset = Math.sin(rad + QUARTER_PI) * size; + ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); + ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad); + ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI); + ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); + ctx.closePath(); + break; + case 'rect': + if (!rotation) { + size = Math.SQRT1_2 * radius; + ctx.rect(x - size, y - size, 2 * size, 2 * size); + break; + } + rad += QUARTER_PI; + case 'rectRot': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + yOffset, y - xOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.lineTo(x - yOffset, y + xOffset); + ctx.closePath(); + break; + case 'crossRot': + rad += QUARTER_PI; + case 'cross': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'star': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + rad += QUARTER_PI; + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'line': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + break; + case 'dash': + ctx.moveTo(x, y); + ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius); + break; + } + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } +} +function _isPointInArea(point, area, margin) { + margin = margin || 0.5; + return !area || (point && point.x > area.left - margin && point.x < area.right + margin && + point.y > area.top - margin && point.y < area.bottom + margin); +} +function clipArea(ctx, area) { + ctx.save(); + ctx.beginPath(); + ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); + ctx.clip(); +} +function unclipArea(ctx) { + ctx.restore(); +} +function _steppedLineTo(ctx, previous, target, flip, mode) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + if (mode === 'middle') { + const midpoint = (previous.x + target.x) / 2.0; + ctx.lineTo(midpoint, previous.y); + ctx.lineTo(midpoint, target.y); + } else if (mode === 'after' !== !!flip) { + ctx.lineTo(previous.x, target.y); + } else { + ctx.lineTo(target.x, previous.y); + } + ctx.lineTo(target.x, target.y); +} +function _bezierCurveTo(ctx, previous, target, flip) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + ctx.bezierCurveTo( + flip ? previous.cp1x : previous.cp2x, + flip ? previous.cp1y : previous.cp2y, + flip ? target.cp2x : target.cp1x, + flip ? target.cp2y : target.cp1y, + target.x, + target.y); +} +function renderText(ctx, text, x, y, font, opts = {}) { + const lines = isArray(text) ? text : [text]; + const stroke = opts.strokeWidth > 0 && opts.strokeColor !== ''; + let i, line; + ctx.save(); + ctx.font = font.string; + setRenderOpts(ctx, opts); + for (i = 0; i < lines.length; ++i) { + line = lines[i]; + if (stroke) { + if (opts.strokeColor) { + ctx.strokeStyle = opts.strokeColor; + } + if (!isNullOrUndef(opts.strokeWidth)) { + ctx.lineWidth = opts.strokeWidth; + } + ctx.strokeText(line, x, y, opts.maxWidth); + } + ctx.fillText(line, x, y, opts.maxWidth); + decorateText(ctx, x, y, line, opts); + y += font.lineHeight; + } + ctx.restore(); +} +function setRenderOpts(ctx, opts) { + if (opts.translation) { + ctx.translate(opts.translation[0], opts.translation[1]); + } + if (!isNullOrUndef(opts.rotation)) { + ctx.rotate(opts.rotation); + } + if (opts.color) { + ctx.fillStyle = opts.color; + } + if (opts.textAlign) { + ctx.textAlign = opts.textAlign; + } + if (opts.textBaseline) { + ctx.textBaseline = opts.textBaseline; + } +} +function decorateText(ctx, x, y, line, opts) { + if (opts.strikethrough || opts.underline) { + const metrics = ctx.measureText(line); + const left = x - metrics.actualBoundingBoxLeft; + const right = x + metrics.actualBoundingBoxRight; + const top = y - metrics.actualBoundingBoxAscent; + const bottom = y + metrics.actualBoundingBoxDescent; + const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom; + ctx.strokeStyle = ctx.fillStyle; + ctx.beginPath(); + ctx.lineWidth = opts.decorationWidth || 2; + ctx.moveTo(left, yDecoration); + ctx.lineTo(right, yDecoration); + ctx.stroke(); + } +} +function addRoundedRectPath(ctx, rect) { + const {x, y, w, h, radius} = rect; + ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true); + ctx.lineTo(x, y + h - radius.bottomLeft); + ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); + ctx.lineTo(x + w - radius.bottomRight, y + h); + ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); + ctx.lineTo(x + w, y + radius.topRight); + ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); + ctx.lineTo(x + radius.topLeft, y); +} + +function _lookup(table, value, cmp) { + cmp = cmp || ((index) => table[index] < value); + let hi = table.length - 1; + let lo = 0; + let mid; + while (hi - lo > 1) { + mid = (lo + hi) >> 1; + if (cmp(mid)) { + lo = mid; + } else { + hi = mid; + } + } + return {lo, hi}; +} +const _lookupByKey = (table, key, value) => + _lookup(table, value, index => table[index][key] < value); +const _rlookupByKey = (table, key, value) => + _lookup(table, value, index => table[index][key] >= value); +function _filterBetween(values, min, max) { + let start = 0; + let end = values.length; + while (start < end && values[start] < min) { + start++; + } + while (end > start && values[end - 1] > max) { + end--; + } + return start > 0 || end < values.length + ? values.slice(start, end) + : values; +} +const arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift']; +function listenArrayEvents(array, listener) { + if (array._chartjs) { + array._chartjs.listeners.push(listener); + return; + } + Object.defineProperty(array, '_chartjs', { + configurable: true, + enumerable: false, + value: { + listeners: [listener] + } + }); + arrayEvents.forEach((key) => { + const method = '_onData' + _capitalize(key); + const base = array[key]; + Object.defineProperty(array, key, { + configurable: true, + enumerable: false, + value(...args) { + const res = base.apply(this, args); + array._chartjs.listeners.forEach((object) => { + if (typeof object[method] === 'function') { + object[method](...args); + } + }); + return res; + } + }); + }); +} +function unlistenArrayEvents(array, listener) { + const stub = array._chartjs; + if (!stub) { + return; + } + const listeners = stub.listeners; + const index = listeners.indexOf(listener); + if (index !== -1) { + listeners.splice(index, 1); + } + if (listeners.length > 0) { + return; + } + arrayEvents.forEach((key) => { + delete array[key]; + }); + delete array._chartjs; +} +function _arrayUnique(items) { + const set = new Set(); + let i, ilen; + for (i = 0, ilen = items.length; i < ilen; ++i) { + set.add(items[i]); + } + if (set.size === ilen) { + return items; + } + return Array.from(set); +} + +function _isDomSupported() { + return typeof window !== 'undefined' && typeof document !== 'undefined'; +} +function _getParentNode(domNode) { + let parent = domNode.parentNode; + if (parent && parent.toString() === '[object ShadowRoot]') { + parent = parent.host; + } + return parent; +} +function parseMaxStyle(styleValue, node, parentProperty) { + let valueInPixels; + if (typeof styleValue === 'string') { + valueInPixels = parseInt(styleValue, 10); + if (styleValue.indexOf('%') !== -1) { + valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; + } + } else { + valueInPixels = styleValue; + } + return valueInPixels; +} +const getComputedStyle = (element) => window.getComputedStyle(element, null); +function getStyle(el, property) { + return getComputedStyle(el).getPropertyValue(property); +} +const positions = ['top', 'right', 'bottom', 'left']; +function getPositionedStyle(styles, style, suffix) { + const result = {}; + suffix = suffix ? '-' + suffix : ''; + for (let i = 0; i < 4; i++) { + const pos = positions[i]; + result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0; + } + result.width = result.left + result.right; + result.height = result.top + result.bottom; + return result; +} +const useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot); +function getCanvasPosition(evt, canvas) { + const e = evt.native || evt; + const touches = e.touches; + const source = touches && touches.length ? touches[0] : e; + const {offsetX, offsetY} = source; + let box = false; + let x, y; + if (useOffsetPos(offsetX, offsetY, e.target)) { + x = offsetX; + y = offsetY; + } else { + const rect = canvas.getBoundingClientRect(); + x = source.clientX - rect.left; + y = source.clientY - rect.top; + box = true; + } + return {x, y, box}; +} +function getRelativePosition$1(evt, chart) { + const {canvas, currentDevicePixelRatio} = chart; + const style = getComputedStyle(canvas); + const borderBox = style.boxSizing === 'border-box'; + const paddings = getPositionedStyle(style, 'padding'); + const borders = getPositionedStyle(style, 'border', 'width'); + const {x, y, box} = getCanvasPosition(evt, canvas); + const xOffset = paddings.left + (box && borders.left); + const yOffset = paddings.top + (box && borders.top); + let {width, height} = chart; + if (borderBox) { + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + return { + x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio), + y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio) + }; +} +function getContainerSize(canvas, width, height) { + let maxWidth, maxHeight; + if (width === undefined || height === undefined) { + const container = _getParentNode(canvas); + if (!container) { + width = canvas.clientWidth; + height = canvas.clientHeight; + } else { + const rect = container.getBoundingClientRect(); + const containerStyle = getComputedStyle(container); + const containerBorder = getPositionedStyle(containerStyle, 'border', 'width'); + const containerPadding = getPositionedStyle(containerStyle, 'padding'); + width = rect.width - containerPadding.width - containerBorder.width; + height = rect.height - containerPadding.height - containerBorder.height; + maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth'); + maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight'); + } + } + return { + width, + height, + maxWidth: maxWidth || INFINITY, + maxHeight: maxHeight || INFINITY + }; +} +const round1 = v => Math.round(v * 10) / 10; +function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) { + const style = getComputedStyle(canvas); + const margins = getPositionedStyle(style, 'margin'); + const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY; + const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY; + const containerSize = getContainerSize(canvas, bbWidth, bbHeight); + let {width, height} = containerSize; + if (style.boxSizing === 'content-box') { + const borders = getPositionedStyle(style, 'border', 'width'); + const paddings = getPositionedStyle(style, 'padding'); + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + width = Math.max(0, width - margins.width); + height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height); + width = round1(Math.min(width, maxWidth, containerSize.maxWidth)); + height = round1(Math.min(height, maxHeight, containerSize.maxHeight)); + if (width && !height) { + height = round1(width / 2); + } + return { + width, + height + }; +} +function retinaScale(chart, forceRatio, forceStyle) { + const pixelRatio = forceRatio || 1; + const deviceHeight = Math.floor(chart.height * pixelRatio); + const deviceWidth = Math.floor(chart.width * pixelRatio); + chart.height = deviceHeight / pixelRatio; + chart.width = deviceWidth / pixelRatio; + const canvas = chart.canvas; + if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) { + canvas.style.height = `${chart.height}px`; + canvas.style.width = `${chart.width}px`; + } + if (chart.currentDevicePixelRatio !== pixelRatio + || canvas.height !== deviceHeight + || canvas.width !== deviceWidth) { + chart.currentDevicePixelRatio = pixelRatio; + canvas.height = deviceHeight; + canvas.width = deviceWidth; + chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); + return true; + } + return false; +} +const supportsEventListenerOptions = (function() { + let passiveSupported = false; + try { + const options = { + get passive() { + passiveSupported = true; + return false; + } + }; + window.addEventListener('test', null, options); + window.removeEventListener('test', null, options); + } catch (e) { + } + return passiveSupported; +}()); +function readUsedSize(element, property) { + const value = getStyle(element, property); + const matches = value && value.match(/^(\d+)(\.\d+)?px$/); + return matches ? +matches[1] : undefined; +} + +function getRelativePosition(e, chart) { + if ('native' in e) { + return { + x: e.x, + y: e.y + }; + } + return getRelativePosition$1(e, chart); +} +function evaluateAllVisibleItems(chart, handler) { + const metasets = chart.getSortedVisibleDatasetMetas(); + let index, data, element; + for (let i = 0, ilen = metasets.length; i < ilen; ++i) { + ({index, data} = metasets[i]); + for (let j = 0, jlen = data.length; j < jlen; ++j) { + element = data[j]; + if (!element.skip) { + handler(element, index, j); + } + } + } +} +function binarySearch(metaset, axis, value, intersect) { + const {controller, data, _sorted} = metaset; + const iScale = controller._cachedMeta.iScale; + if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) { + const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey; + if (!intersect) { + return lookupMethod(data, axis, value); + } else if (controller._sharedOptions) { + const el = data[0]; + const range = typeof el.getRange === 'function' && el.getRange(axis); + if (range) { + const start = lookupMethod(data, axis, value - range); + const end = lookupMethod(data, axis, value + range); + return {lo: start.lo, hi: end.hi}; + } + } + } + return {lo: 0, hi: data.length - 1}; +} +function optimizedEvaluateItems(chart, axis, position, handler, intersect) { + const metasets = chart.getSortedVisibleDatasetMetas(); + const value = position[axis]; + for (let i = 0, ilen = metasets.length; i < ilen; ++i) { + const {index, data} = metasets[i]; + const {lo, hi} = binarySearch(metasets[i], axis, value, intersect); + for (let j = lo; j <= hi; ++j) { + const element = data[j]; + if (!element.skip) { + handler(element, index, j); + } + } + } +} +function getDistanceMetricForAxis(axis) { + const useX = axis.indexOf('x') !== -1; + const useY = axis.indexOf('y') !== -1; + return function(pt1, pt2) { + const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; + const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; + return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); + }; +} +function getIntersectItems(chart, position, axis, useFinalPosition) { + const items = []; + if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) { + return items; + } + const evaluationFunc = function(element, datasetIndex, index) { + if (element.inRange(position.x, position.y, useFinalPosition)) { + items.push({element, datasetIndex, index}); + } + }; + optimizedEvaluateItems(chart, axis, position, evaluationFunc, true); + return items; +} +function getNearestRadialItems(chart, position, axis, useFinalPosition) { + let items = []; + function evaluationFunc(element, datasetIndex, index) { + const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition); + const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y}); + if (_angleBetween(angle, startAngle, endAngle)) { + items.push({element, datasetIndex, index}); + } + } + optimizedEvaluateItems(chart, axis, position, evaluationFunc); + return items; +} +function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) { + let items = []; + const distanceMetric = getDistanceMetricForAxis(axis); + let minDistance = Number.POSITIVE_INFINITY; + function evaluationFunc(element, datasetIndex, index) { + const inRange = element.inRange(position.x, position.y, useFinalPosition); + if (intersect && !inRange) { + return; + } + const center = element.getCenterPoint(useFinalPosition); + const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding); + if (!pointInArea && !inRange) { + return; + } + const distance = distanceMetric(position, center); + if (distance < minDistance) { + items = [{element, datasetIndex, index}]; + minDistance = distance; + } else if (distance === minDistance) { + items.push({element, datasetIndex, index}); + } + } + optimizedEvaluateItems(chart, axis, position, evaluationFunc); + return items; +} +function getNearestItems(chart, position, axis, intersect, useFinalPosition) { + if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) { + return []; + } + return axis === 'r' && !intersect + ? getNearestRadialItems(chart, position, axis, useFinalPosition) + : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition); +} +function getAxisItems(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const items = []; + const axis = options.axis; + const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange'; + let intersectsItem = false; + evaluateAllVisibleItems(chart, (element, datasetIndex, index) => { + if (element[rangeMethod](position[axis], useFinalPosition)) { + items.push({element, datasetIndex, index}); + } + if (element.inRange(position.x, position.y, useFinalPosition)) { + intersectsItem = true; + } + }); + if (options.intersect && !intersectsItem) { + return []; + } + return items; +} +var Interaction = { + modes: { + index(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'x'; + const items = options.intersect + ? getIntersectItems(chart, position, axis, useFinalPosition) + : getNearestItems(chart, position, axis, false, useFinalPosition); + const elements = []; + if (!items.length) { + return []; + } + chart.getSortedVisibleDatasetMetas().forEach((meta) => { + const index = items[0].index; + const element = meta.data[index]; + if (element && !element.skip) { + elements.push({element, datasetIndex: meta.index, index}); + } + }); + return elements; + }, + dataset(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + let items = options.intersect + ? getIntersectItems(chart, position, axis, useFinalPosition) : + getNearestItems(chart, position, axis, false, useFinalPosition); + if (items.length > 0) { + const datasetIndex = items[0].datasetIndex; + const data = chart.getDatasetMeta(datasetIndex).data; + items = []; + for (let i = 0; i < data.length; ++i) { + items.push({element: data[i], datasetIndex, index: i}); + } + } + return items; + }, + point(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + return getIntersectItems(chart, position, axis, useFinalPosition); + }, + nearest(chart, e, options, useFinalPosition) { + const position = getRelativePosition(e, chart); + const axis = options.axis || 'xy'; + return getNearestItems(chart, position, axis, options.intersect, useFinalPosition); + }, + x(chart, e, options, useFinalPosition) { + return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition); + }, + y(chart, e, options, useFinalPosition) { + return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition); + } + } +}; + +const LINE_HEIGHT = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/); +const FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/); +function toLineHeight(value, size) { + const matches = ('' + value).match(LINE_HEIGHT); + if (!matches || matches[1] === 'normal') { + return size * 1.2; + } + value = +matches[2]; + switch (matches[3]) { + case 'px': + return value; + case '%': + value /= 100; + break; + } + return size * value; +} +const numberOrZero = v => +v || 0; +function _readValueToProps(value, props) { + const ret = {}; + const objProps = isObject(props); + const keys = objProps ? Object.keys(props) : props; + const read = isObject(value) + ? objProps + ? prop => valueOrDefault(value[prop], value[props[prop]]) + : prop => value[prop] + : () => value; + for (const prop of keys) { + ret[prop] = numberOrZero(read(prop)); + } + return ret; +} +function toTRBL(value) { + return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'}); +} +function toTRBLCorners(value) { + return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']); +} +function toPadding(value) { + const obj = toTRBL(value); + obj.width = obj.left + obj.right; + obj.height = obj.top + obj.bottom; + return obj; +} +function toFont(options, fallback) { + options = options || {}; + fallback = fallback || defaults.font; + let size = valueOrDefault(options.size, fallback.size); + if (typeof size === 'string') { + size = parseInt(size, 10); + } + let style = valueOrDefault(options.style, fallback.style); + if (style && !('' + style).match(FONT_STYLE)) { + console.warn('Invalid font style specified: "' + style + '"'); + style = ''; + } + const font = { + family: valueOrDefault(options.family, fallback.family), + lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size), + size, + style, + weight: valueOrDefault(options.weight, fallback.weight), + string: '' + }; + font.string = toFontString(font); + return font; +} +function resolve(inputs, context, index, info) { + let cacheable = true; + let i, ilen, value; + for (i = 0, ilen = inputs.length; i < ilen; ++i) { + value = inputs[i]; + if (value === undefined) { + continue; + } + if (context !== undefined && typeof value === 'function') { + value = value(context); + cacheable = false; + } + if (index !== undefined && isArray(value)) { + value = value[index % value.length]; + cacheable = false; + } + if (value !== undefined) { + if (info && !cacheable) { + info.cacheable = false; + } + return value; + } + } +} +function _addGrace(minmax, grace, beginAtZero) { + const {min, max} = minmax; + const change = toDimension(grace, (max - min) / 2); + const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add; + return { + min: keepZero(min, -Math.abs(change)), + max: keepZero(max, change) + }; +} +function createContext(parentContext, context) { + return Object.assign(Object.create(parentContext), context); +} + +const STATIC_POSITIONS = ['left', 'top', 'right', 'bottom']; +function filterByPosition(array, position) { + return array.filter(v => v.pos === position); +} +function filterDynamicPositionByAxis(array, axis) { + return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis); +} +function sortByWeight(array, reverse) { + return array.sort((a, b) => { + const v0 = reverse ? b : a; + const v1 = reverse ? a : b; + return v0.weight === v1.weight ? + v0.index - v1.index : + v0.weight - v1.weight; + }); +} +function wrapBoxes(boxes) { + const layoutBoxes = []; + let i, ilen, box, pos, stack, stackWeight; + for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { + box = boxes[i]; + ({position: pos, options: {stack, stackWeight = 1}} = box); + layoutBoxes.push({ + index: i, + box, + pos, + horizontal: box.isHorizontal(), + weight: box.weight, + stack: stack && (pos + stack), + stackWeight + }); + } + return layoutBoxes; +} +function buildStacks(layouts) { + const stacks = {}; + for (const wrap of layouts) { + const {stack, pos, stackWeight} = wrap; + if (!stack || !STATIC_POSITIONS.includes(pos)) { + continue; + } + const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0}); + _stack.count++; + _stack.weight += stackWeight; + } + return stacks; +} +function setLayoutDims(layouts, params) { + const stacks = buildStacks(layouts); + const {vBoxMaxWidth, hBoxMaxHeight} = params; + let i, ilen, layout; + for (i = 0, ilen = layouts.length; i < ilen; ++i) { + layout = layouts[i]; + const {fullSize} = layout.box; + const stack = stacks[layout.stack]; + const factor = stack && layout.stackWeight / stack.weight; + if (layout.horizontal) { + layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth; + layout.height = hBoxMaxHeight; + } else { + layout.width = vBoxMaxWidth; + layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight; + } + } + return stacks; +} +function buildLayoutBoxes(boxes) { + const layoutBoxes = wrapBoxes(boxes); + const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true); + const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true); + const right = sortByWeight(filterByPosition(layoutBoxes, 'right')); + const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true); + const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom')); + const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x'); + const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y'); + return { + fullSize, + leftAndTop: left.concat(top), + rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal), + chartArea: filterByPosition(layoutBoxes, 'chartArea'), + vertical: left.concat(right).concat(centerVertical), + horizontal: top.concat(bottom).concat(centerHorizontal) + }; +} +function getCombinedMax(maxPadding, chartArea, a, b) { + return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); +} +function updateMaxPadding(maxPadding, boxPadding) { + maxPadding.top = Math.max(maxPadding.top, boxPadding.top); + maxPadding.left = Math.max(maxPadding.left, boxPadding.left); + maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); + maxPadding.right = Math.max(maxPadding.right, boxPadding.right); +} +function updateDims(chartArea, params, layout, stacks) { + const {pos, box} = layout; + const maxPadding = chartArea.maxPadding; + if (!isObject(pos)) { + if (layout.size) { + chartArea[pos] -= layout.size; + } + const stack = stacks[layout.stack] || {size: 0, count: 1}; + stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width); + layout.size = stack.size / stack.count; + chartArea[pos] += layout.size; + } + if (box.getPadding) { + updateMaxPadding(maxPadding, box.getPadding()); + } + const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right')); + const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom')); + const widthChanged = newWidth !== chartArea.w; + const heightChanged = newHeight !== chartArea.h; + chartArea.w = newWidth; + chartArea.h = newHeight; + return layout.horizontal + ? {same: widthChanged, other: heightChanged} + : {same: heightChanged, other: widthChanged}; +} +function handleMaxPadding(chartArea) { + const maxPadding = chartArea.maxPadding; + function updatePos(pos) { + const change = Math.max(maxPadding[pos] - chartArea[pos], 0); + chartArea[pos] += change; + return change; + } + chartArea.y += updatePos('top'); + chartArea.x += updatePos('left'); + updatePos('right'); + updatePos('bottom'); +} +function getMargins(horizontal, chartArea) { + const maxPadding = chartArea.maxPadding; + function marginForPositions(positions) { + const margin = {left: 0, top: 0, right: 0, bottom: 0}; + positions.forEach((pos) => { + margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); + }); + return margin; + } + return horizontal + ? marginForPositions(['left', 'right']) + : marginForPositions(['top', 'bottom']); +} +function fitBoxes(boxes, chartArea, params, stacks) { + const refitBoxes = []; + let i, ilen, layout, box, refit, changed; + for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { + layout = boxes[i]; + box = layout.box; + box.update( + layout.width || chartArea.w, + layout.height || chartArea.h, + getMargins(layout.horizontal, chartArea) + ); + const {same, other} = updateDims(chartArea, params, layout, stacks); + refit |= same && refitBoxes.length; + changed = changed || other; + if (!box.fullSize) { + refitBoxes.push(layout); + } + } + return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed; +} +function setBoxDims(box, left, top, width, height) { + box.top = top; + box.left = left; + box.right = left + width; + box.bottom = top + height; + box.width = width; + box.height = height; +} +function placeBoxes(boxes, chartArea, params, stacks) { + const userPadding = params.padding; + let {x, y} = chartArea; + for (const layout of boxes) { + const box = layout.box; + const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1}; + const weight = (layout.stackWeight / stack.weight) || 1; + if (layout.horizontal) { + const width = chartArea.w * weight; + const height = stack.size || box.height; + if (defined(stack.start)) { + y = stack.start; + } + if (box.fullSize) { + setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height); + } else { + setBoxDims(box, chartArea.left + stack.placed, y, width, height); + } + stack.start = y; + stack.placed += width; + y = box.bottom; + } else { + const height = chartArea.h * weight; + const width = stack.size || box.width; + if (defined(stack.start)) { + x = stack.start; + } + if (box.fullSize) { + setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top); + } else { + setBoxDims(box, x, chartArea.top + stack.placed, width, height); + } + stack.start = x; + stack.placed += height; + x = box.right; + } + } + chartArea.x = x; + chartArea.y = y; +} +defaults.set('layout', { + autoPadding: true, + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0 + } +}); +var layouts = { + addBox(chart, item) { + if (!chart.boxes) { + chart.boxes = []; + } + item.fullSize = item.fullSize || false; + item.position = item.position || 'top'; + item.weight = item.weight || 0; + item._layers = item._layers || function() { + return [{ + z: 0, + draw(chartArea) { + item.draw(chartArea); + } + }]; + }; + chart.boxes.push(item); + }, + removeBox(chart, layoutItem) { + const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; + if (index !== -1) { + chart.boxes.splice(index, 1); + } + }, + configure(chart, item, options) { + item.fullSize = options.fullSize; + item.position = options.position; + item.weight = options.weight; + }, + update(chart, width, height, minPadding) { + if (!chart) { + return; + } + const padding = toPadding(chart.options.layout.padding); + const availableWidth = Math.max(width - padding.width, 0); + const availableHeight = Math.max(height - padding.height, 0); + const boxes = buildLayoutBoxes(chart.boxes); + const verticalBoxes = boxes.vertical; + const horizontalBoxes = boxes.horizontal; + each(chart.boxes, box => { + if (typeof box.beforeLayout === 'function') { + box.beforeLayout(); + } + }); + const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => + wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1; + const params = Object.freeze({ + outerWidth: width, + outerHeight: height, + padding, + availableWidth, + availableHeight, + vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount, + hBoxMaxHeight: availableHeight / 2 + }); + const maxPadding = Object.assign({}, padding); + updateMaxPadding(maxPadding, toPadding(minPadding)); + const chartArea = Object.assign({ + maxPadding, + w: availableWidth, + h: availableHeight, + x: padding.left, + y: padding.top + }, padding); + const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); + fitBoxes(boxes.fullSize, chartArea, params, stacks); + fitBoxes(verticalBoxes, chartArea, params, stacks); + if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) { + fitBoxes(verticalBoxes, chartArea, params, stacks); + } + handleMaxPadding(chartArea); + placeBoxes(boxes.leftAndTop, chartArea, params, stacks); + chartArea.x += chartArea.w; + chartArea.y += chartArea.h; + placeBoxes(boxes.rightAndBottom, chartArea, params, stacks); + chart.chartArea = { + left: chartArea.left, + top: chartArea.top, + right: chartArea.left + chartArea.w, + bottom: chartArea.top + chartArea.h, + height: chartArea.h, + width: chartArea.w, + }; + each(boxes.chartArea, (layout) => { + const box = layout.box; + Object.assign(box, chart.chartArea); + box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0}); + }); + } +}; + +function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) { + if (!defined(fallback)) { + fallback = _resolve('_fallback', scopes); + } + const cache = { + [Symbol.toStringTag]: 'Object', + _cacheable: true, + _scopes: scopes, + _rootScopes: rootScopes, + _fallback: fallback, + _getTarget: getTarget, + override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback), + }; + return new Proxy(cache, { + deleteProperty(target, prop) { + delete target[prop]; + delete target._keys; + delete scopes[0][prop]; + return true; + }, + get(target, prop) { + return _cached(target, prop, + () => _resolveWithPrefixes(prop, prefixes, scopes, target)); + }, + getOwnPropertyDescriptor(target, prop) { + return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop); + }, + getPrototypeOf() { + return Reflect.getPrototypeOf(scopes[0]); + }, + has(target, prop) { + return getKeysFromAllScopes(target).includes(prop); + }, + ownKeys(target) { + return getKeysFromAllScopes(target); + }, + set(target, prop, value) { + const storage = target._storage || (target._storage = getTarget()); + target[prop] = storage[prop] = value; + delete target._keys; + return true; + } + }); +} +function _attachContext(proxy, context, subProxy, descriptorDefaults) { + const cache = { + _cacheable: false, + _proxy: proxy, + _context: context, + _subProxy: subProxy, + _stack: new Set(), + _descriptors: _descriptors(proxy, descriptorDefaults), + setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults), + override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults) + }; + return new Proxy(cache, { + deleteProperty(target, prop) { + delete target[prop]; + delete proxy[prop]; + return true; + }, + get(target, prop, receiver) { + return _cached(target, prop, + () => _resolveWithContext(target, prop, receiver)); + }, + getOwnPropertyDescriptor(target, prop) { + return target._descriptors.allKeys + ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined + : Reflect.getOwnPropertyDescriptor(proxy, prop); + }, + getPrototypeOf() { + return Reflect.getPrototypeOf(proxy); + }, + has(target, prop) { + return Reflect.has(proxy, prop); + }, + ownKeys() { + return Reflect.ownKeys(proxy); + }, + set(target, prop, value) { + proxy[prop] = value; + delete target[prop]; + return true; + } + }); +} +function _descriptors(proxy, defaults = {scriptable: true, indexable: true}) { + const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy; + return { + allKeys: _allKeys, + scriptable: _scriptable, + indexable: _indexable, + isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable, + isIndexable: isFunction(_indexable) ? _indexable : () => _indexable + }; +} +const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; +const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' && + (Object.getPrototypeOf(value) === null || value.constructor === Object); +function _cached(target, prop, resolve) { + if (Object.prototype.hasOwnProperty.call(target, prop)) { + return target[prop]; + } + const value = resolve(); + target[prop] = value; + return value; +} +function _resolveWithContext(target, prop, receiver) { + const {_proxy, _context, _subProxy, _descriptors: descriptors} = target; + let value = _proxy[prop]; + if (isFunction(value) && descriptors.isScriptable(prop)) { + value = _resolveScriptable(prop, value, target, receiver); + } + if (isArray(value) && value.length) { + value = _resolveArray(prop, value, target, descriptors.isIndexable); + } + if (needsSubResolver(prop, value)) { + value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors); + } + return value; +} +function _resolveScriptable(prop, value, target, receiver) { + const {_proxy, _context, _subProxy, _stack} = target; + if (_stack.has(prop)) { + throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop); + } + _stack.add(prop); + value = value(_context, _subProxy || receiver); + _stack.delete(prop); + if (needsSubResolver(prop, value)) { + value = createSubResolver(_proxy._scopes, _proxy, prop, value); + } + return value; +} +function _resolveArray(prop, value, target, isIndexable) { + const {_proxy, _context, _subProxy, _descriptors: descriptors} = target; + if (defined(_context.index) && isIndexable(prop)) { + value = value[_context.index % value.length]; + } else if (isObject(value[0])) { + const arr = value; + const scopes = _proxy._scopes.filter(s => s !== arr); + value = []; + for (const item of arr) { + const resolver = createSubResolver(scopes, _proxy, prop, item); + value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors)); + } + } + return value; +} +function resolveFallback(fallback, prop, value) { + return isFunction(fallback) ? fallback(prop, value) : fallback; +} +const getScope = (key, parent) => key === true ? parent + : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined; +function addScopes(set, parentScopes, key, parentFallback, value) { + for (const parent of parentScopes) { + const scope = getScope(key, parent); + if (scope) { + set.add(scope); + const fallback = resolveFallback(scope._fallback, key, value); + if (defined(fallback) && fallback !== key && fallback !== parentFallback) { + return fallback; + } + } else if (scope === false && defined(parentFallback) && key !== parentFallback) { + return null; + } + } + return false; +} +function createSubResolver(parentScopes, resolver, prop, value) { + const rootScopes = resolver._rootScopes; + const fallback = resolveFallback(resolver._fallback, prop, value); + const allScopes = [...parentScopes, ...rootScopes]; + const set = new Set(); + set.add(value); + let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value); + if (key === null) { + return false; + } + if (defined(fallback) && fallback !== prop) { + key = addScopesFromKey(set, allScopes, fallback, key, value); + if (key === null) { + return false; + } + } + return _createResolver(Array.from(set), [''], rootScopes, fallback, + () => subGetTarget(resolver, prop, value)); +} +function addScopesFromKey(set, allScopes, key, fallback, item) { + while (key) { + key = addScopes(set, allScopes, key, fallback, item); + } + return key; +} +function subGetTarget(resolver, prop, value) { + const parent = resolver._getTarget(); + if (!(prop in parent)) { + parent[prop] = {}; + } + const target = parent[prop]; + if (isArray(target) && isObject(value)) { + return value; + } + return target; +} +function _resolveWithPrefixes(prop, prefixes, scopes, proxy) { + let value; + for (const prefix of prefixes) { + value = _resolve(readKey(prefix, prop), scopes); + if (defined(value)) { + return needsSubResolver(prop, value) + ? createSubResolver(scopes, proxy, prop, value) + : value; + } + } +} +function _resolve(key, scopes) { + for (const scope of scopes) { + if (!scope) { + continue; + } + const value = scope[key]; + if (defined(value)) { + return value; + } + } +} +function getKeysFromAllScopes(target) { + let keys = target._keys; + if (!keys) { + keys = target._keys = resolveKeysFromAllScopes(target._scopes); + } + return keys; +} +function resolveKeysFromAllScopes(scopes) { + const set = new Set(); + for (const scope of scopes) { + for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) { + set.add(key); + } + } + return Array.from(set); +} + +const EPSILON = Number.EPSILON || 1e-14; +const getPoint = (points, i) => i < points.length && !points[i].skip && points[i]; +const getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x'; +function splineCurve(firstPoint, middlePoint, afterPoint, t) { + const previous = firstPoint.skip ? middlePoint : firstPoint; + const current = middlePoint; + const next = afterPoint.skip ? middlePoint : afterPoint; + const d01 = distanceBetweenPoints(current, previous); + const d12 = distanceBetweenPoints(next, current); + let s01 = d01 / (d01 + d12); + let s12 = d12 / (d01 + d12); + s01 = isNaN(s01) ? 0 : s01; + s12 = isNaN(s12) ? 0 : s12; + const fa = t * s01; + const fb = t * s12; + return { + previous: { + x: current.x - fa * (next.x - previous.x), + y: current.y - fa * (next.y - previous.y) + }, + next: { + x: current.x + fb * (next.x - previous.x), + y: current.y + fb * (next.y - previous.y) + } + }; +} +function monotoneAdjust(points, deltaK, mK) { + const pointsLen = points.length; + let alphaK, betaK, tauK, squaredMagnitude, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen - 1; ++i) { + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent || !pointAfter) { + continue; + } + if (almostEquals(deltaK[i], 0, EPSILON)) { + mK[i] = mK[i + 1] = 0; + continue; + } + alphaK = mK[i] / deltaK[i]; + betaK = mK[i + 1] / deltaK[i]; + squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2); + if (squaredMagnitude <= 9) { + continue; + } + tauK = 3 / Math.sqrt(squaredMagnitude); + mK[i] = alphaK * tauK * deltaK[i]; + mK[i + 1] = betaK * tauK * deltaK[i]; + } +} +function monotoneCompute(points, mK, indexAxis = 'x') { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + let delta, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + const iPixel = pointCurrent[indexAxis]; + const vPixel = pointCurrent[valueAxis]; + if (pointBefore) { + delta = (iPixel - pointBefore[indexAxis]) / 3; + pointCurrent[`cp1${indexAxis}`] = iPixel - delta; + pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i]; + } + if (pointAfter) { + delta = (pointAfter[indexAxis] - iPixel) / 3; + pointCurrent[`cp2${indexAxis}`] = iPixel + delta; + pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i]; + } + } +} +function splineCurveMonotone(points, indexAxis = 'x') { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + const deltaK = Array(pointsLen).fill(0); + const mK = Array(pointsLen); + let i, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + if (pointAfter) { + const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis]; + deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0; + } + mK[i] = !pointBefore ? deltaK[i] + : !pointAfter ? deltaK[i - 1] + : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0 + : (deltaK[i - 1] + deltaK[i]) / 2; + } + monotoneAdjust(points, deltaK, mK); + monotoneCompute(points, mK, indexAxis); +} +function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); +} +function capBezierPoints(points, area) { + let i, ilen, point, inArea, inAreaPrev; + let inAreaNext = _isPointInArea(points[0], area); + for (i = 0, ilen = points.length; i < ilen; ++i) { + inAreaPrev = inArea; + inArea = inAreaNext; + inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area); + if (!inArea) { + continue; + } + point = points[i]; + if (inAreaPrev) { + point.cp1x = capControlPoint(point.cp1x, area.left, area.right); + point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom); + } + if (inAreaNext) { + point.cp2x = capControlPoint(point.cp2x, area.left, area.right); + point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom); + } + } +} +function _updateBezierControlPoints(points, options, area, loop, indexAxis) { + let i, ilen, point, controlPoints; + if (options.spanGaps) { + points = points.filter((pt) => !pt.skip); + } + if (options.cubicInterpolationMode === 'monotone') { + splineCurveMonotone(points, indexAxis); + } else { + let prev = loop ? points[points.length - 1] : points[0]; + for (i = 0, ilen = points.length; i < ilen; ++i) { + point = points[i]; + controlPoints = splineCurve( + prev, + point, + points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], + options.tension + ); + point.cp1x = controlPoints.previous.x; + point.cp1y = controlPoints.previous.y; + point.cp2x = controlPoints.next.x; + point.cp2y = controlPoints.next.y; + prev = point; + } + } + if (options.capBezierPoints) { + capBezierPoints(points, area); + } +} + +const atEdge = (t) => t === 0 || t === 1; +const elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p)); +const elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1; +const effects = { + linear: t => t, + easeInQuad: t => t * t, + easeOutQuad: t => -t * (t - 2), + easeInOutQuad: t => ((t /= 0.5) < 1) + ? 0.5 * t * t + : -0.5 * ((--t) * (t - 2) - 1), + easeInCubic: t => t * t * t, + easeOutCubic: t => (t -= 1) * t * t + 1, + easeInOutCubic: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t + : 0.5 * ((t -= 2) * t * t + 2), + easeInQuart: t => t * t * t * t, + easeOutQuart: t => -((t -= 1) * t * t * t - 1), + easeInOutQuart: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t * t + : -0.5 * ((t -= 2) * t * t * t - 2), + easeInQuint: t => t * t * t * t * t, + easeOutQuint: t => (t -= 1) * t * t * t * t + 1, + easeInOutQuint: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t * t * t + : 0.5 * ((t -= 2) * t * t * t * t + 2), + easeInSine: t => -Math.cos(t * HALF_PI) + 1, + easeOutSine: t => Math.sin(t * HALF_PI), + easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1), + easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)), + easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1, + easeInOutExpo: t => atEdge(t) ? t : t < 0.5 + ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) + : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2), + easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1), + easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t), + easeInOutCirc: t => ((t /= 0.5) < 1) + ? -0.5 * (Math.sqrt(1 - t * t) - 1) + : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1), + easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3), + easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3), + easeInOutElastic(t) { + const s = 0.1125; + const p = 0.45; + return atEdge(t) ? t : + t < 0.5 + ? 0.5 * elasticIn(t * 2, s, p) + : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p); + }, + easeInBack(t) { + const s = 1.70158; + return t * t * ((s + 1) * t - s); + }, + easeOutBack(t) { + const s = 1.70158; + return (t -= 1) * t * ((s + 1) * t + s) + 1; + }, + easeInOutBack(t) { + let s = 1.70158; + if ((t /= 0.5) < 1) { + return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s)); + } + return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2); + }, + easeInBounce: t => 1 - effects.easeOutBounce(1 - t), + easeOutBounce(t) { + const m = 7.5625; + const d = 2.75; + if (t < (1 / d)) { + return m * t * t; + } + if (t < (2 / d)) { + return m * (t -= (1.5 / d)) * t + 0.75; + } + if (t < (2.5 / d)) { + return m * (t -= (2.25 / d)) * t + 0.9375; + } + return m * (t -= (2.625 / d)) * t + 0.984375; + }, + easeInOutBounce: t => (t < 0.5) + ? effects.easeInBounce(t * 2) * 0.5 + : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5, +}; + +function _pointInLine(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: p1.y + t * (p2.y - p1.y) + }; +} +function _steppedInterpolation(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y + : mode === 'after' ? t < 1 ? p1.y : p2.y + : t > 0 ? p2.y : p1.y + }; +} +function _bezierInterpolation(p1, p2, t, mode) { + const cp1 = {x: p1.cp2x, y: p1.cp2y}; + const cp2 = {x: p2.cp1x, y: p2.cp1y}; + const a = _pointInLine(p1, cp1, t); + const b = _pointInLine(cp1, cp2, t); + const c = _pointInLine(cp2, p2, t); + const d = _pointInLine(a, b, t); + const e = _pointInLine(b, c, t); + return _pointInLine(d, e, t); +} + +const intlCache = new Map(); +function getNumberFormat(locale, options) { + options = options || {}; + const cacheKey = locale + JSON.stringify(options); + let formatter = intlCache.get(cacheKey); + if (!formatter) { + formatter = new Intl.NumberFormat(locale, options); + intlCache.set(cacheKey, formatter); + } + return formatter; +} +function formatNumber(num, locale, options) { + return getNumberFormat(locale, options).format(num); +} + +const getRightToLeftAdapter = function(rectX, width) { + return { + x(x) { + return rectX + rectX + width - x; + }, + setWidth(w) { + width = w; + }, + textAlign(align) { + if (align === 'center') { + return align; + } + return align === 'right' ? 'left' : 'right'; + }, + xPlus(x, value) { + return x - value; + }, + leftForLtr(x, itemWidth) { + return x - itemWidth; + }, + }; +}; +const getLeftToRightAdapter = function() { + return { + x(x) { + return x; + }, + setWidth(w) { + }, + textAlign(align) { + return align; + }, + xPlus(x, value) { + return x + value; + }, + leftForLtr(x, _itemWidth) { + return x; + }, + }; +}; +function getRtlAdapter(rtl, rectX, width) { + return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter(); +} +function overrideTextDirection(ctx, direction) { + let style, original; + if (direction === 'ltr' || direction === 'rtl') { + style = ctx.canvas.style; + original = [ + style.getPropertyValue('direction'), + style.getPropertyPriority('direction'), + ]; + style.setProperty('direction', direction, 'important'); + ctx.prevTextDirection = original; + } +} +function restoreTextDirection(ctx, original) { + if (original !== undefined) { + delete ctx.prevTextDirection; + ctx.canvas.style.setProperty('direction', original[0], original[1]); + } +} + +function propertyFn(property) { + if (property === 'angle') { + return { + between: _angleBetween, + compare: _angleDiff, + normalize: _normalizeAngle, + }; + } + return { + between: _isBetween, + compare: (a, b) => a - b, + normalize: x => x + }; +} +function normalizeSegment({start, end, count, loop, style}) { + return { + start: start % count, + end: end % count, + loop: loop && (end - start + 1) % count === 0, + style + }; +} +function getSegment(segment, points, bounds) { + const {property, start: startBound, end: endBound} = bounds; + const {between, normalize} = propertyFn(property); + const count = points.length; + let {start, end, loop} = segment; + let i, ilen; + if (loop) { + start += count; + end += count; + for (i = 0, ilen = count; i < ilen; ++i) { + if (!between(normalize(points[start % count][property]), startBound, endBound)) { + break; + } + start--; + end--; + } + start %= count; + end %= count; + } + if (end < start) { + end += count; + } + return {start, end, loop, style: segment.style}; +} +function _boundSegment(segment, points, bounds) { + if (!bounds) { + return [segment]; + } + const {property, start: startBound, end: endBound} = bounds; + const count = points.length; + const {compare, between, normalize} = propertyFn(property); + const {start, end, loop, style} = getSegment(segment, points, bounds); + const result = []; + let inside = false; + let subStart = null; + let value, point, prevValue; + const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0; + const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value); + const shouldStart = () => inside || startIsBefore(); + const shouldStop = () => !inside || endIsBefore(); + for (let i = start, prev = start; i <= end; ++i) { + point = points[i % count]; + if (point.skip) { + continue; + } + value = normalize(point[property]); + if (value === prevValue) { + continue; + } + inside = between(value, startBound, endBound); + if (subStart === null && shouldStart()) { + subStart = compare(value, startBound) === 0 ? i : prev; + } + if (subStart !== null && shouldStop()) { + result.push(normalizeSegment({start: subStart, end: i, loop, count, style})); + subStart = null; + } + prev = i; + prevValue = value; + } + if (subStart !== null) { + result.push(normalizeSegment({start: subStart, end, loop, count, style})); + } + return result; +} +function _boundSegments(line, bounds) { + const result = []; + const segments = line.segments; + for (let i = 0; i < segments.length; i++) { + const sub = _boundSegment(segments[i], line.points, bounds); + if (sub.length) { + result.push(...sub); + } + } + return result; +} +function findStartAndEnd(points, count, loop, spanGaps) { + let start = 0; + let end = count - 1; + if (loop && !spanGaps) { + while (start < count && !points[start].skip) { + start++; + } + } + while (start < count && points[start].skip) { + start++; + } + start %= count; + if (loop) { + end += start; + } + while (end > start && points[end % count].skip) { + end--; + } + end %= count; + return {start, end}; +} +function solidSegments(points, start, max, loop) { + const count = points.length; + const result = []; + let last = start; + let prev = points[start]; + let end; + for (end = start + 1; end <= max; ++end) { + const cur = points[end % count]; + if (cur.skip || cur.stop) { + if (!prev.skip) { + loop = false; + result.push({start: start % count, end: (end - 1) % count, loop}); + start = last = cur.stop ? end : null; + } + } else { + last = end; + if (prev.skip) { + start = end; + } + } + prev = cur; + } + if (last !== null) { + result.push({start: start % count, end: last % count, loop}); + } + return result; +} +function _computeSegments(line, segmentOptions) { + const points = line.points; + const spanGaps = line.options.spanGaps; + const count = points.length; + if (!count) { + return []; + } + const loop = !!line._loop; + const {start, end} = findStartAndEnd(points, count, loop, spanGaps); + if (spanGaps === true) { + return splitByStyles(line, [{start, end, loop}], points, segmentOptions); + } + const max = end < start ? end + count : end; + const completeLoop = !!line._fullLoop && start === 0 && end === count - 1; + return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions); +} +function splitByStyles(line, segments, points, segmentOptions) { + if (!segmentOptions || !segmentOptions.setContext || !points) { + return segments; + } + return doSplitByStyles(line, segments, points, segmentOptions); +} +function doSplitByStyles(line, segments, points, segmentOptions) { + const chartContext = line._chart.getContext(); + const baseStyle = readStyle(line.options); + const {_datasetIndex: datasetIndex, options: {spanGaps}} = line; + const count = points.length; + const result = []; + let prevStyle = baseStyle; + let start = segments[0].start; + let i = start; + function addStyle(s, e, l, st) { + const dir = spanGaps ? -1 : 1; + if (s === e) { + return; + } + s += count; + while (points[s % count].skip) { + s -= dir; + } + while (points[e % count].skip) { + e += dir; + } + if (s % count !== e % count) { + result.push({start: s % count, end: e % count, loop: l, style: st}); + prevStyle = st; + start = e % count; + } + } + for (const segment of segments) { + start = spanGaps ? start : segment.start; + let prev = points[start % count]; + let style; + for (i = start + 1; i <= segment.end; i++) { + const pt = points[i % count]; + style = readStyle(segmentOptions.setContext(createContext(chartContext, { + type: 'segment', + p0: prev, + p1: pt, + p0DataIndex: (i - 1) % count, + p1DataIndex: i % count, + datasetIndex + }))); + if (styleChanged(style, prevStyle)) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + prev = pt; + prevStyle = style; + } + if (start < i - 1) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + } + return result; +} +function readStyle(options) { + return { + backgroundColor: options.backgroundColor, + borderCapStyle: options.borderCapStyle, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderJoinStyle: options.borderJoinStyle, + borderWidth: options.borderWidth, + borderColor: options.borderColor + }; +} +function styleChanged(style, prevStyle) { + return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle); +} + +var helpers = /*#__PURE__*/Object.freeze({ +__proto__: null, +easingEffects: effects, +color: color, +getHoverColor: getHoverColor, +noop: noop, +uid: uid, +isNullOrUndef: isNullOrUndef, +isArray: isArray, +isObject: isObject, +isFinite: isNumberFinite, +finiteOrDefault: finiteOrDefault, +valueOrDefault: valueOrDefault, +toPercentage: toPercentage, +toDimension: toDimension, +callback: callback, +each: each, +_elementsEqual: _elementsEqual, +clone: clone, +_merger: _merger, +merge: merge, +mergeIf: mergeIf, +_mergerIf: _mergerIf, +_deprecated: _deprecated, +resolveObjectKey: resolveObjectKey, +_capitalize: _capitalize, +defined: defined, +isFunction: isFunction, +setsEqual: setsEqual, +_isClickEvent: _isClickEvent, +toFontString: toFontString, +_measureText: _measureText, +_longestText: _longestText, +_alignPixel: _alignPixel, +clearCanvas: clearCanvas, +drawPoint: drawPoint, +_isPointInArea: _isPointInArea, +clipArea: clipArea, +unclipArea: unclipArea, +_steppedLineTo: _steppedLineTo, +_bezierCurveTo: _bezierCurveTo, +renderText: renderText, +addRoundedRectPath: addRoundedRectPath, +_lookup: _lookup, +_lookupByKey: _lookupByKey, +_rlookupByKey: _rlookupByKey, +_filterBetween: _filterBetween, +listenArrayEvents: listenArrayEvents, +unlistenArrayEvents: unlistenArrayEvents, +_arrayUnique: _arrayUnique, +_createResolver: _createResolver, +_attachContext: _attachContext, +_descriptors: _descriptors, +splineCurve: splineCurve, +splineCurveMonotone: splineCurveMonotone, +_updateBezierControlPoints: _updateBezierControlPoints, +_isDomSupported: _isDomSupported, +_getParentNode: _getParentNode, +getStyle: getStyle, +getRelativePosition: getRelativePosition$1, +getMaximumSize: getMaximumSize, +retinaScale: retinaScale, +supportsEventListenerOptions: supportsEventListenerOptions, +readUsedSize: readUsedSize, +fontString: fontString, +requestAnimFrame: requestAnimFrame, +throttled: throttled, +debounce: debounce, +_toLeftRightCenter: _toLeftRightCenter, +_alignStartEnd: _alignStartEnd, +_textX: _textX, +_pointInLine: _pointInLine, +_steppedInterpolation: _steppedInterpolation, +_bezierInterpolation: _bezierInterpolation, +formatNumber: formatNumber, +toLineHeight: toLineHeight, +_readValueToProps: _readValueToProps, +toTRBL: toTRBL, +toTRBLCorners: toTRBLCorners, +toPadding: toPadding, +toFont: toFont, +resolve: resolve, +_addGrace: _addGrace, +createContext: createContext, +PI: PI, +TAU: TAU, +PITAU: PITAU, +INFINITY: INFINITY, +RAD_PER_DEG: RAD_PER_DEG, +HALF_PI: HALF_PI, +QUARTER_PI: QUARTER_PI, +TWO_THIRDS_PI: TWO_THIRDS_PI, +log10: log10, +sign: sign, +niceNum: niceNum, +_factorize: _factorize, +isNumber: isNumber, +almostEquals: almostEquals, +almostWhole: almostWhole, +_setMinAndMaxByKey: _setMinAndMaxByKey, +toRadians: toRadians, +toDegrees: toDegrees, +_decimalPlaces: _decimalPlaces, +getAngleFromPoint: getAngleFromPoint, +distanceBetweenPoints: distanceBetweenPoints, +_angleDiff: _angleDiff, +_normalizeAngle: _normalizeAngle, +_angleBetween: _angleBetween, +_limitValue: _limitValue, +_int16Range: _int16Range, +_isBetween: _isBetween, +getRtlAdapter: getRtlAdapter, +overrideTextDirection: overrideTextDirection, +restoreTextDirection: restoreTextDirection, +_boundSegment: _boundSegment, +_boundSegments: _boundSegments, +_computeSegments: _computeSegments +}); + +class BasePlatform { + acquireContext(canvas, aspectRatio) {} + releaseContext(context) { + return false; + } + addEventListener(chart, type, listener) {} + removeEventListener(chart, type, listener) {} + getDevicePixelRatio() { + return 1; + } + getMaximumSize(element, width, height, aspectRatio) { + width = Math.max(0, width || element.width); + height = height || element.height; + return { + width, + height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height) + }; + } + isAttached(canvas) { + return true; + } + updateConfig(config) { + } +} + +class BasicPlatform extends BasePlatform { + acquireContext(item) { + return item && item.getContext && item.getContext('2d') || null; + } + updateConfig(config) { + config.options.animation = false; + } +} + +const EXPANDO_KEY = '$chartjs'; +const EVENT_TYPES = { + touchstart: 'mousedown', + touchmove: 'mousemove', + touchend: 'mouseup', + pointerenter: 'mouseenter', + pointerdown: 'mousedown', + pointermove: 'mousemove', + pointerup: 'mouseup', + pointerleave: 'mouseout', + pointerout: 'mouseout' +}; +const isNullOrEmpty = value => value === null || value === ''; +function initCanvas(canvas, aspectRatio) { + const style = canvas.style; + const renderHeight = canvas.getAttribute('height'); + const renderWidth = canvas.getAttribute('width'); + canvas[EXPANDO_KEY] = { + initial: { + height: renderHeight, + width: renderWidth, + style: { + display: style.display, + height: style.height, + width: style.width + } + } + }; + style.display = style.display || 'block'; + style.boxSizing = style.boxSizing || 'border-box'; + if (isNullOrEmpty(renderWidth)) { + const displayWidth = readUsedSize(canvas, 'width'); + if (displayWidth !== undefined) { + canvas.width = displayWidth; + } + } + if (isNullOrEmpty(renderHeight)) { + if (canvas.style.height === '') { + canvas.height = canvas.width / (aspectRatio || 2); + } else { + const displayHeight = readUsedSize(canvas, 'height'); + if (displayHeight !== undefined) { + canvas.height = displayHeight; + } + } + } + return canvas; +} +const eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false; +function addListener(node, type, listener) { + node.addEventListener(type, listener, eventListenerOptions); +} +function removeListener(chart, type, listener) { + chart.canvas.removeEventListener(type, listener, eventListenerOptions); +} +function fromNativeEvent(event, chart) { + const type = EVENT_TYPES[event.type] || event.type; + const {x, y} = getRelativePosition$1(event, chart); + return { + type, + chart, + native: event, + x: x !== undefined ? x : null, + y: y !== undefined ? y : null, + }; +} +function nodeListContains(nodeList, canvas) { + for (const node of nodeList) { + if (node === canvas || node.contains(canvas)) { + return true; + } + } +} +function createAttachObserver(chart, type, listener) { + const canvas = chart.canvas; + const observer = new MutationObserver(entries => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.addedNodes, canvas); + trigger = trigger && !nodeListContains(entry.removedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, {childList: true, subtree: true}); + return observer; +} +function createDetachObserver(chart, type, listener) { + const canvas = chart.canvas; + const observer = new MutationObserver(entries => { + let trigger = false; + for (const entry of entries) { + trigger = trigger || nodeListContains(entry.removedNodes, canvas); + trigger = trigger && !nodeListContains(entry.addedNodes, canvas); + } + if (trigger) { + listener(); + } + }); + observer.observe(document, {childList: true, subtree: true}); + return observer; +} +const drpListeningCharts = new Map(); +let oldDevicePixelRatio = 0; +function onWindowResize() { + const dpr = window.devicePixelRatio; + if (dpr === oldDevicePixelRatio) { + return; + } + oldDevicePixelRatio = dpr; + drpListeningCharts.forEach((resize, chart) => { + if (chart.currentDevicePixelRatio !== dpr) { + resize(); + } + }); +} +function listenDevicePixelRatioChanges(chart, resize) { + if (!drpListeningCharts.size) { + window.addEventListener('resize', onWindowResize); + } + drpListeningCharts.set(chart, resize); +} +function unlistenDevicePixelRatioChanges(chart) { + drpListeningCharts.delete(chart); + if (!drpListeningCharts.size) { + window.removeEventListener('resize', onWindowResize); + } +} +function createResizeObserver(chart, type, listener) { + const canvas = chart.canvas; + const container = canvas && _getParentNode(canvas); + if (!container) { + return; + } + const resize = throttled((width, height) => { + const w = container.clientWidth; + listener(width, height); + if (w < container.clientWidth) { + listener(); + } + }, window); + const observer = new ResizeObserver(entries => { + const entry = entries[0]; + const width = entry.contentRect.width; + const height = entry.contentRect.height; + if (width === 0 && height === 0) { + return; + } + resize(width, height); + }); + observer.observe(container); + listenDevicePixelRatioChanges(chart, resize); + return observer; +} +function releaseObserver(chart, type, observer) { + if (observer) { + observer.disconnect(); + } + if (type === 'resize') { + unlistenDevicePixelRatioChanges(chart); + } +} +function createProxyAndListen(chart, type, listener) { + const canvas = chart.canvas; + const proxy = throttled((event) => { + if (chart.ctx !== null) { + listener(fromNativeEvent(event, chart)); + } + }, chart, (args) => { + const event = args[0]; + return [event, event.offsetX, event.offsetY]; + }); + addListener(canvas, type, proxy); + return proxy; +} +class DomPlatform extends BasePlatform { + acquireContext(canvas, aspectRatio) { + const context = canvas && canvas.getContext && canvas.getContext('2d'); + if (context && context.canvas === canvas) { + initCanvas(canvas, aspectRatio); + return context; + } + return null; + } + releaseContext(context) { + const canvas = context.canvas; + if (!canvas[EXPANDO_KEY]) { + return false; + } + const initial = canvas[EXPANDO_KEY].initial; + ['height', 'width'].forEach((prop) => { + const value = initial[prop]; + if (isNullOrUndef(value)) { + canvas.removeAttribute(prop); + } else { + canvas.setAttribute(prop, value); + } + }); + const style = initial.style || {}; + Object.keys(style).forEach((key) => { + canvas.style[key] = style[key]; + }); + canvas.width = canvas.width; + delete canvas[EXPANDO_KEY]; + return true; + } + addEventListener(chart, type, listener) { + this.removeEventListener(chart, type); + const proxies = chart.$proxies || (chart.$proxies = {}); + const handlers = { + attach: createAttachObserver, + detach: createDetachObserver, + resize: createResizeObserver + }; + const handler = handlers[type] || createProxyAndListen; + proxies[type] = handler(chart, type, listener); + } + removeEventListener(chart, type) { + const proxies = chart.$proxies || (chart.$proxies = {}); + const proxy = proxies[type]; + if (!proxy) { + return; + } + const handlers = { + attach: releaseObserver, + detach: releaseObserver, + resize: releaseObserver + }; + const handler = handlers[type] || removeListener; + handler(chart, type, proxy); + proxies[type] = undefined; + } + getDevicePixelRatio() { + return window.devicePixelRatio; + } + getMaximumSize(canvas, width, height, aspectRatio) { + return getMaximumSize(canvas, width, height, aspectRatio); + } + isAttached(canvas) { + const container = _getParentNode(canvas); + return !!(container && container.isConnected); + } +} + +function _detectPlatform(canvas) { + if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) { + return BasicPlatform; + } + return DomPlatform; +} + +var platforms = /*#__PURE__*/Object.freeze({ +__proto__: null, +_detectPlatform: _detectPlatform, +BasePlatform: BasePlatform, +BasicPlatform: BasicPlatform, +DomPlatform: DomPlatform +}); + +const transparent = 'transparent'; +const interpolators = { + boolean(from, to, factor) { + return factor > 0.5 ? to : from; + }, + color(from, to, factor) { + const c0 = color(from || transparent); + const c1 = c0.valid && color(to || transparent); + return c1 && c1.valid + ? c1.mix(c0, factor).hexString() + : to; + }, + number(from, to, factor) { + return from + (to - from) * factor; + } +}; +class Animation { + constructor(cfg, target, prop, to) { + const currentValue = target[prop]; + to = resolve([cfg.to, to, currentValue, cfg.from]); + const from = resolve([cfg.from, currentValue, to]); + this._active = true; + this._fn = cfg.fn || interpolators[cfg.type || typeof from]; + this._easing = effects[cfg.easing] || effects.linear; + this._start = Math.floor(Date.now() + (cfg.delay || 0)); + this._duration = this._total = Math.floor(cfg.duration); + this._loop = !!cfg.loop; + this._target = target; + this._prop = prop; + this._from = from; + this._to = to; + this._promises = undefined; + } + active() { + return this._active; + } + update(cfg, to, date) { + if (this._active) { + this._notify(false); + const currentValue = this._target[this._prop]; + const elapsed = date - this._start; + const remain = this._duration - elapsed; + this._start = date; + this._duration = Math.floor(Math.max(remain, cfg.duration)); + this._total += elapsed; + this._loop = !!cfg.loop; + this._to = resolve([cfg.to, to, currentValue, cfg.from]); + this._from = resolve([cfg.from, currentValue, to]); + } + } + cancel() { + if (this._active) { + this.tick(Date.now()); + this._active = false; + this._notify(false); + } + } + tick(date) { + const elapsed = date - this._start; + const duration = this._duration; + const prop = this._prop; + const from = this._from; + const loop = this._loop; + const to = this._to; + let factor; + this._active = from !== to && (loop || (elapsed < duration)); + if (!this._active) { + this._target[prop] = to; + this._notify(true); + return; + } + if (elapsed < 0) { + this._target[prop] = from; + return; + } + factor = (elapsed / duration) % 2; + factor = loop && factor > 1 ? 2 - factor : factor; + factor = this._easing(Math.min(1, Math.max(0, factor))); + this._target[prop] = this._fn(from, to, factor); + } + wait() { + const promises = this._promises || (this._promises = []); + return new Promise((res, rej) => { + promises.push({res, rej}); + }); + } + _notify(resolved) { + const method = resolved ? 'res' : 'rej'; + const promises = this._promises || []; + for (let i = 0; i < promises.length; i++) { + promises[i][method](); + } + } +} + +const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension']; +const colors = ['color', 'borderColor', 'backgroundColor']; +defaults.set('animation', { + delay: undefined, + duration: 1000, + easing: 'easeOutQuart', + fn: undefined, + from: undefined, + loop: undefined, + to: undefined, + type: undefined, +}); +const animationOptions = Object.keys(defaults.animation); +defaults.describe('animation', { + _fallback: false, + _indexable: false, + _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn', +}); +defaults.set('animations', { + colors: { + type: 'color', + properties: colors + }, + numbers: { + type: 'number', + properties: numbers + }, +}); +defaults.describe('animations', { + _fallback: 'animation', +}); +defaults.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: v => v | 0 + }, + } + } +}); +class Animations { + constructor(chart, config) { + this._chart = chart; + this._properties = new Map(); + this.configure(config); + } + configure(config) { + if (!isObject(config)) { + return; + } + const animatedProps = this._properties; + Object.getOwnPropertyNames(config).forEach(key => { + const cfg = config[key]; + if (!isObject(cfg)) { + return; + } + const resolved = {}; + for (const option of animationOptions) { + resolved[option] = cfg[option]; + } + (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => { + if (prop === key || !animatedProps.has(prop)) { + animatedProps.set(prop, resolved); + } + }); + }); + } + _animateOptions(target, values) { + const newOptions = values.options; + const options = resolveTargetOptions(target, newOptions); + if (!options) { + return []; + } + const animations = this._createAnimations(options, newOptions); + if (newOptions.$shared) { + awaitAll(target.options.$animations, newOptions).then(() => { + target.options = newOptions; + }, () => { + }); + } + return animations; + } + _createAnimations(target, values) { + const animatedProps = this._properties; + const animations = []; + const running = target.$animations || (target.$animations = {}); + const props = Object.keys(values); + const date = Date.now(); + let i; + for (i = props.length - 1; i >= 0; --i) { + const prop = props[i]; + if (prop.charAt(0) === '$') { + continue; + } + if (prop === 'options') { + animations.push(...this._animateOptions(target, values)); + continue; + } + const value = values[prop]; + let animation = running[prop]; + const cfg = animatedProps.get(prop); + if (animation) { + if (cfg && animation.active()) { + animation.update(cfg, value, date); + continue; + } else { + animation.cancel(); + } + } + if (!cfg || !cfg.duration) { + target[prop] = value; + continue; + } + running[prop] = animation = new Animation(cfg, target, prop, value); + animations.push(animation); + } + return animations; + } + update(target, values) { + if (this._properties.size === 0) { + Object.assign(target, values); + return; + } + const animations = this._createAnimations(target, values); + if (animations.length) { + animator.add(this._chart, animations); + return true; + } + } +} +function awaitAll(animations, properties) { + const running = []; + const keys = Object.keys(properties); + for (let i = 0; i < keys.length; i++) { + const anim = animations[keys[i]]; + if (anim && anim.active()) { + running.push(anim.wait()); + } + } + return Promise.all(running); +} +function resolveTargetOptions(target, newOptions) { + if (!newOptions) { + return; + } + let options = target.options; + if (!options) { + target.options = newOptions; + return; + } + if (options.$shared) { + target.options = options = Object.assign({}, options, {$shared: false, $animations: {}}); + } + return options; +} + +function scaleClip(scale, allowedOverflow) { + const opts = scale && scale.options || {}; + const reverse = opts.reverse; + const min = opts.min === undefined ? allowedOverflow : 0; + const max = opts.max === undefined ? allowedOverflow : 0; + return { + start: reverse ? max : min, + end: reverse ? min : max + }; +} +function defaultClip(xScale, yScale, allowedOverflow) { + if (allowedOverflow === false) { + return false; + } + const x = scaleClip(xScale, allowedOverflow); + const y = scaleClip(yScale, allowedOverflow); + return { + top: y.end, + right: x.end, + bottom: y.start, + left: x.start + }; +} +function toClip(value) { + let t, r, b, l; + if (isObject(value)) { + t = value.top; + r = value.right; + b = value.bottom; + l = value.left; + } else { + t = r = b = l = value; + } + return { + top: t, + right: r, + bottom: b, + left: l, + disabled: value === false + }; +} +function getSortedDatasetIndices(chart, filterVisible) { + const keys = []; + const metasets = chart._getSortedDatasetMetas(filterVisible); + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + keys.push(metasets[i].index); + } + return keys; +} +function applyStack(stack, value, dsIndex, options = {}) { + const keys = stack.keys; + const singleMode = options.mode === 'single'; + let i, ilen, datasetIndex, otherValue; + if (value === null) { + return; + } + for (i = 0, ilen = keys.length; i < ilen; ++i) { + datasetIndex = +keys[i]; + if (datasetIndex === dsIndex) { + if (options.all) { + continue; + } + break; + } + otherValue = stack.values[datasetIndex]; + if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) { + value += otherValue; + } + } + return value; +} +function convertObjectDataToArray(data) { + const keys = Object.keys(data); + const adata = new Array(keys.length); + let i, ilen, key; + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + adata[i] = { + x: key, + y: data[key] + }; + } + return adata; +} +function isStacked(scale, meta) { + const stacked = scale && scale.options.stacked; + return stacked || (stacked === undefined && meta.stack !== undefined); +} +function getStackKey(indexScale, valueScale, meta) { + return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`; +} +function getUserBounds(scale) { + const {min, max, minDefined, maxDefined} = scale.getUserBounds(); + return { + min: minDefined ? min : Number.NEGATIVE_INFINITY, + max: maxDefined ? max : Number.POSITIVE_INFINITY + }; +} +function getOrCreateStack(stacks, stackKey, indexValue) { + const subStack = stacks[stackKey] || (stacks[stackKey] = {}); + return subStack[indexValue] || (subStack[indexValue] = {}); +} +function getLastIndexInStack(stack, vScale, positive, type) { + for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) { + const value = stack[meta.index]; + if ((positive && value > 0) || (!positive && value < 0)) { + return meta.index; + } + } + return null; +} +function updateStacks(controller, parsed) { + const {chart, _cachedMeta: meta} = controller; + const stacks = chart._stacks || (chart._stacks = {}); + const {iScale, vScale, index: datasetIndex} = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const key = getStackKey(iScale, vScale, meta); + const ilen = parsed.length; + let stack; + for (let i = 0; i < ilen; ++i) { + const item = parsed[i]; + const {[iAxis]: index, [vAxis]: value} = item; + const itemStacks = item._stacks || (item._stacks = {}); + stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index); + stack[datasetIndex] = value; + stack._top = getLastIndexInStack(stack, vScale, true, meta.type); + stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type); + } +} +function getFirstScaleId(chart, axis) { + const scales = chart.scales; + return Object.keys(scales).filter(key => scales[key].axis === axis).shift(); +} +function createDatasetContext(parent, index) { + return createContext(parent, + { + active: false, + dataset: undefined, + datasetIndex: index, + index, + mode: 'default', + type: 'dataset' + } + ); +} +function createDataContext(parent, index, element) { + return createContext(parent, { + active: false, + dataIndex: index, + parsed: undefined, + raw: undefined, + element, + index, + mode: 'default', + type: 'data' + }); +} +function clearStacks(meta, items) { + const datasetIndex = meta.controller.index; + const axis = meta.vScale && meta.vScale.axis; + if (!axis) { + return; + } + items = items || meta._parsed; + for (const parsed of items) { + const stacks = parsed._stacks; + if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) { + return; + } + delete stacks[axis][datasetIndex]; + } +} +const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none'; +const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); +const createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked + && {keys: getSortedDatasetIndices(chart, true), values: null}; +class DatasetController { + constructor(chart, datasetIndex) { + this.chart = chart; + this._ctx = chart.ctx; + this.index = datasetIndex; + this._cachedDataOpts = {}; + this._cachedMeta = this.getMeta(); + this._type = this._cachedMeta.type; + this.options = undefined; + this._parsing = false; + this._data = undefined; + this._objectData = undefined; + this._sharedOptions = undefined; + this._drawStart = undefined; + this._drawCount = undefined; + this.enableOptionSharing = false; + this.$context = undefined; + this._syncList = []; + this.initialize(); + } + initialize() { + const meta = this._cachedMeta; + this.configure(); + this.linkScales(); + meta._stacked = isStacked(meta.vScale, meta); + this.addElements(); + } + updateIndex(datasetIndex) { + if (this.index !== datasetIndex) { + clearStacks(this._cachedMeta); + } + this.index = datasetIndex; + } + linkScales() { + const chart = this.chart; + const meta = this._cachedMeta; + const dataset = this.getDataset(); + const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y; + const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x')); + const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y')); + const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r')); + const indexAxis = meta.indexAxis; + const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid); + const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid); + meta.xScale = this.getScaleForId(xid); + meta.yScale = this.getScaleForId(yid); + meta.rScale = this.getScaleForId(rid); + meta.iScale = this.getScaleForId(iid); + meta.vScale = this.getScaleForId(vid); + } + getDataset() { + return this.chart.data.datasets[this.index]; + } + getMeta() { + return this.chart.getDatasetMeta(this.index); + } + getScaleForId(scaleID) { + return this.chart.scales[scaleID]; + } + _getOtherScale(scale) { + const meta = this._cachedMeta; + return scale === meta.iScale + ? meta.vScale + : meta.iScale; + } + reset() { + this._update('reset'); + } + _destroy() { + const meta = this._cachedMeta; + if (this._data) { + unlistenArrayEvents(this._data, this); + } + if (meta._stacked) { + clearStacks(meta); + } + } + _dataCheck() { + const dataset = this.getDataset(); + const data = dataset.data || (dataset.data = []); + const _data = this._data; + if (isObject(data)) { + this._data = convertObjectDataToArray(data); + } else if (_data !== data) { + if (_data) { + unlistenArrayEvents(_data, this); + const meta = this._cachedMeta; + clearStacks(meta); + meta._parsed = []; + } + if (data && Object.isExtensible(data)) { + listenArrayEvents(data, this); + } + this._syncList = []; + this._data = data; + } + } + addElements() { + const meta = this._cachedMeta; + this._dataCheck(); + if (this.datasetElementType) { + meta.dataset = new this.datasetElementType(); + } + } + buildOrUpdateElements(resetNewElements) { + const meta = this._cachedMeta; + const dataset = this.getDataset(); + let stackChanged = false; + this._dataCheck(); + const oldStacked = meta._stacked; + meta._stacked = isStacked(meta.vScale, meta); + if (meta.stack !== dataset.stack) { + stackChanged = true; + clearStacks(meta); + meta.stack = dataset.stack; + } + this._resyncElements(resetNewElements); + if (stackChanged || oldStacked !== meta._stacked) { + updateStacks(this, meta._parsed); + } + } + configure() { + const config = this.chart.config; + const scopeKeys = config.datasetScopeKeys(this._type); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true); + this.options = config.createResolver(scopes, this.getContext()); + this._parsing = this.options.parsing; + this._cachedDataOpts = {}; + } + parse(start, count) { + const {_cachedMeta: meta, _data: data} = this; + const {iScale, _stacked} = meta; + const iAxis = iScale.axis; + let sorted = start === 0 && count === data.length ? true : meta._sorted; + let prev = start > 0 && meta._parsed[start - 1]; + let i, cur, parsed; + if (this._parsing === false) { + meta._parsed = data; + meta._sorted = true; + parsed = data; + } else { + if (isArray(data[start])) { + parsed = this.parseArrayData(meta, data, start, count); + } else if (isObject(data[start])) { + parsed = this.parseObjectData(meta, data, start, count); + } else { + parsed = this.parsePrimitiveData(meta, data, start, count); + } + const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]); + for (i = 0; i < count; ++i) { + meta._parsed[i + start] = cur = parsed[i]; + if (sorted) { + if (isNotInOrderComparedToPrev()) { + sorted = false; + } + prev = cur; + } + } + meta._sorted = sorted; + } + if (_stacked) { + updateStacks(this, parsed); + } + } + parsePrimitiveData(meta, data, start, count) { + const {iScale, vScale} = meta; + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = new Array(count); + let i, ilen, index; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + parsed[i] = { + [iAxis]: singleScale || iScale.parse(labels[index], index), + [vAxis]: vScale.parse(data[index], index) + }; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const {xScale, yScale} = meta; + const parsed = new Array(count); + let i, ilen, index, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + item = data[index]; + parsed[i] = { + x: xScale.parse(item[0], index), + y: yScale.parse(item[1], index) + }; + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const {xScale, yScale} = meta; + const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing; + const parsed = new Array(count); + let i, ilen, index, item; + for (i = 0, ilen = count; i < ilen; ++i) { + index = i + start; + item = data[index]; + parsed[i] = { + x: xScale.parse(resolveObjectKey(item, xAxisKey), index), + y: yScale.parse(resolveObjectKey(item, yAxisKey), index) + }; + } + return parsed; + } + getParsed(index) { + return this._cachedMeta._parsed[index]; + } + getDataElement(index) { + return this._cachedMeta.data[index]; + } + applyStack(scale, parsed, mode) { + const chart = this.chart; + const meta = this._cachedMeta; + const value = parsed[scale.axis]; + const stack = { + keys: getSortedDatasetIndices(chart, true), + values: parsed._stacks[scale.axis] + }; + return applyStack(stack, value, meta.index, {mode}); + } + updateRangeFromParsed(range, scale, parsed, stack) { + const parsedValue = parsed[scale.axis]; + let value = parsedValue === null ? NaN : parsedValue; + const values = stack && parsed._stacks[scale.axis]; + if (stack && values) { + stack.values = values; + value = applyStack(stack, parsedValue, this._cachedMeta.index); + } + range.min = Math.min(range.min, value); + range.max = Math.max(range.max, value); + } + getMinMax(scale, canStack) { + const meta = this._cachedMeta; + const _parsed = meta._parsed; + const sorted = meta._sorted && scale === meta.iScale; + const ilen = _parsed.length; + const otherScale = this._getOtherScale(scale); + const stack = createStack(canStack, meta, this.chart); + const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY}; + const {min: otherMin, max: otherMax} = getUserBounds(otherScale); + let i, parsed; + function _skip() { + parsed = _parsed[i]; + const otherValue = parsed[otherScale.axis]; + return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; + } + for (i = 0; i < ilen; ++i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range, scale, parsed, stack); + if (sorted) { + break; + } + } + if (sorted) { + for (i = ilen - 1; i >= 0; --i) { + if (_skip()) { + continue; + } + this.updateRangeFromParsed(range, scale, parsed, stack); + break; + } + } + return range; + } + getAllParsedValues(scale) { + const parsed = this._cachedMeta._parsed; + const values = []; + let i, ilen, value; + for (i = 0, ilen = parsed.length; i < ilen; ++i) { + value = parsed[i][scale.axis]; + if (isNumberFinite(value)) { + values.push(value); + } + } + return values; + } + getMaxOverflow() { + return false; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const iScale = meta.iScale; + const vScale = meta.vScale; + const parsed = this.getParsed(index); + return { + label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '', + value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : '' + }; + } + _update(mode) { + const meta = this._cachedMeta; + this.update(mode || 'default'); + meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow()))); + } + update(mode) {} + draw() { + const ctx = this._ctx; + const chart = this.chart; + const meta = this._cachedMeta; + const elements = meta.data || []; + const area = chart.chartArea; + const active = []; + const start = this._drawStart || 0; + const count = this._drawCount || (elements.length - start); + const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop; + let i; + if (meta.dataset) { + meta.dataset.draw(ctx, area, start, count); + } + for (i = start; i < start + count; ++i) { + const element = elements[i]; + if (element.hidden) { + continue; + } + if (element.active && drawActiveElementsOnTop) { + active.push(element); + } else { + element.draw(ctx, area); + } + } + for (i = 0; i < active.length; ++i) { + active[i].draw(ctx, area); + } + } + getStyle(index, active) { + const mode = active ? 'active' : 'default'; + return index === undefined && this._cachedMeta.dataset + ? this.resolveDatasetElementOptions(mode) + : this.resolveDataElementOptions(index || 0, mode); + } + getContext(index, active, mode) { + const dataset = this.getDataset(); + let context; + if (index >= 0 && index < this._cachedMeta.data.length) { + const element = this._cachedMeta.data[index]; + context = element.$context || + (element.$context = createDataContext(this.getContext(), index, element)); + context.parsed = this.getParsed(index); + context.raw = dataset.data[index]; + context.index = context.dataIndex = index; + } else { + context = this.$context || + (this.$context = createDatasetContext(this.chart.getContext(), this.index)); + context.dataset = dataset; + context.index = context.datasetIndex = this.index; + } + context.active = !!active; + context.mode = mode; + return context; + } + resolveDatasetElementOptions(mode) { + return this._resolveElementOptions(this.datasetElementType.id, mode); + } + resolveDataElementOptions(index, mode) { + return this._resolveElementOptions(this.dataElementType.id, mode, index); + } + _resolveElementOptions(elementType, mode = 'default', index) { + const active = mode === 'active'; + const cache = this._cachedDataOpts; + const cacheKey = elementType + '-' + mode; + const cached = cache[cacheKey]; + const sharing = this.enableOptionSharing && defined(index); + if (cached) { + return cloneIfNotShared(cached, sharing); + } + const config = this.chart.config; + const scopeKeys = config.datasetElementScopeKeys(this._type, elementType); + const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, '']; + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + const names = Object.keys(defaults.elements[elementType]); + const context = () => this.getContext(index, active); + const values = config.resolveNamedOptions(scopes, names, context, prefixes); + if (values.$shared) { + values.$shared = sharing; + cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing)); + } + return values; + } + _resolveAnimations(index, transition, active) { + const chart = this.chart; + const cache = this._cachedDataOpts; + const cacheKey = `animation-${transition}`; + const cached = cache[cacheKey]; + if (cached) { + return cached; + } + let options; + if (chart.options.animation !== false) { + const config = this.chart.config; + const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition); + const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); + options = config.createResolver(scopes, this.getContext(index, active, transition)); + } + const animations = new Animations(chart, options && options.animations); + if (options && options._cacheable) { + cache[cacheKey] = Object.freeze(animations); + } + return animations; + } + getSharedOptions(options) { + if (!options.$shared) { + return; + } + return this._sharedOptions || (this._sharedOptions = Object.assign({}, options)); + } + includeOptions(mode, sharedOptions) { + return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled; + } + updateElement(element, index, properties, mode) { + if (isDirectUpdateMode(mode)) { + Object.assign(element, properties); + } else { + this._resolveAnimations(index, mode).update(element, properties); + } + } + updateSharedOptions(sharedOptions, mode, newOptions) { + if (sharedOptions && !isDirectUpdateMode(mode)) { + this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions); + } + } + _setStyle(element, index, mode, active) { + element.active = active; + const options = this.getStyle(index, active); + this._resolveAnimations(index, mode, active).update(element, { + options: (!active && this.getSharedOptions(options)) || options + }); + } + removeHoverStyle(element, datasetIndex, index) { + this._setStyle(element, index, 'active', false); + } + setHoverStyle(element, datasetIndex, index) { + this._setStyle(element, index, 'active', true); + } + _removeDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, undefined, 'active', false); + } + } + _setDatasetHoverStyle() { + const element = this._cachedMeta.dataset; + if (element) { + this._setStyle(element, undefined, 'active', true); + } + } + _resyncElements(resetNewElements) { + const data = this._data; + const elements = this._cachedMeta.data; + for (const [method, arg1, arg2] of this._syncList) { + this[method](arg1, arg2); + } + this._syncList = []; + const numMeta = elements.length; + const numData = data.length; + const count = Math.min(numData, numMeta); + if (count) { + this.parse(0, count); + } + if (numData > numMeta) { + this._insertElements(numMeta, numData - numMeta, resetNewElements); + } else if (numData < numMeta) { + this._removeElements(numData, numMeta - numData); + } + } + _insertElements(start, count, resetNewElements = true) { + const meta = this._cachedMeta; + const data = meta.data; + const end = start + count; + let i; + const move = (arr) => { + arr.length += count; + for (i = arr.length - 1; i >= end; i--) { + arr[i] = arr[i - count]; + } + }; + move(data); + for (i = start; i < end; ++i) { + data[i] = new this.dataElementType(); + } + if (this._parsing) { + move(meta._parsed); + } + this.parse(start, count); + if (resetNewElements) { + this.updateElements(data, start, count, 'reset'); + } + } + updateElements(element, start, count, mode) {} + _removeElements(start, count) { + const meta = this._cachedMeta; + if (this._parsing) { + const removed = meta._parsed.splice(start, count); + if (meta._stacked) { + clearStacks(meta, removed); + } + } + meta.data.splice(start, count); + } + _sync(args) { + if (this._parsing) { + this._syncList.push(args); + } else { + const [method, arg1, arg2] = args; + this[method](arg1, arg2); + } + this.chart._dataChanges.push([this.index, ...args]); + } + _onDataPush() { + const count = arguments.length; + this._sync(['_insertElements', this.getDataset().data.length - count, count]); + } + _onDataPop() { + this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]); + } + _onDataShift() { + this._sync(['_removeElements', 0, 1]); + } + _onDataSplice(start, count) { + if (count) { + this._sync(['_removeElements', start, count]); + } + const newCount = arguments.length - 2; + if (newCount) { + this._sync(['_insertElements', start, newCount]); + } + } + _onDataUnshift() { + this._sync(['_insertElements', 0, arguments.length]); + } +} +DatasetController.defaults = {}; +DatasetController.prototype.datasetElementType = null; +DatasetController.prototype.dataElementType = null; + +class Element { + constructor() { + this.x = undefined; + this.y = undefined; + this.active = false; + this.options = undefined; + this.$animations = undefined; + } + tooltipPosition(useFinalPosition) { + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return {x, y}; + } + hasValue() { + return isNumber(this.x) && isNumber(this.y); + } + getProps(props, final) { + const anims = this.$animations; + if (!final || !anims) { + return this; + } + const ret = {}; + props.forEach(prop => { + ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop]; + }); + return ret; + } +} +Element.defaults = {}; +Element.defaultRoutes = undefined; + +const formatters = { + values(value) { + return isArray(value) ? value : '' + value; + }, + numeric(tickValue, index, ticks) { + if (tickValue === 0) { + return '0'; + } + const locale = this.chart.options.locale; + let notation; + let delta = tickValue; + if (ticks.length > 1) { + const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value)); + if (maxTick < 1e-4 || maxTick > 1e+15) { + notation = 'scientific'; + } + delta = calculateDelta(tickValue, ticks); + } + const logDelta = log10(Math.abs(delta)); + const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); + const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal}; + Object.assign(options, this.options.ticks.format); + return formatNumber(tickValue, locale, options); + }, + logarithmic(tickValue, index, ticks) { + if (tickValue === 0) { + return '0'; + } + const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue)))); + if (remain === 1 || remain === 2 || remain === 5) { + return formatters.numeric.call(this, tickValue, index, ticks); + } + return ''; + } +}; +function calculateDelta(tickValue, ticks) { + let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value; + if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) { + delta = tickValue - Math.floor(tickValue); + } + return delta; +} +var Ticks = {formatters}; + +defaults.set('scale', { + display: true, + offset: false, + reverse: false, + beginAtZero: false, + bounds: 'ticks', + grace: 0, + grid: { + display: true, + lineWidth: 1, + drawBorder: true, + drawOnChartArea: true, + drawTicks: true, + tickLength: 8, + tickWidth: (_ctx, options) => options.lineWidth, + tickColor: (_ctx, options) => options.color, + offset: false, + borderDash: [], + borderDashOffset: 0.0, + borderWidth: 1 + }, + title: { + display: false, + text: '', + padding: { + top: 4, + bottom: 4 + } + }, + ticks: { + minRotation: 0, + maxRotation: 50, + mirror: false, + textStrokeWidth: 0, + textStrokeColor: '', + padding: 3, + display: true, + autoSkip: true, + autoSkipPadding: 3, + labelOffset: 0, + callback: Ticks.formatters.values, + minor: {}, + major: {}, + align: 'center', + crossAlign: 'near', + showLabelBackdrop: false, + backdropColor: 'rgba(255, 255, 255, 0.75)', + backdropPadding: 2, + } +}); +defaults.route('scale.ticks', 'color', '', 'color'); +defaults.route('scale.grid', 'color', '', 'borderColor'); +defaults.route('scale.grid', 'borderColor', '', 'borderColor'); +defaults.route('scale.title', 'color', '', 'color'); +defaults.describe('scale', { + _fallback: false, + _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser', + _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash', +}); +defaults.describe('scales', { + _fallback: 'scale', +}); +defaults.describe('scale.ticks', { + _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback', + _indexable: (name) => name !== 'backdropPadding', +}); + +function autoSkip(scale, ticks) { + const tickOpts = scale.options.ticks; + const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale); + const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : []; + const numMajorIndices = majorIndices.length; + const first = majorIndices[0]; + const last = majorIndices[numMajorIndices - 1]; + const newTicks = []; + if (numMajorIndices > ticksLimit) { + skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit); + return newTicks; + } + const spacing = calculateSpacing(majorIndices, ticks, ticksLimit); + if (numMajorIndices > 0) { + let i, ilen; + const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null; + skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first); + for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) { + skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]); + } + skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing); + return newTicks; + } + skip(ticks, newTicks, spacing); + return newTicks; +} +function determineMaxTicks(scale) { + const offset = scale.options.offset; + const tickLength = scale._tickSize(); + const maxScale = scale._length / tickLength + (offset ? 0 : 1); + const maxChart = scale._maxLength / tickLength; + return Math.floor(Math.min(maxScale, maxChart)); +} +function calculateSpacing(majorIndices, ticks, ticksLimit) { + const evenMajorSpacing = getEvenSpacing(majorIndices); + const spacing = ticks.length / ticksLimit; + if (!evenMajorSpacing) { + return Math.max(spacing, 1); + } + const factors = _factorize(evenMajorSpacing); + for (let i = 0, ilen = factors.length - 1; i < ilen; i++) { + const factor = factors[i]; + if (factor > spacing) { + return factor; + } + } + return Math.max(spacing, 1); +} +function getMajorIndices(ticks) { + const result = []; + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (ticks[i].major) { + result.push(i); + } + } + return result; +} +function skipMajors(ticks, newTicks, majorIndices, spacing) { + let count = 0; + let next = majorIndices[0]; + let i; + spacing = Math.ceil(spacing); + for (i = 0; i < ticks.length; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = majorIndices[count * spacing]; + } + } +} +function skip(ticks, newTicks, spacing, majorStart, majorEnd) { + const start = valueOrDefault(majorStart, 0); + const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length); + let count = 0; + let length, i, next; + spacing = Math.ceil(spacing); + if (majorEnd) { + length = majorEnd - majorStart; + spacing = length / Math.floor(length / spacing); + } + next = start; + while (next < 0) { + count++; + next = Math.round(start + count * spacing); + } + for (i = Math.max(start, 0); i < end; i++) { + if (i === next) { + newTicks.push(ticks[i]); + count++; + next = Math.round(start + count * spacing); + } + } +} +function getEvenSpacing(arr) { + const len = arr.length; + let i, diff; + if (len < 2) { + return false; + } + for (diff = arr[0], i = 1; i < len; ++i) { + if (arr[i] - arr[i - 1] !== diff) { + return false; + } + } + return diff; +} + +const reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align; +const offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset; +function sample(arr, numItems) { + const result = []; + const increment = arr.length / numItems; + const len = arr.length; + let i = 0; + for (; i < len; i += increment) { + result.push(arr[Math.floor(i)]); + } + return result; +} +function getPixelForGridLine(scale, index, offsetGridLines) { + const length = scale.ticks.length; + const validIndex = Math.min(index, length - 1); + const start = scale._startPixel; + const end = scale._endPixel; + const epsilon = 1e-6; + let lineValue = scale.getPixelForTick(validIndex); + let offset; + if (offsetGridLines) { + if (length === 1) { + offset = Math.max(lineValue - start, end - lineValue); + } else if (index === 0) { + offset = (scale.getPixelForTick(1) - lineValue) / 2; + } else { + offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2; + } + lineValue += validIndex < index ? offset : -offset; + if (lineValue < start - epsilon || lineValue > end + epsilon) { + return; + } + } + return lineValue; +} +function garbageCollect(caches, length) { + each(caches, (cache) => { + const gc = cache.gc; + const gcLen = gc.length / 2; + let i; + if (gcLen > length) { + for (i = 0; i < gcLen; ++i) { + delete cache.data[gc[i]]; + } + gc.splice(0, gcLen); + } + }); +} +function getTickMarkLength(options) { + return options.drawTicks ? options.tickLength : 0; +} +function getTitleHeight(options, fallback) { + if (!options.display) { + return 0; + } + const font = toFont(options.font, fallback); + const padding = toPadding(options.padding); + const lines = isArray(options.text) ? options.text.length : 1; + return (lines * font.lineHeight) + padding.height; +} +function createScaleContext(parent, scale) { + return createContext(parent, { + scale, + type: 'scale' + }); +} +function createTickContext(parent, index, tick) { + return createContext(parent, { + tick, + index, + type: 'tick' + }); +} +function titleAlign(align, position, reverse) { + let ret = _toLeftRightCenter(align); + if ((reverse && position !== 'right') || (!reverse && position === 'right')) { + ret = reverseAlign(ret); + } + return ret; +} +function titleArgs(scale, offset, position, align) { + const {top, left, bottom, right, chart} = scale; + const {chartArea, scales} = chart; + let rotation = 0; + let maxWidth, titleX, titleY; + const height = bottom - top; + const width = right - left; + if (scale.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleY = scales[positionAxisID].getPixelForValue(value) + height - offset; + } else if (position === 'center') { + titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset; + } else { + titleY = offsetFromEdge(scale, position, offset); + } + maxWidth = right - left; + } else { + if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + titleX = scales[positionAxisID].getPixelForValue(value) - width + offset; + } else if (position === 'center') { + titleX = (chartArea.left + chartArea.right) / 2 - width + offset; + } else { + titleX = offsetFromEdge(scale, position, offset); + } + titleY = _alignStartEnd(align, bottom, top); + rotation = position === 'left' ? -HALF_PI : HALF_PI; + } + return {titleX, titleY, maxWidth, rotation}; +} +class Scale extends Element { + constructor(cfg) { + super(); + this.id = cfg.id; + this.type = cfg.type; + this.options = undefined; + this.ctx = cfg.ctx; + this.chart = cfg.chart; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.width = undefined; + this.height = undefined; + this._margins = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + this.maxWidth = undefined; + this.maxHeight = undefined; + this.paddingTop = undefined; + this.paddingBottom = undefined; + this.paddingLeft = undefined; + this.paddingRight = undefined; + this.axis = undefined; + this.labelRotation = undefined; + this.min = undefined; + this.max = undefined; + this._range = undefined; + this.ticks = []; + this._gridLineItems = null; + this._labelItems = null; + this._labelSizes = null; + this._length = 0; + this._maxLength = 0; + this._longestTextCache = {}; + this._startPixel = undefined; + this._endPixel = undefined; + this._reversePixels = false; + this._userMax = undefined; + this._userMin = undefined; + this._suggestedMax = undefined; + this._suggestedMin = undefined; + this._ticksLength = 0; + this._borderValue = 0; + this._cache = {}; + this._dataLimitsCached = false; + this.$context = undefined; + } + init(options) { + this.options = options.setContext(this.getContext()); + this.axis = options.axis; + this._userMin = this.parse(options.min); + this._userMax = this.parse(options.max); + this._suggestedMin = this.parse(options.suggestedMin); + this._suggestedMax = this.parse(options.suggestedMax); + } + parse(raw, index) { + return raw; + } + getUserBounds() { + let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this; + _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY); + _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY); + _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY); + _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY); + return { + min: finiteOrDefault(_userMin, _suggestedMin), + max: finiteOrDefault(_userMax, _suggestedMax), + minDefined: isNumberFinite(_userMin), + maxDefined: isNumberFinite(_userMax) + }; + } + getMinMax(canStack) { + let {min, max, minDefined, maxDefined} = this.getUserBounds(); + let range; + if (minDefined && maxDefined) { + return {min, max}; + } + const metas = this.getMatchingVisibleMetas(); + for (let i = 0, ilen = metas.length; i < ilen; ++i) { + range = metas[i].controller.getMinMax(this, canStack); + if (!minDefined) { + min = Math.min(min, range.min); + } + if (!maxDefined) { + max = Math.max(max, range.max); + } + } + min = maxDefined && min > max ? max : min; + max = minDefined && min > max ? min : max; + return { + min: finiteOrDefault(min, finiteOrDefault(max, min)), + max: finiteOrDefault(max, finiteOrDefault(min, max)) + }; + } + getPadding() { + return { + left: this.paddingLeft || 0, + top: this.paddingTop || 0, + right: this.paddingRight || 0, + bottom: this.paddingBottom || 0 + }; + } + getTicks() { + return this.ticks; + } + getLabels() { + const data = this.chart.data; + return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || []; + } + beforeLayout() { + this._cache = {}; + this._dataLimitsCached = false; + } + beforeUpdate() { + callback(this.options.beforeUpdate, [this]); + } + update(maxWidth, maxHeight, margins) { + const {beginAtZero, grace, ticks: tickOpts} = this.options; + const sampleSize = tickOpts.sampleSize; + this.beforeUpdate(); + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins = Object.assign({ + left: 0, + right: 0, + top: 0, + bottom: 0 + }, margins); + this.ticks = null; + this._labelSizes = null; + this._gridLineItems = null; + this._labelItems = null; + this.beforeSetDimensions(); + this.setDimensions(); + this.afterSetDimensions(); + this._maxLength = this.isHorizontal() + ? this.width + margins.left + margins.right + : this.height + margins.top + margins.bottom; + if (!this._dataLimitsCached) { + this.beforeDataLimits(); + this.determineDataLimits(); + this.afterDataLimits(); + this._range = _addGrace(this, grace, beginAtZero); + this._dataLimitsCached = true; + } + this.beforeBuildTicks(); + this.ticks = this.buildTicks() || []; + this.afterBuildTicks(); + const samplingEnabled = sampleSize < this.ticks.length; + this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks); + this.configure(); + this.beforeCalculateLabelRotation(); + this.calculateLabelRotation(); + this.afterCalculateLabelRotation(); + if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) { + this.ticks = autoSkip(this, this.ticks); + this._labelSizes = null; + } + if (samplingEnabled) { + this._convertTicksToLabels(this.ticks); + } + this.beforeFit(); + this.fit(); + this.afterFit(); + this.afterUpdate(); + } + configure() { + let reversePixels = this.options.reverse; + let startPixel, endPixel; + if (this.isHorizontal()) { + startPixel = this.left; + endPixel = this.right; + } else { + startPixel = this.top; + endPixel = this.bottom; + reversePixels = !reversePixels; + } + this._startPixel = startPixel; + this._endPixel = endPixel; + this._reversePixels = reversePixels; + this._length = endPixel - startPixel; + this._alignToPixels = this.options.alignToPixels; + } + afterUpdate() { + callback(this.options.afterUpdate, [this]); + } + beforeSetDimensions() { + callback(this.options.beforeSetDimensions, [this]); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = 0; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = 0; + this.bottom = this.height; + } + this.paddingLeft = 0; + this.paddingTop = 0; + this.paddingRight = 0; + this.paddingBottom = 0; + } + afterSetDimensions() { + callback(this.options.afterSetDimensions, [this]); + } + _callHooks(name) { + this.chart.notifyPlugins(name, this.getContext()); + callback(this.options[name], [this]); + } + beforeDataLimits() { + this._callHooks('beforeDataLimits'); + } + determineDataLimits() {} + afterDataLimits() { + this._callHooks('afterDataLimits'); + } + beforeBuildTicks() { + this._callHooks('beforeBuildTicks'); + } + buildTicks() { + return []; + } + afterBuildTicks() { + this._callHooks('afterBuildTicks'); + } + beforeTickToLabelConversion() { + callback(this.options.beforeTickToLabelConversion, [this]); + } + generateTickLabels(ticks) { + const tickOpts = this.options.ticks; + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + tick = ticks[i]; + tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this); + } + } + afterTickToLabelConversion() { + callback(this.options.afterTickToLabelConversion, [this]); + } + beforeCalculateLabelRotation() { + callback(this.options.beforeCalculateLabelRotation, [this]); + } + calculateLabelRotation() { + const options = this.options; + const tickOpts = options.ticks; + const numTicks = this.ticks.length; + const minRotation = tickOpts.minRotation || 0; + const maxRotation = tickOpts.maxRotation; + let labelRotation = minRotation; + let tickWidth, maxHeight, maxLabelDiagonal; + if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) { + this.labelRotation = minRotation; + return; + } + const labelSizes = this._getLabelSizes(); + const maxLabelWidth = labelSizes.widest.width; + const maxLabelHeight = labelSizes.highest.height; + const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth); + tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1); + if (maxLabelWidth + 6 > tickWidth) { + tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1)); + maxHeight = this.maxHeight - getTickMarkLength(options.grid) + - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font); + maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight); + labelRotation = toDegrees(Math.min( + Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), + Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1)) + )); + labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation)); + } + this.labelRotation = labelRotation; + } + afterCalculateLabelRotation() { + callback(this.options.afterCalculateLabelRotation, [this]); + } + beforeFit() { + callback(this.options.beforeFit, [this]); + } + fit() { + const minSize = { + width: 0, + height: 0 + }; + const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this; + const display = this._isVisible(); + const isHorizontal = this.isHorizontal(); + if (display) { + const titleHeight = getTitleHeight(titleOpts, chart.options.font); + if (isHorizontal) { + minSize.width = this.maxWidth; + minSize.height = getTickMarkLength(gridOpts) + titleHeight; + } else { + minSize.height = this.maxHeight; + minSize.width = getTickMarkLength(gridOpts) + titleHeight; + } + if (tickOpts.display && this.ticks.length) { + const {first, last, widest, highest} = this._getLabelSizes(); + const tickPadding = tickOpts.padding * 2; + const angleRadians = toRadians(this.labelRotation); + const cos = Math.cos(angleRadians); + const sin = Math.sin(angleRadians); + if (isHorizontal) { + const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height; + minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding); + } else { + const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; + minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding); + } + this._calculatePadding(first, last, sin, cos); + } + } + this._handleMargins(); + if (isHorizontal) { + this.width = this._length = chart.width - this._margins.left - this._margins.right; + this.height = minSize.height; + } else { + this.width = minSize.width; + this.height = this._length = chart.height - this._margins.top - this._margins.bottom; + } + } + _calculatePadding(first, last, sin, cos) { + const {ticks: {align, padding}, position} = this.options; + const isRotated = this.labelRotation !== 0; + const labelsBelowTicks = position !== 'top' && this.axis === 'x'; + if (this.isHorizontal()) { + const offsetLeft = this.getPixelForTick(0) - this.left; + const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1); + let paddingLeft = 0; + let paddingRight = 0; + if (isRotated) { + if (labelsBelowTicks) { + paddingLeft = cos * first.width; + paddingRight = sin * last.height; + } else { + paddingLeft = sin * first.height; + paddingRight = cos * last.width; + } + } else if (align === 'start') { + paddingRight = last.width; + } else if (align === 'end') { + paddingLeft = first.width; + } else { + paddingLeft = first.width / 2; + paddingRight = last.width / 2; + } + this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0); + this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0); + } else { + let paddingTop = last.height / 2; + let paddingBottom = first.height / 2; + if (align === 'start') { + paddingTop = 0; + paddingBottom = first.height; + } else if (align === 'end') { + paddingTop = last.height; + paddingBottom = 0; + } + this.paddingTop = paddingTop + padding; + this.paddingBottom = paddingBottom + padding; + } + } + _handleMargins() { + if (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() { + callback(this.options.afterFit, [this]); + } + isHorizontal() { + const {axis, position} = this.options; + return position === 'top' || position === 'bottom' || axis === 'x'; + } + isFullSize() { + return this.options.fullSize; + } + _convertTicksToLabels(ticks) { + this.beforeTickToLabelConversion(); + this.generateTickLabels(ticks); + let i, ilen; + for (i = 0, ilen = ticks.length; i < ilen; i++) { + if (isNullOrUndef(ticks[i].label)) { + ticks.splice(i, 1); + ilen--; + i--; + } + } + this.afterTickToLabelConversion(); + } + _getLabelSizes() { + let labelSizes = this._labelSizes; + if (!labelSizes) { + const sampleSize = this.options.ticks.sampleSize; + let ticks = this.ticks; + if (sampleSize < ticks.length) { + ticks = sample(ticks, sampleSize); + } + this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length); + } + return labelSizes; + } + _computeLabelSizes(ticks, length) { + const {ctx, _longestTextCache: caches} = this; + const widths = []; + const heights = []; + let widestLabelSize = 0; + let highestLabelSize = 0; + let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel; + for (i = 0; i < length; ++i) { + label = ticks[i].label; + tickFont = this._resolveTickFontOptions(i); + ctx.font = fontString = tickFont.string; + cache = caches[fontString] = caches[fontString] || {data: {}, gc: []}; + lineHeight = tickFont.lineHeight; + width = height = 0; + if (!isNullOrUndef(label) && !isArray(label)) { + width = _measureText(ctx, cache.data, cache.gc, width, label); + height = lineHeight; + } else if (isArray(label)) { + for (j = 0, jlen = label.length; j < jlen; ++j) { + nestedLabel = label[j]; + if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) { + width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel); + height += lineHeight; + } + } + } + widths.push(width); + heights.push(height); + widestLabelSize = Math.max(width, widestLabelSize); + highestLabelSize = Math.max(height, highestLabelSize); + } + garbageCollect(caches, length); + const widest = widths.indexOf(widestLabelSize); + const highest = heights.indexOf(highestLabelSize); + const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0}); + return { + first: valueAt(0), + last: valueAt(length - 1), + widest: valueAt(widest), + highest: valueAt(highest), + widths, + heights, + }; + } + getLabelForValue(value) { + return value; + } + getPixelForValue(value, index) { + return NaN; + } + getValueForPixel(pixel) {} + getPixelForTick(index) { + const ticks = this.ticks; + if (index < 0 || index > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index].value); + } + getPixelForDecimal(decimal) { + if (this._reversePixels) { + decimal = 1 - decimal; + } + const pixel = this._startPixel + decimal * this._length; + return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel); + } + getDecimalForPixel(pixel) { + const decimal = (pixel - this._startPixel) / this._length; + return this._reversePixels ? 1 - decimal : decimal; + } + getBasePixel() { + return this.getPixelForValue(this.getBaseValue()); + } + getBaseValue() { + const {min, max} = this; + return min < 0 && max < 0 ? max : + min > 0 && max > 0 ? min : + 0; + } + getContext(index) { + const ticks = this.ticks || []; + if (index >= 0 && index < ticks.length) { + const tick = ticks[index]; + return tick.$context || + (tick.$context = createTickContext(this.getContext(), index, tick)); + } + return this.$context || + (this.$context = createScaleContext(this.chart.getContext(), this)); + } + _tickSize() { + const optionTicks = this.options.ticks; + const rot = toRadians(this.labelRotation); + const cos = Math.abs(Math.cos(rot)); + const sin = Math.abs(Math.sin(rot)); + const labelSizes = this._getLabelSizes(); + const padding = optionTicks.autoSkipPadding || 0; + const w = labelSizes ? labelSizes.widest.width + padding : 0; + const h = labelSizes ? labelSizes.highest.height + padding : 0; + return this.isHorizontal() + ? h * cos > w * sin ? w / cos : h / sin + : h * sin < w * cos ? h / cos : w / sin; + } + _isVisible() { + const display = this.options.display; + if (display !== 'auto') { + return !!display; + } + return this.getMatchingVisibleMetas().length > 0; + } + _computeGridLineItems(chartArea) { + const axis = this.axis; + const chart = this.chart; + const options = this.options; + const {grid, position} = options; + const offset = grid.offset; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const ticksLength = ticks.length + (offset ? 1 : 0); + const tl = getTickMarkLength(grid); + const items = []; + const borderOpts = grid.setContext(this.getContext()); + const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0; + const axisHalfWidth = axisWidth / 2; + const alignBorderValue = function(pixel) { + return _alignPixel(chart, pixel, axisWidth); + }; + let borderValue, i, lineValue, alignedLineValue; + let tx1, ty1, tx2, ty2, x1, y1, x2, y2; + if (position === 'top') { + borderValue = alignBorderValue(this.bottom); + ty1 = this.bottom - tl; + ty2 = borderValue - axisHalfWidth; + y1 = alignBorderValue(chartArea.top) + axisHalfWidth; + y2 = chartArea.bottom; + } else if (position === 'bottom') { + borderValue = alignBorderValue(this.top); + y1 = chartArea.top; + y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth; + ty1 = borderValue + axisHalfWidth; + ty2 = this.top + tl; + } else if (position === 'left') { + borderValue = alignBorderValue(this.right); + tx1 = this.right - tl; + tx2 = borderValue - axisHalfWidth; + x1 = alignBorderValue(chartArea.left) + axisHalfWidth; + x2 = chartArea.right; + } else if (position === 'right') { + borderValue = alignBorderValue(this.left); + x1 = chartArea.left; + x2 = alignBorderValue(chartArea.right) - axisHalfWidth; + tx1 = borderValue + axisHalfWidth; + tx2 = this.left + tl; + } else if (axis === 'x') { + if (position === 'center') { + borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + y1 = chartArea.top; + y2 = chartArea.bottom; + ty1 = borderValue + axisHalfWidth; + ty2 = ty1 + tl; + } else if (axis === 'y') { + if (position === 'center') { + borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2); + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); + } + tx1 = borderValue - axisHalfWidth; + tx2 = tx1 - tl; + x1 = chartArea.left; + x2 = chartArea.right; + } + const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength); + const step = Math.max(1, Math.ceil(ticksLength / limit)); + for (i = 0; i < ticksLength; i += step) { + const optsAtIndex = grid.setContext(this.getContext(i)); + const lineWidth = optsAtIndex.lineWidth; + const lineColor = optsAtIndex.color; + const borderDash = grid.borderDash || []; + const borderDashOffset = optsAtIndex.borderDashOffset; + const tickWidth = optsAtIndex.tickWidth; + const tickColor = optsAtIndex.tickColor; + const tickBorderDash = optsAtIndex.tickBorderDash || []; + const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset; + lineValue = getPixelForGridLine(this, i, offset); + if (lineValue === undefined) { + continue; + } + alignedLineValue = _alignPixel(chart, lineValue, lineWidth); + if (isHorizontal) { + tx1 = tx2 = x1 = x2 = alignedLineValue; + } else { + ty1 = ty2 = y1 = y2 = alignedLineValue; + } + items.push({ + tx1, + ty1, + tx2, + ty2, + x1, + y1, + x2, + y2, + width: lineWidth, + color: lineColor, + borderDash, + borderDashOffset, + tickWidth, + tickColor, + tickBorderDash, + tickBorderDashOffset, + }); + } + this._ticksLength = ticksLength; + this._borderValue = borderValue; + return items; + } + _computeLabelItems(chartArea) { + const axis = this.axis; + const options = this.options; + const {position, ticks: optionTicks} = options; + const isHorizontal = this.isHorizontal(); + const ticks = this.ticks; + const {align, crossAlign, padding, mirror} = optionTicks; + const tl = getTickMarkLength(options.grid); + const tickAndPadding = tl + padding; + const hTickAndPadding = mirror ? -padding : tickAndPadding; + const rotation = -toRadians(this.labelRotation); + const items = []; + let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; + let textBaseline = 'middle'; + if (position === 'top') { + y = this.bottom - hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === 'bottom') { + y = this.top + hTickAndPadding; + textAlign = this._getXAxisLabelAlignment(); + } else if (position === 'left') { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (position === 'right') { + const ret = this._getYAxisLabelAlignment(tl); + textAlign = ret.textAlign; + x = ret.x; + } else if (axis === 'x') { + if (position === 'center') { + y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding; + } + textAlign = this._getXAxisLabelAlignment(); + } else if (axis === 'y') { + if (position === 'center') { + x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding; + } else if (isObject(position)) { + const positionAxisID = Object.keys(position)[0]; + const value = position[positionAxisID]; + x = this.chart.scales[positionAxisID].getPixelForValue(value); + } + textAlign = this._getYAxisLabelAlignment(tl).textAlign; + } + if (axis === 'y') { + if (align === 'start') { + textBaseline = 'top'; + } else if (align === 'end') { + textBaseline = 'bottom'; + } + } + const labelSizes = this._getLabelSizes(); + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + label = tick.label; + const optsAtIndex = optionTicks.setContext(this.getContext(i)); + pixel = this.getPixelForTick(i) + optionTicks.labelOffset; + font = this._resolveTickFontOptions(i); + lineHeight = font.lineHeight; + lineCount = isArray(label) ? label.length : 1; + const halfCount = lineCount / 2; + const color = optsAtIndex.color; + const strokeColor = optsAtIndex.textStrokeColor; + const strokeWidth = optsAtIndex.textStrokeWidth; + if (isHorizontal) { + x = pixel; + if (position === 'top') { + if (crossAlign === 'near' || rotation !== 0) { + textOffset = -lineCount * lineHeight + lineHeight / 2; + } else if (crossAlign === 'center') { + textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; + } else { + textOffset = -labelSizes.highest.height + lineHeight / 2; + } + } else { + if (crossAlign === 'near' || rotation !== 0) { + textOffset = lineHeight / 2; + } else if (crossAlign === 'center') { + textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; + } else { + textOffset = labelSizes.highest.height - lineCount * lineHeight; + } + } + if (mirror) { + textOffset *= -1; + } + } else { + y = pixel; + textOffset = (1 - lineCount) * lineHeight / 2; + } + let backdrop; + if (optsAtIndex.showLabelBackdrop) { + const labelPadding = toPadding(optsAtIndex.backdropPadding); + const height = labelSizes.heights[i]; + const width = labelSizes.widths[i]; + let top = y + textOffset - labelPadding.top; + let left = x - labelPadding.left; + switch (textBaseline) { + case 'middle': + top -= height / 2; + break; + case 'bottom': + top -= height; + break; + } + switch (textAlign) { + case 'center': + left -= width / 2; + break; + case 'right': + left -= width; + break; + } + backdrop = { + left, + top, + width: width + labelPadding.width, + height: height + labelPadding.height, + color: optsAtIndex.backdropColor, + }; + } + items.push({ + rotation, + label, + font, + color, + strokeColor, + strokeWidth, + textOffset, + textAlign, + textBaseline, + translation: [x, y], + backdrop, + }); + } + return items; + } + _getXAxisLabelAlignment() { + const {position, ticks} = this.options; + const rotation = -toRadians(this.labelRotation); + if (rotation) { + return position === 'top' ? 'left' : 'right'; + } + let align = 'center'; + if (ticks.align === 'start') { + align = 'left'; + } else if (ticks.align === 'end') { + align = 'right'; + } + return align; + } + _getYAxisLabelAlignment(tl) { + const {position, ticks: {crossAlign, mirror, padding}} = this.options; + const labelSizes = this._getLabelSizes(); + const tickAndPadding = tl + padding; + const widest = labelSizes.widest.width; + let textAlign; + let x; + if (position === 'left') { + if (mirror) { + x = this.right + padding; + if (crossAlign === 'near') { + textAlign = 'left'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x += (widest / 2); + } else { + textAlign = 'right'; + x += widest; + } + } else { + x = this.right - tickAndPadding; + if (crossAlign === 'near') { + textAlign = 'right'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x -= (widest / 2); + } else { + textAlign = 'left'; + x = this.left; + } + } + } else if (position === 'right') { + if (mirror) { + x = this.left + padding; + if (crossAlign === 'near') { + textAlign = 'right'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x -= (widest / 2); + } else { + textAlign = 'left'; + x -= widest; + } + } else { + x = this.left + tickAndPadding; + if (crossAlign === 'near') { + textAlign = 'left'; + } else if (crossAlign === 'center') { + textAlign = 'center'; + x += widest / 2; + } else { + textAlign = 'right'; + x = this.right; + } + } + } else { + textAlign = 'right'; + } + return {textAlign, x}; + } + _computeLabelArea() { + if (this.options.ticks.mirror) { + return; + } + const chart = this.chart; + const position = this.options.position; + if (position === 'left' || position === 'right') { + return {top: 0, left: this.left, bottom: chart.height, right: this.right}; + } if (position === 'top' || position === 'bottom') { + return {top: this.top, left: 0, bottom: this.bottom, right: chart.width}; + } + } + drawBackground() { + const {ctx, options: {backgroundColor}, left, top, width, height} = this; + if (backgroundColor) { + ctx.save(); + ctx.fillStyle = backgroundColor; + ctx.fillRect(left, top, width, height); + ctx.restore(); + } + } + getLineWidthForValue(value) { + const grid = this.options.grid; + if (!this._isVisible() || !grid.display) { + return 0; + } + const ticks = this.ticks; + const index = ticks.findIndex(t => t.value === value); + if (index >= 0) { + const opts = grid.setContext(this.getContext(index)); + return opts.lineWidth; + } + return 0; + } + drawGrid(chartArea) { + const grid = this.options.grid; + const ctx = this.ctx; + const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea)); + let i, ilen; + const drawLine = (p1, p2, style) => { + if (!style.width || !style.color) { + return; + } + ctx.save(); + ctx.lineWidth = style.width; + ctx.strokeStyle = style.color; + ctx.setLineDash(style.borderDash || []); + ctx.lineDashOffset = style.borderDashOffset; + ctx.beginPath(); + ctx.moveTo(p1.x, p1.y); + ctx.lineTo(p2.x, p2.y); + ctx.stroke(); + ctx.restore(); + }; + if (grid.display) { + for (i = 0, ilen = items.length; i < ilen; ++i) { + const item = items[i]; + if (grid.drawOnChartArea) { + drawLine( + {x: item.x1, y: item.y1}, + {x: item.x2, y: item.y2}, + item + ); + } + if (grid.drawTicks) { + drawLine( + {x: item.tx1, y: item.ty1}, + {x: item.tx2, y: item.ty2}, + { + color: item.tickColor, + width: item.tickWidth, + borderDash: item.tickBorderDash, + borderDashOffset: item.tickBorderDashOffset + } + ); + } + } + } + } + drawBorder() { + const {chart, ctx, options: {grid}} = this; + const borderOpts = grid.setContext(this.getContext()); + const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0; + if (!axisWidth) { + return; + } + const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth; + const borderValue = this._borderValue; + let x1, x2, y1, y2; + if (this.isHorizontal()) { + x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2; + x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2; + y1 = y2 = borderValue; + } else { + y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2; + y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2; + x1 = x2 = borderValue; + } + ctx.save(); + ctx.lineWidth = borderOpts.borderWidth; + ctx.strokeStyle = borderOpts.borderColor; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.restore(); + } + drawLabels(chartArea) { + const optionTicks = this.options.ticks; + if (!optionTicks.display) { + return; + } + const ctx = this.ctx; + const area = this._computeLabelArea(); + if (area) { + clipArea(ctx, area); + } + const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea)); + let i, ilen; + for (i = 0, ilen = items.length; i < ilen; ++i) { + const item = items[i]; + const tickFont = item.font; + const label = item.label; + if (item.backdrop) { + ctx.fillStyle = item.backdrop.color; + ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height); + } + let y = item.textOffset; + renderText(ctx, label, 0, y, tickFont, item); + } + if (area) { + unclipArea(ctx); + } + } + drawTitle() { + const {ctx, options: {position, title, reverse}} = this; + if (!title.display) { + return; + } + const font = toFont(title.font); + const padding = toPadding(title.padding); + const align = title.align; + let offset = font.lineHeight / 2; + if (position === 'bottom' || position === 'center' || isObject(position)) { + offset += padding.bottom; + if (isArray(title.text)) { + offset += font.lineHeight * (title.text.length - 1); + } + } else { + offset += padding.top; + } + const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align); + renderText(ctx, title.text, 0, 0, font, { + color: title.color, + maxWidth, + rotation, + textAlign: titleAlign(align, position, reverse), + textBaseline: 'middle', + translation: [titleX, titleY], + }); + } + draw(chartArea) { + if (!this._isVisible()) { + return; + } + this.drawBackground(); + this.drawGrid(chartArea); + this.drawBorder(); + this.drawTitle(); + this.drawLabels(chartArea); + } + _layers() { + const opts = this.options; + const tz = opts.ticks && opts.ticks.z || 0; + const gz = valueOrDefault(opts.grid && opts.grid.z, -1); + if (!this._isVisible() || this.draw !== Scale.prototype.draw) { + return [{ + z: tz, + draw: (chartArea) => { + this.draw(chartArea); + } + }]; + } + return [{ + z: gz, + draw: (chartArea) => { + this.drawBackground(); + this.drawGrid(chartArea); + this.drawTitle(); + } + }, { + z: gz + 1, + draw: () => { + this.drawBorder(); + } + }, { + z: tz, + draw: (chartArea) => { + this.drawLabels(chartArea); + } + }]; + } + getMatchingVisibleMetas(type) { + const metas = this.chart.getSortedVisibleDatasetMetas(); + const axisID = this.axis + 'AxisID'; + const result = []; + let i, ilen; + for (i = 0, ilen = metas.length; i < ilen; ++i) { + const meta = metas[i]; + if (meta[axisID] === this.id && (!type || meta.type === type)) { + result.push(meta); + } + } + return result; + } + _resolveTickFontOptions(index) { + const opts = this.options.ticks.setContext(this.getContext(index)); + return toFont(opts.font); + } + _maxDigits() { + const fontSize = this._resolveTickFontOptions(0).lineHeight; + return (this.isHorizontal() ? this.width : this.height) / fontSize; + } +} + +class TypedRegistry { + constructor(type, scope, override) { + this.type = type; + this.scope = scope; + this.override = override; + this.items = Object.create(null); + } + isForType(type) { + return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype); + } + register(item) { + const proto = Object.getPrototypeOf(item); + let parentScope; + if (isIChartComponent(proto)) { + parentScope = this.register(proto); + } + const items = this.items; + const id = item.id; + const scope = this.scope + '.' + id; + if (!id) { + throw new Error('class does not have id: ' + item); + } + if (id in items) { + return scope; + } + items[id] = item; + registerDefaults(item, scope, parentScope); + if (this.override) { + defaults.override(item.id, item.overrides); + } + return scope; + } + get(id) { + return this.items[id]; + } + unregister(item) { + const items = this.items; + const id = item.id; + const scope = this.scope; + if (id in items) { + delete items[id]; + } + if (scope && id in defaults[scope]) { + delete defaults[scope][id]; + if (this.override) { + delete overrides[id]; + } + } + } +} +function registerDefaults(item, scope, parentScope) { + const itemDefaults = merge(Object.create(null), [ + parentScope ? defaults.get(parentScope) : {}, + defaults.get(scope), + item.defaults + ]); + defaults.set(scope, itemDefaults); + if (item.defaultRoutes) { + routeDefaults(scope, item.defaultRoutes); + } + if (item.descriptors) { + defaults.describe(scope, item.descriptors); + } +} +function routeDefaults(scope, routes) { + Object.keys(routes).forEach(property => { + const propertyParts = property.split('.'); + const sourceName = propertyParts.pop(); + const sourceScope = [scope].concat(propertyParts).join('.'); + const parts = routes[property].split('.'); + const targetName = parts.pop(); + const targetScope = parts.join('.'); + defaults.route(sourceScope, sourceName, targetScope, targetName); + }); +} +function isIChartComponent(proto) { + return 'id' in proto && 'defaults' in proto; +} + +class Registry { + constructor() { + this.controllers = new TypedRegistry(DatasetController, 'datasets', true); + this.elements = new TypedRegistry(Element, 'elements'); + this.plugins = new TypedRegistry(Object, 'plugins'); + this.scales = new TypedRegistry(Scale, 'scales'); + this._typedRegistries = [this.controllers, this.scales, this.elements]; + } + add(...args) { + this._each('register', args); + } + remove(...args) { + this._each('unregister', args); + } + addControllers(...args) { + this._each('register', args, this.controllers); + } + addElements(...args) { + this._each('register', args, this.elements); + } + addPlugins(...args) { + this._each('register', args, this.plugins); + } + addScales(...args) { + this._each('register', args, this.scales); + } + getController(id) { + return this._get(id, this.controllers, 'controller'); + } + getElement(id) { + return this._get(id, this.elements, 'element'); + } + getPlugin(id) { + return this._get(id, this.plugins, 'plugin'); + } + getScale(id) { + return this._get(id, this.scales, 'scale'); + } + removeControllers(...args) { + this._each('unregister', args, this.controllers); + } + removeElements(...args) { + this._each('unregister', args, this.elements); + } + removePlugins(...args) { + this._each('unregister', args, this.plugins); + } + removeScales(...args) { + this._each('unregister', args, this.scales); + } + _each(method, args, typedRegistry) { + [...args].forEach(arg => { + const reg = typedRegistry || this._getRegistryForType(arg); + if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) { + this._exec(method, reg, arg); + } else { + each(arg, item => { + const itemReg = typedRegistry || this._getRegistryForType(item); + this._exec(method, itemReg, item); + }); + } + }); + } + _exec(method, registry, component) { + const camelMethod = _capitalize(method); + callback(component['before' + camelMethod], [], component); + registry[method](component); + callback(component['after' + camelMethod], [], component); + } + _getRegistryForType(type) { + for (let i = 0; i < this._typedRegistries.length; i++) { + const reg = this._typedRegistries[i]; + if (reg.isForType(type)) { + return reg; + } + } + return this.plugins; + } + _get(id, typedRegistry, type) { + const item = typedRegistry.get(id); + if (item === undefined) { + throw new Error('"' + id + '" is not a registered ' + type + '.'); + } + return item; + } +} +var registry = new Registry(); + +class PluginService { + constructor() { + this._init = []; + } + notify(chart, hook, args, filter) { + if (hook === 'beforeInit') { + this._init = this._createDescriptors(chart, true); + this._notify(this._init, chart, 'install'); + } + const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart); + const result = this._notify(descriptors, chart, hook, args); + if (hook === 'afterDestroy') { + this._notify(descriptors, chart, 'stop'); + this._notify(this._init, chart, 'uninstall'); + } + return result; + } + _notify(descriptors, chart, hook, args) { + args = args || {}; + for (const descriptor of descriptors) { + const plugin = descriptor.plugin; + const method = plugin[hook]; + const params = [chart, args, descriptor.options]; + if (callback(method, params, plugin) === false && args.cancelable) { + return false; + } + } + return true; + } + invalidate() { + if (!isNullOrUndef(this._cache)) { + this._oldCache = this._cache; + this._cache = undefined; + } + } + _descriptors(chart) { + if (this._cache) { + return this._cache; + } + const descriptors = this._cache = this._createDescriptors(chart); + this._notifyStateChanges(chart); + return descriptors; + } + _createDescriptors(chart, all) { + const config = chart && chart.config; + const options = valueOrDefault(config.options && config.options.plugins, {}); + const plugins = allPlugins(config); + return options === false && !all ? [] : createDescriptors(chart, plugins, options, all); + } + _notifyStateChanges(chart) { + const previousDescriptors = this._oldCache || []; + const descriptors = this._cache; + const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id)); + this._notify(diff(previousDescriptors, descriptors), chart, 'stop'); + this._notify(diff(descriptors, previousDescriptors), chart, 'start'); + } +} +function allPlugins(config) { + const plugins = []; + const keys = Object.keys(registry.plugins.items); + for (let i = 0; i < keys.length; i++) { + plugins.push(registry.getPlugin(keys[i])); + } + const local = config.plugins || []; + for (let i = 0; i < local.length; i++) { + const plugin = local[i]; + if (plugins.indexOf(plugin) === -1) { + plugins.push(plugin); + } + } + return plugins; +} +function getOpts(options, all) { + if (!all && options === false) { + return null; + } + if (options === true) { + return {}; + } + return options; +} +function createDescriptors(chart, plugins, options, all) { + const result = []; + const context = chart.getContext(); + for (let i = 0; i < plugins.length; i++) { + const plugin = plugins[i]; + const id = plugin.id; + const opts = getOpts(options[id], all); + if (opts === null) { + continue; + } + result.push({ + plugin, + options: pluginOpts(chart.config, plugin, opts, context) + }); + } + return result; +} +function pluginOpts(config, plugin, opts, context) { + const keys = config.pluginScopeKeys(plugin); + const scopes = config.getOptionScopes(opts, keys); + return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true}); +} + +function getIndexAxis(type, options) { + const datasetDefaults = defaults.datasets[type] || {}; + const datasetOptions = (options.datasets || {})[type] || {}; + return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x'; +} +function getAxisFromDefaultScaleID(id, indexAxis) { + let axis = id; + if (id === '_index_') { + axis = indexAxis; + } else if (id === '_value_') { + axis = indexAxis === 'x' ? 'y' : 'x'; + } + return axis; +} +function getDefaultScaleIDFromAxis(axis, indexAxis) { + return axis === indexAxis ? '_index_' : '_value_'; +} +function axisFromPosition(position) { + if (position === 'top' || position === 'bottom') { + return 'x'; + } + if (position === 'left' || position === 'right') { + return 'y'; + } +} +function determineAxis(id, scaleOptions) { + if (id === 'x' || id === 'y') { + return id; + } + return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase(); +} +function mergeScaleConfig(config, options) { + const chartDefaults = overrides[config.type] || {scales: {}}; + const configScales = options.scales || {}; + const chartIndexAxis = getIndexAxis(config.type, options); + const firstIDs = Object.create(null); + const scales = Object.create(null); + Object.keys(configScales).forEach(id => { + const scaleConf = configScales[id]; + if (!isObject(scaleConf)) { + return console.error(`Invalid scale configuration for scale: ${id}`); + } + if (scaleConf._proxy) { + return console.warn(`Ignoring resolver passed as options for scale: ${id}`); + } + const axis = determineAxis(id, scaleConf); + const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); + const defaultScaleOptions = chartDefaults.scales || {}; + firstIDs[axis] = firstIDs[axis] || id; + scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]); + }); + config.data.datasets.forEach(dataset => { + const type = dataset.type || config.type; + const indexAxis = dataset.indexAxis || getIndexAxis(type, options); + const datasetDefaults = overrides[type] || {}; + const defaultScaleOptions = datasetDefaults.scales || {}; + Object.keys(defaultScaleOptions).forEach(defaultID => { + const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); + const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis; + scales[id] = scales[id] || Object.create(null); + mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]); + }); + }); + Object.keys(scales).forEach(key => { + const scale = scales[key]; + mergeIf(scale, [defaults.scales[scale.type], defaults.scale]); + }); + return scales; +} +function initOptions(config) { + const options = config.options || (config.options = {}); + options.plugins = valueOrDefault(options.plugins, {}); + options.scales = mergeScaleConfig(config, options); +} +function initData(data) { + data = data || {}; + data.datasets = data.datasets || []; + data.labels = data.labels || []; + return data; +} +function initConfig(config) { + config = config || {}; + config.data = initData(config.data); + initOptions(config); + return config; +} +const keyCache = new Map(); +const keysCached = new Set(); +function cachedKeys(cacheKey, generate) { + let keys = keyCache.get(cacheKey); + if (!keys) { + keys = generate(); + keyCache.set(cacheKey, keys); + keysCached.add(keys); + } + return keys; +} +const addIfFound = (set, obj, key) => { + const opts = resolveObjectKey(obj, key); + if (opts !== undefined) { + set.add(opts); + } +}; +class Config { + constructor(config) { + this._config = initConfig(config); + this._scopeCache = new Map(); + this._resolverCache = new Map(); + } + get platform() { + return this._config.platform; + } + get type() { + return this._config.type; + } + set type(type) { + this._config.type = type; + } + get data() { + return this._config.data; + } + set data(data) { + this._config.data = initData(data); + } + get options() { + return this._config.options; + } + set options(options) { + this._config.options = options; + } + get plugins() { + return this._config.plugins; + } + update() { + const config = this._config; + this.clearCache(); + initOptions(config); + } + clearCache() { + this._scopeCache.clear(); + this._resolverCache.clear(); + } + datasetScopeKeys(datasetType) { + return cachedKeys(datasetType, + () => [[ + `datasets.${datasetType}`, + '' + ]]); + } + datasetAnimationScopeKeys(datasetType, transition) { + return cachedKeys(`${datasetType}.transition.${transition}`, + () => [ + [ + `datasets.${datasetType}.transitions.${transition}`, + `transitions.${transition}`, + ], + [ + `datasets.${datasetType}`, + '' + ] + ]); + } + datasetElementScopeKeys(datasetType, elementType) { + return cachedKeys(`${datasetType}-${elementType}`, + () => [[ + `datasets.${datasetType}.elements.${elementType}`, + `datasets.${datasetType}`, + `elements.${elementType}`, + '' + ]]); + } + pluginScopeKeys(plugin) { + const id = plugin.id; + const type = this.type; + return cachedKeys(`${type}-plugin-${id}`, + () => [[ + `plugins.${id}`, + ...plugin.additionalOptionScopes || [], + ]]); + } + _cachedScopes(mainScope, resetCache) { + const _scopeCache = this._scopeCache; + let cache = _scopeCache.get(mainScope); + if (!cache || resetCache) { + cache = new Map(); + _scopeCache.set(mainScope, cache); + } + return cache; + } + getOptionScopes(mainScope, keyLists, resetCache) { + const {options, type} = this; + const cache = this._cachedScopes(mainScope, resetCache); + const cached = cache.get(keyLists); + if (cached) { + return cached; + } + const scopes = new Set(); + keyLists.forEach(keys => { + if (mainScope) { + scopes.add(mainScope); + keys.forEach(key => addIfFound(scopes, mainScope, key)); + } + keys.forEach(key => addIfFound(scopes, options, key)); + keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key)); + keys.forEach(key => addIfFound(scopes, defaults, key)); + keys.forEach(key => addIfFound(scopes, descriptors, key)); + }); + const array = Array.from(scopes); + if (array.length === 0) { + array.push(Object.create(null)); + } + if (keysCached.has(keyLists)) { + cache.set(keyLists, array); + } + return array; + } + chartOptionScopes() { + const {options, type} = this; + return [ + options, + overrides[type] || {}, + defaults.datasets[type] || {}, + {type}, + defaults, + descriptors + ]; + } + resolveNamedOptions(scopes, names, context, prefixes = ['']) { + const result = {$shared: true}; + const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes); + let options = resolver; + if (needContext(resolver, names)) { + result.$shared = false; + context = isFunction(context) ? context() : context; + const subResolver = this.createResolver(scopes, context, subPrefixes); + options = _attachContext(resolver, context, subResolver); + } + for (const prop of names) { + result[prop] = options[prop]; + } + return result; + } + createResolver(scopes, context, prefixes = [''], descriptorDefaults) { + const {resolver} = getResolver(this._resolverCache, scopes, prefixes); + return isObject(context) + ? _attachContext(resolver, context, undefined, descriptorDefaults) + : resolver; + } +} +function getResolver(resolverCache, scopes, prefixes) { + let cache = resolverCache.get(scopes); + if (!cache) { + cache = new Map(); + resolverCache.set(scopes, cache); + } + const cacheKey = prefixes.join(); + let cached = cache.get(cacheKey); + if (!cached) { + const resolver = _createResolver(scopes, prefixes); + cached = { + resolver, + subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover')) + }; + cache.set(cacheKey, cached); + } + return cached; +} +const hasFunction = value => isObject(value) + && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false); +function needContext(proxy, names) { + const {isScriptable, isIndexable} = _descriptors(proxy); + for (const prop of names) { + const scriptable = isScriptable(prop); + const indexable = isIndexable(prop); + const value = (indexable || scriptable) && proxy[prop]; + if ((scriptable && (isFunction(value) || hasFunction(value))) + || (indexable && isArray(value))) { + return true; + } + } + return false; +} + +var version = "3.7.1"; + +const KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea']; +function positionIsHorizontal(position, axis) { + return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x'); +} +function compare2Level(l1, l2) { + return function(a, b) { + return a[l1] === b[l1] + ? a[l2] - b[l2] + : a[l1] - b[l1]; + }; +} +function onAnimationsComplete(context) { + const chart = context.chart; + const animationOptions = chart.options.animation; + chart.notifyPlugins('afterRender'); + callback(animationOptions && animationOptions.onComplete, [context], chart); +} +function onAnimationProgress(context) { + const chart = context.chart; + const animationOptions = chart.options.animation; + callback(animationOptions && animationOptions.onProgress, [context], chart); +} +function getCanvas(item) { + if (_isDomSupported() && typeof item === 'string') { + item = document.getElementById(item); + } else if (item && item.length) { + item = item[0]; + } + if (item && item.canvas) { + item = item.canvas; + } + return item; +} +const instances = {}; +const getChart = (key) => { + const canvas = getCanvas(key); + return Object.values(instances).filter((c) => c.canvas === canvas).pop(); +}; +function moveNumericKeys(obj, start, move) { + const keys = Object.keys(obj); + for (const key of keys) { + const intKey = +key; + if (intKey >= start) { + const value = obj[key]; + delete obj[key]; + if (move > 0 || intKey > start) { + obj[intKey + move] = value; + } + } + } +} +function determineLastEvent(e, lastEvent, inChartArea, isClick) { + if (!inChartArea || e.type === 'mouseout') { + return null; + } + if (isClick) { + return lastEvent; + } + return e; +} +class Chart { + constructor(item, userConfig) { + const config = this.config = new Config(userConfig); + const initialCanvas = getCanvas(item); + const existingChart = getChart(initialCanvas); + if (existingChart) { + throw new Error( + 'Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' + + ' must be destroyed before the canvas can be reused.' + ); + } + const options = config.createResolver(config.chartOptionScopes(), this.getContext()); + this.platform = new (config.platform || _detectPlatform(initialCanvas))(); + this.platform.updateConfig(config); + const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); + const canvas = context && context.canvas; + const height = canvas && canvas.height; + const width = canvas && canvas.width; + this.id = uid(); + this.ctx = context; + this.canvas = canvas; + this.width = width; + this.height = height; + this._options = options; + this._aspectRatio = this.aspectRatio; + this._layers = []; + this._metasets = []; + this._stacks = undefined; + this.boxes = []; + this.currentDevicePixelRatio = undefined; + this.chartArea = undefined; + this._active = []; + this._lastEvent = undefined; + this._listeners = {}; + this._responsiveListeners = undefined; + this._sortedMetasets = []; + this.scales = {}; + this._plugins = new PluginService(); + this.$proxies = {}; + this._hiddenIndices = {}; + this.attached = false; + this._animationsDisabled = undefined; + this.$context = undefined; + this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0); + this._dataChanges = []; + instances[this.id] = this; + if (!context || !canvas) { + console.error("Failed to create chart: can't acquire context from the given item"); + return; + } + animator.listen(this, 'complete', onAnimationsComplete); + animator.listen(this, 'progress', onAnimationProgress); + this._initialize(); + if (this.attached) { + this.update(); + } + } + get aspectRatio() { + const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this; + if (!isNullOrUndef(aspectRatio)) { + return aspectRatio; + } + if (maintainAspectRatio && _aspectRatio) { + return _aspectRatio; + } + return height ? width / height : null; + } + get data() { + return this.config.data; + } + set data(data) { + this.config.data = data; + } + get options() { + return this._options; + } + set options(options) { + this.config.options = options; + } + _initialize() { + this.notifyPlugins('beforeInit'); + if (this.options.responsive) { + this.resize(); + } else { + retinaScale(this, this.options.devicePixelRatio); + } + this.bindEvents(); + this.notifyPlugins('afterInit'); + return this; + } + clear() { + clearCanvas(this.canvas, this.ctx); + return this; + } + stop() { + animator.stop(this); + return this; + } + resize(width, height) { + if (!animator.running(this)) { + this._resize(width, height); + } else { + this._resizeBeforeDraw = {width, height}; + } + } + _resize(width, height) { + const options = this.options; + const canvas = this.canvas; + const aspectRatio = options.maintainAspectRatio && this.aspectRatio; + const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio); + const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio(); + const mode = this.width ? 'resize' : 'attach'; + this.width = newSize.width; + this.height = newSize.height; + this._aspectRatio = this.aspectRatio; + if (!retinaScale(this, newRatio, true)) { + return; + } + this.notifyPlugins('resize', {size: newSize}); + callback(options.onResize, [this, newSize], this); + if (this.attached) { + if (this._doResize(mode)) { + this.render(); + } + } + } + ensureScalesHaveIDs() { + const options = this.options; + const scalesOptions = options.scales || {}; + each(scalesOptions, (axisOptions, axisID) => { + axisOptions.id = axisID; + }); + } + buildOrUpdateScales() { + const options = this.options; + const scaleOpts = options.scales; + const scales = this.scales; + const updated = Object.keys(scales).reduce((obj, id) => { + obj[id] = false; + return obj; + }, {}); + let items = []; + if (scaleOpts) { + items = items.concat( + Object.keys(scaleOpts).map((id) => { + const scaleOptions = scaleOpts[id]; + const axis = determineAxis(id, scaleOptions); + const isRadial = axis === 'r'; + const isHorizontal = axis === 'x'; + return { + options: scaleOptions, + dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left', + dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear' + }; + }) + ); + } + each(items, (item) => { + const scaleOptions = item.options; + const id = scaleOptions.id; + const axis = determineAxis(id, scaleOptions); + const scaleType = valueOrDefault(scaleOptions.type, item.dtype); + if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) { + scaleOptions.position = item.dposition; + } + updated[id] = true; + let scale = null; + if (id in scales && scales[id].type === scaleType) { + scale = scales[id]; + } else { + const scaleClass = registry.getScale(scaleType); + scale = new scaleClass({ + id, + type: scaleType, + ctx: this.ctx, + chart: this + }); + scales[scale.id] = scale; + } + scale.init(scaleOptions, options); + }); + each(updated, (hasUpdated, id) => { + if (!hasUpdated) { + delete scales[id]; + } + }); + each(scales, (scale) => { + layouts.configure(this, scale, scale.options); + layouts.addBox(this, scale); + }); + } + _updateMetasets() { + const metasets = this._metasets; + const numData = this.data.datasets.length; + const numMeta = metasets.length; + metasets.sort((a, b) => a.index - b.index); + if (numMeta > numData) { + for (let i = numData; i < numMeta; ++i) { + this._destroyDatasetMeta(i); + } + metasets.splice(numData, numMeta - numData); + } + this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index')); + } + _removeUnreferencedMetasets() { + const {_metasets: metasets, data: {datasets}} = this; + if (metasets.length > datasets.length) { + delete this._stacks; + } + metasets.forEach((meta, index) => { + if (datasets.filter(x => x === meta._dataset).length === 0) { + this._destroyDatasetMeta(index); + } + }); + } + buildOrUpdateControllers() { + const newControllers = []; + const datasets = this.data.datasets; + let i, ilen; + this._removeUnreferencedMetasets(); + for (i = 0, ilen = datasets.length; i < ilen; i++) { + const dataset = datasets[i]; + let meta = this.getDatasetMeta(i); + const type = dataset.type || this.config.type; + if (meta.type && meta.type !== type) { + this._destroyDatasetMeta(i); + meta = this.getDatasetMeta(i); + } + meta.type = type; + meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options); + meta.order = dataset.order || 0; + meta.index = i; + meta.label = '' + dataset.label; + meta.visible = this.isDatasetVisible(i); + if (meta.controller) { + meta.controller.updateIndex(i); + meta.controller.linkScales(); + } else { + const ControllerClass = registry.getController(type); + const {datasetElementType, dataElementType} = defaults.datasets[type]; + Object.assign(ControllerClass.prototype, { + dataElementType: registry.getElement(dataElementType), + datasetElementType: datasetElementType && registry.getElement(datasetElementType) + }); + meta.controller = new ControllerClass(this, i); + newControllers.push(meta.controller); + } + } + this._updateMetasets(); + return newControllers; + } + _resetElements() { + each(this.data.datasets, (dataset, datasetIndex) => { + this.getDatasetMeta(datasetIndex).controller.reset(); + }, this); + } + reset() { + this._resetElements(); + this.notifyPlugins('reset'); + } + update(mode) { + const config = this.config; + config.update(); + const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); + const animsDisabled = this._animationsDisabled = !options.animation; + this._updateScales(); + this._checkEventBindings(); + this._updateHiddenIndices(); + this._plugins.invalidate(); + if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) { + return; + } + const newControllers = this.buildOrUpdateControllers(); + this.notifyPlugins('beforeElementsUpdate'); + let minPadding = 0; + for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) { + const {controller} = this.getDatasetMeta(i); + const reset = !animsDisabled && newControllers.indexOf(controller) === -1; + controller.buildOrUpdateElements(reset); + minPadding = Math.max(+controller.getMaxOverflow(), minPadding); + } + minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; + this._updateLayout(minPadding); + if (!animsDisabled) { + each(newControllers, (controller) => { + controller.reset(); + }); + } + this._updateDatasets(mode); + this.notifyPlugins('afterUpdate', {mode}); + this._layers.sort(compare2Level('z', '_idx')); + const {_active, _lastEvent} = this; + if (_lastEvent) { + this._eventHandler(_lastEvent, true); + } else if (_active.length) { + this._updateHoverStyles(_active, _active, true); + } + this.render(); + } + _updateScales() { + each(this.scales, (scale) => { + layouts.removeBox(this, scale); + }); + this.ensureScalesHaveIDs(); + this.buildOrUpdateScales(); + } + _checkEventBindings() { + const options = this.options; + const existingEvents = new Set(Object.keys(this._listeners)); + const newEvents = new Set(options.events); + if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { + this.unbindEvents(); + this.bindEvents(); + } + } + _updateHiddenIndices() { + const {_hiddenIndices} = this; + const changes = this._getUniformDataChanges() || []; + for (const {method, start, count} of changes) { + const move = method === '_removeElements' ? -count : count; + moveNumericKeys(_hiddenIndices, start, move); + } + } + _getUniformDataChanges() { + const _dataChanges = this._dataChanges; + if (!_dataChanges || !_dataChanges.length) { + return; + } + this._dataChanges = []; + const datasetCount = this.data.datasets.length; + const makeSet = (idx) => new Set( + _dataChanges + .filter(c => c[0] === idx) + .map((c, i) => i + ',' + c.splice(1).join(',')) + ); + const changeSet = makeSet(0); + for (let i = 1; i < datasetCount; i++) { + if (!setsEqual(changeSet, makeSet(i))) { + return; + } + } + return Array.from(changeSet) + .map(c => c.split(',')) + .map(a => ({method: a[1], start: +a[2], count: +a[3]})); + } + _updateLayout(minPadding) { + if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) { + return; + } + layouts.update(this, this.width, this.height, minPadding); + const area = this.chartArea; + const noArea = area.width <= 0 || area.height <= 0; + this._layers = []; + each(this.boxes, (box) => { + if (noArea && box.position === 'chartArea') { + return; + } + if (box.configure) { + box.configure(); + } + this._layers.push(...box._layers()); + }, this); + this._layers.forEach((item, index) => { + item._idx = index; + }); + this.notifyPlugins('afterLayout'); + } + _updateDatasets(mode) { + if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) { + return; + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this.getDatasetMeta(i).controller.configure(); + } + for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode); + } + this.notifyPlugins('afterDatasetsUpdate', {mode}); + } + _updateDataset(index, mode) { + const meta = this.getDatasetMeta(index); + const args = {meta, index, mode, cancelable: true}; + if (this.notifyPlugins('beforeDatasetUpdate', args) === false) { + return; + } + meta.controller._update(mode); + args.cancelable = false; + this.notifyPlugins('afterDatasetUpdate', args); + } + render() { + if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) { + return; + } + if (animator.has(this)) { + if (this.attached && !animator.running(this)) { + animator.start(this); + } + } else { + this.draw(); + onAnimationsComplete({chart: this}); + } + } + draw() { + let i; + if (this._resizeBeforeDraw) { + const {width, height} = this._resizeBeforeDraw; + this._resize(width, height); + this._resizeBeforeDraw = null; + } + this.clear(); + if (this.width <= 0 || this.height <= 0) { + return; + } + if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) { + return; + } + const layers = this._layers; + for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { + layers[i].draw(this.chartArea); + } + this._drawDatasets(); + for (; i < layers.length; ++i) { + layers[i].draw(this.chartArea); + } + this.notifyPlugins('afterDraw'); + } + _getSortedDatasetMetas(filterVisible) { + const metasets = this._sortedMetasets; + const result = []; + let i, ilen; + for (i = 0, ilen = metasets.length; i < ilen; ++i) { + const meta = metasets[i]; + if (!filterVisible || meta.visible) { + result.push(meta); + } + } + return result; + } + getSortedVisibleDatasetMetas() { + return this._getSortedDatasetMetas(true); + } + _drawDatasets() { + if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) { + return; + } + const metasets = this.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + this._drawDataset(metasets[i]); + } + this.notifyPlugins('afterDatasetsDraw'); + } + _drawDataset(meta) { + const ctx = this.ctx; + const clip = meta._clip; + const useClip = !clip.disabled; + const area = this.chartArea; + const args = { + meta, + index: meta.index, + cancelable: true + }; + if (this.notifyPlugins('beforeDatasetDraw', args) === false) { + return; + } + if (useClip) { + clipArea(ctx, { + left: clip.left === false ? 0 : area.left - clip.left, + right: clip.right === false ? this.width : area.right + clip.right, + top: clip.top === false ? 0 : area.top - clip.top, + bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom + }); + } + meta.controller.draw(); + if (useClip) { + unclipArea(ctx); + } + args.cancelable = false; + this.notifyPlugins('afterDatasetDraw', args); + } + getElementsAtEventForMode(e, mode, options, useFinalPosition) { + const method = Interaction.modes[mode]; + if (typeof method === 'function') { + return method(this, e, options, useFinalPosition); + } + return []; + } + getDatasetMeta(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + const metasets = this._metasets; + let meta = metasets.filter(x => x && x._dataset === dataset).pop(); + if (!meta) { + meta = { + type: null, + data: [], + dataset: null, + controller: null, + hidden: null, + xAxisID: null, + yAxisID: null, + order: dataset && dataset.order || 0, + index: datasetIndex, + _dataset: dataset, + _parsed: [], + _sorted: false + }; + metasets.push(meta); + } + return meta; + } + getContext() { + return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'})); + } + getVisibleDatasetCount() { + return this.getSortedVisibleDatasetMetas().length; + } + isDatasetVisible(datasetIndex) { + const dataset = this.data.datasets[datasetIndex]; + if (!dataset) { + return false; + } + const meta = this.getDatasetMeta(datasetIndex); + return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden; + } + setDatasetVisibility(datasetIndex, visible) { + const meta = this.getDatasetMeta(datasetIndex); + meta.hidden = !visible; + } + toggleDataVisibility(index) { + this._hiddenIndices[index] = !this._hiddenIndices[index]; + } + getDataVisibility(index) { + return !this._hiddenIndices[index]; + } + _updateVisibility(datasetIndex, dataIndex, visible) { + const mode = visible ? 'show' : 'hide'; + const meta = this.getDatasetMeta(datasetIndex); + const anims = meta.controller._resolveAnimations(undefined, mode); + if (defined(dataIndex)) { + meta.data[dataIndex].hidden = !visible; + this.update(); + } else { + this.setDatasetVisibility(datasetIndex, visible); + anims.update(meta, {visible}); + this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined); + } + } + hide(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, false); + } + show(datasetIndex, dataIndex) { + this._updateVisibility(datasetIndex, dataIndex, true); + } + _destroyDatasetMeta(datasetIndex) { + const meta = this._metasets[datasetIndex]; + if (meta && meta.controller) { + meta.controller._destroy(); + } + delete this._metasets[datasetIndex]; + } + _stop() { + let i, ilen; + this.stop(); + animator.remove(this); + for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + this._destroyDatasetMeta(i); + } + } + destroy() { + this.notifyPlugins('beforeDestroy'); + const {canvas, ctx} = this; + this._stop(); + this.config.clearCache(); + if (canvas) { + this.unbindEvents(); + clearCanvas(canvas, ctx); + this.platform.releaseContext(ctx); + this.canvas = null; + this.ctx = null; + } + this.notifyPlugins('destroy'); + delete instances[this.id]; + this.notifyPlugins('afterDestroy'); + } + toBase64Image(...args) { + return this.canvas.toDataURL(...args); + } + bindEvents() { + this.bindUserEvents(); + if (this.options.responsive) { + this.bindResponsiveEvents(); + } else { + this.attached = true; + } + } + bindUserEvents() { + const listeners = this._listeners; + const platform = this.platform; + const _add = (type, listener) => { + platform.addEventListener(this, type, listener); + listeners[type] = listener; + }; + const listener = (e, x, y) => { + e.offsetX = x; + e.offsetY = y; + this._eventHandler(e); + }; + each(this.options.events, (type) => _add(type, listener)); + } + bindResponsiveEvents() { + if (!this._responsiveListeners) { + this._responsiveListeners = {}; + } + const listeners = this._responsiveListeners; + const platform = this.platform; + const _add = (type, listener) => { + platform.addEventListener(this, type, listener); + listeners[type] = listener; + }; + const _remove = (type, listener) => { + if (listeners[type]) { + platform.removeEventListener(this, type, listener); + delete listeners[type]; + } + }; + const listener = (width, height) => { + if (this.canvas) { + this.resize(width, height); + } + }; + let detached; + const attached = () => { + _remove('attach', attached); + this.attached = true; + this.resize(); + _add('resize', listener); + _add('detach', detached); + }; + detached = () => { + this.attached = false; + _remove('resize', listener); + this._stop(); + this._resize(0, 0); + _add('attach', attached); + }; + if (platform.isAttached(this.canvas)) { + attached(); + } else { + detached(); + } + } + unbindEvents() { + each(this._listeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._listeners = {}; + each(this._responsiveListeners, (listener, type) => { + this.platform.removeEventListener(this, type, listener); + }); + this._responsiveListeners = undefined; + } + updateHoverStyle(items, mode, enabled) { + const prefix = enabled ? 'set' : 'remove'; + let meta, item, i, ilen; + if (mode === 'dataset') { + meta = this.getDatasetMeta(items[0].datasetIndex); + meta.controller['_' + prefix + 'DatasetHoverStyle'](); + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + item = items[i]; + const controller = item && this.getDatasetMeta(item.datasetIndex).controller; + if (controller) { + controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index); + } + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements) { + const lastActive = this._active || []; + const active = activeElements.map(({datasetIndex, index}) => { + const meta = this.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error('No dataset found at index ' + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index], + index, + }; + }); + const changed = !_elementsEqual(active, lastActive); + if (changed) { + this._active = active; + this._lastEvent = null; + this._updateHoverStyles(active, lastActive); + } + } + notifyPlugins(hook, args, filter) { + return this._plugins.notify(this, hook, args, filter); + } + _updateHoverStyles(active, lastActive, replay) { + const hoverOptions = this.options.hover; + const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index)); + const deactivated = diff(lastActive, active); + const activated = replay ? active : diff(active, lastActive); + if (deactivated.length) { + this.updateHoverStyle(deactivated, hoverOptions.mode, false); + } + if (activated.length && hoverOptions.mode) { + this.updateHoverStyle(activated, hoverOptions.mode, true); + } + } + _eventHandler(e, replay) { + const args = { + event: e, + replay, + cancelable: true, + inChartArea: _isPointInArea(e, this.chartArea, this._minPadding) + }; + const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type); + if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) { + return; + } + const changed = this._handleEvent(e, replay, args.inChartArea); + args.cancelable = false; + this.notifyPlugins('afterEvent', args, eventFilter); + if (changed || args.changed) { + this.render(); + } + return this; + } + _handleEvent(e, replay, inChartArea) { + const {_active: lastActive = [], options} = this; + const useFinalPosition = replay; + const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition); + const isClick = _isClickEvent(e); + const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick); + if (inChartArea) { + this._lastEvent = null; + callback(options.onHover, [e, active, this], this); + if (isClick) { + callback(options.onClick, [e, active, this], this); + } + } + const changed = !_elementsEqual(active, lastActive); + if (changed || replay) { + this._active = active; + this._updateHoverStyles(active, lastActive, replay); + } + this._lastEvent = lastEvent; + return changed; + } + _getActiveElements(e, lastActive, inChartArea, useFinalPosition) { + if (e.type === 'mouseout') { + return []; + } + if (!inChartArea) { + return lastActive; + } + const hoverOptions = this.options.hover; + return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition); + } +} +const invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate()); +const enumerable = true; +Object.defineProperties(Chart, { + defaults: { + enumerable, + value: defaults + }, + instances: { + enumerable, + value: instances + }, + overrides: { + enumerable, + value: overrides + }, + registry: { + enumerable, + value: registry + }, + version: { + enumerable, + value: version + }, + getChart: { + enumerable, + value: getChart + }, + register: { + enumerable, + value: (...items) => { + registry.add(...items); + invalidatePlugins(); + } + }, + unregister: { + enumerable, + value: (...items) => { + registry.remove(...items); + invalidatePlugins(); + } + } +}); + +function abstract() { + throw new Error('This method is not implemented: Check that a complete date adapter is provided.'); +} +class DateAdapter { + constructor(options) { + this.options = options || {}; + } + formats() { + return abstract(); + } + parse(value, format) { + return abstract(); + } + format(timestamp, format) { + return abstract(); + } + add(timestamp, amount, unit) { + return abstract(); + } + diff(a, b, unit) { + return abstract(); + } + startOf(timestamp, unit, weekday) { + return abstract(); + } + endOf(timestamp, unit) { + return abstract(); + } +} +DateAdapter.override = function(members) { + Object.assign(DateAdapter.prototype, members); +}; +var _adapters = { + _date: DateAdapter +}; + +function getAllScaleValues(scale, type) { + if (!scale._cache.$bar) { + const visibleMetas = scale.getMatchingVisibleMetas(type); + let values = []; + for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) { + values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale)); + } + scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b)); + } + return scale._cache.$bar; +} +function computeMinSampleSize(meta) { + const scale = meta.iScale; + const values = getAllScaleValues(scale, meta.type); + let min = scale._length; + let i, ilen, curr, prev; + const updateMinAndPrev = () => { + if (curr === 32767 || curr === -32768) { + return; + } + if (defined(prev)) { + min = Math.min(min, Math.abs(curr - prev) || min); + } + prev = curr; + }; + for (i = 0, ilen = values.length; i < ilen; ++i) { + curr = scale.getPixelForValue(values[i]); + updateMinAndPrev(); + } + prev = undefined; + for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) { + curr = scale.getPixelForTick(i); + updateMinAndPrev(); + } + return min; +} +function computeFitCategoryTraits(index, ruler, options, stackCount) { + const thickness = options.barThickness; + let size, ratio; + if (isNullOrUndef(thickness)) { + size = ruler.min * options.categoryPercentage; + ratio = options.barPercentage; + } else { + size = thickness * stackCount; + ratio = 1; + } + return { + chunk: size / stackCount, + ratio, + start: ruler.pixels[index] - (size / 2) + }; +} +function computeFlexCategoryTraits(index, ruler, options, stackCount) { + const pixels = ruler.pixels; + const curr = pixels[index]; + let prev = index > 0 ? pixels[index - 1] : null; + let next = index < pixels.length - 1 ? pixels[index + 1] : null; + const percent = options.categoryPercentage; + if (prev === null) { + prev = curr - (next === null ? ruler.end - ruler.start : next - curr); + } + if (next === null) { + next = curr + curr - prev; + } + const start = curr - (curr - Math.min(prev, next)) / 2 * percent; + const size = Math.abs(next - prev) / 2 * percent; + return { + chunk: size / stackCount, + ratio: options.barPercentage, + start + }; +} +function parseFloatBar(entry, item, vScale, i) { + const startValue = vScale.parse(entry[0], i); + const endValue = vScale.parse(entry[1], i); + const min = Math.min(startValue, endValue); + const max = Math.max(startValue, endValue); + let barStart = min; + let barEnd = max; + if (Math.abs(min) > Math.abs(max)) { + barStart = max; + barEnd = min; + } + item[vScale.axis] = barEnd; + item._custom = { + barStart, + barEnd, + start: startValue, + end: endValue, + min, + max + }; +} +function parseValue(entry, item, vScale, i) { + if (isArray(entry)) { + parseFloatBar(entry, item, vScale, i); + } else { + item[vScale.axis] = vScale.parse(entry, i); + } + return item; +} +function parseArrayOrPrimitive(meta, data, start, count) { + const iScale = meta.iScale; + const vScale = meta.vScale; + const labels = iScale.getLabels(); + const singleScale = iScale === vScale; + const parsed = []; + let i, ilen, item, entry; + for (i = start, ilen = start + count; i < ilen; ++i) { + entry = data[i]; + item = {}; + item[iScale.axis] = singleScale || iScale.parse(labels[i], i); + parsed.push(parseValue(entry, item, vScale, i)); + } + return parsed; +} +function isFloatBar(custom) { + return custom && custom.barStart !== undefined && custom.barEnd !== undefined; +} +function barSign(size, vScale, actualBase) { + if (size !== 0) { + return sign(size); + } + return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1); +} +function borderProps(properties) { + let reverse, start, end, top, bottom; + if (properties.horizontal) { + reverse = properties.base > properties.x; + start = 'left'; + end = 'right'; + } else { + reverse = properties.base < properties.y; + start = 'bottom'; + end = 'top'; + } + if (reverse) { + top = 'end'; + bottom = 'start'; + } else { + top = 'start'; + bottom = 'end'; + } + return {start, end, reverse, top, bottom}; +} +function setBorderSkipped(properties, options, stack, index) { + let edge = options.borderSkipped; + const res = {}; + if (!edge) { + properties.borderSkipped = res; + return; + } + const {start, end, reverse, top, bottom} = borderProps(properties); + if (edge === 'middle' && stack) { + properties.enableBorderRadius = true; + if ((stack._top || 0) === index) { + edge = top; + } else if ((stack._bottom || 0) === index) { + edge = bottom; + } else { + res[parseEdge(bottom, start, end, reverse)] = true; + edge = top; + } + } + res[parseEdge(edge, start, end, reverse)] = true; + properties.borderSkipped = res; +} +function parseEdge(edge, a, b, reverse) { + if (reverse) { + edge = swap(edge, a, b); + edge = startEnd(edge, b, a); + } else { + edge = startEnd(edge, a, b); + } + return edge; +} +function swap(orig, v1, v2) { + return orig === v1 ? v2 : orig === v2 ? v1 : orig; +} +function startEnd(v, start, end) { + return v === 'start' ? start : v === 'end' ? end : v; +} +function setInflateAmount(properties, {inflateAmount}, ratio) { + properties.inflateAmount = inflateAmount === 'auto' + ? ratio === 1 ? 0.33 : 0 + : inflateAmount; +} +class BarController extends DatasetController { + parsePrimitiveData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseArrayData(meta, data, start, count) { + return parseArrayOrPrimitive(meta, data, start, count); + } + parseObjectData(meta, data, start, count) { + const {iScale, vScale} = meta; + const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing; + const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey; + const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey; + const parsed = []; + let i, ilen, item, obj; + for (i = start, ilen = start + count; i < ilen; ++i) { + obj = data[i]; + item = {}; + item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i); + parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i)); + } + return parsed; + } + updateRangeFromParsed(range, scale, parsed, stack) { + super.updateRangeFromParsed(range, scale, parsed, stack); + const custom = parsed._custom; + if (custom && scale === this._cachedMeta.vScale) { + range.min = Math.min(range.min, custom.min); + range.max = Math.max(range.max, custom.max); + } + } + getMaxOverflow() { + return 0; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const {iScale, vScale} = meta; + const parsed = this.getParsed(index); + const custom = parsed._custom; + const value = isFloatBar(custom) + ? '[' + custom.start + ', ' + custom.end + ']' + : '' + vScale.getLabelForValue(parsed[vScale.axis]); + return { + label: '' + iScale.getLabelForValue(parsed[iScale.axis]), + value + }; + } + initialize() { + this.enableOptionSharing = true; + super.initialize(); + const meta = this._cachedMeta; + meta.stack = this.getDataset().stack; + } + update(mode) { + const meta = this._cachedMeta; + this.updateElements(meta.data, 0, meta.data.length, mode); + } + updateElements(bars, start, count, mode) { + const reset = mode === 'reset'; + const {index, _cachedMeta: {vScale}} = this; + const base = vScale.getBasePixel(); + const horizontal = vScale.isHorizontal(); + const ruler = this._getRuler(); + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + this.updateSharedOptions(sharedOptions, mode, firstOpts); + for (let i = start; i < start + count; i++) { + const parsed = this.getParsed(i); + const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i); + const ipixels = this._calculateBarIndexPixels(i, ruler); + const stack = (parsed._stacks || {})[vScale.axis]; + const properties = { + horizontal, + base: vpixels.base, + enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom), + x: horizontal ? vpixels.head : ipixels.center, + y: horizontal ? ipixels.center : vpixels.head, + height: horizontal ? ipixels.size : Math.abs(vpixels.size), + width: horizontal ? Math.abs(vpixels.size) : ipixels.size + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode); + } + const options = properties.options || bars[i].options; + setBorderSkipped(properties, options, stack, index); + setInflateAmount(properties, options, ruler.ratio); + this.updateElement(bars[i], i, properties, mode); + } + } + _getStacks(last, dataIndex) { + const meta = this._cachedMeta; + const iScale = meta.iScale; + const metasets = iScale.getMatchingVisibleMetas(this._type); + const stacked = iScale.options.stacked; + const ilen = metasets.length; + const stacks = []; + let i, item; + for (i = 0; i < ilen; ++i) { + item = metasets[i]; + if (!item.controller.options.grouped) { + continue; + } + if (typeof dataIndex !== 'undefined') { + const val = item.controller.getParsed(dataIndex)[ + item.controller._cachedMeta.vScale.axis + ]; + if (isNullOrUndef(val) || isNaN(val)) { + continue; + } + } + if (stacked === false || stacks.indexOf(item.stack) === -1 || + (stacked === undefined && item.stack === undefined)) { + stacks.push(item.stack); + } + if (item.index === last) { + break; + } + } + if (!stacks.length) { + stacks.push(undefined); + } + return stacks; + } + _getStackCount(index) { + return this._getStacks(undefined, index).length; + } + _getStackIndex(datasetIndex, name, dataIndex) { + const stacks = this._getStacks(datasetIndex, dataIndex); + const index = (name !== undefined) + ? stacks.indexOf(name) + : -1; + return (index === -1) + ? stacks.length - 1 + : index; + } + _getRuler() { + const opts = this.options; + const meta = this._cachedMeta; + const iScale = meta.iScale; + const pixels = []; + let i, ilen; + for (i = 0, ilen = meta.data.length; i < ilen; ++i) { + pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i)); + } + const barThickness = opts.barThickness; + const min = barThickness || computeMinSampleSize(meta); + return { + min, + pixels, + start: iScale._startPixel, + end: iScale._endPixel, + stackCount: this._getStackCount(), + scale: iScale, + grouped: opts.grouped, + ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage + }; + } + _calculateBarValuePixels(index) { + const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this; + const actualBase = baseValue || 0; + const parsed = this.getParsed(index); + const custom = parsed._custom; + const floating = isFloatBar(custom); + let value = parsed[vScale.axis]; + let start = 0; + let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value; + let head, size; + if (length !== value) { + start = length - value; + length = value; + } + if (floating) { + value = custom.barStart; + length = custom.barEnd - custom.barStart; + if (value !== 0 && sign(value) !== sign(custom.barEnd)) { + start = 0; + } + start += value; + } + const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start; + let base = vScale.getPixelForValue(startValue); + if (this.chart.getDataVisibility(index)) { + head = vScale.getPixelForValue(start + length); + } else { + head = base; + } + size = head - base; + if (Math.abs(size) < minBarLength) { + size = barSign(size, vScale, actualBase) * minBarLength; + if (value === actualBase) { + base -= size / 2; + } + head = base + size; + } + if (base === vScale.getPixelForValue(actualBase)) { + const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2; + base += halfGrid; + size -= halfGrid; + } + return { + size, + base, + head, + center: head + size / 2 + }; + } + _calculateBarIndexPixels(index, ruler) { + const scale = ruler.scale; + const options = this.options; + const skipNull = options.skipNull; + const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); + let center, size; + if (ruler.grouped) { + const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount; + const range = options.barThickness === 'flex' + ? computeFlexCategoryTraits(index, ruler, options, stackCount) + : computeFitCategoryTraits(index, ruler, options, stackCount); + const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined); + center = range.start + (range.chunk * stackIndex) + (range.chunk / 2); + size = Math.min(maxBarThickness, range.chunk * range.ratio); + } else { + center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index); + size = Math.min(maxBarThickness, ruler.min * ruler.ratio); + } + return { + base: center - size / 2, + head: center + size / 2, + center, + size + }; + } + draw() { + const meta = this._cachedMeta; + const vScale = meta.vScale; + const rects = meta.data; + const ilen = rects.length; + let i = 0; + for (; i < ilen; ++i) { + if (this.getParsed(i)[vScale.axis] !== null) { + rects[i].draw(this._ctx); + } + } + } +} +BarController.id = 'bar'; +BarController.defaults = { + datasetElementType: false, + dataElementType: 'bar', + categoryPercentage: 0.8, + barPercentage: 0.9, + grouped: true, + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'base', 'width', 'height'] + } + } +}; +BarController.overrides = { + scales: { + _index_: { + type: 'category', + offset: true, + grid: { + offset: true + } + }, + _value_: { + type: 'linear', + beginAtZero: true, + } + } +}; + +class BubbleController extends DatasetController { + initialize() { + this.enableOptionSharing = true; + super.initialize(); + } + parsePrimitiveData(meta, data, start, count) { + const parsed = super.parsePrimitiveData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + parsed[i]._custom = this.resolveDataElementOptions(i + start).radius; + } + return parsed; + } + parseArrayData(meta, data, start, count) { + const parsed = super.parseArrayData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + parseObjectData(meta, data, start, count) { + const parsed = super.parseObjectData(meta, data, start, count); + for (let i = 0; i < parsed.length; i++) { + const item = data[start + i]; + parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius); + } + return parsed; + } + getMaxOverflow() { + const data = this._cachedMeta.data; + let max = 0; + for (let i = data.length - 1; i >= 0; --i) { + max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2); + } + return max > 0 && max; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const {xScale, yScale} = meta; + const parsed = this.getParsed(index); + const x = xScale.getLabelForValue(parsed.x); + const y = yScale.getLabelForValue(parsed.y); + const r = parsed._custom; + return { + label: meta.label, + value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')' + }; + } + update(mode) { + const points = this._cachedMeta.data; + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === 'reset'; + const {iScale, vScale} = this._cachedMeta; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const parsed = !reset && this.getParsed(i); + const properties = {}; + const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]); + const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]); + properties.skip = isNaN(iPixel) || isNaN(vPixel); + if (includeOptions) { + properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode); + if (reset) { + properties.options.radius = 0; + } + } + this.updateElement(point, i, properties, mode); + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + resolveDataElementOptions(index, mode) { + const parsed = this.getParsed(index); + let values = super.resolveDataElementOptions(index, mode); + if (values.$shared) { + values = Object.assign({}, values, {$shared: false}); + } + const radius = values.radius; + if (mode !== 'active') { + values.radius = 0; + } + values.radius += valueOrDefault(parsed && parsed._custom, radius); + return values; + } +} +BubbleController.id = 'bubble'; +BubbleController.defaults = { + datasetElementType: false, + dataElementType: 'point', + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'borderWidth', 'radius'] + } + } +}; +BubbleController.overrides = { + scales: { + x: { + type: 'linear' + }, + y: { + type: 'linear' + } + }, + plugins: { + tooltip: { + callbacks: { + title() { + return ''; + } + } + } + } +}; + +function getRatioAndOffset(rotation, circumference, cutout) { + let ratioX = 1; + let ratioY = 1; + let offsetX = 0; + let offsetY = 0; + if (circumference < TAU) { + const startAngle = rotation; + const endAngle = startAngle + circumference; + const startX = Math.cos(startAngle); + const startY = Math.sin(startAngle); + const endX = Math.cos(endAngle); + const endY = Math.sin(endAngle); + const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout); + const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout); + const maxX = calcMax(0, startX, endX); + const maxY = calcMax(HALF_PI, startY, endY); + const minX = calcMin(PI, startX, endX); + const minY = calcMin(PI + HALF_PI, startY, endY); + ratioX = (maxX - minX) / 2; + ratioY = (maxY - minY) / 2; + offsetX = -(maxX + minX) / 2; + offsetY = -(maxY + minY) / 2; + } + return {ratioX, ratioY, offsetX, offsetY}; +} +class DoughnutController extends DatasetController { + constructor(chart, datasetIndex) { + super(chart, datasetIndex); + this.enableOptionSharing = true; + this.innerRadius = undefined; + this.outerRadius = undefined; + this.offsetX = undefined; + this.offsetY = undefined; + } + linkScales() {} + parse(start, count) { + const data = this.getDataset().data; + const meta = this._cachedMeta; + if (this._parsing === false) { + meta._parsed = data; + } else { + let getter = (i) => +data[i]; + if (isObject(data[start])) { + const {key = 'value'} = this._parsing; + getter = (i) => +resolveObjectKey(data[i], key); + } + let i, ilen; + for (i = start, ilen = start + count; i < ilen; ++i) { + meta._parsed[i] = getter(i); + } + } + } + _getRotation() { + return toRadians(this.options.rotation - 90); + } + _getCircumference() { + return toRadians(this.options.circumference); + } + _getRotationExtents() { + let min = TAU; + let max = -TAU; + for (let i = 0; i < this.chart.data.datasets.length; ++i) { + if (this.chart.isDatasetVisible(i)) { + const controller = this.chart.getDatasetMeta(i).controller; + const rotation = controller._getRotation(); + const circumference = controller._getCircumference(); + min = Math.min(min, rotation); + max = Math.max(max, rotation + circumference); + } + } + return { + rotation: min, + circumference: max - min, + }; + } + update(mode) { + const chart = this.chart; + const {chartArea} = chart; + const meta = this._cachedMeta; + const arcs = meta.data; + const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing; + const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); + const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1); + const chartWeight = this._getRingWeight(this.index); + const {circumference, rotation} = this._getRotationExtents(); + const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout); + const maxWidth = (chartArea.width - spacing) / ratioX; + const maxHeight = (chartArea.height - spacing) / ratioY; + const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); + const outerRadius = toDimension(this.options.radius, maxRadius); + const innerRadius = Math.max(outerRadius * cutout, 0); + const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal(); + this.offsetX = offsetX * outerRadius; + this.offsetY = offsetY * outerRadius; + meta.total = this.calculateTotal(); + this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index); + this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0); + this.updateElements(arcs, 0, arcs.length, mode); + } + _circumference(i, reset) { + const opts = this.options; + const meta = this._cachedMeta; + const circumference = this._getCircumference(); + if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) { + return 0; + } + return this.calculateCircumference(meta._parsed[i] * circumference / TAU); + } + updateElements(arcs, start, count, mode) { + const reset = mode === 'reset'; + const chart = this.chart; + const chartArea = chart.chartArea; + const opts = chart.options; + const animationOpts = opts.animation; + const centerX = (chartArea.left + chartArea.right) / 2; + const centerY = (chartArea.top + chartArea.bottom) / 2; + const animateScale = reset && animationOpts.animateScale; + const innerRadius = animateScale ? 0 : this.innerRadius; + const outerRadius = animateScale ? 0 : this.outerRadius; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + let startAngle = this._getRotation(); + let i; + for (i = 0; i < start; ++i) { + startAngle += this._circumference(i, reset); + } + for (i = start; i < start + count; ++i) { + const circumference = this._circumference(i, reset); + const arc = arcs[i]; + const properties = { + x: centerX + this.offsetX, + y: centerY + this.offsetY, + startAngle, + endAngle: startAngle + circumference, + circumference, + outerRadius, + innerRadius + }; + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode); + } + startAngle += circumference; + this.updateElement(arc, i, properties, mode); + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + calculateTotal() { + const meta = this._cachedMeta; + const metaData = meta.data; + let total = 0; + let i; + for (i = 0; i < metaData.length; i++) { + const value = meta._parsed[i]; + if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) { + total += Math.abs(value); + } + } + return total; + } + calculateCircumference(value) { + const total = this._cachedMeta.total; + if (total > 0 && !isNaN(value)) { + return TAU * (Math.abs(value) / total); + } + return 0; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const chart = this.chart; + const labels = chart.data.labels || []; + const value = formatNumber(meta._parsed[index], chart.options.locale); + return { + label: labels[index] || '', + value, + }; + } + getMaxBorderWidth(arcs) { + let max = 0; + const chart = this.chart; + let i, ilen, meta, controller, options; + if (!arcs) { + for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { + if (chart.isDatasetVisible(i)) { + meta = chart.getDatasetMeta(i); + arcs = meta.data; + controller = meta.controller; + break; + } + } + } + if (!arcs) { + return 0; + } + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + options = controller.resolveDataElementOptions(i); + if (options.borderAlign !== 'inner') { + max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0); + } + } + return max; + } + getMaxOffset(arcs) { + let max = 0; + for (let i = 0, ilen = arcs.length; i < ilen; ++i) { + const options = this.resolveDataElementOptions(i); + max = Math.max(max, options.offset || 0, options.hoverOffset || 0); + } + return max; + } + _getRingWeightOffset(datasetIndex) { + let ringWeightOffset = 0; + for (let i = 0; i < datasetIndex; ++i) { + if (this.chart.isDatasetVisible(i)) { + ringWeightOffset += this._getRingWeight(i); + } + } + return ringWeightOffset; + } + _getRingWeight(datasetIndex) { + return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0); + } + _getVisibleDatasetWeightTotal() { + return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; + } +} +DoughnutController.id = 'doughnut'; +DoughnutController.defaults = { + datasetElementType: false, + dataElementType: 'arc', + animation: { + animateRotate: true, + animateScale: false + }, + 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', +}; +DoughnutController.descriptors = { + _scriptable: (name) => name !== 'spacing', + _indexable: (name) => name !== 'spacing', +}; +DoughnutController.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + const {labels: {pointStyle}} = chart.legend.options; + return data.labels.map((label, i) => { + const meta = chart.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + strokeStyle: style.borderColor, + lineWidth: style.borderWidth, + pointStyle: pointStyle, + hidden: !chart.getDataVisibility(i), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + }, + tooltip: { + callbacks: { + title() { + return ''; + }, + label(tooltipItem) { + let dataLabel = tooltipItem.label; + const value = ': ' + tooltipItem.formattedValue; + if (isArray(dataLabel)) { + dataLabel = dataLabel.slice(); + dataLabel[0] += value; + } else { + dataLabel += value; + } + return dataLabel; + } + } + } + } +}; + +class LineController extends DatasetController { + initialize() { + this.enableOptionSharing = true; + super.initialize(); + } + update(mode) { + const meta = this._cachedMeta; + const {dataset: line, data: points = [], _dataset} = meta; + const animationsDisabled = this.chart._animationsDisabled; + let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled); + this._drawStart = start; + this._drawCount = count; + if (scaleRangesChanged(meta)) { + start = 0; + count = points.length; + } + line._chart = this.chart; + line._datasetIndex = this.index; + line._decimated = !!_dataset._decimated; + line.points = points; + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + options.segment = this.options.segment; + this.updateElement(line, undefined, { + animated: !animationsDisabled, + options + }, mode); + this.updateElements(points, start, count, mode); + } + updateElements(points, start, count, mode) { + const reset = mode === 'reset'; + const {iScale, vScale, _stacked, _dataset} = this._cachedMeta; + const firstOpts = this.resolveDataElementOptions(start, mode); + const sharedOptions = this.getSharedOptions(firstOpts); + const includeOptions = this.includeOptions(mode, sharedOptions); + const iAxis = iScale.axis; + const vAxis = vScale.axis; + const {spanGaps, segment} = this.options; + const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY; + const directUpdate = this.chart._animationsDisabled || reset || mode === 'none'; + let prevParsed = start > 0 && this.getParsed(start - 1); + for (let i = start; i < start + count; ++i) { + const point = points[i]; + const parsed = this.getParsed(i); + const properties = directUpdate ? point : {}; + const nullData = isNullOrUndef(parsed[vAxis]); + const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i); + const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i); + properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData; + properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength; + if (segment) { + properties.parsed = parsed; + properties.raw = _dataset.data[i]; + } + if (includeOptions) { + properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode); + } + if (!directUpdate) { + this.updateElement(point, i, properties, mode); + } + prevParsed = parsed; + } + this.updateSharedOptions(sharedOptions, mode, firstOpts); + } + getMaxOverflow() { + const meta = this._cachedMeta; + const dataset = meta.dataset; + const border = dataset.options && dataset.options.borderWidth || 0; + const data = meta.data || []; + if (!data.length) { + return border; + } + const firstPoint = data[0].size(this.resolveDataElementOptions(0)); + const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1)); + return Math.max(border, firstPoint, lastPoint) / 2; + } + draw() { + const meta = this._cachedMeta; + meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis); + super.draw(); + } +} +LineController.id = 'line'; +LineController.defaults = { + datasetElementType: 'line', + dataElementType: 'point', + showLine: true, + spanGaps: false, +}; +LineController.overrides = { + scales: { + _index_: { + type: 'category', + }, + _value_: { + type: 'linear', + }, + } +}; +function getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) { + const pointCount = points.length; + let start = 0; + let count = pointCount; + if (meta._sorted) { + const {iScale, _parsed} = meta; + const axis = iScale.axis; + const {min, max, minDefined, maxDefined} = iScale.getUserBounds(); + if (minDefined) { + start = _limitValue(Math.min( + _lookupByKey(_parsed, iScale.axis, min).lo, + animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), + 0, pointCount - 1); + } + if (maxDefined) { + count = _limitValue(Math.max( + _lookupByKey(_parsed, iScale.axis, max).hi + 1, + animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), + start, pointCount) - start; + } else { + count = pointCount - start; + } + } + return {start, count}; +} +function scaleRangesChanged(meta) { + const {xScale, yScale, _scaleRanges} = meta; + const newRanges = { + xmin: xScale.min, + xmax: xScale.max, + ymin: yScale.min, + ymax: yScale.max + }; + if (!_scaleRanges) { + meta._scaleRanges = newRanges; + return true; + } + const changed = _scaleRanges.xmin !== xScale.min + || _scaleRanges.xmax !== xScale.max + || _scaleRanges.ymin !== yScale.min + || _scaleRanges.ymax !== yScale.max; + Object.assign(_scaleRanges, newRanges); + return changed; +} + +class PolarAreaController extends DatasetController { + constructor(chart, datasetIndex) { + super(chart, datasetIndex); + this.innerRadius = undefined; + this.outerRadius = undefined; + } + getLabelAndValue(index) { + const meta = this._cachedMeta; + const chart = this.chart; + const labels = chart.data.labels || []; + const value = formatNumber(meta._parsed[index].r, chart.options.locale); + return { + label: labels[index] || '', + value, + }; + } + update(mode) { + const arcs = this._cachedMeta.data; + this._updateRadius(); + this.updateElements(arcs, 0, arcs.length, mode); + } + _updateRadius() { + const chart = this.chart; + const chartArea = chart.chartArea; + const opts = chart.options; + const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); + const outerRadius = Math.max(minSize / 2, 0); + const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); + const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount(); + this.outerRadius = outerRadius - (radiusLength * this.index); + this.innerRadius = this.outerRadius - radiusLength; + } + updateElements(arcs, start, count, mode) { + const reset = mode === 'reset'; + const chart = this.chart; + const dataset = this.getDataset(); + const opts = chart.options; + const animationOpts = opts.animation; + const scale = this._cachedMeta.rScale; + const centerX = scale.xCenter; + const centerY = scale.yCenter; + const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI; + let angle = datasetStartAngle; + let i; + const defaultAngle = 360 / this.countVisibleElements(); + for (i = 0; i < start; ++i) { + angle += this._computeAngle(i, mode, defaultAngle); + } + for (i = start; i < start + count; i++) { + const arc = arcs[i]; + let startAngle = angle; + let endAngle = angle + this._computeAngle(i, mode, defaultAngle); + let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0; + angle = endAngle; + if (reset) { + if (animationOpts.animateScale) { + outerRadius = 0; + } + if (animationOpts.animateRotate) { + startAngle = endAngle = datasetStartAngle; + } + } + const properties = { + x: centerX, + y: centerY, + innerRadius: 0, + outerRadius, + startAngle, + endAngle, + options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode) + }; + this.updateElement(arc, i, properties, mode); + } + } + countVisibleElements() { + const dataset = this.getDataset(); + const meta = this._cachedMeta; + let count = 0; + meta.data.forEach((element, index) => { + if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) { + count++; + } + }); + return count; + } + _computeAngle(index, mode, defaultAngle) { + return this.chart.getDataVisibility(index) + ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) + : 0; + } +} +PolarAreaController.id = 'polarArea'; +PolarAreaController.defaults = { + dataElementType: 'arc', + animation: { + animateRotate: true, + animateScale: true + }, + animations: { + numbers: { + type: 'number', + properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'] + }, + }, + indexAxis: 'r', + startAngle: 0, +}; +PolarAreaController.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(chart) { + const data = chart.data; + if (data.labels.length && data.datasets.length) { + const {labels: {pointStyle}} = chart.legend.options; + return data.labels.map((label, i) => { + const meta = chart.getDatasetMeta(0); + const style = meta.controller.getStyle(i); + return { + text: label, + fillStyle: style.backgroundColor, + strokeStyle: style.borderColor, + lineWidth: style.borderWidth, + pointStyle: pointStyle, + hidden: !chart.getDataVisibility(i), + index: i + }; + }); + } + return []; + } + }, + onClick(e, legendItem, legend) { + legend.chart.toggleDataVisibility(legendItem.index); + legend.chart.update(); + } + }, + tooltip: { + callbacks: { + title() { + return ''; + }, + label(context) { + return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue; + } + } + } + }, + scales: { + r: { + type: 'radialLinear', + angleLines: { + display: false + }, + beginAtZero: true, + grid: { + circular: true + }, + pointLabels: { + display: false + }, + startAngle: 0 + } + } +}; + +class PieController extends DoughnutController { +} +PieController.id = 'pie'; +PieController.defaults = { + cutout: 0, + rotation: 0, + circumference: 360, + radius: '100%' +}; + +class RadarController extends DatasetController { + getLabelAndValue(index) { + const vScale = this._cachedMeta.vScale; + const parsed = this.getParsed(index); + return { + label: vScale.getLabels()[index], + value: '' + vScale.getLabelForValue(parsed[vScale.axis]) + }; + } + update(mode) { + const meta = this._cachedMeta; + const line = meta.dataset; + const points = meta.data || []; + const labels = meta.iScale.getLabels(); + line.points = points; + if (mode !== 'resize') { + const options = this.resolveDatasetElementOptions(mode); + if (!this.options.showLine) { + options.borderWidth = 0; + } + const properties = { + _loop: true, + _fullLoop: labels.length === points.length, + options + }; + this.updateElement(line, undefined, properties, mode); + } + this.updateElements(points, 0, points.length, mode); + } + updateElements(points, start, count, mode) { + const dataset = this.getDataset(); + const scale = this._cachedMeta.rScale; + const reset = mode === 'reset'; + for (let i = start; i < start + count; i++) { + const point = points[i]; + const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode); + const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]); + const x = reset ? scale.xCenter : pointPosition.x; + const y = reset ? scale.yCenter : pointPosition.y; + const properties = { + x, + y, + angle: pointPosition.angle, + skip: isNaN(x) || isNaN(y), + options + }; + this.updateElement(point, i, properties, mode); + } + } +} +RadarController.id = 'radar'; +RadarController.defaults = { + datasetElementType: 'line', + dataElementType: 'point', + indexAxis: 'r', + showLine: true, + elements: { + line: { + fill: 'start' + } + }, +}; +RadarController.overrides = { + aspectRatio: 1, + scales: { + r: { + type: 'radialLinear', + } + } +}; + +class ScatterController extends LineController { +} +ScatterController.id = 'scatter'; +ScatterController.defaults = { + showLine: false, + fill: false +}; +ScatterController.overrides = { + interaction: { + mode: 'point' + }, + plugins: { + tooltip: { + callbacks: { + title() { + return ''; + }, + label(item) { + return '(' + item.label + ', ' + item.formattedValue + ')'; + } + } + } + }, + scales: { + x: { + type: 'linear' + }, + y: { + type: 'linear' + } + } +}; + +var controllers = /*#__PURE__*/Object.freeze({ +__proto__: null, +BarController: BarController, +BubbleController: BubbleController, +DoughnutController: DoughnutController, +LineController: LineController, +PolarAreaController: PolarAreaController, +PieController: PieController, +RadarController: RadarController, +ScatterController: ScatterController +}); + +function clipArc(ctx, element, endAngle) { + const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element; + let angleMargin = pixelMargin / outerRadius; + ctx.beginPath(); + ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin); + if (innerRadius > pixelMargin) { + angleMargin = pixelMargin / innerRadius; + ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true); + } else { + ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI); + } + ctx.closePath(); + ctx.clip(); +} +function toRadiusCorners(value) { + return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']); +} +function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) { + const o = toRadiusCorners(arc.options.borderRadius); + const halfThickness = (outerRadius - innerRadius) / 2; + const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); + const computeOuterLimit = (val) => { + const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2; + return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit)); + }; + return { + outerStart: computeOuterLimit(o.outerStart), + outerEnd: computeOuterLimit(o.outerEnd), + innerStart: _limitValue(o.innerStart, 0, innerLimit), + innerEnd: _limitValue(o.innerEnd, 0, innerLimit), + }; +} +function rThetaToXY(r, theta, x, y) { + return { + x: x + r * Math.cos(theta), + y: y + r * Math.sin(theta), + }; +} +function pathArc(ctx, element, offset, spacing, end) { + const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element; + const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); + const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; + let spacingOffset = 0; + const alpha = end - start; + if (spacing) { + const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; + const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; + const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; + const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha; + spacingOffset = (alpha - adjustedAngle) / 2; + } + const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius; + const angleOffset = (alpha - beta) / 2; + const startAngle = start + angleOffset + spacingOffset; + const endAngle = end - angleOffset - spacingOffset; + const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle); + const outerStartAdjustedRadius = outerRadius - outerStart; + const outerEndAdjustedRadius = outerRadius - outerEnd; + const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius; + const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius; + const innerStartAdjustedRadius = innerRadius + innerStart; + const innerEndAdjustedRadius = innerRadius + innerEnd; + const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius; + const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius; + ctx.beginPath(); + ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle); + if (outerEnd > 0) { + const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI); + } + const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y); + ctx.lineTo(p4.x, p4.y); + if (innerEnd > 0) { + const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI); + } + ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true); + if (innerStart > 0) { + const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI); + } + const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y); + ctx.lineTo(p8.x, p8.y); + if (outerStart > 0) { + const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y); + ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle); + } + ctx.closePath(); +} +function drawArc(ctx, element, offset, spacing) { + const {fullCircles, startAngle, circumference} = element; + let endAngle = element.endAngle; + if (fullCircles) { + pathArc(ctx, element, offset, spacing, startAngle + TAU); + for (let i = 0; i < fullCircles; ++i) { + ctx.fill(); + } + if (!isNaN(circumference)) { + endAngle = startAngle + circumference % TAU; + if (circumference % TAU === 0) { + endAngle += TAU; + } + } + } + pathArc(ctx, element, offset, spacing, endAngle); + ctx.fill(); + return endAngle; +} +function drawFullCircleBorders(ctx, element, inner) { + const {x, y, startAngle, pixelMargin, fullCircles} = element; + const outerRadius = Math.max(element.outerRadius - pixelMargin, 0); + const innerRadius = element.innerRadius + pixelMargin; + let i; + if (inner) { + clipArc(ctx, element, startAngle + TAU); + } + ctx.beginPath(); + ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true); + for (i = 0; i < fullCircles; ++i) { + ctx.stroke(); + } + ctx.beginPath(); + ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU); + for (i = 0; i < fullCircles; ++i) { + ctx.stroke(); + } +} +function drawBorder(ctx, element, offset, spacing, endAngle) { + const {options} = element; + const {borderWidth, borderJoinStyle} = options; + const inner = options.borderAlign === 'inner'; + if (!borderWidth) { + return; + } + if (inner) { + ctx.lineWidth = borderWidth * 2; + ctx.lineJoin = borderJoinStyle || 'round'; + } else { + ctx.lineWidth = borderWidth; + ctx.lineJoin = borderJoinStyle || 'bevel'; + } + if (element.fullCircles) { + drawFullCircleBorders(ctx, element, inner); + } + if (inner) { + clipArc(ctx, element, endAngle); + } + pathArc(ctx, element, offset, spacing, endAngle); + ctx.stroke(); +} +class ArcElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.circumference = undefined; + this.startAngle = undefined; + this.endAngle = undefined; + this.innerRadius = undefined; + this.outerRadius = undefined; + this.pixelMargin = 0; + this.fullCircles = 0; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(chartX, chartY, useFinalPosition) { + const point = this.getProps(['x', 'y'], useFinalPosition); + const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY}); + const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([ + 'startAngle', + 'endAngle', + 'innerRadius', + 'outerRadius', + 'circumference' + ], useFinalPosition); + const rAdjust = this.options.spacing / 2; + const _circumference = valueOrDefault(circumference, endAngle - startAngle); + const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle); + const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); + return (betweenAngles && withinRadius); + } + getCenterPoint(useFinalPosition) { + const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([ + 'x', + 'y', + 'startAngle', + 'endAngle', + 'innerRadius', + 'outerRadius', + 'circumference', + ], useFinalPosition); + const {offset, spacing} = this.options; + const halfAngle = (startAngle + endAngle) / 2; + const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; + return { + x: x + Math.cos(halfAngle) * halfRadius, + y: y + Math.sin(halfAngle) * halfRadius + }; + } + tooltipPosition(useFinalPosition) { + return this.getCenterPoint(useFinalPosition); + } + draw(ctx) { + const {options, circumference} = this; + const offset = (options.offset || 0) / 2; + const spacing = (options.spacing || 0) / 2; + this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0; + this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; + if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) { + return; + } + ctx.save(); + let radiusOffset = 0; + if (offset) { + radiusOffset = offset / 2; + const halfAngle = (this.startAngle + this.endAngle) / 2; + ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset); + if (this.circumference >= PI) { + radiusOffset = offset; + } + } + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + const endAngle = drawArc(ctx, this, radiusOffset, spacing); + drawBorder(ctx, this, radiusOffset, spacing, endAngle); + ctx.restore(); + } +} +ArcElement.id = 'arc'; +ArcElement.defaults = { + borderAlign: 'center', + borderColor: '#fff', + borderJoinStyle: undefined, + borderRadius: 0, + borderWidth: 2, + offset: 0, + spacing: 0, + angle: undefined, +}; +ArcElement.defaultRoutes = { + backgroundColor: 'backgroundColor' +}; + +function setStyle(ctx, options, style = options) { + ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle); + ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash)); + ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset); + ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle); + ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth); + ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor); +} +function lineTo(ctx, previous, target) { + ctx.lineTo(target.x, target.y); +} +function getLineMethod(options) { + if (options.stepped) { + return _steppedLineTo; + } + if (options.tension || options.cubicInterpolationMode === 'monotone') { + return _bezierCurveTo; + } + return lineTo; +} +function pathVars(points, segment, params = {}) { + const count = points.length; + const {start: paramsStart = 0, end: paramsEnd = count - 1} = params; + const {start: segmentStart, end: segmentEnd} = segment; + const start = Math.max(paramsStart, segmentStart); + const end = Math.min(paramsEnd, segmentEnd); + const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd; + return { + count, + start, + loop: segment.loop, + ilen: end < start && !outside ? count + end - start : end - start + }; +} +function pathSegment(ctx, line, segment, params) { + const {points, options} = line; + const {count, start, loop, ilen} = pathVars(points, segment, params); + const lineMethod = getLineMethod(options); + let {move = true, reverse} = params || {}; + let i, point, prev; + for (i = 0; i <= ilen; ++i) { + point = points[(start + (reverse ? ilen - i : i)) % count]; + if (point.skip) { + continue; + } else if (move) { + ctx.moveTo(point.x, point.y); + move = false; + } else { + lineMethod(ctx, prev, point, reverse, options.stepped); + } + prev = point; + } + if (loop) { + point = points[(start + (reverse ? ilen : 0)) % count]; + lineMethod(ctx, prev, point, reverse, options.stepped); + } + return !!loop; +} +function fastPathSegment(ctx, line, segment, params) { + const points = line.points; + const {count, start, ilen} = pathVars(points, segment, params); + const {move = true, reverse} = params || {}; + let avgX = 0; + let countX = 0; + let i, point, prevX, minY, maxY, lastY; + const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count; + const drawX = () => { + if (minY !== maxY) { + ctx.lineTo(avgX, maxY); + ctx.lineTo(avgX, minY); + ctx.lineTo(avgX, lastY); + } + }; + if (move) { + point = points[pointIndex(0)]; + ctx.moveTo(point.x, point.y); + } + for (i = 0; i <= ilen; ++i) { + point = points[pointIndex(i)]; + if (point.skip) { + continue; + } + const x = point.x; + const y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + } else if (y > maxY) { + maxY = y; + } + avgX = (countX * avgX + x) / ++countX; + } else { + drawX(); + ctx.lineTo(x, y); + prevX = truncX; + countX = 0; + minY = maxY = y; + } + lastY = y; + } + drawX(); +} +function _getSegmentMethod(line) { + const opts = line.options; + const borderDash = opts.borderDash && opts.borderDash.length; + const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash; + return useFastPath ? fastPathSegment : pathSegment; +} +function _getInterpolationMethod(options) { + if (options.stepped) { + return _steppedInterpolation; + } + if (options.tension || options.cubicInterpolationMode === 'monotone') { + return _bezierInterpolation; + } + return _pointInLine; +} +function strokePathWithCache(ctx, line, start, count) { + let path = line._path; + if (!path) { + path = line._path = new Path2D(); + if (line.path(path, start, count)) { + path.closePath(); + } + } + setStyle(ctx, line.options); + ctx.stroke(path); +} +function strokePathDirect(ctx, line, start, count) { + const {segments, options} = line; + const segmentMethod = _getSegmentMethod(line); + for (const segment of segments) { + setStyle(ctx, options, segment.style); + ctx.beginPath(); + if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) { + ctx.closePath(); + } + ctx.stroke(); + } +} +const usePath2D = typeof Path2D === 'function'; +function draw(ctx, line, start, count) { + if (usePath2D && !line.options.segment) { + strokePathWithCache(ctx, line, start, count); + } else { + strokePathDirect(ctx, line, start, count); + } +} +class LineElement extends Element { + constructor(cfg) { + super(); + this.animated = true; + this.options = undefined; + this._chart = undefined; + this._loop = undefined; + this._fullLoop = undefined; + this._path = undefined; + this._points = undefined; + this._segments = undefined; + this._decimated = false; + this._pointsUpdated = false; + this._datasetIndex = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + updateControlPoints(chartArea, indexAxis) { + const options = this.options; + if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) { + const loop = options.spanGaps ? this._loop : this._fullLoop; + _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis); + this._pointsUpdated = true; + } + } + set points(points) { + this._points = points; + delete this._segments; + delete this._path; + this._pointsUpdated = false; + } + get points() { + return this._points; + } + get segments() { + return this._segments || (this._segments = _computeSegments(this, this.options.segment)); + } + first() { + const segments = this.segments; + const points = this.points; + return segments.length && points[segments[0].start]; + } + last() { + const segments = this.segments; + const points = this.points; + const count = segments.length; + return count && points[segments[count - 1].end]; + } + interpolate(point, property) { + const options = this.options; + const value = point[property]; + const points = this.points; + const segments = _boundSegments(this, {property, start: value, end: value}); + if (!segments.length) { + return; + } + const result = []; + const _interpolate = _getInterpolationMethod(options); + let i, ilen; + for (i = 0, ilen = segments.length; i < ilen; ++i) { + const {start, end} = segments[i]; + const p1 = points[start]; + const p2 = points[end]; + if (p1 === p2) { + result.push(p1); + continue; + } + const t = Math.abs((value - p1[property]) / (p2[property] - p1[property])); + const interpolated = _interpolate(p1, p2, t, options.stepped); + interpolated[property] = point[property]; + result.push(interpolated); + } + return result.length === 1 ? result[0] : result; + } + pathSegment(ctx, segment, params) { + const segmentMethod = _getSegmentMethod(this); + return segmentMethod(ctx, this, segment, params); + } + path(ctx, start, count) { + const segments = this.segments; + const segmentMethod = _getSegmentMethod(this); + let loop = this._loop; + start = start || 0; + count = count || (this.points.length - start); + for (const segment of segments) { + loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1}); + } + return !!loop; + } + draw(ctx, chartArea, start, count) { + const options = this.options || {}; + const points = this.points || []; + if (points.length && options.borderWidth) { + ctx.save(); + draw(ctx, this, start, count); + ctx.restore(); + } + if (this.animated) { + this._pointsUpdated = false; + this._path = undefined; + } + } +} +LineElement.id = 'line'; +LineElement.defaults = { + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderWidth: 3, + capBezierPoints: true, + cubicInterpolationMode: 'default', + fill: false, + spanGaps: false, + stepped: false, + tension: 0, +}; +LineElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; +LineElement.descriptors = { + _scriptable: true, + _indexable: (name) => name !== 'borderDash' && name !== 'fill', +}; + +function inRange$1(el, pos, axis, useFinalPosition) { + const options = el.options; + const {[axis]: value} = el.getProps([axis], useFinalPosition); + return (Math.abs(pos - value) < options.radius + options.hitRadius); +} +class PointElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.parsed = undefined; + this.skip = undefined; + this.stop = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + inRange(mouseX, mouseY, useFinalPosition) { + const options = this.options; + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2)); + } + inXRange(mouseX, useFinalPosition) { + return inRange$1(this, mouseX, 'x', useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange$1(this, mouseY, 'y', useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const {x, y} = this.getProps(['x', 'y'], useFinalPosition); + return {x, y}; + } + size(options) { + options = options || this.options || {}; + let radius = options.radius || 0; + radius = Math.max(radius, radius && options.hoverRadius || 0); + const borderWidth = radius && options.borderWidth || 0; + return (radius + borderWidth) * 2; + } + draw(ctx, area) { + const options = this.options; + if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) { + return; + } + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.fillStyle = options.backgroundColor; + drawPoint(ctx, options, this.x, this.y); + } + getRange() { + const options = this.options || {}; + return options.radius + options.hitRadius; + } +} +PointElement.id = 'point'; +PointElement.defaults = { + borderWidth: 1, + hitRadius: 1, + hoverBorderWidth: 1, + hoverRadius: 4, + pointStyle: 'circle', + radius: 3, + rotation: 0 +}; +PointElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; + +function getBarBounds(bar, useFinalPosition) { + const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition); + let left, right, top, bottom, half; + if (bar.horizontal) { + half = height / 2; + left = Math.min(x, base); + right = Math.max(x, base); + top = y - half; + bottom = y + half; + } else { + half = width / 2; + left = x - half; + right = x + half; + top = Math.min(y, base); + bottom = Math.max(y, base); + } + return {left, top, right, bottom}; +} +function skipOrLimit(skip, value, min, max) { + return skip ? 0 : _limitValue(value, min, max); +} +function parseBorderWidth(bar, maxW, maxH) { + const value = bar.options.borderWidth; + const skip = bar.borderSkipped; + const o = toTRBL(value); + return { + t: skipOrLimit(skip.top, o.top, 0, maxH), + r: skipOrLimit(skip.right, o.right, 0, maxW), + b: skipOrLimit(skip.bottom, o.bottom, 0, maxH), + l: skipOrLimit(skip.left, o.left, 0, maxW) + }; +} +function parseBorderRadius(bar, maxW, maxH) { + const {enableBorderRadius} = bar.getProps(['enableBorderRadius']); + const value = bar.options.borderRadius; + const o = toTRBLCorners(value); + const maxR = Math.min(maxW, maxH); + const skip = bar.borderSkipped; + const enableBorder = enableBorderRadius || isObject(value); + return { + topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR), + topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR), + bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR), + bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR) + }; +} +function boundingRects(bar) { + const bounds = getBarBounds(bar); + const width = bounds.right - bounds.left; + const height = bounds.bottom - bounds.top; + const border = parseBorderWidth(bar, width / 2, height / 2); + const radius = parseBorderRadius(bar, width / 2, height / 2); + return { + outer: { + x: bounds.left, + y: bounds.top, + w: width, + h: height, + radius + }, + inner: { + x: bounds.left + border.l, + y: bounds.top + border.t, + w: width - border.l - border.r, + h: height - border.t - border.b, + radius: { + topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)), + topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)), + bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)), + bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)), + } + } + }; +} +function inRange(bar, x, y, useFinalPosition) { + const skipX = x === null; + const skipY = y === null; + const skipBoth = skipX && skipY; + const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition); + return bounds + && (skipX || _isBetween(x, bounds.left, bounds.right)) + && (skipY || _isBetween(y, bounds.top, bounds.bottom)); +} +function hasRadius(radius) { + return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight; +} +function addNormalRectPath(ctx, rect) { + ctx.rect(rect.x, rect.y, rect.w, rect.h); +} +function inflateRect(rect, amount, refRect = {}) { + const x = rect.x !== refRect.x ? -amount : 0; + const y = rect.y !== refRect.y ? -amount : 0; + const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x; + const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y; + return { + x: rect.x + x, + y: rect.y + y, + w: rect.w + w, + h: rect.h + h, + radius: rect.radius + }; +} +class BarElement extends Element { + constructor(cfg) { + super(); + this.options = undefined; + this.horizontal = undefined; + this.base = undefined; + this.width = undefined; + this.height = undefined; + this.inflateAmount = undefined; + if (cfg) { + Object.assign(this, cfg); + } + } + draw(ctx) { + const {inflateAmount, options: {borderColor, backgroundColor}} = this; + const {inner, outer} = boundingRects(this); + const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath; + ctx.save(); + if (outer.w !== inner.w || outer.h !== inner.h) { + ctx.beginPath(); + addRectPath(ctx, inflateRect(outer, inflateAmount, inner)); + ctx.clip(); + addRectPath(ctx, inflateRect(inner, -inflateAmount, outer)); + ctx.fillStyle = borderColor; + ctx.fill('evenodd'); + } + ctx.beginPath(); + addRectPath(ctx, inflateRect(inner, inflateAmount)); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + inRange(mouseX, mouseY, useFinalPosition) { + return inRange(this, mouseX, mouseY, useFinalPosition); + } + inXRange(mouseX, useFinalPosition) { + return inRange(this, mouseX, null, useFinalPosition); + } + inYRange(mouseY, useFinalPosition) { + return inRange(this, null, mouseY, useFinalPosition); + } + getCenterPoint(useFinalPosition) { + const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition); + return { + x: horizontal ? (x + base) / 2 : x, + y: horizontal ? y : (y + base) / 2 + }; + } + getRange(axis) { + return axis === 'x' ? this.width / 2 : this.height / 2; + } +} +BarElement.id = 'bar'; +BarElement.defaults = { + borderSkipped: 'start', + borderWidth: 0, + borderRadius: 0, + inflateAmount: 'auto', + pointStyle: undefined +}; +BarElement.defaultRoutes = { + backgroundColor: 'backgroundColor', + borderColor: 'borderColor' +}; + +var elements = /*#__PURE__*/Object.freeze({ +__proto__: null, +ArcElement: ArcElement, +LineElement: LineElement, +PointElement: PointElement, +BarElement: BarElement +}); + +function lttbDecimation(data, start, count, availableWidth, options) { + const samples = options.samples || availableWidth; + if (samples >= count) { + return data.slice(start, start + count); + } + const decimated = []; + const bucketWidth = (count - 2) / (samples - 2); + let sampledIndex = 0; + const endIndex = start + count - 1; + let a = start; + let i, maxAreaPoint, maxArea, area, nextA; + decimated[sampledIndex++] = data[a]; + for (i = 0; i < samples - 2; i++) { + let avgX = 0; + let avgY = 0; + let j; + const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start; + const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start; + const avgRangeLength = avgRangeEnd - avgRangeStart; + for (j = avgRangeStart; j < avgRangeEnd; j++) { + avgX += data[j].x; + avgY += data[j].y; + } + avgX /= avgRangeLength; + avgY /= avgRangeLength; + const rangeOffs = Math.floor(i * bucketWidth) + 1 + start; + const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start; + const {x: pointAx, y: pointAy} = data[a]; + maxArea = area = -1; + for (j = rangeOffs; j < rangeTo; j++) { + area = 0.5 * Math.abs( + (pointAx - avgX) * (data[j].y - pointAy) - + (pointAx - data[j].x) * (avgY - pointAy) + ); + if (area > maxArea) { + maxArea = area; + maxAreaPoint = data[j]; + nextA = j; + } + } + decimated[sampledIndex++] = maxAreaPoint; + a = nextA; + } + decimated[sampledIndex++] = data[endIndex]; + return decimated; +} +function minMaxDecimation(data, start, count, availableWidth) { + let avgX = 0; + let countX = 0; + let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY; + const decimated = []; + const endIndex = start + count - 1; + const xMin = data[start].x; + const xMax = data[endIndex].x; + const dx = xMax - xMin; + for (i = start; i < start + count; ++i) { + point = data[i]; + x = (point.x - xMin) / dx * availableWidth; + y = point.y; + const truncX = x | 0; + if (truncX === prevX) { + if (y < minY) { + minY = y; + minIndex = i; + } else if (y > maxY) { + maxY = y; + maxIndex = i; + } + avgX = (countX * avgX + point.x) / ++countX; + } else { + const lastIndex = i - 1; + if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) { + const intermediateIndex1 = Math.min(minIndex, maxIndex); + const intermediateIndex2 = Math.max(minIndex, maxIndex); + if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex1], + x: avgX, + }); + } + if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) { + decimated.push({ + ...data[intermediateIndex2], + x: avgX + }); + } + } + if (i > 0 && lastIndex !== startIndex) { + decimated.push(data[lastIndex]); + } + decimated.push(point); + prevX = truncX; + countX = 0; + minY = maxY = y; + minIndex = maxIndex = startIndex = i; + } + } + return decimated; +} +function cleanDecimatedDataset(dataset) { + if (dataset._decimated) { + const data = dataset._data; + delete dataset._decimated; + delete dataset._data; + Object.defineProperty(dataset, 'data', {value: data}); + } +} +function cleanDecimatedData(chart) { + chart.data.datasets.forEach((dataset) => { + cleanDecimatedDataset(dataset); + }); +} +function getStartAndCountOfVisiblePointsSimplified(meta, points) { + const pointCount = points.length; + let start = 0; + let count; + const {iScale} = meta; + const {min, max, minDefined, maxDefined} = iScale.getUserBounds(); + if (minDefined) { + start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1); + } + if (maxDefined) { + count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start; + } else { + count = pointCount - start; + } + return {start, count}; +} +var plugin_decimation = { + id: 'decimation', + defaults: { + algorithm: 'min-max', + enabled: false, + }, + beforeElementsUpdate: (chart, args, options) => { + if (!options.enabled) { + cleanDecimatedData(chart); + return; + } + const availableWidth = chart.width; + chart.data.datasets.forEach((dataset, datasetIndex) => { + const {_data, indexAxis} = dataset; + const meta = chart.getDatasetMeta(datasetIndex); + const data = _data || dataset.data; + if (resolve([indexAxis, chart.options.indexAxis]) === 'y') { + return; + } + if (meta.type !== 'line') { + return; + } + const xAxis = chart.scales[meta.xAxisID]; + if (xAxis.type !== 'linear' && xAxis.type !== 'time') { + return; + } + if (chart.options.parsing) { + return; + } + let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data); + const threshold = options.threshold || 4 * availableWidth; + if (count <= threshold) { + cleanDecimatedDataset(dataset); + return; + } + if (isNullOrUndef(_data)) { + dataset._data = data; + delete dataset.data; + Object.defineProperty(dataset, 'data', { + configurable: true, + enumerable: true, + get: function() { + return this._decimated; + }, + set: function(d) { + this._data = d; + } + }); + } + let decimated; + switch (options.algorithm) { + case 'lttb': + decimated = lttbDecimation(data, start, count, availableWidth, options); + break; + case 'min-max': + decimated = minMaxDecimation(data, start, count, availableWidth); + break; + default: + throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`); + } + dataset._decimated = decimated; + }); + }, + destroy(chart) { + cleanDecimatedData(chart); + } +}; + +function getLineByIndex(chart, index) { + const meta = chart.getDatasetMeta(index); + const visible = meta && chart.isDatasetVisible(index); + return visible ? meta.dataset : null; +} +function parseFillOption(line) { + const options = line.options; + const fillOption = options.fill; + let fill = valueOrDefault(fillOption && fillOption.target, fillOption); + if (fill === undefined) { + fill = !!options.backgroundColor; + } + if (fill === false || fill === null) { + return false; + } + if (fill === true) { + return 'origin'; + } + return fill; +} +function decodeFill(line, index, count) { + const fill = parseFillOption(line); + if (isObject(fill)) { + return isNaN(fill.value) ? false : fill; + } + let target = parseFloat(fill); + if (isNumberFinite(target) && Math.floor(target) === target) { + if (fill[0] === '-' || fill[0] === '+') { + target = index + target; + } + if (target === index || target < 0 || target >= count) { + return false; + } + return target; + } + return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill; +} +function computeLinearBoundary(source) { + const {scale = {}, fill} = source; + let target = null; + let horizontal; + if (fill === 'start') { + target = scale.bottom; + } else if (fill === 'end') { + target = scale.top; + } else if (isObject(fill)) { + target = scale.getPixelForValue(fill.value); + } else if (scale.getBasePixel) { + target = scale.getBasePixel(); + } + if (isNumberFinite(target)) { + horizontal = scale.isHorizontal(); + return { + x: horizontal ? target : null, + y: horizontal ? null : target + }; + } + return null; +} +class simpleArc { + constructor(opts) { + this.x = opts.x; + this.y = opts.y; + this.radius = opts.radius; + } + pathSegment(ctx, bounds, opts) { + const {x, y, radius} = this; + bounds = bounds || {start: 0, end: TAU}; + ctx.arc(x, y, radius, bounds.end, bounds.start, true); + return !opts.bounds; + } + interpolate(point) { + const {x, y, radius} = this; + const angle = point.angle; + return { + x: x + Math.cos(angle) * radius, + y: y + Math.sin(angle) * radius, + angle + }; + } +} +function computeCircularBoundary(source) { + const {scale, fill} = source; + const options = scale.options; + const length = scale.getLabels().length; + const target = []; + const start = options.reverse ? scale.max : scale.min; + const end = options.reverse ? scale.min : scale.max; + let i, center, value; + if (fill === 'start') { + value = start; + } else if (fill === 'end') { + value = end; + } else if (isObject(fill)) { + value = fill.value; + } else { + value = scale.getBaseValue(); + } + if (options.grid.circular) { + center = scale.getPointPositionForValue(0, start); + return new simpleArc({ + x: center.x, + y: center.y, + radius: scale.getDistanceFromCenterForValue(value) + }); + } + for (i = 0; i < length; ++i) { + target.push(scale.getPointPositionForValue(i, value)); + } + return target; +} +function computeBoundary(source) { + const scale = source.scale || {}; + if (scale.getPointPositionForValue) { + return computeCircularBoundary(source); + } + return computeLinearBoundary(source); +} +function findSegmentEnd(start, end, points) { + for (;end > start; end--) { + const point = points[end]; + if (!isNaN(point.x) && !isNaN(point.y)) { + break; + } + } + return end; +} +function pointsFromSegments(boundary, line) { + const {x = null, y = null} = boundary || {}; + const linePoints = line.points; + const points = []; + line.segments.forEach(({start, end}) => { + end = findSegmentEnd(start, end, linePoints); + const first = linePoints[start]; + const last = linePoints[end]; + if (y !== null) { + points.push({x: first.x, y}); + points.push({x: last.x, y}); + } else if (x !== null) { + points.push({x, y: first.y}); + points.push({x, y: last.y}); + } + }); + return points; +} +function buildStackLine(source) { + const {scale, index, line} = source; + const points = []; + const segments = line.segments; + const sourcePoints = line.points; + const linesBelow = getLinesBelow(scale, index); + linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line)); + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + for (let j = segment.start; j <= segment.end; j++) { + addPointsBelow(points, sourcePoints[j], linesBelow); + } + } + return new LineElement({points, options: {}}); +} +function getLinesBelow(scale, index) { + const below = []; + const metas = scale.getMatchingVisibleMetas('line'); + for (let i = 0; i < metas.length; i++) { + const meta = metas[i]; + if (meta.index === index) { + break; + } + if (!meta.hidden) { + below.unshift(meta.dataset); + } + } + return below; +} +function addPointsBelow(points, sourcePoint, linesBelow) { + const postponed = []; + for (let j = 0; j < linesBelow.length; j++) { + const line = linesBelow[j]; + const {first, last, point} = findPoint(line, sourcePoint, 'x'); + if (!point || (first && last)) { + continue; + } + if (first) { + postponed.unshift(point); + } else { + points.push(point); + if (!last) { + break; + } + } + } + points.push(...postponed); +} +function findPoint(line, sourcePoint, property) { + const point = line.interpolate(sourcePoint, property); + if (!point) { + return {}; + } + const pointValue = point[property]; + const segments = line.segments; + const linePoints = line.points; + let first = false; + let last = false; + for (let i = 0; i < segments.length; i++) { + const segment = segments[i]; + const firstValue = linePoints[segment.start][property]; + const lastValue = linePoints[segment.end][property]; + if (_isBetween(pointValue, firstValue, lastValue)) { + first = pointValue === firstValue; + last = pointValue === lastValue; + break; + } + } + return {first, last, point}; +} +function getTarget(source) { + const {chart, fill, line} = source; + if (isNumberFinite(fill)) { + return getLineByIndex(chart, fill); + } + if (fill === 'stack') { + return buildStackLine(source); + } + if (fill === 'shape') { + return true; + } + const boundary = computeBoundary(source); + if (boundary instanceof simpleArc) { + return boundary; + } + return createBoundaryLine(boundary, line); +} +function createBoundaryLine(boundary, line) { + let points = []; + let _loop = false; + if (isArray(boundary)) { + _loop = true; + points = boundary; + } else { + points = pointsFromSegments(boundary, line); + } + return points.length ? new LineElement({ + points, + options: {tension: 0}, + _loop, + _fullLoop: _loop + }) : null; +} +function resolveTarget(sources, index, propagate) { + const source = sources[index]; + let fill = source.fill; + const visited = [index]; + let target; + if (!propagate) { + return fill; + } + while (fill !== false && visited.indexOf(fill) === -1) { + if (!isNumberFinite(fill)) { + return fill; + } + target = sources[fill]; + if (!target) { + return false; + } + if (target.visible) { + return fill; + } + visited.push(fill); + fill = target.fill; + } + return false; +} +function _clip(ctx, target, clipY) { + const {segments, points} = target; + let first = true; + let lineLoop = false; + ctx.beginPath(); + for (const segment of segments) { + const {start, end} = segment; + const firstPoint = points[start]; + const lastPoint = points[findSegmentEnd(start, end, points)]; + if (first) { + ctx.moveTo(firstPoint.x, firstPoint.y); + first = false; + } else { + ctx.lineTo(firstPoint.x, clipY); + ctx.lineTo(firstPoint.x, firstPoint.y); + } + lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop}); + if (lineLoop) { + ctx.closePath(); + } else { + ctx.lineTo(lastPoint.x, clipY); + } + } + ctx.lineTo(target.first().x, clipY); + ctx.closePath(); + ctx.clip(); +} +function getBounds(property, first, last, loop) { + if (loop) { + return; + } + let start = first[property]; + let end = last[property]; + if (property === 'angle') { + start = _normalizeAngle(start); + end = _normalizeAngle(end); + } + return {property, start, end}; +} +function _getEdge(a, b, prop, fn) { + if (a && b) { + return fn(a[prop], b[prop]); + } + return a ? a[prop] : b ? b[prop] : 0; +} +function _segments(line, target, property) { + const segments = line.segments; + const points = line.points; + const tpoints = target.points; + const parts = []; + for (const segment of segments) { + let {start, end} = segment; + end = findSegmentEnd(start, end, points); + const bounds = getBounds(property, points[start], points[end], segment.loop); + if (!target.segments) { + parts.push({ + source: segment, + target: bounds, + start: points[start], + end: points[end] + }); + continue; + } + const targetSegments = _boundSegments(target, bounds); + for (const tgt of targetSegments) { + const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop); + const fillSources = _boundSegment(segment, points, subBounds); + for (const fillSource of fillSources) { + parts.push({ + source: fillSource, + target: tgt, + start: { + [property]: _getEdge(bounds, subBounds, 'start', Math.max) + }, + end: { + [property]: _getEdge(bounds, subBounds, 'end', Math.min) + } + }); + } + } + } + return parts; +} +function clipBounds(ctx, scale, bounds) { + const {top, bottom} = scale.chart.chartArea; + const {property, start, end} = bounds || {}; + if (property === 'x') { + ctx.beginPath(); + ctx.rect(start, top, end - start, bottom - top); + ctx.clip(); + } +} +function interpolatedLineTo(ctx, target, point, property) { + const interpolatedPoint = target.interpolate(point, property); + if (interpolatedPoint) { + ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y); + } +} +function _fill(ctx, cfg) { + const {line, target, property, color, scale} = cfg; + const segments = _segments(line, target, property); + for (const {source: src, target: tgt, start, end} of segments) { + const {style: {backgroundColor = color} = {}} = src; + const notShape = target !== true; + ctx.save(); + ctx.fillStyle = backgroundColor; + clipBounds(ctx, scale, notShape && getBounds(property, start, end)); + ctx.beginPath(); + const lineLoop = !!line.pathSegment(ctx, src); + let loop; + if (notShape) { + if (lineLoop) { + ctx.closePath(); + } else { + interpolatedLineTo(ctx, target, end, property); + } + const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true}); + loop = lineLoop && targetLoop; + if (!loop) { + interpolatedLineTo(ctx, target, start, property); + } + } + ctx.closePath(); + ctx.fill(loop ? 'evenodd' : 'nonzero'); + ctx.restore(); + } +} +function doFill(ctx, cfg) { + const {line, target, above, below, area, scale} = cfg; + const property = line._loop ? 'angle' : cfg.axis; + ctx.save(); + if (property === 'x' && below !== above) { + _clip(ctx, target, area.top); + _fill(ctx, {line, target, color: above, scale, property}); + ctx.restore(); + ctx.save(); + _clip(ctx, target, area.bottom); + } + _fill(ctx, {line, target, color: below, scale, property}); + ctx.restore(); +} +function drawfill(ctx, source, area) { + const target = getTarget(source); + const {line, scale, axis} = source; + const lineOpts = line.options; + const fillOption = lineOpts.fill; + const color = lineOpts.backgroundColor; + const {above = color, below = color} = fillOption || {}; + if (target && line.points.length) { + clipArea(ctx, area); + doFill(ctx, {line, target, above, below, area, scale, axis}); + unclipArea(ctx); + } +} +var plugin_filler = { + id: 'filler', + afterDatasetsUpdate(chart, _args, options) { + const count = (chart.data.datasets || []).length; + const sources = []; + let meta, i, line, source; + for (i = 0; i < count; ++i) { + meta = chart.getDatasetMeta(i); + line = meta.dataset; + source = null; + if (line && line.options && line instanceof LineElement) { + source = { + visible: chart.isDatasetVisible(i), + index: i, + fill: decodeFill(line, i, count), + chart, + axis: meta.controller.options.indexAxis, + scale: meta.vScale, + line, + }; + } + meta.$filler = source; + sources.push(source); + } + for (i = 0; i < count; ++i) { + source = sources[i]; + if (!source || source.fill === false) { + continue; + } + source.fill = resolveTarget(sources, i, options.propagate); + } + }, + beforeDraw(chart, _args, options) { + const draw = options.drawTime === 'beforeDraw'; + const metasets = chart.getSortedVisibleDatasetMetas(); + const area = chart.chartArea; + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (!source) { + continue; + } + source.line.updateControlPoints(area, source.axis); + if (draw) { + drawfill(chart.ctx, source, area); + } + } + }, + beforeDatasetsDraw(chart, _args, options) { + if (options.drawTime !== 'beforeDatasetsDraw') { + return; + } + const metasets = chart.getSortedVisibleDatasetMetas(); + for (let i = metasets.length - 1; i >= 0; --i) { + const source = metasets[i].$filler; + if (source) { + drawfill(chart.ctx, source, chart.chartArea); + } + } + }, + beforeDatasetDraw(chart, args, options) { + const source = args.meta.$filler; + if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') { + return; + } + drawfill(chart.ctx, source, chart.chartArea); + }, + defaults: { + propagate: true, + drawTime: 'beforeDatasetDraw' + } +}; + +const getBoxSize = (labelOpts, fontSize) => { + let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts; + if (labelOpts.usePointStyle) { + boxHeight = Math.min(boxHeight, fontSize); + boxWidth = Math.min(boxWidth, fontSize); + } + return { + boxWidth, + boxHeight, + itemHeight: Math.max(fontSize, boxHeight) + }; +}; +const itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index; +class Legend extends Element { + constructor(config) { + super(); + this._added = false; + this.legendHitBoxes = []; + this._hoveredItem = null; + this.doughnutMode = false; + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this.legendItems = undefined; + this.columnSizes = undefined; + this.lineWidths = undefined; + this.maxHeight = undefined; + this.maxWidth = undefined; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.height = undefined; + this.width = undefined; + this._margins = undefined; + this.position = undefined; + this.weight = undefined; + this.fullSize = undefined; + } + update(maxWidth, maxHeight, margins) { + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + this._margins = margins; + this.setDimensions(); + this.buildLabels(); + this.fit(); + } + setDimensions() { + if (this.isHorizontal()) { + this.width = this.maxWidth; + this.left = this._margins.left; + this.right = this.width; + } else { + this.height = this.maxHeight; + this.top = this._margins.top; + this.bottom = this.height; + } + } + buildLabels() { + const labelOpts = this.options.labels || {}; + let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || []; + if (labelOpts.filter) { + legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data)); + } + if (labelOpts.sort) { + legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data)); + } + if (this.options.reverse) { + legendItems.reverse(); + } + this.legendItems = legendItems; + } + fit() { + const {options, ctx} = this; + if (!options.display) { + this.width = this.height = 0; + return; + } + const labelOpts = options.labels; + const labelFont = toFont(labelOpts.font); + const fontSize = labelFont.size; + const titleHeight = this._computeTitleHeight(); + const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize); + let width, height; + ctx.font = labelFont.string; + if (this.isHorizontal()) { + width = this.maxWidth; + height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10; + } else { + height = this.maxHeight; + width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10; + } + this.width = Math.min(width, options.maxWidth || this.maxWidth); + this.height = Math.min(height, options.maxHeight || this.maxHeight); + } + _fitRows(titleHeight, fontSize, boxWidth, itemHeight) { + const {ctx, maxWidth, options: {labels: {padding}}} = this; + const hitboxes = this.legendHitBoxes = []; + const lineWidths = this.lineWidths = [0]; + const lineHeight = itemHeight + padding; + let totalHeight = titleHeight; + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + let row = -1; + let top = -lineHeight; + this.legendItems.forEach((legendItem, i) => { + const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) { + totalHeight += lineHeight; + lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0; + top += lineHeight; + row++; + } + hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight}; + lineWidths[lineWidths.length - 1] += itemWidth + padding; + }); + return totalHeight; + } + _fitCols(titleHeight, fontSize, boxWidth, itemHeight) { + const {ctx, maxHeight, options: {labels: {padding}}} = this; + const hitboxes = this.legendHitBoxes = []; + const columnSizes = this.columnSizes = []; + const heightLimit = maxHeight - titleHeight; + let totalWidth = padding; + let currentColWidth = 0; + let currentColHeight = 0; + let left = 0; + let col = 0; + this.legendItems.forEach((legendItem, i) => { + const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { + totalWidth += currentColWidth + padding; + columnSizes.push({width: currentColWidth, height: currentColHeight}); + left += currentColWidth + padding; + col++; + currentColWidth = currentColHeight = 0; + } + hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight}; + currentColWidth = Math.max(currentColWidth, itemWidth); + currentColHeight += itemHeight + padding; + }); + totalWidth += currentColWidth; + columnSizes.push({width: currentColWidth, height: currentColHeight}); + return totalWidth; + } + adjustHitBoxes() { + if (!this.options.display) { + return; + } + const titleHeight = this._computeTitleHeight(); + const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this; + const rtlHelper = getRtlAdapter(rtl, this.left, this.width); + if (this.isHorizontal()) { + let row = 0; + let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + for (const hitbox of hitboxes) { + if (row !== hitbox.row) { + row = hitbox.row; + left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); + } + hitbox.top += this.top + titleHeight + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width); + left += hitbox.width + padding; + } + } else { + let col = 0; + let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + for (const hitbox of hitboxes) { + if (hitbox.col !== col) { + col = hitbox.col; + top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); + } + hitbox.top = top; + hitbox.left += this.left + padding; + hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width); + top += hitbox.height + padding; + } + } + } + isHorizontal() { + return this.options.position === 'top' || this.options.position === 'bottom'; + } + draw() { + if (this.options.display) { + const ctx = this.ctx; + clipArea(ctx, this); + this._draw(); + unclipArea(ctx); + } + } + _draw() { + const {options: opts, columnSizes, lineWidths, ctx} = this; + const {align, labels: labelOpts} = opts; + const defaultColor = defaults.color; + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const labelFont = toFont(labelOpts.font); + const {color: fontColor, padding} = labelOpts; + const fontSize = labelFont.size; + const halfFontSize = fontSize / 2; + let cursor; + this.drawTitle(); + ctx.textAlign = rtlHelper.textAlign('left'); + ctx.textBaseline = 'middle'; + ctx.lineWidth = 0.5; + ctx.font = labelFont.string; + const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize); + const drawLegendBox = function(x, y, legendItem) { + if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) { + return; + } + ctx.save(); + const lineWidth = valueOrDefault(legendItem.lineWidth, 1); + ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor); + ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt'); + ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0); + ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter'); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor); + ctx.setLineDash(valueOrDefault(legendItem.lineDash, [])); + if (labelOpts.usePointStyle) { + const drawOptions = { + radius: boxWidth * Math.SQRT2 / 2, + pointStyle: legendItem.pointStyle, + rotation: legendItem.rotation, + borderWidth: lineWidth + }; + const centerX = rtlHelper.xPlus(x, boxWidth / 2); + const centerY = y + halfFontSize; + drawPoint(ctx, drawOptions, centerX, centerY); + } else { + const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0); + const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth); + const borderRadius = toTRBLCorners(legendItem.borderRadius); + ctx.beginPath(); + if (Object.values(borderRadius).some(v => v !== 0)) { + addRoundedRectPath(ctx, { + x: xBoxLeft, + y: yBoxTop, + w: boxWidth, + h: boxHeight, + radius: borderRadius, + }); + } else { + ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight); + } + ctx.fill(); + if (lineWidth !== 0) { + ctx.stroke(); + } + } + ctx.restore(); + }; + const fillText = function(x, y, legendItem) { + renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, { + strikethrough: legendItem.hidden, + textAlign: rtlHelper.textAlign(legendItem.textAlign) + }); + }; + const isHorizontal = this.isHorizontal(); + const titleHeight = this._computeTitleHeight(); + if (isHorizontal) { + cursor = { + x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]), + y: this.top + padding + titleHeight, + line: 0 + }; + } else { + cursor = { + x: this.left + padding, + y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height), + line: 0 + }; + } + overrideTextDirection(this.ctx, opts.textDirection); + const lineHeight = itemHeight + padding; + this.legendItems.forEach((legendItem, i) => { + ctx.strokeStyle = legendItem.fontColor || fontColor; + ctx.fillStyle = legendItem.fontColor || fontColor; + const textWidth = ctx.measureText(legendItem.text).width; + const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); + const width = boxWidth + halfFontSize + textWidth; + let x = cursor.x; + let y = cursor.y; + rtlHelper.setWidth(this.width); + if (isHorizontal) { + if (i > 0 && x + width + padding > this.right) { + y = cursor.y += lineHeight; + cursor.line++; + x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]); + } + } else if (i > 0 && y + lineHeight > this.bottom) { + x = cursor.x = x + columnSizes[cursor.line].width + padding; + cursor.line++; + y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height); + } + const realX = rtlHelper.x(x); + drawLegendBox(realX, y, legendItem); + x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl); + fillText(rtlHelper.x(x), y, legendItem); + if (isHorizontal) { + cursor.x += width + padding; + } else { + cursor.y += lineHeight; + } + }); + restoreTextDirection(this.ctx, opts.textDirection); + } + drawTitle() { + const opts = this.options; + const titleOpts = opts.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + if (!titleOpts.display) { + return; + } + const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); + const ctx = this.ctx; + const position = titleOpts.position; + const halfFontSize = titleFont.size / 2; + const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize; + let y; + let left = this.left; + let maxWidth = this.width; + if (this.isHorizontal()) { + maxWidth = Math.max(...this.lineWidths); + y = this.top + topPaddingPlusHalfFontSize; + left = _alignStartEnd(opts.align, left, this.right - maxWidth); + } else { + const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0); + y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight()); + } + const x = _alignStartEnd(position, left, left + maxWidth); + ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position)); + ctx.textBaseline = 'middle'; + ctx.strokeStyle = titleOpts.color; + ctx.fillStyle = titleOpts.color; + ctx.font = titleFont.string; + renderText(ctx, titleOpts.text, x, y, titleFont); + } + _computeTitleHeight() { + const titleOpts = this.options.title; + const titleFont = toFont(titleOpts.font); + const titlePadding = toPadding(titleOpts.padding); + return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0; + } + _getLegendItemAt(x, y) { + let i, hitBox, lh; + if (_isBetween(x, this.left, this.right) + && _isBetween(y, this.top, this.bottom)) { + lh = this.legendHitBoxes; + for (i = 0; i < lh.length; ++i) { + hitBox = lh[i]; + if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) + && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) { + return this.legendItems[i]; + } + } + } + return null; + } + handleEvent(e) { + const opts = this.options; + if (!isListened(e.type, opts)) { + return; + } + const hoveredItem = this._getLegendItemAt(e.x, e.y); + if (e.type === 'mousemove') { + const previous = this._hoveredItem; + const sameItem = itemsEqual(previous, hoveredItem); + if (previous && !sameItem) { + callback(opts.onLeave, [e, previous, this], this); + } + this._hoveredItem = hoveredItem; + if (hoveredItem && !sameItem) { + callback(opts.onHover, [e, hoveredItem, this], this); + } + } else if (hoveredItem) { + callback(opts.onClick, [e, hoveredItem, this], this); + } + } +} +function isListened(type, opts) { + if (type === 'mousemove' && (opts.onHover || opts.onLeave)) { + return true; + } + if (opts.onClick && (type === 'click' || type === 'mouseup')) { + return true; + } + return false; +} +var plugin_legend = { + id: 'legend', + _element: Legend, + start(chart, _args, options) { + const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart}); + layouts.configure(chart, legend, options); + layouts.addBox(chart, legend); + }, + stop(chart) { + layouts.removeBox(chart, chart.legend); + delete chart.legend; + }, + beforeUpdate(chart, _args, options) { + const legend = chart.legend; + layouts.configure(chart, legend, options); + legend.options = options; + }, + afterUpdate(chart) { + const legend = chart.legend; + legend.buildLabels(); + legend.adjustHitBoxes(); + }, + afterEvent(chart, args) { + if (!args.replay) { + chart.legend.handleEvent(args.event); + } + }, + defaults: { + display: true, + position: 'top', + align: 'center', + fullSize: true, + reverse: false, + weight: 1000, + onClick(e, legendItem, legend) { + const index = legendItem.datasetIndex; + const ci = legend.chart; + if (ci.isDatasetVisible(index)) { + ci.hide(index); + legendItem.hidden = true; + } else { + ci.show(index); + legendItem.hidden = false; + } + }, + onHover: null, + onLeave: null, + labels: { + color: (ctx) => ctx.chart.options.color, + boxWidth: 40, + padding: 10, + generateLabels(chart) { + const datasets = chart.data.datasets; + const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options; + return chart._getSortedDatasetMetas().map((meta) => { + const style = meta.controller.getStyle(usePointStyle ? 0 : undefined); + const borderWidth = toPadding(style.borderWidth); + return { + text: datasets[meta.index].label, + fillStyle: style.backgroundColor, + fontColor: color, + hidden: !meta.visible, + lineCap: style.borderCapStyle, + lineDash: style.borderDash, + lineDashOffset: style.borderDashOffset, + lineJoin: style.borderJoinStyle, + lineWidth: (borderWidth.width + borderWidth.height) / 4, + strokeStyle: style.borderColor, + pointStyle: pointStyle || style.pointStyle, + rotation: style.rotation, + textAlign: textAlign || style.textAlign, + borderRadius: 0, + datasetIndex: meta.index + }; + }, this); + } + }, + title: { + color: (ctx) => ctx.chart.options.color, + display: false, + position: 'center', + text: '', + } + }, + descriptors: { + _scriptable: (name) => !name.startsWith('on'), + labels: { + _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name), + } + }, +}; + +class Title extends Element { + constructor(config) { + super(); + this.chart = config.chart; + this.options = config.options; + this.ctx = config.ctx; + this._padding = undefined; + this.top = undefined; + this.bottom = undefined; + this.left = undefined; + this.right = undefined; + this.width = undefined; + this.height = undefined; + this.position = undefined; + this.weight = undefined; + this.fullSize = undefined; + } + update(maxWidth, maxHeight) { + const opts = this.options; + this.left = 0; + this.top = 0; + if (!opts.display) { + this.width = this.height = this.right = this.bottom = 0; + return; + } + this.width = this.right = maxWidth; + this.height = this.bottom = maxHeight; + const lineCount = isArray(opts.text) ? opts.text.length : 1; + this._padding = toPadding(opts.padding); + const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height; + if (this.isHorizontal()) { + this.height = textSize; + } else { + this.width = textSize; + } + } + isHorizontal() { + const pos = this.options.position; + return pos === 'top' || pos === 'bottom'; + } + _drawArgs(offset) { + const {top, left, bottom, right, options} = this; + const align = options.align; + let rotation = 0; + let maxWidth, titleX, titleY; + if (this.isHorizontal()) { + titleX = _alignStartEnd(align, left, right); + titleY = top + offset; + maxWidth = right - left; + } else { + if (options.position === 'left') { + titleX = left + offset; + titleY = _alignStartEnd(align, bottom, top); + rotation = PI * -0.5; + } else { + titleX = right - offset; + titleY = _alignStartEnd(align, top, bottom); + rotation = PI * 0.5; + } + maxWidth = bottom - top; + } + return {titleX, titleY, maxWidth, rotation}; + } + draw() { + const ctx = this.ctx; + const opts = this.options; + if (!opts.display) { + return; + } + const fontOpts = toFont(opts.font); + const lineHeight = fontOpts.lineHeight; + const offset = lineHeight / 2 + this._padding.top; + const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset); + renderText(ctx, opts.text, 0, 0, fontOpts, { + color: opts.color, + maxWidth, + rotation, + textAlign: _toLeftRightCenter(opts.align), + textBaseline: 'middle', + translation: [titleX, titleY], + }); + } +} +function createTitle(chart, titleOpts) { + const title = new Title({ + ctx: chart.ctx, + options: titleOpts, + chart + }); + layouts.configure(chart, title, titleOpts); + layouts.addBox(chart, title); + chart.titleBlock = title; +} +var plugin_title = { + id: 'title', + _element: Title, + start(chart, _args, options) { + createTitle(chart, options); + }, + stop(chart) { + const titleBlock = chart.titleBlock; + layouts.removeBox(chart, titleBlock); + delete chart.titleBlock; + }, + beforeUpdate(chart, _args, options) { + const title = chart.titleBlock; + layouts.configure(chart, title, options); + title.options = options; + }, + defaults: { + align: 'center', + display: false, + font: { + weight: 'bold', + }, + fullSize: true, + padding: 10, + position: 'top', + text: '', + weight: 2000 + }, + defaultRoutes: { + color: 'color' + }, + descriptors: { + _scriptable: true, + _indexable: false, + }, +}; + +const map = new WeakMap(); +var plugin_subtitle = { + id: 'subtitle', + start(chart, _args, options) { + const title = new Title({ + ctx: chart.ctx, + options, + chart + }); + layouts.configure(chart, title, options); + layouts.addBox(chart, title); + map.set(chart, title); + }, + stop(chart) { + layouts.removeBox(chart, map.get(chart)); + map.delete(chart); + }, + beforeUpdate(chart, _args, options) { + const title = map.get(chart); + layouts.configure(chart, title, options); + title.options = options; + }, + defaults: { + align: 'center', + display: false, + font: { + weight: 'normal', + }, + fullSize: true, + padding: 0, + position: 'top', + text: '', + weight: 1500 + }, + defaultRoutes: { + color: 'color' + }, + descriptors: { + _scriptable: true, + _indexable: false, + }, +}; + +const positioners = { + average(items) { + if (!items.length) { + return false; + } + let i, len; + let x = 0; + let y = 0; + let count = 0; + for (i = 0, len = items.length; i < len; ++i) { + const el = items[i].element; + if (el && el.hasValue()) { + const pos = el.tooltipPosition(); + x += pos.x; + y += pos.y; + ++count; + } + } + return { + x: x / count, + y: y / count + }; + }, + nearest(items, eventPosition) { + if (!items.length) { + return false; + } + let x = eventPosition.x; + let y = eventPosition.y; + let minDistance = Number.POSITIVE_INFINITY; + let i, len, nearestElement; + for (i = 0, len = items.length; i < len; ++i) { + const el = items[i].element; + if (el && el.hasValue()) { + const center = el.getCenterPoint(); + const d = distanceBetweenPoints(eventPosition, center); + if (d < minDistance) { + minDistance = d; + nearestElement = el; + } + } + } + if (nearestElement) { + const tp = nearestElement.tooltipPosition(); + x = tp.x; + y = tp.y; + } + return { + x, + y + }; + } +}; +function pushOrConcat(base, toPush) { + if (toPush) { + if (isArray(toPush)) { + Array.prototype.push.apply(base, toPush); + } else { + base.push(toPush); + } + } + return base; +} +function splitNewlines(str) { + if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) { + return str.split('\n'); + } + return str; +} +function createTooltipItem(chart, item) { + const {element, datasetIndex, index} = item; + const controller = chart.getDatasetMeta(datasetIndex).controller; + const {label, value} = controller.getLabelAndValue(index); + return { + chart, + label, + parsed: controller.getParsed(index), + raw: chart.data.datasets[datasetIndex].data[index], + formattedValue: value, + dataset: controller.getDataset(), + dataIndex: index, + datasetIndex, + element + }; +} +function getTooltipSize(tooltip, options) { + const ctx = tooltip.chart.ctx; + const {body, footer, title} = tooltip; + const {boxWidth, boxHeight} = options; + const bodyFont = toFont(options.bodyFont); + const titleFont = toFont(options.titleFont); + const footerFont = toFont(options.footerFont); + const titleLineCount = title.length; + const footerLineCount = footer.length; + const bodyLineItemCount = body.length; + const padding = toPadding(options.padding); + let height = padding.height; + let width = 0; + let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0); + combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length; + if (titleLineCount) { + height += titleLineCount * titleFont.lineHeight + + (titleLineCount - 1) * options.titleSpacing + + options.titleMarginBottom; + } + if (combinedBodyLength) { + const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight; + height += bodyLineItemCount * bodyLineHeight + + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + + (combinedBodyLength - 1) * options.bodySpacing; + } + if (footerLineCount) { + height += options.footerMarginTop + + footerLineCount * footerFont.lineHeight + + (footerLineCount - 1) * options.footerSpacing; + } + let widthPadding = 0; + const maxLineWidth = function(line) { + width = Math.max(width, ctx.measureText(line).width + widthPadding); + }; + ctx.save(); + ctx.font = titleFont.string; + each(tooltip.title, maxLineWidth); + ctx.font = bodyFont.string; + each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth); + widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0; + each(body, (bodyItem) => { + each(bodyItem.before, maxLineWidth); + each(bodyItem.lines, maxLineWidth); + each(bodyItem.after, maxLineWidth); + }); + widthPadding = 0; + ctx.font = footerFont.string; + each(tooltip.footer, maxLineWidth); + ctx.restore(); + width += padding.width; + return {width, height}; +} +function determineYAlign(chart, size) { + const {y, height} = size; + if (y < height / 2) { + return 'top'; + } else if (y > (chart.height - height / 2)) { + return 'bottom'; + } + return 'center'; +} +function doesNotFitWithAlign(xAlign, chart, options, size) { + const {x, width} = size; + const caret = options.caretSize + options.caretPadding; + if (xAlign === 'left' && x + width + caret > chart.width) { + return true; + } + if (xAlign === 'right' && x - width - caret < 0) { + return true; + } +} +function determineXAlign(chart, options, size, yAlign) { + const {x, width} = size; + const {width: chartWidth, chartArea: {left, right}} = chart; + let xAlign = 'center'; + if (yAlign === 'center') { + xAlign = x <= (left + right) / 2 ? 'left' : 'right'; + } else if (x <= width / 2) { + xAlign = 'left'; + } else if (x >= chartWidth - width / 2) { + xAlign = 'right'; + } + if (doesNotFitWithAlign(xAlign, chart, options, size)) { + xAlign = 'center'; + } + return xAlign; +} +function determineAlignment(chart, options, size) { + const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size); + return { + xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign), + yAlign + }; +} +function alignX(size, xAlign) { + let {x, width} = size; + if (xAlign === 'right') { + x -= width; + } else if (xAlign === 'center') { + x -= (width / 2); + } + return x; +} +function alignY(size, yAlign, paddingAndSize) { + let {y, height} = size; + if (yAlign === 'top') { + y += paddingAndSize; + } else if (yAlign === 'bottom') { + y -= height + paddingAndSize; + } else { + y -= (height / 2); + } + return y; +} +function getBackgroundPoint(options, size, alignment, chart) { + const {caretSize, caretPadding, cornerRadius} = options; + const {xAlign, yAlign} = alignment; + const paddingAndSize = caretSize + caretPadding; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); + let x = alignX(size, xAlign); + const y = alignY(size, yAlign, paddingAndSize); + if (yAlign === 'center') { + if (xAlign === 'left') { + x += paddingAndSize; + } else if (xAlign === 'right') { + x -= paddingAndSize; + } + } else if (xAlign === 'left') { + x -= Math.max(topLeft, bottomLeft) + caretSize; + } else if (xAlign === 'right') { + x += Math.max(topRight, bottomRight) + caretSize; + } + return { + x: _limitValue(x, 0, chart.width - size.width), + y: _limitValue(y, 0, chart.height - size.height) + }; +} +function getAlignedX(tooltip, align, options) { + const padding = toPadding(options.padding); + return align === 'center' + ? tooltip.x + tooltip.width / 2 + : align === 'right' + ? tooltip.x + tooltip.width - padding.right + : tooltip.x + padding.left; +} +function getBeforeAfterBodyLines(callback) { + return pushOrConcat([], splitNewlines(callback)); +} +function createTooltipContext(parent, tooltip, tooltipItems) { + return createContext(parent, { + tooltip, + tooltipItems, + type: 'tooltip' + }); +} +function overrideCallbacks(callbacks, context) { + const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks; + return override ? callbacks.override(override) : callbacks; +} +class Tooltip extends Element { + constructor(config) { + super(); + this.opacity = 0; + this._active = []; + this._eventPosition = undefined; + this._size = undefined; + this._cachedAnimations = undefined; + this._tooltipItems = []; + this.$animations = undefined; + this.$context = undefined; + this.chart = config.chart || config._chart; + this._chart = this.chart; + this.options = config.options; + this.dataPoints = undefined; + this.title = undefined; + this.beforeBody = undefined; + this.body = undefined; + this.afterBody = undefined; + this.footer = undefined; + this.xAlign = undefined; + this.yAlign = undefined; + this.x = undefined; + this.y = undefined; + this.height = undefined; + this.width = undefined; + this.caretX = undefined; + this.caretY = undefined; + this.labelColors = undefined; + this.labelPointStyles = undefined; + this.labelTextColors = undefined; + } + initialize(options) { + this.options = options; + this._cachedAnimations = undefined; + this.$context = undefined; + } + _resolveAnimations() { + const cached = this._cachedAnimations; + if (cached) { + return cached; + } + const chart = this.chart; + const options = this.options.setContext(this.getContext()); + const opts = options.enabled && chart.options.animation && options.animations; + const animations = new Animations(this.chart, opts); + if (opts._cacheable) { + this._cachedAnimations = Object.freeze(animations); + } + return animations; + } + getContext() { + return this.$context || + (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems)); + } + getTitle(context, options) { + const {callbacks} = options; + const beforeTitle = callbacks.beforeTitle.apply(this, [context]); + const title = callbacks.title.apply(this, [context]); + const afterTitle = callbacks.afterTitle.apply(this, [context]); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeTitle)); + lines = pushOrConcat(lines, splitNewlines(title)); + lines = pushOrConcat(lines, splitNewlines(afterTitle)); + return lines; + } + getBeforeBody(tooltipItems, options) { + return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems])); + } + getBody(tooltipItems, options) { + const {callbacks} = options; + const bodyItems = []; + each(tooltipItems, (context) => { + const bodyItem = { + before: [], + lines: [], + after: [] + }; + const scoped = overrideCallbacks(callbacks, context); + pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context))); + pushOrConcat(bodyItem.lines, scoped.label.call(this, context)); + pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context))); + bodyItems.push(bodyItem); + }); + return bodyItems; + } + getAfterBody(tooltipItems, options) { + return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems])); + } + getFooter(tooltipItems, options) { + const {callbacks} = options; + const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]); + const footer = callbacks.footer.apply(this, [tooltipItems]); + const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]); + let lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeFooter)); + lines = pushOrConcat(lines, splitNewlines(footer)); + lines = pushOrConcat(lines, splitNewlines(afterFooter)); + return lines; + } + _createItems(options) { + const active = this._active; + const data = this.chart.data; + const labelColors = []; + const labelPointStyles = []; + const labelTextColors = []; + let tooltipItems = []; + let i, len; + for (i = 0, len = active.length; i < len; ++i) { + tooltipItems.push(createTooltipItem(this.chart, active[i])); + } + if (options.filter) { + tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data)); + } + if (options.itemSort) { + tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data)); + } + each(tooltipItems, (context) => { + const scoped = overrideCallbacks(options.callbacks, context); + labelColors.push(scoped.labelColor.call(this, context)); + labelPointStyles.push(scoped.labelPointStyle.call(this, context)); + labelTextColors.push(scoped.labelTextColor.call(this, context)); + }); + this.labelColors = labelColors; + this.labelPointStyles = labelPointStyles; + this.labelTextColors = labelTextColors; + this.dataPoints = tooltipItems; + return tooltipItems; + } + update(changed, replay) { + const options = this.options.setContext(this.getContext()); + const active = this._active; + let properties; + let tooltipItems = []; + if (!active.length) { + if (this.opacity !== 0) { + properties = { + opacity: 0 + }; + } + } else { + const position = positioners[options.position].call(this, active, this._eventPosition); + tooltipItems = this._createItems(options); + this.title = this.getTitle(tooltipItems, options); + this.beforeBody = this.getBeforeBody(tooltipItems, options); + this.body = this.getBody(tooltipItems, options); + this.afterBody = this.getAfterBody(tooltipItems, options); + this.footer = this.getFooter(tooltipItems, options); + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, size); + const alignment = determineAlignment(this.chart, options, positionAndSize); + const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart); + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + properties = { + opacity: 1, + x: backgroundPoint.x, + y: backgroundPoint.y, + width: size.width, + height: size.height, + caretX: position.x, + caretY: position.y + }; + } + this._tooltipItems = tooltipItems; + this.$context = undefined; + if (properties) { + this._resolveAnimations().update(this, properties); + } + if (changed && options.external) { + options.external.call(this, {chart: this.chart, tooltip: this, replay}); + } + } + drawCaret(tooltipPoint, ctx, size, options) { + const caretPosition = this.getCaretPosition(tooltipPoint, size, options); + ctx.lineTo(caretPosition.x1, caretPosition.y1); + ctx.lineTo(caretPosition.x2, caretPosition.y2); + ctx.lineTo(caretPosition.x3, caretPosition.y3); + } + getCaretPosition(tooltipPoint, size, options) { + const {xAlign, yAlign} = this; + const {caretSize, cornerRadius} = options; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius); + const {x: ptX, y: ptY} = tooltipPoint; + const {width, height} = size; + let x1, x2, x3, y1, y2, y3; + if (yAlign === 'center') { + y2 = ptY + (height / 2); + if (xAlign === 'left') { + x1 = ptX; + x2 = x1 - caretSize; + y1 = y2 + caretSize; + y3 = y2 - caretSize; + } else { + x1 = ptX + width; + x2 = x1 + caretSize; + y1 = y2 - caretSize; + y3 = y2 + caretSize; + } + x3 = x1; + } else { + if (xAlign === 'left') { + x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize); + } else if (xAlign === 'right') { + x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; + } else { + x2 = this.caretX; + } + if (yAlign === 'top') { + y1 = ptY; + y2 = y1 - caretSize; + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } else { + y1 = ptY + height; + y2 = y1 + caretSize; + x1 = x2 + caretSize; + x3 = x2 - caretSize; + } + y3 = y1; + } + return {x1, x2, x3, y1, y2, y3}; + } + drawTitle(pt, ctx, options) { + const title = this.title; + const length = title.length; + let titleFont, titleSpacing, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.titleAlign, options); + ctx.textAlign = rtlHelper.textAlign(options.titleAlign); + ctx.textBaseline = 'middle'; + titleFont = toFont(options.titleFont); + titleSpacing = options.titleSpacing; + ctx.fillStyle = options.titleColor; + ctx.font = titleFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2); + pt.y += titleFont.lineHeight + titleSpacing; + if (i + 1 === length) { + pt.y += options.titleMarginBottom - titleSpacing; + } + } + } + } + _drawColorBox(ctx, pt, i, rtlHelper, options) { + const labelColors = this.labelColors[i]; + const labelPointStyle = this.labelPointStyles[i]; + const {boxHeight, boxWidth, boxPadding} = options; + const bodyFont = toFont(options.bodyFont); + const colorX = getAlignedX(this, 'left', options); + const rtlColorX = rtlHelper.x(colorX); + const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0; + const colorY = pt.y + yOffSet; + if (options.usePointStyle) { + const drawOptions = { + radius: Math.min(boxWidth, boxHeight) / 2, + pointStyle: labelPointStyle.pointStyle, + rotation: labelPointStyle.rotation, + borderWidth: 1 + }; + const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2; + const centerY = colorY + boxHeight / 2; + ctx.strokeStyle = options.multiKeyBackground; + ctx.fillStyle = options.multiKeyBackground; + drawPoint(ctx, drawOptions, centerX, centerY); + ctx.strokeStyle = labelColors.borderColor; + ctx.fillStyle = labelColors.backgroundColor; + drawPoint(ctx, drawOptions, centerX, centerY); + } else { + ctx.lineWidth = labelColors.borderWidth || 1; + ctx.strokeStyle = labelColors.borderColor; + ctx.setLineDash(labelColors.borderDash || []); + ctx.lineDashOffset = labelColors.borderDashOffset || 0; + const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding); + const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2); + const borderRadius = toTRBLCorners(labelColors.borderRadius); + if (Object.values(borderRadius).some(v => v !== 0)) { + ctx.beginPath(); + ctx.fillStyle = options.multiKeyBackground; + addRoundedRectPath(ctx, { + x: outerX, + y: colorY, + w: boxWidth, + h: boxHeight, + radius: borderRadius, + }); + ctx.fill(); + ctx.stroke(); + ctx.fillStyle = labelColors.backgroundColor; + ctx.beginPath(); + addRoundedRectPath(ctx, { + x: innerX, + y: colorY + 1, + w: boxWidth - 2, + h: boxHeight - 2, + radius: borderRadius, + }); + ctx.fill(); + } else { + ctx.fillStyle = options.multiKeyBackground; + ctx.fillRect(outerX, colorY, boxWidth, boxHeight); + ctx.strokeRect(outerX, colorY, boxWidth, boxHeight); + ctx.fillStyle = labelColors.backgroundColor; + ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2); + } + } + ctx.fillStyle = this.labelTextColors[i]; + } + drawBody(pt, ctx, options) { + const {body} = this; + const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options; + const bodyFont = toFont(options.bodyFont); + let bodyLineHeight = bodyFont.lineHeight; + let xLinePadding = 0; + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + const fillLineOfText = function(line) { + ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2); + pt.y += bodyLineHeight + bodySpacing; + }; + const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign); + let bodyItem, textColor, lines, i, j, ilen, jlen; + ctx.textAlign = bodyAlign; + ctx.textBaseline = 'middle'; + ctx.font = bodyFont.string; + pt.x = getAlignedX(this, bodyAlignForCalculation, options); + ctx.fillStyle = options.bodyColor; + each(this.beforeBody, fillLineOfText); + xLinePadding = displayColors && bodyAlignForCalculation !== 'right' + ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding) + : 0; + for (i = 0, ilen = body.length; i < ilen; ++i) { + bodyItem = body[i]; + textColor = this.labelTextColors[i]; + ctx.fillStyle = textColor; + each(bodyItem.before, fillLineOfText); + lines = bodyItem.lines; + if (displayColors && lines.length) { + this._drawColorBox(ctx, pt, i, rtlHelper, options); + bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight); + } + for (j = 0, jlen = lines.length; j < jlen; ++j) { + fillLineOfText(lines[j]); + bodyLineHeight = bodyFont.lineHeight; + } + each(bodyItem.after, fillLineOfText); + } + xLinePadding = 0; + bodyLineHeight = bodyFont.lineHeight; + each(this.afterBody, fillLineOfText); + pt.y -= bodySpacing; + } + drawFooter(pt, ctx, options) { + const footer = this.footer; + const length = footer.length; + let footerFont, i; + if (length) { + const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); + pt.x = getAlignedX(this, options.footerAlign, options); + pt.y += options.footerMarginTop; + ctx.textAlign = rtlHelper.textAlign(options.footerAlign); + ctx.textBaseline = 'middle'; + footerFont = toFont(options.footerFont); + ctx.fillStyle = options.footerColor; + ctx.font = footerFont.string; + for (i = 0; i < length; ++i) { + ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2); + pt.y += footerFont.lineHeight + options.footerSpacing; + } + } + } + drawBackground(pt, ctx, tooltipSize, options) { + const {xAlign, yAlign} = this; + const {x, y} = pt; + const {width, height} = tooltipSize; + const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius); + ctx.fillStyle = options.backgroundColor; + ctx.strokeStyle = options.borderColor; + ctx.lineWidth = options.borderWidth; + ctx.beginPath(); + ctx.moveTo(x + topLeft, y); + if (yAlign === 'top') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width - topRight, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); + if (yAlign === 'center' && xAlign === 'right') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + width, y + height - bottomRight); + ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); + if (yAlign === 'bottom') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x + bottomLeft, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); + if (yAlign === 'center' && xAlign === 'left') { + this.drawCaret(pt, ctx, tooltipSize, options); + } + ctx.lineTo(x, y + topLeft); + ctx.quadraticCurveTo(x, y, x + topLeft, y); + ctx.closePath(); + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } + } + _updateAnimationTarget(options) { + const chart = this.chart; + const anims = this.$animations; + const animX = anims && anims.x; + const animY = anims && anims.y; + if (animX || animY) { + const position = positioners[options.position].call(this, this._active, this._eventPosition); + if (!position) { + return; + } + const size = this._size = getTooltipSize(this, options); + const positionAndSize = Object.assign({}, position, this._size); + const alignment = determineAlignment(chart, options, positionAndSize); + const point = getBackgroundPoint(options, positionAndSize, alignment, chart); + if (animX._to !== point.x || animY._to !== point.y) { + this.xAlign = alignment.xAlign; + this.yAlign = alignment.yAlign; + this.width = size.width; + this.height = size.height; + this.caretX = position.x; + this.caretY = position.y; + this._resolveAnimations().update(this, point); + } + } + } + draw(ctx) { + const options = this.options.setContext(this.getContext()); + let opacity = this.opacity; + if (!opacity) { + return; + } + this._updateAnimationTarget(options); + const tooltipSize = { + width: this.width, + height: this.height + }; + const pt = { + x: this.x, + y: this.y + }; + opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity; + const padding = toPadding(options.padding); + const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length; + if (options.enabled && hasTooltipContent) { + ctx.save(); + ctx.globalAlpha = opacity; + this.drawBackground(pt, ctx, tooltipSize, options); + overrideTextDirection(ctx, options.textDirection); + pt.y += padding.top; + this.drawTitle(pt, ctx, options); + this.drawBody(pt, ctx, options); + this.drawFooter(pt, ctx, options); + restoreTextDirection(ctx, options.textDirection); + ctx.restore(); + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(activeElements, eventPosition) { + const lastActive = this._active; + const active = activeElements.map(({datasetIndex, index}) => { + const meta = this.chart.getDatasetMeta(datasetIndex); + if (!meta) { + throw new Error('Cannot find a dataset at index ' + datasetIndex); + } + return { + datasetIndex, + element: meta.data[index], + index, + }; + }); + const changed = !_elementsEqual(lastActive, active); + const positionChanged = this._positionChanged(active, eventPosition); + if (changed || positionChanged) { + this._active = active; + this._eventPosition = eventPosition; + this._ignoreReplayEvents = true; + this.update(true); + } + } + handleEvent(e, replay, inChartArea = true) { + if (replay && this._ignoreReplayEvents) { + return false; + } + this._ignoreReplayEvents = false; + const options = this.options; + const lastActive = this._active || []; + const active = this._getActiveElements(e, lastActive, replay, inChartArea); + const positionChanged = this._positionChanged(active, e); + const changed = replay || !_elementsEqual(active, lastActive) || positionChanged; + if (changed) { + this._active = active; + if (options.enabled || options.external) { + this._eventPosition = { + x: e.x, + y: e.y + }; + this.update(true, replay); + } + } + return changed; + } + _getActiveElements(e, lastActive, replay, inChartArea) { + const options = this.options; + if (e.type === 'mouseout') { + return []; + } + if (!inChartArea) { + return lastActive; + } + const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay); + if (options.reverse) { + active.reverse(); + } + return active; + } + _positionChanged(active, e) { + const {caretX, caretY, options} = this; + const position = positioners[options.position].call(this, active, e); + return position !== false && (caretX !== position.x || caretY !== position.y); + } +} +Tooltip.positioners = positioners; +var plugin_tooltip = { + id: 'tooltip', + _element: Tooltip, + positioners, + afterInit(chart, _args, options) { + if (options) { + chart.tooltip = new Tooltip({chart, options}); + } + }, + beforeUpdate(chart, _args, options) { + if (chart.tooltip) { + chart.tooltip.initialize(options); + } + }, + reset(chart, _args, options) { + if (chart.tooltip) { + chart.tooltip.initialize(options); + } + }, + afterDraw(chart) { + const tooltip = chart.tooltip; + const args = { + tooltip + }; + if (chart.notifyPlugins('beforeTooltipDraw', args) === false) { + return; + } + if (tooltip) { + tooltip.draw(chart.ctx); + } + chart.notifyPlugins('afterTooltipDraw', args); + }, + afterEvent(chart, args) { + if (chart.tooltip) { + const useFinalPosition = args.replay; + if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) { + args.changed = true; + } + } + }, + defaults: { + enabled: true, + 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: (ctx, opts) => opts.bodyFont.size, + boxWidth: (ctx, opts) => opts.bodyFont.size, + multiKeyBackground: '#fff', + displayColors: true, + 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: noop, + title(tooltipItems) { + if (tooltipItems.length > 0) { + const item = tooltipItems[0]; + const labels = item.chart.data.labels; + const labelCount = labels ? labels.length : 0; + if (this && this.options && this.options.mode === 'dataset') { + return item.dataset.label || ''; + } else if (item.label) { + return item.label; + } else if (labelCount > 0 && item.dataIndex < labelCount) { + return labels[item.dataIndex]; + } + } + return ''; + }, + afterTitle: noop, + beforeBody: noop, + beforeLabel: noop, + label(tooltipItem) { + if (this && this.options && this.options.mode === 'dataset') { + return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue; + } + let label = tooltipItem.dataset.label || ''; + if (label) { + label += ': '; + } + const value = tooltipItem.formattedValue; + if (!isNullOrUndef(value)) { + label += value; + } + return label; + }, + labelColor(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + borderColor: options.borderColor, + backgroundColor: options.backgroundColor, + borderWidth: options.borderWidth, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderRadius: 0, + }; + }, + labelTextColor() { + return this.options.bodyColor; + }, + labelPointStyle(tooltipItem) { + const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); + const options = meta.controller.getStyle(tooltipItem.dataIndex); + return { + pointStyle: options.pointStyle, + rotation: options.rotation, + }; + }, + afterLabel: noop, + afterBody: noop, + beforeFooter: noop, + footer: noop, + afterFooter: noop + } + }, + defaultRoutes: { + bodyFont: 'font', + footerFont: 'font', + titleFont: 'font' + }, + descriptors: { + _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external', + _indexable: false, + callbacks: { + _scriptable: false, + _indexable: false, + }, + animation: { + _fallback: false + }, + animations: { + _fallback: 'animation' + } + }, + additionalOptionScopes: ['interaction'] +}; + +var plugins = /*#__PURE__*/Object.freeze({ +__proto__: null, +Decimation: plugin_decimation, +Filler: plugin_filler, +Legend: plugin_legend, +SubTitle: plugin_subtitle, +Title: plugin_title, +Tooltip: plugin_tooltip +}); + +const addIfString = (labels, raw, index, addedLabels) => { + if (typeof raw === 'string') { + index = labels.push(raw) - 1; + addedLabels.unshift({index, label: raw}); + } else if (isNaN(raw)) { + index = null; + } + return index; +}; +function findOrAddLabel(labels, raw, index, addedLabels) { + const first = labels.indexOf(raw); + if (first === -1) { + return addIfString(labels, raw, index, addedLabels); + } + const last = labels.lastIndexOf(raw); + return first !== last ? index : first; +} +const validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max); +class CategoryScale extends Scale { + constructor(cfg) { + super(cfg); + this._startValue = undefined; + this._valueRange = 0; + this._addedLabels = []; + } + init(scaleOptions) { + const added = this._addedLabels; + if (added.length) { + const labels = this.getLabels(); + for (const {index, label} of added) { + if (labels[index] === label) { + labels.splice(index, 1); + } + } + this._addedLabels = []; + } + super.init(scaleOptions); + } + parse(raw, index) { + if (isNullOrUndef(raw)) { + return null; + } + const labels = this.getLabels(); + index = isFinite(index) && labels[index] === raw ? index + : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels); + return validIndex(index, labels.length - 1); + } + determineDataLimits() { + const {minDefined, maxDefined} = this.getUserBounds(); + let {min, max} = this.getMinMax(true); + if (this.options.bounds === 'ticks') { + if (!minDefined) { + min = 0; + } + if (!maxDefined) { + max = this.getLabels().length - 1; + } + } + this.min = min; + this.max = max; + } + buildTicks() { + const min = this.min; + const max = this.max; + const offset = this.options.offset; + const ticks = []; + let labels = this.getLabels(); + labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1); + this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); + this._startValue = this.min - (offset ? 0.5 : 0); + for (let value = min; value <= max; value++) { + ticks.push({value}); + } + return ticks; + } + getLabelForValue(value) { + const labels = this.getLabels(); + if (value >= 0 && value < labels.length) { + return labels[value]; + } + return value; + } + configure() { + super.configure(); + if (!this.isHorizontal()) { + this._reversePixels = !this._reversePixels; + } + } + getPixelForValue(value) { + if (typeof value !== 'number') { + value = this.parse(value); + } + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getPixelForTick(index) { + const ticks = this.ticks; + if (index < 0 || index > ticks.length - 1) { + return null; + } + return this.getPixelForValue(ticks[index].value); + } + getValueForPixel(pixel) { + return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); + } + getBasePixel() { + return this.bottom; + } +} +CategoryScale.id = 'category'; +CategoryScale.defaults = { + ticks: { + callback: CategoryScale.prototype.getLabelForValue + } +}; + +function generateTicks$1(generationOptions, dataRange) { + const ticks = []; + const MIN_SPACING = 1e-14; + const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions; + const unit = step || 1; + const maxSpaces = maxTicks - 1; + const {min: rmin, max: rmax} = dataRange; + const minDefined = !isNullOrUndef(min); + const maxDefined = !isNullOrUndef(max); + const countDefined = !isNullOrUndef(count); + const minSpacing = (rmax - rmin) / (maxDigits + 1); + let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit; + let factor, niceMin, niceMax, numSpaces; + if (spacing < MIN_SPACING && !minDefined && !maxDefined) { + return [{value: rmin}, {value: rmax}]; + } + numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); + if (numSpaces > maxSpaces) { + spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit; + } + if (!isNullOrUndef(precision)) { + factor = Math.pow(10, precision); + spacing = Math.ceil(spacing * factor) / factor; + } + if (bounds === 'ticks') { + niceMin = Math.floor(rmin / spacing) * spacing; + niceMax = Math.ceil(rmax / spacing) * spacing; + } else { + niceMin = rmin; + niceMax = rmax; + } + if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) { + numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks)); + spacing = (max - min) / numSpaces; + niceMin = min; + niceMax = max; + } else if (countDefined) { + niceMin = minDefined ? min : niceMin; + niceMax = maxDefined ? max : niceMax; + numSpaces = count - 1; + spacing = (niceMax - niceMin) / numSpaces; + } else { + numSpaces = (niceMax - niceMin) / spacing; + if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) { + numSpaces = Math.round(numSpaces); + } else { + numSpaces = Math.ceil(numSpaces); + } + } + const decimalPlaces = Math.max( + _decimalPlaces(spacing), + _decimalPlaces(niceMin) + ); + factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision); + niceMin = Math.round(niceMin * factor) / factor; + niceMax = Math.round(niceMax * factor) / factor; + let j = 0; + if (minDefined) { + if (includeBounds && niceMin !== min) { + ticks.push({value: min}); + if (niceMin < min) { + j++; + } + if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) { + j++; + } + } else if (niceMin < min) { + j++; + } + } + for (; j < numSpaces; ++j) { + ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor}); + } + if (maxDefined && includeBounds && niceMax !== max) { + if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) { + ticks[ticks.length - 1].value = max; + } else { + ticks.push({value: max}); + } + } else if (!maxDefined || niceMax === max) { + ticks.push({value: niceMax}); + } + return ticks; +} +function relativeLabelSize(value, minSpacing, {horizontal, minRotation}) { + const rad = toRadians(minRotation); + const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001; + const length = 0.75 * minSpacing * ('' + value).length; + return Math.min(minSpacing / ratio, length); +} +class LinearScaleBase extends Scale { + constructor(cfg) { + super(cfg); + this.start = undefined; + this.end = undefined; + this._startValue = undefined; + this._endValue = undefined; + this._valueRange = 0; + } + parse(raw, index) { + if (isNullOrUndef(raw)) { + return null; + } + if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) { + return null; + } + return +raw; + } + handleTickRangeOptions() { + const {beginAtZero} = this.options; + const {minDefined, maxDefined} = this.getUserBounds(); + let {min, max} = this; + const setMin = v => (min = minDefined ? min : v); + const setMax = v => (max = maxDefined ? max : v); + if (beginAtZero) { + const minSign = sign(min); + const maxSign = sign(max); + if (minSign < 0 && maxSign < 0) { + setMax(0); + } else if (minSign > 0 && maxSign > 0) { + setMin(0); + } + } + if (min === max) { + let offset = 1; + if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) { + offset = Math.abs(max * 0.05); + } + setMax(max + offset); + if (!beginAtZero) { + setMin(min - offset); + } + } + this.min = min; + this.max = max; + } + getTickLimit() { + const tickOpts = this.options.ticks; + let {maxTicksLimit, stepSize} = tickOpts; + let maxTicks; + if (stepSize) { + maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1; + if (maxTicks > 1000) { + console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`); + maxTicks = 1000; + } + } else { + maxTicks = this.computeTickLimit(); + maxTicksLimit = maxTicksLimit || 11; + } + if (maxTicksLimit) { + maxTicks = Math.min(maxTicksLimit, maxTicks); + } + return maxTicks; + } + computeTickLimit() { + return Number.POSITIVE_INFINITY; + } + buildTicks() { + const opts = this.options; + const tickOpts = opts.ticks; + let maxTicks = this.getTickLimit(); + maxTicks = Math.max(2, maxTicks); + const numericGeneratorOptions = { + maxTicks, + bounds: opts.bounds, + min: opts.min, + max: opts.max, + precision: tickOpts.precision, + step: tickOpts.stepSize, + count: tickOpts.count, + maxDigits: this._maxDigits(), + horizontal: this.isHorizontal(), + minRotation: tickOpts.minRotation || 0, + includeBounds: tickOpts.includeBounds !== false + }; + const dataRange = this._range || this; + const ticks = generateTicks$1(numericGeneratorOptions, dataRange); + if (opts.bounds === 'ticks') { + _setMinAndMaxByKey(ticks, this, 'value'); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + configure() { + const ticks = this.ticks; + let start = this.min; + let end = this.max; + super.configure(); + if (this.options.offset && ticks.length) { + const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2; + start -= offset; + end += offset; + } + this._startValue = start; + this._endValue = end; + this._valueRange = end - start; + } + getLabelForValue(value) { + return formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } +} + +class LinearScale extends LinearScaleBase { + determineDataLimits() { + const {min, max} = this.getMinMax(true); + this.min = isNumberFinite(min) ? min : 0; + this.max = isNumberFinite(max) ? max : 1; + this.handleTickRangeOptions(); + } + computeTickLimit() { + const horizontal = this.isHorizontal(); + const length = horizontal ? this.width : this.height; + const minRotation = toRadians(this.options.ticks.minRotation); + const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001; + const tickFont = this._resolveTickFontOptions(0); + return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio)); + } + getPixelForValue(value) { + return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange; + } +} +LinearScale.id = 'linear'; +LinearScale.defaults = { + ticks: { + callback: Ticks.formatters.numeric + } +}; + +function isMajor(tickVal) { + const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal)))); + return remain === 1; +} +function generateTicks(generationOptions, dataRange) { + const endExp = Math.floor(log10(dataRange.max)); + const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp)); + const ticks = []; + let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min)))); + let exp = Math.floor(log10(tickVal)); + let significand = Math.floor(tickVal / Math.pow(10, exp)); + let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; + do { + ticks.push({value: tickVal, major: isMajor(tickVal)}); + ++significand; + if (significand === 10) { + significand = 1; + ++exp; + precision = exp >= 0 ? 1 : precision; + } + tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision; + } while (exp < endExp || (exp === endExp && significand < endSignificand)); + const lastTick = finiteOrDefault(generationOptions.max, tickVal); + ticks.push({value: lastTick, major: isMajor(tickVal)}); + return ticks; +} +class LogarithmicScale extends Scale { + constructor(cfg) { + super(cfg); + this.start = undefined; + this.end = undefined; + this._startValue = undefined; + this._valueRange = 0; + } + parse(raw, index) { + const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]); + if (value === 0) { + this._zero = true; + return undefined; + } + return isNumberFinite(value) && value > 0 ? value : null; + } + determineDataLimits() { + const {min, max} = this.getMinMax(true); + this.min = isNumberFinite(min) ? Math.max(0, min) : null; + this.max = isNumberFinite(max) ? Math.max(0, max) : null; + if (this.options.beginAtZero) { + this._zero = true; + } + this.handleTickRangeOptions(); + } + handleTickRangeOptions() { + const {minDefined, maxDefined} = this.getUserBounds(); + let min = this.min; + let max = this.max; + const setMin = v => (min = minDefined ? min : v); + const setMax = v => (max = maxDefined ? max : v); + const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m); + if (min === max) { + if (min <= 0) { + setMin(1); + setMax(10); + } else { + setMin(exp(min, -1)); + setMax(exp(max, +1)); + } + } + if (min <= 0) { + setMin(exp(max, -1)); + } + if (max <= 0) { + setMax(exp(min, +1)); + } + if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) { + setMin(exp(min, -1)); + } + this.min = min; + this.max = max; + } + buildTicks() { + const opts = this.options; + const generationOptions = { + min: this._userMin, + max: this._userMax + }; + const ticks = generateTicks(generationOptions, this); + if (opts.bounds === 'ticks') { + _setMinAndMaxByKey(ticks, this, 'value'); + } + if (opts.reverse) { + ticks.reverse(); + this.start = this.max; + this.end = this.min; + } else { + this.start = this.min; + this.end = this.max; + } + return ticks; + } + getLabelForValue(value) { + return value === undefined + ? '0' + : formatNumber(value, this.chart.options.locale, this.options.ticks.format); + } + configure() { + const start = this.min; + super.configure(); + this._startValue = log10(start); + this._valueRange = log10(this.max) - log10(start); + } + getPixelForValue(value) { + if (value === undefined || value === 0) { + value = this.min; + } + if (value === null || isNaN(value)) { + return NaN; + } + return this.getPixelForDecimal(value === this.min + ? 0 + : (log10(value) - this._startValue) / this._valueRange); + } + getValueForPixel(pixel) { + const decimal = this.getDecimalForPixel(pixel); + return Math.pow(10, this._startValue + decimal * this._valueRange); + } +} +LogarithmicScale.id = 'logarithmic'; +LogarithmicScale.defaults = { + ticks: { + callback: Ticks.formatters.logarithmic, + major: { + enabled: true + } + } +}; + +function getTickBackdropHeight(opts) { + const tickOpts = opts.ticks; + if (tickOpts.display && opts.display) { + const padding = toPadding(tickOpts.backdropPadding); + return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height; + } + return 0; +} +function measureLabelSize(ctx, font, label) { + label = isArray(label) ? label : [label]; + return { + w: _longestText(ctx, font.string, label), + h: label.length * font.lineHeight + }; +} +function determineLimits(angle, pos, size, min, max) { + if (angle === min || angle === max) { + return { + start: pos - (size / 2), + end: pos + (size / 2) + }; + } else if (angle < min || angle > max) { + return { + start: pos - size, + end: pos + }; + } + return { + start: pos, + end: pos + size + }; +} +function fitWithPointLabels(scale) { + const orig = { + l: scale.left + scale._padding.left, + r: scale.right - scale._padding.right, + t: scale.top + scale._padding.top, + b: scale.bottom - scale._padding.bottom + }; + const limits = Object.assign({}, orig); + const labelSizes = []; + const padding = []; + const valueCount = scale._pointLabels.length; + const pointLabelOpts = scale.options.pointLabels; + const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0; + for (let i = 0; i < valueCount; i++) { + const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i)); + padding[i] = opts.padding; + const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle); + const plFont = toFont(opts.font); + const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]); + labelSizes[i] = textSize; + const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle); + const angle = Math.round(toDegrees(angleRadians)); + const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); + const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); + updateLimits(limits, orig, angleRadians, hLimits, vLimits); + } + scale.setCenterPoint( + orig.l - limits.l, + limits.r - orig.r, + orig.t - limits.t, + limits.b - orig.b + ); + scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding); +} +function updateLimits(limits, orig, angle, hLimits, vLimits) { + const sin = Math.abs(Math.sin(angle)); + const cos = Math.abs(Math.cos(angle)); + let x = 0; + let y = 0; + if (hLimits.start < orig.l) { + x = (orig.l - hLimits.start) / sin; + limits.l = Math.min(limits.l, orig.l - x); + } else if (hLimits.end > orig.r) { + x = (hLimits.end - orig.r) / sin; + limits.r = Math.max(limits.r, orig.r + x); + } + if (vLimits.start < orig.t) { + y = (orig.t - vLimits.start) / cos; + limits.t = Math.min(limits.t, orig.t - y); + } else if (vLimits.end > orig.b) { + y = (vLimits.end - orig.b) / cos; + limits.b = Math.max(limits.b, orig.b + y); + } +} +function buildPointLabelItems(scale, labelSizes, padding) { + const items = []; + const valueCount = scale._pointLabels.length; + const opts = scale.options; + const extra = getTickBackdropHeight(opts) / 2; + const outerDistance = scale.drawingArea; + const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0; + for (let i = 0; i < valueCount; i++) { + const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle); + const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI))); + const size = labelSizes[i]; + const y = yForAngle(pointLabelPosition.y, size.h, angle); + const textAlign = getTextAlignForAngle(angle); + const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign); + items.push({ + x: pointLabelPosition.x, + y, + textAlign, + left, + top: y, + right: left + size.w, + bottom: y + size.h + }); + } + return items; +} +function getTextAlignForAngle(angle) { + if (angle === 0 || angle === 180) { + return 'center'; + } else if (angle < 180) { + return 'left'; + } + return 'right'; +} +function leftForTextAlign(x, w, align) { + if (align === 'right') { + x -= w; + } else if (align === 'center') { + x -= (w / 2); + } + return x; +} +function yForAngle(y, h, angle) { + if (angle === 90 || angle === 270) { + y -= (h / 2); + } else if (angle > 270 || angle < 90) { + y -= h; + } + return y; +} +function drawPointLabels(scale, labelCount) { + const {ctx, options: {pointLabels}} = scale; + for (let i = labelCount - 1; i >= 0; i--) { + const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i)); + const plFont = toFont(optsAtIndex.font); + const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i]; + const {backdropColor} = optsAtIndex; + if (!isNullOrUndef(backdropColor)) { + const padding = toPadding(optsAtIndex.backdropPadding); + ctx.fillStyle = backdropColor; + ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height); + } + renderText( + ctx, + scale._pointLabels[i], + x, + y + (plFont.lineHeight / 2), + plFont, + { + color: optsAtIndex.color, + textAlign: textAlign, + textBaseline: 'middle' + } + ); + } +} +function pathRadiusLine(scale, radius, circular, labelCount) { + const {ctx} = scale; + if (circular) { + ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU); + } else { + let pointPosition = scale.getPointPosition(0, radius); + ctx.moveTo(pointPosition.x, pointPosition.y); + for (let i = 1; i < labelCount; i++) { + pointPosition = scale.getPointPosition(i, radius); + ctx.lineTo(pointPosition.x, pointPosition.y); + } + } +} +function drawRadiusLine(scale, gridLineOpts, radius, labelCount) { + const ctx = scale.ctx; + const circular = gridLineOpts.circular; + const {color, lineWidth} = gridLineOpts; + if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) { + return; + } + ctx.save(); + ctx.strokeStyle = color; + ctx.lineWidth = lineWidth; + ctx.setLineDash(gridLineOpts.borderDash); + ctx.lineDashOffset = gridLineOpts.borderDashOffset; + ctx.beginPath(); + pathRadiusLine(scale, radius, circular, labelCount); + ctx.closePath(); + ctx.stroke(); + ctx.restore(); +} +function createPointLabelContext(parent, index, label) { + return createContext(parent, { + label, + index, + type: 'pointLabel' + }); +} +class RadialLinearScale extends LinearScaleBase { + constructor(cfg) { + super(cfg); + this.xCenter = undefined; + this.yCenter = undefined; + this.drawingArea = undefined; + this._pointLabels = []; + this._pointLabelItems = []; + } + setDimensions() { + const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2); + const w = this.width = this.maxWidth - padding.width; + const h = this.height = this.maxHeight - padding.height; + this.xCenter = Math.floor(this.left + w / 2 + padding.left); + this.yCenter = Math.floor(this.top + h / 2 + padding.top); + this.drawingArea = Math.floor(Math.min(w, h) / 2); + } + determineDataLimits() { + const {min, max} = this.getMinMax(false); + this.min = isNumberFinite(min) && !isNaN(min) ? min : 0; + this.max = isNumberFinite(max) && !isNaN(max) ? max : 0; + this.handleTickRangeOptions(); + } + computeTickLimit() { + return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); + } + generateTickLabels(ticks) { + LinearScaleBase.prototype.generateTickLabels.call(this, ticks); + this._pointLabels = this.getLabels() + .map((value, index) => { + const label = callback(this.options.pointLabels.callback, [value, index], this); + return label || label === 0 ? label : ''; + }) + .filter((v, i) => this.chart.getDataVisibility(i)); + } + fit() { + const opts = this.options; + if (opts.display && opts.pointLabels.display) { + fitWithPointLabels(this); + } else { + this.setCenterPoint(0, 0, 0, 0); + } + } + setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) { + this.xCenter += Math.floor((leftMovement - rightMovement) / 2); + this.yCenter += Math.floor((topMovement - bottomMovement) / 2); + this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement)); + } + getIndexAngle(index) { + const angleMultiplier = TAU / (this._pointLabels.length || 1); + const startAngle = this.options.startAngle || 0; + return _normalizeAngle(index * angleMultiplier + toRadians(startAngle)); + } + getDistanceFromCenterForValue(value) { + if (isNullOrUndef(value)) { + return NaN; + } + const scalingFactor = this.drawingArea / (this.max - this.min); + if (this.options.reverse) { + return (this.max - value) * scalingFactor; + } + return (value - this.min) * scalingFactor; + } + getValueForDistanceFromCenter(distance) { + if (isNullOrUndef(distance)) { + return NaN; + } + const scaledDistance = distance / (this.drawingArea / (this.max - this.min)); + return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance; + } + getPointLabelContext(index) { + const pointLabels = this._pointLabels || []; + if (index >= 0 && index < pointLabels.length) { + const pointLabel = pointLabels[index]; + return createPointLabelContext(this.getContext(), index, pointLabel); + } + } + getPointPosition(index, distanceFromCenter, additionalAngle = 0) { + const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle; + return { + x: Math.cos(angle) * distanceFromCenter + this.xCenter, + y: Math.sin(angle) * distanceFromCenter + this.yCenter, + angle + }; + } + getPointPositionForValue(index, value) { + return this.getPointPosition(index, this.getDistanceFromCenterForValue(value)); + } + getBasePosition(index) { + return this.getPointPositionForValue(index || 0, this.getBaseValue()); + } + getPointLabelPosition(index) { + const {left, top, right, bottom} = this._pointLabelItems[index]; + return { + left, + top, + right, + bottom, + }; + } + drawBackground() { + const {backgroundColor, grid: {circular}} = this.options; + if (backgroundColor) { + const ctx = this.ctx; + ctx.save(); + ctx.beginPath(); + pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length); + ctx.closePath(); + ctx.fillStyle = backgroundColor; + ctx.fill(); + ctx.restore(); + } + } + drawGrid() { + const ctx = this.ctx; + const opts = this.options; + const {angleLines, grid} = opts; + const labelCount = this._pointLabels.length; + let i, offset, position; + if (opts.pointLabels.display) { + drawPointLabels(this, labelCount); + } + if (grid.display) { + this.ticks.forEach((tick, index) => { + if (index !== 0) { + offset = this.getDistanceFromCenterForValue(tick.value); + const optsAtIndex = grid.setContext(this.getContext(index - 1)); + drawRadiusLine(this, optsAtIndex, offset, labelCount); + } + }); + } + if (angleLines.display) { + ctx.save(); + for (i = labelCount - 1; i >= 0; i--) { + const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i)); + const {color, lineWidth} = optsAtIndex; + if (!lineWidth || !color) { + continue; + } + ctx.lineWidth = lineWidth; + ctx.strokeStyle = color; + ctx.setLineDash(optsAtIndex.borderDash); + ctx.lineDashOffset = optsAtIndex.borderDashOffset; + offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max); + position = this.getPointPosition(i, offset); + ctx.beginPath(); + ctx.moveTo(this.xCenter, this.yCenter); + ctx.lineTo(position.x, position.y); + ctx.stroke(); + } + ctx.restore(); + } + } + drawBorder() {} + drawLabels() { + const ctx = this.ctx; + const opts = this.options; + const tickOpts = opts.ticks; + if (!tickOpts.display) { + return; + } + const startAngle = this.getIndexAngle(0); + let offset, width; + ctx.save(); + ctx.translate(this.xCenter, this.yCenter); + ctx.rotate(startAngle); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + this.ticks.forEach((tick, index) => { + if (index === 0 && !opts.reverse) { + return; + } + const optsAtIndex = tickOpts.setContext(this.getContext(index)); + const tickFont = toFont(optsAtIndex.font); + offset = this.getDistanceFromCenterForValue(this.ticks[index].value); + if (optsAtIndex.showLabelBackdrop) { + ctx.font = tickFont.string; + width = ctx.measureText(tick.label).width; + ctx.fillStyle = optsAtIndex.backdropColor; + const padding = toPadding(optsAtIndex.backdropPadding); + ctx.fillRect( + -width / 2 - padding.left, + -offset - tickFont.size / 2 - padding.top, + width + padding.width, + tickFont.size + padding.height + ); + } + renderText(ctx, tick.label, 0, -offset, tickFont, { + color: optsAtIndex.color, + }); + }); + ctx.restore(); + } + drawTitle() {} +} +RadialLinearScale.id = 'radialLinear'; +RadialLinearScale.defaults = { + display: true, + animate: true, + position: 'chartArea', + angleLines: { + display: true, + lineWidth: 1, + borderDash: [], + borderDashOffset: 0.0 + }, + grid: { + circular: false + }, + startAngle: 0, + ticks: { + showLabelBackdrop: true, + callback: Ticks.formatters.numeric + }, + pointLabels: { + backdropColor: undefined, + backdropPadding: 2, + display: true, + font: { + size: 10 + }, + callback(label) { + return label; + }, + padding: 5, + centerPointLabels: false + } +}; +RadialLinearScale.defaultRoutes = { + 'angleLines.color': 'borderColor', + 'pointLabels.color': 'color', + 'ticks.color': 'color' +}; +RadialLinearScale.descriptors = { + angleLines: { + _fallback: 'grid' + } +}; + +const INTERVALS = { + millisecond: {common: true, size: 1, steps: 1000}, + second: {common: true, size: 1000, steps: 60}, + minute: {common: true, size: 60000, steps: 60}, + hour: {common: true, size: 3600000, steps: 24}, + day: {common: true, size: 86400000, steps: 30}, + week: {common: false, size: 604800000, steps: 4}, + month: {common: true, size: 2.628e9, steps: 12}, + quarter: {common: false, size: 7.884e9, steps: 4}, + year: {common: true, size: 3.154e10} +}; +const UNITS = (Object.keys(INTERVALS)); +function sorter(a, b) { + return a - b; +} +function parse(scale, input) { + if (isNullOrUndef(input)) { + return null; + } + const adapter = scale._adapter; + const {parser, round, isoWeekday} = scale._parseOpts; + let value = input; + if (typeof parser === 'function') { + value = parser(value); + } + if (!isNumberFinite(value)) { + value = typeof parser === 'string' + ? adapter.parse(value, parser) + : adapter.parse(value); + } + if (value === null) { + return null; + } + if (round) { + value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) + ? adapter.startOf(value, 'isoWeek', isoWeekday) + : adapter.startOf(value, round); + } + return +value; +} +function determineUnitForAutoTicks(minUnit, min, max, capacity) { + const ilen = UNITS.length; + for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { + const interval = INTERVALS[UNITS[i]]; + const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER; + if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { + return UNITS[i]; + } + } + return UNITS[ilen - 1]; +} +function determineUnitForFormatting(scale, numTicks, minUnit, min, max) { + for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) { + const unit = UNITS[i]; + if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) { + return unit; + } + } + return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; +} +function determineMajorUnit(unit) { + for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { + if (INTERVALS[UNITS[i]].common) { + return UNITS[i]; + } + } +} +function addTick(ticks, time, timestamps) { + if (!timestamps) { + ticks[time] = true; + } else if (timestamps.length) { + const {lo, hi} = _lookup(timestamps, time); + const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi]; + ticks[timestamp] = true; + } +} +function setMajorTicks(scale, ticks, map, majorUnit) { + const adapter = scale._adapter; + const first = +adapter.startOf(ticks[0].value, majorUnit); + const last = ticks[ticks.length - 1].value; + let major, index; + for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) { + index = map[major]; + if (index >= 0) { + ticks[index].major = true; + } + } + return ticks; +} +function ticksFromTimestamps(scale, values, majorUnit) { + const ticks = []; + const map = {}; + const ilen = values.length; + let i, value; + for (i = 0; i < ilen; ++i) { + value = values[i]; + map[value] = i; + ticks.push({ + value, + major: false + }); + } + return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit); +} +class TimeScale extends Scale { + constructor(props) { + super(props); + this._cache = { + data: [], + labels: [], + all: [] + }; + this._unit = 'day'; + this._majorUnit = undefined; + this._offsets = {}; + this._normalized = false; + this._parseOpts = undefined; + } + init(scaleOpts, opts) { + const time = scaleOpts.time || (scaleOpts.time = {}); + const adapter = this._adapter = new _adapters._date(scaleOpts.adapters.date); + mergeIf(time.displayFormats, adapter.formats()); + this._parseOpts = { + parser: time.parser, + round: time.round, + isoWeekday: time.isoWeekday + }; + super.init(scaleOpts); + this._normalized = opts.normalized; + } + parse(raw, index) { + if (raw === undefined) { + return null; + } + return parse(this, raw); + } + beforeLayout() { + super.beforeLayout(); + this._cache = { + data: [], + labels: [], + all: [] + }; + } + determineDataLimits() { + const options = this.options; + const adapter = this._adapter; + const unit = options.time.unit || 'day'; + let {min, max, minDefined, maxDefined} = this.getUserBounds(); + function _applyBounds(bounds) { + if (!minDefined && !isNaN(bounds.min)) { + min = Math.min(min, bounds.min); + } + if (!maxDefined && !isNaN(bounds.max)) { + max = Math.max(max, bounds.max); + } + } + if (!minDefined || !maxDefined) { + _applyBounds(this._getLabelBounds()); + if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') { + _applyBounds(this.getMinMax(false)); + } + } + min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); + max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; + this.min = Math.min(min, max - 1); + this.max = Math.max(min + 1, max); + } + _getLabelBounds() { + const arr = this.getLabelTimestamps(); + let min = Number.POSITIVE_INFINITY; + let max = Number.NEGATIVE_INFINITY; + if (arr.length) { + min = arr[0]; + max = arr[arr.length - 1]; + } + return {min, max}; + } + buildTicks() { + const options = this.options; + const timeOpts = options.time; + const tickOpts = options.ticks; + const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate(); + if (options.bounds === 'ticks' && timestamps.length) { + this.min = this._userMin || timestamps[0]; + this.max = this._userMax || timestamps[timestamps.length - 1]; + } + const min = this.min; + const max = this.max; + const ticks = _filterBetween(timestamps, min, max); + this._unit = timeOpts.unit || (tickOpts.autoSkip + ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) + : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max)); + this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined + : determineMajorUnit(this._unit); + this.initOffsets(timestamps); + if (options.reverse) { + ticks.reverse(); + } + return ticksFromTimestamps(this, ticks, this._majorUnit); + } + initOffsets(timestamps) { + let start = 0; + let end = 0; + let first, last; + if (this.options.offset && timestamps.length) { + first = this.getDecimalForValue(timestamps[0]); + if (timestamps.length === 1) { + start = 1 - first; + } else { + start = (this.getDecimalForValue(timestamps[1]) - first) / 2; + } + last = this.getDecimalForValue(timestamps[timestamps.length - 1]); + if (timestamps.length === 1) { + end = last; + } else { + end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2; + } + } + const limit = timestamps.length < 3 ? 0.5 : 0.25; + start = _limitValue(start, 0, limit); + end = _limitValue(end, 0, limit); + this._offsets = {start, end, factor: 1 / (start + 1 + end)}; + } + _generate() { + const adapter = this._adapter; + const min = this.min; + const max = this.max; + const options = this.options; + const timeOpts = options.time; + const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min)); + const stepSize = valueOrDefault(timeOpts.stepSize, 1); + const weekday = minor === 'week' ? timeOpts.isoWeekday : false; + const hasWeekday = isNumber(weekday) || weekday === true; + const ticks = {}; + let first = min; + let time, count; + if (hasWeekday) { + first = +adapter.startOf(first, 'isoWeek', weekday); + } + first = +adapter.startOf(first, hasWeekday ? 'day' : minor); + if (adapter.diff(max, min, minor) > 100000 * stepSize) { + throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor); + } + const timestamps = options.ticks.source === 'data' && this.getDataTimestamps(); + for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) { + addTick(ticks, time, timestamps); + } + if (time === max || options.bounds === 'ticks' || count === 1) { + addTick(ticks, time, timestamps); + } + return Object.keys(ticks).sort((a, b) => a - b).map(x => +x); + } + getLabelForValue(value) { + const adapter = this._adapter; + const timeOpts = this.options.time; + if (timeOpts.tooltipFormat) { + return adapter.format(value, timeOpts.tooltipFormat); + } + return adapter.format(value, timeOpts.displayFormats.datetime); + } + _tickFormatFunction(time, index, ticks, format) { + const options = this.options; + const formats = options.time.displayFormats; + const unit = this._unit; + const majorUnit = this._majorUnit; + const minorFormat = unit && formats[unit]; + const majorFormat = majorUnit && formats[majorUnit]; + const tick = ticks[index]; + const major = majorUnit && majorFormat && tick && tick.major; + const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat)); + const formatter = options.ticks.callback; + return formatter ? callback(formatter, [label, index, ticks], this) : label; + } + generateTickLabels(ticks) { + let i, ilen, tick; + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + tick = ticks[i]; + tick.label = this._tickFormatFunction(tick.value, i, ticks); + } + } + getDecimalForValue(value) { + return value === null ? NaN : (value - this.min) / (this.max - this.min); + } + getPixelForValue(value) { + const offsets = this._offsets; + const pos = this.getDecimalForValue(value); + return this.getPixelForDecimal((offsets.start + pos) * offsets.factor); + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return this.min + pos * (this.max - this.min); + } + _getLabelSize(label) { + const ticksOpts = this.options.ticks; + const tickLabelWidth = this.ctx.measureText(label).width; + const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation); + const cosRotation = Math.cos(angle); + const sinRotation = Math.sin(angle); + const tickFontSize = this._resolveTickFontOptions(0).size; + return { + w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation), + h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation) + }; + } + _getLabelCapacity(exampleTime) { + const timeOpts = this.options.time; + const displayFormats = timeOpts.displayFormats; + const format = displayFormats[timeOpts.unit] || displayFormats.millisecond; + const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format); + const size = this._getLabelSize(exampleLabel); + const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1; + return capacity > 0 ? capacity : 1; + } + getDataTimestamps() { + let timestamps = this._cache.data || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const metas = this.getMatchingVisibleMetas(); + if (this._normalized && metas.length) { + return (this._cache.data = metas[0].controller.getAllParsedValues(this)); + } + for (i = 0, ilen = metas.length; i < ilen; ++i) { + timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this)); + } + return (this._cache.data = this.normalize(timestamps)); + } + getLabelTimestamps() { + const timestamps = this._cache.labels || []; + let i, ilen; + if (timestamps.length) { + return timestamps; + } + const labels = this.getLabels(); + for (i = 0, ilen = labels.length; i < ilen; ++i) { + timestamps.push(parse(this, labels[i])); + } + return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps)); + } + normalize(values) { + return _arrayUnique(values.sort(sorter)); + } +} +TimeScale.id = 'time'; +TimeScale.defaults = { + bounds: 'data', + adapters: {}, + time: { + parser: false, + unit: false, + round: false, + isoWeekday: false, + minUnit: 'millisecond', + displayFormats: {} + }, + ticks: { + source: 'auto', + major: { + enabled: false + } + } +}; + +function interpolate(table, val, reverse) { + let lo = 0; + let hi = table.length - 1; + let prevSource, nextSource, prevTarget, nextTarget; + if (reverse) { + if (val >= table[lo].pos && val <= table[hi].pos) { + ({lo, hi} = _lookupByKey(table, 'pos', val)); + } + ({pos: prevSource, time: prevTarget} = table[lo]); + ({pos: nextSource, time: nextTarget} = table[hi]); + } else { + if (val >= table[lo].time && val <= table[hi].time) { + ({lo, hi} = _lookupByKey(table, 'time', val)); + } + ({time: prevSource, pos: prevTarget} = table[lo]); + ({time: nextSource, pos: nextTarget} = table[hi]); + } + const span = nextSource - prevSource; + return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget; +} +class TimeSeriesScale extends TimeScale { + constructor(props) { + super(props); + this._table = []; + this._minPos = undefined; + this._tableRange = undefined; + } + initOffsets() { + const timestamps = this._getTimestampsForTable(); + const table = this._table = this.buildLookupTable(timestamps); + this._minPos = interpolate(table, this.min); + this._tableRange = interpolate(table, this.max) - this._minPos; + super.initOffsets(timestamps); + } + buildLookupTable(timestamps) { + const {min, max} = this; + const items = []; + const table = []; + let i, ilen, prev, curr, next; + for (i = 0, ilen = timestamps.length; i < ilen; ++i) { + curr = timestamps[i]; + if (curr >= min && curr <= max) { + items.push(curr); + } + } + if (items.length < 2) { + return [ + {time: min, pos: 0}, + {time: max, pos: 1} + ]; + } + for (i = 0, ilen = items.length; i < ilen; ++i) { + next = items[i + 1]; + prev = items[i - 1]; + curr = items[i]; + if (Math.round((next + prev) / 2) !== curr) { + table.push({time: curr, pos: i / (ilen - 1)}); + } + } + return table; + } + _getTimestampsForTable() { + let timestamps = this._cache.all || []; + if (timestamps.length) { + return timestamps; + } + const data = this.getDataTimestamps(); + const label = this.getLabelTimestamps(); + if (data.length && label.length) { + timestamps = this.normalize(data.concat(label)); + } else { + timestamps = data.length ? data : label; + } + timestamps = this._cache.all = timestamps; + return timestamps; + } + getDecimalForValue(value) { + return (interpolate(this._table, value) - this._minPos) / this._tableRange; + } + getValueForPixel(pixel) { + const offsets = this._offsets; + const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; + return interpolate(this._table, decimal * this._tableRange + this._minPos, true); + } +} +TimeSeriesScale.id = 'timeseries'; +TimeSeriesScale.defaults = TimeScale.defaults; + +var scales = /*#__PURE__*/Object.freeze({ +__proto__: null, +CategoryScale: CategoryScale, +LinearScale: LinearScale, +LogarithmicScale: LogarithmicScale, +RadialLinearScale: RadialLinearScale, +TimeScale: TimeScale, +TimeSeriesScale: TimeSeriesScale +}); + +Chart.register(controllers, scales, elements, plugins); +Chart.helpers = {...helpers}; +Chart._adapters = _adapters; +Chart.Animation = Animation; +Chart.Animations = Animations; +Chart.animator = animator; +Chart.controllers = registry.controllers.items; +Chart.DatasetController = DatasetController; +Chart.Element = Element; +Chart.elements = elements; +Chart.Interaction = Interaction; +Chart.layouts = layouts; +Chart.platforms = platforms; +Chart.Scale = Scale; +Chart.Ticks = Ticks; +Object.assign(Chart, controllers, scales, elements, plugins, platforms); +Chart.Chart = Chart; +if (typeof window !== 'undefined') { + window.Chart = Chart; +} + +return Chart; + +})); diff --git a/node_modules/chart.js/dist/chart.min.js b/node_modules/chart.js/dist/chart.min.js new file mode 100644 index 00000000..2b3e9984 --- /dev/null +++ b/node_modules/chart.js/dist/chart.min.js @@ -0,0 +1,13 @@ +/*! + * Chart.js v3.7.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>"start"===t?"left":"end"===t?"right":"center",n=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,o=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}; +/*! + * @kurkle/color v0.1.9 + * https://github.com/kurkle/color#readme + * (c) 2020 Jukka Kurkela + * Released under the MIT License + */const r={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},l="0123456789ABCDEF",h=t=>l[15&t],c=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?h:c;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function w(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function M(t,e,i){const s=v(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function k(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=n===e?(i-s)/h+(i>16&255,o>>8&255,255&o]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function R(t,e,i){if(t){let s=k(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=P(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=E(t,{r:0,g:0,b:0,a:1})).a=m(e.a),e}function z(t){return"r"===t.charAt(0)?function(t){const e=_.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=255&(e[8]?p(t):255*t)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?p(i):i),s=255&(e[4]?p(s):s),n=255&(e[6]?p(n):n),{r:i,g:s,b:n,a:o}}}(t):C(t)}class F{constructor(t){if(t instanceof F)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=I(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*r[s[1]],g:255&17*r[s[2]],b:255&17*r[s[3]],a:5===o?17*r[s[4]]:255}:7!==o&&9!==o||(n={r:r[s[1]]<<4|r[s[2]],g:r[s[3]]<<4|r[s[4]],b:r[s[5]]<<4|r[s[6]],a:9===o?r[s[7]]<<4|r[s[8]]:255})),i=n||L(t)||z(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=E(this._rgb);return t&&(t.a=x(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):this._rgb;var t}hexString(){return this._valid?u(this._rgb):this._rgb}hslString(){return this._valid?function(t){if(!t)return;const e=k(t),i=e[0],s=b(e[1]),n=b(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${x(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):this._rgb}mix(t,e){const i=this;if(t){const s=i.rgb,n=t.rgb;let o;const a=e===o?.5:e,r=2*a-1,l=s.a-n.a,h=((r*l==-1?r:(r+l)/(1+r*l))+1)/2;o=1-h,s.r=255&h*s.r+o*n.r+.5,s.g=255&h*s.g+o*n.g+.5,s.b=255&h*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,i.rgb=s}return i}clone(){return new F(this.rgb)}alpha(t){return this._rgb.a=m(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=f(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return R(this._rgb,2,t),this}darken(t){return R(this._rgb,2,-t),this}saturate(t){return R(this._rgb,1,t),this}desaturate(t){return R(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=k(t);i[0]=D(i[0]+e),i=P(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function B(t){return new F(t)}const V=t=>t instanceof CanvasGradient||t instanceof CanvasPattern;function W(t){return V(t)?t:B(t)}function N(t){return V(t)?t:B(t).saturate(.5).darken(.1).hexString()}function H(){}const j=function(){let t=0;return function(){return t++}}();function $(t){return null==t}function Y(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)}function U(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}const X=t=>("number"==typeof t||t instanceof Number)&&isFinite(+t);function q(t,e){return X(t)?t:e}function K(t,e){return void 0===t?e:t}const G=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:t/e,Z=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function J(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function Q(t,e,i,s){let n,o,a;if(Y(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;ni;)t=t[e.substr(i,s-i)],i=s+1,s=rt(e,i);return t}function ht(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ct=t=>void 0!==t,dt=t=>"function"==typeof t,ut=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function ft(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const gt=Object.create(null),pt=Object.create(null);function mt(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.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=(t,e)=>N(e.backgroundColor),this.hoverBorderColor=(t,e)=>N(e.borderColor),this.hoverColor=(t,e)=>N(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0},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(t)}set(t,e){return xt(this,t,e)}get(t){return mt(this,t)}describe(t,e){return xt(pt,t,e)}override(t,e){return xt(gt,t,e)}route(t,e,i,s){const n=mt(this,t),o=mt(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return U(t)?Object.assign({},e,t):K(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});const _t=Math.PI,yt=2*_t,vt=yt+_t,wt=Number.POSITIVE_INFINITY,Mt=_t/180,kt=_t/2,St=_t/4,Pt=2*_t/3,Dt=Math.log10,Ct=Math.sign;function Ot(t){const e=Math.round(t);t=Lt(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(Dt(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function At(t){const e=[],i=Math.sqrt(t);let s;for(s=1;st-e)).pop(),e}function Tt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Lt(t,e,i){return Math.abs(t-e)=t}function Et(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Ut(t){return!t||$(t.size)||$(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Xt(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function qt(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;li.length){for(l=0;l0&&t.stroke()}}function Jt(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);$(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;lt[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const re=(t,e,i)=>ae(t,i,(s=>t[s][e]ae(t,i,(s=>t[s][e]>=i));function he(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+ht(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function ue(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ce.forEach((e=>{delete t[e]})),delete t._chartjs)}function fe(t){const e=new Set;let i,s;for(i=0,s=t.length;iwindow.getComputedStyle(t,null);function be(t,e){return xe(t).getPropertyValue(e)}const _e=["top","right","bottom","left"];function ye(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=_e[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ve(t,e){const{canvas:i,currentDevicePixelRatio:s}=e,n=xe(i),o="border-box"===n.boxSizing,a=ye(n,"padding"),r=ye(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.native||t,s=i.touches,n=s&&s.length?s[0]:i,{offsetX:o,offsetY:a}=n;let r,l,h=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(o,a,i.target))r=o,l=a;else{const t=e.getBoundingClientRect();r=n.clientX-t.left,l=n.clientY-t.top,h=!0}return{x:r,y:l,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const we=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=xe(t),o=ye(n,"margin"),a=me(n.maxWidth,t,"clientWidth")||wt,r=me(n.maxHeight,t,"clientHeight")||wt,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=pe(t);if(o){const t=o.getBoundingClientRect(),a=xe(o),r=ye(a,"border","width"),l=ye(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=me(a.maxWidth,o,"clientWidth"),n=me(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||wt,maxHeight:n||wt}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=ye(n,"border","width"),e=ye(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h/s):c-o.height),h=we(Math.min(h,a,l.maxWidth)),c=we(Math.min(c,r,l.maxHeight)),h&&!c&&(c=we(h/2)),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n/s,t.width=o/s;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t,e){return"native"in t?{x:t.x,y:t.y}:ve(t,e)}function Ce(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?le:re;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Oe(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[r](n[a],s)&&o.push({element:t,datasetIndex:e,index:i}),t.inRange(n.x,n.y,s)&&(l=!0)})),i.intersect&&!l?[]:o}var Ee={modes:{index(t,e,i,s){const n=De(e,t),o=i.axis||"x",a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s),r=[];return a.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=a[0].index,i=t.data[e];i&&!i.skip&&r.push({element:i,datasetIndex:t.index,index:e})})),r):[]},dataset(t,e,i,s){const n=De(e,t),o=i.axis||"xy";let a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s);if(a.length>0){const e=a[0].datasetIndex,i=t.getDatasetMeta(e).data;a=[];for(let t=0;tAe(t,De(e,t),i.axis||"xy",s),nearest:(t,e,i,s)=>Le(t,De(e,t),i.axis||"xy",i.intersect,s),x:(t,e,i,s)=>Re(t,e,{axis:"x",intersect:i.intersect},s),y:(t,e,i,s)=>Re(t,e,{axis:"y",intersect:i.intersect},s)}};const Ie=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),ze=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function Fe(t,e){const i=(""+t).match(Ie);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function Be(t,e){const i={},s=U(e),n=s?Object.keys(e):e,o=U(t)?s?i=>K(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function Ve(t){return Be(t,{top:"y",right:"x",bottom:"y",left:"x"})}function We(t){return Be(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Ne(t){const e=Ve(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function He(t,e){t=t||{},e=e||bt.font;let i=K(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=K(t.style,e.style);s&&!(""+s).match(ze)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:K(t.family,e.family),lineHeight:Fe(K(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:K(t.weight,e.weight),string:""};return n.string=Ut(n),n}function je(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;ni&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ye(t,e){return Object.assign(Object.create(t),e)}const Ue=["left","top","right","bottom"];function Xe(t,e){return t.filter((t=>t.pos===e))}function qe(t,e){return t.filter((t=>-1===Ue.indexOf(t.pos)&&t.box.axis===e))}function Ke(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ge(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ue.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ei(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Ke(Xe(e,"left"),!0),n=Ke(Xe(e,"right")),o=Ke(Xe(e,"top"),!0),a=Ke(Xe(e,"bottom")),r=qe(e,"x"),l=qe(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xe(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;Q(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);Je(u,Ne(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Ge(l.concat(h),d);ei(r.fullSize,f,d,g),ei(l,f,d,g),ei(h,f,d,g)&&ei(l,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),si(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,si(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},Q(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};function oi(t,e=[""],i=t,s,n=(()=>t[0])){ct(s)||(s=mi("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>oi([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>ci(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=mi(li(o,t),i),ct(n))return hi(t,n)?gi(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>xi(t).includes(e),ownKeys:t=>xi(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function ai(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:ri(t,s),setContext:e=>ai(t,e,i,s),override:n=>ai(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>ci(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];dt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),hi(t,e)&&(e=gi(n._scopes,n,t,e));return e}(e,r,t,i));Y(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(ct(o.index)&&s(t))e=e[o.index%e.length];else if(U(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=gi(s,n,t,l);e.push(ai(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));hi(e,r)&&(r=ai(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function ri(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:dt(i)?i:()=>i,isIndexable:dt(s)?s:()=>s}}const li=(t,e)=>t?t+ht(e):e,hi=(t,e)=>U(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ci(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function di(t,e,i){return dt(t)?t(e,i):t}const ui=(t,e)=>!0===t?e:"string"==typeof t?lt(e,t):void 0;function fi(t,e,i,s,n){for(const o of e){const e=ui(i,o);if(e){t.add(e);const o=di(e._fallback,i,n);if(ct(o)&&o!==i&&o!==s)return o}else if(!1===e&&ct(s)&&i!==s)return null}return!1}function gi(t,e,i,s){const n=e._rootScopes,o=di(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=pi(r,a,i,o||i,s);return null!==l&&((!ct(o)||o===i||(l=pi(r,a,o,l,s),null!==l))&&oi(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(Y(n)&&U(i))return i;return n}(e,i,s))))}function pi(t,e,i,s,n){for(;i;)i=fi(t,e,i,s,n);return i}function mi(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ct(e))return e}}function xi(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}const bi=Number.EPSILON||1e-14,_i=(t,e)=>e"x"===t?"y":"x";function vi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Vt(o,n),l=Vt(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function wi(t,e="x"){const i=yi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=_i(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)wi(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,Pi=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*yt/i),Di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*yt/i)+1,Ci={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*kt),easeOutSine:t=>Math.sin(t*kt),easeInOutSine:t=>-.5*(Math.cos(_t*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Si(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Si(t)?t:Pi(t,.075,.3),easeOutElastic:t=>Si(t)?t:Di(t,.075,.3),easeInOutElastic(t){const e=.1125;return Si(t)?t:t<.5?.5*Pi(2*t,e,.45):.5+.5*Di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Ci.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Ci.easeInBounce(2*t):.5*Ci.easeOutBounce(2*t-1)+.5};function Oi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function Ai(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function Ti(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=Oi(t,n,i),r=Oi(n,o,i),l=Oi(o,e,i),h=Oi(a,r,i),c=Oi(r,l,i);return Oi(h,c,i)}const Li=new Map;function Ri(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Li.get(i);return s||(s=new Intl.NumberFormat(t,e),Li.set(i,s)),s}(e,i).format(t)}function Ei(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ii(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function zi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Fi(t){return"angle"===t?{between:Ht,compare:Wt,normalize:Nt}:{between:Yt,compare:(t,e)=>t-e,normalize:t=>t}}function Bi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Vi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Fi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Fi(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hb||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Bi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Bi({start:_,end:d,loop:u,count:a,style:f})),g}function Wi(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Hi(t,[{start:a,end:r,loop:o}],i,e);return Hi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,rnull===t||""===t;const Gi=!!Se&&{passive:!0};function Zi(t,e,i){t.canvas.removeEventListener(e,i,Gi)}function Ji(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Qi(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.addedNodes,s),e=e&&!Ji(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ts(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.removedNodes,s),e=e&&!Ji(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const es=new Map;let is=0;function ss(){const t=window.devicePixelRatio;t!==is&&(is=t,es.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ns(t,i,s){const n=t.canvas,o=n&&pe(n);if(!o)return;const a=e(((t,e)=>{const i=o.clientWidth;s(t,e),i{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){es.size||window.addEventListener("resize",ss),es.set(t,e)}(t,a),r}function os(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){es.delete(t),es.size||window.removeEventListener("resize",ss)}(t)}function as(t,i,s){const n=t.canvas,o=e((e=>{null!==t.ctx&&s(function(t,e){const i=qi[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Gi)}(n,i,o),o}class rs extends Ui{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ki(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(Ki(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];$(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Qi,detach:ts,resize:ns}[e]||as;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:os,detach:os,resize:os}[e]||Zi)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=pe(t);return!(!e||!e.isConnected)}}function ls(t){return!ge()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Xi:rs}var hs=Object.freeze({__proto__:null,_detectPlatform:ls,BasePlatform:Ui,BasicPlatform:Xi,DomPlatform:rs});const cs="transparent",ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=W(t||cs),n=s.valid&&W(e||cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class us{constructor(t,e,i,s){const n=e[i];s=je([t.to,s,n,t.from]);const o=je([t.from,n,s]);this._active=!0,this._fn=t.fn||ds[t.type||typeof o],this._easing=Ci[t.easing]||Ci.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=je([t.to,e,s,t.from]),this._from=je([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),bt.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),bt.describe("animations",{_fallback:"animation"}),bt.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:t=>0|t}}}});class gs{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!U(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!U(s))return;const n={};for(const t of fs)n[t]=s[t];(Y(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new us(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function ps(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function ms(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Ms(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const ks=t=>"reset"===t||"none"===t,Ss=(t,e)=>e?t:Object.assign({},t);class Ps{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,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.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=bs(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ms(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=K(i.xAxisID,ws(t,"x")),o=e.yAxisID=K(i.yAxisID,ws(t,"y")),a=e.rAxisID=K(i.rAxisID,ws(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&ue(this._data,this),t._stacked&&Ms(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(U(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=Y(s[t])?this.parseArrayData(i,s,t,e):U(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]t&&!e.hidden&&e._stacked&&{keys:ms(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!X(u[t.axis])||h>e||c=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ss(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new gs(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ks(t)||this.chart._animationsDisabled}updateElement(t,e,i,s){ks(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!ks(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Ds.defaults={},Ds.defaultRoutes=void 0;const Cs={values:t=>Y(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Dt(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Ri(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=t/Math.pow(10,Math.floor(Dt(t)));return 1===s||2===s||5===s?Cs.numeric.call(this,t,e,i):""}};var Os={formatters:Cs};function As(t,e){const i=t.options.ticks,s=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;is)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(n,e,s);if(o>0){let t,i;const s=o>1?Math.round((r-a)/(o-1)):null;for(Ts(e,l,h,$(s)?0:a-s,a),t=0,i=o-1;te.lineWidth,tickColor:(t,e)=>e.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:Os.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),bt.route("scale.ticks","color","","color"),bt.route("scale.grid","color","","borderColor"),bt.route("scale.grid","borderColor","","borderColor"),bt.route("scale.title","color","","color"),bt.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t}),bt.describe("scales",{_fallback:"scale"}),bt.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t});const Ls=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i;function Rs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Is(t){return t.drawTicks?t.tickLength:0}function zs(t,e){if(!t.display)return 0;const i=He(t.font,e),s=Ne(t.padding);return(Y(t.text)?t.text.length:1)*i.lineHeight+s.height}function Fs(t,e,i){let n=s(t);return(i&&"right"!==e||!i&&"right"===e)&&(n=(t=>"left"===t?"right":"right"===t?"left":t)(n)),n}class Bs extends Ds{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.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(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=q(t,Number.POSITIVE_INFINITY),e=q(e,Number.NEGATIVE_INFINITY),i=q(i,Number.POSITIVE_INFINITY),s=q(s,Number.NEGATIVE_INFINITY),{min:q(t,i),max:q(e,s),minDefined:X(t),maxDefined:X(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:q(i,q(s,i)),max:q(s,q(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){J(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=$e(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=jt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Is(t.grid)-e.padding-zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=zt(Math.min(Math.asin(jt((h.highest.height+6)/o,-1,1)),Math.asin(jt(a/r,-1,1))-Math.asin(jt(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){J(this.options.afterCalculateLabelRotation,[this])}beforeFit(){J(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Is(n)+o):(t.height=this.maxHeight,t.width=Is(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=It(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_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(){J(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:n[t]||0,height:o[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return $t(this._alignToPixels?Kt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,r=this.isHorizontal(),l=this.ticks.length+(a?1:0),h=Is(n),c=[],d=n.setContext(this.getContext()),u=d.drawBorder?d.borderWidth:0,f=u/2,g=function(t){return Kt(i,t,u)};let p,m,x,b,_,y,v,w,M,k,S,P;if("top"===o)p=g(this.bottom),y=this.bottom-h,w=p-f,k=g(t.top)+f,P=t.bottom;else if("bottom"===o)p=g(this.top),k=t.top,P=g(t.bottom)-f,y=p+f,w=this.top+h;else if("left"===o)p=g(this.right),_=this.right-h,v=p-f,M=g(t.left)+f,S=t.right;else if("right"===o)p=g(this.left),M=t.left,S=g(t.right)-f,_=p+f,v=this.left+h;else if("x"===e){if("center"===o)p=g((t.top+t.bottom)/2+.5);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}k=t.top,P=t.bottom,y=p+f,w=y+h}else if("y"===e){if("center"===o)p=g((t.left+t.right)/2);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}_=p-f,v=_-h,M=t.left,S=t.right}const D=K(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l/D));for(m=0;me.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");bt.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&bt.describe(e,t.descriptors)}(t,o,i),this.override&&bt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in bt[s]&&(delete bt[s][i],this.override&&delete gt[i])}}var Ws=new class{constructor(){this.controllers=new Vs(Ps,"datasets",!0),this.elements=new Vs(Ds,"elements"),this.plugins=new Vs(Object,"plugins"),this.scales=new Vs(Bs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):Q(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=ht(t);J(i["before"+s],[],i),e[t](i),J(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Hs(t,e){return e||!1!==t?!0===t?{}:t:null}function js(t,e,i,s){const n=t.pluginScopeKeys(e),o=t.getOptionScopes(i,n);return t.createResolver(o,s,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function $s(t,e){const i=bt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Ys(t,e){return"x"===t||"y"===t?t:e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.charAt(0).toLowerCase();var i}function Us(t){const e=t.options||(t.options={});e.plugins=K(e.plugins,{}),e.scales=function(t,e){const i=gt[t.type]||{scales:{}},s=e.scales||{},n=$s(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!U(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=Ys(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};o[r]=o[r]||t,a[t]=ot(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||$s(n,e),l=(gt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,r),n=i[e+"AxisID"]||o[e]||e;a[n]=a[n]||Object.create(null),ot(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];ot(e,[bt.scales[e.type],bt.scale])})),a}(t,e)}function Xs(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const qs=new Map,Ks=new Set;function Gs(t,e){let i=qs.get(t);return i||(i=e(),qs.set(t,i),Ks.add(i)),i}const Zs=(t,e,i)=>{const s=lt(e,i);void 0!==s&&t.add(s)};class Js{constructor(t){this._config=function(t){return(t=t||{}).data=Xs(t.data),Us(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Xs(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Us(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Gs(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return Gs(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return Gs(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return Gs(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Zs(r,t,e)))),e.forEach((t=>Zs(r,s,t))),e.forEach((t=>Zs(r,gt[n]||{},t))),e.forEach((t=>Zs(r,bt,t))),e.forEach((t=>Zs(r,pt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Ks.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,gt[e]||{},bt.datasets[e]||{},{type:e},bt,pt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=Qs(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=ri(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(dt(a)||tn(a))||o&&Y(a))return!0}return!1}(o,e)){n.$shared=!1;r=ai(o,i=dt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=Qs(this._resolverCache,t,i);return U(e)?ai(n,e,void 0,s):n}}function Qs(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:oi(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const tn=t=>U(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||dt(t[i])),!1);const en=["top","bottom","left","right","chartArea"];function sn(t,e){return"top"===t||"bottom"===t||-1===en.indexOf(t)&&"x"===e}function nn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function on(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),J(i&&i.onComplete,[t],e)}function an(t){const e=t.chart,i=e.options.animation;J(i&&i.onProgress,[t],e)}function rn(t){return ge()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const ln={},hn=t=>{const e=rn(t);return Object.values(ln).filter((t=>t.canvas===e)).pop()};function cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class dn{constructor(t,e){const s=this.config=new Js(e),n=rn(t),o=hn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas can be reused.");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ls(n)),this.platform.updateConfig(s);const l=this.platform.acquireContext(n,r.aspectRatio),h=l&&l.canvas,c=h&&h.height,d=h&&h.width;this.id=j(),this.ctx=l,this.canvas=h,this.width=d,this.height=c,this._options=r,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 Ns,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],ln[this.id]=this,l&&h?(a.listen(this,"complete",on),a.listen(this,"progress",an),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:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return $(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Gt(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),J(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){Q(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Ys(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),Q(n,(e=>{const n=e.options,o=n.id,a=Ys(o,n),r=K(n.type,e.dtype);void 0!==n.position&&sn(n.position,a)===sn(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;if(o in i&&i[o].type===r)l=i[o];else{l=new(Ws.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l}l.init(n,t)})),Q(s,((t,e)=>{t||delete i[e]})),Q(i,(t=>{ni.configure(this,t,t.options),ni.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(nn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){Q(this.scales,(t=>{ni.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);ut(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ni.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],Q(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Qt(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&te(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}getElementsAtEventForMode(t,e,i,s){const n=Ee.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ye(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);ct(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),a.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};Q(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){Q(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},Q(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!tt(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:Jt(t,this.chartArea,this._minPadding)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=ft(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,J(n.onHover,[t,a,this],this),r&&J(n.onClick,[t,a,this],this));const h=!tt(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const un=()=>Q(dn.instances,(t=>t._plugins.invalidate())),fn=!0;function gn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}Object.defineProperties(dn,{defaults:{enumerable:fn,value:bt},instances:{enumerable:fn,value:ln},overrides:{enumerable:fn,value:gt},registry:{enumerable:fn,value:Ws},version:{enumerable:fn,value:"3.7.1"},getChart:{enumerable:fn,value:hn},register:{enumerable:fn,value:(...t)=>{Ws.add(...t),un()}},unregister:{enumerable:fn,value:(...t)=>{Ws.remove(...t),un()}}});class pn{constructor(t){this.options=t||{}}formats(){return gn()}parse(t,e){return gn()}format(t,e){return gn()}add(t,e,i){return gn()}diff(t,e,i){return gn()}startOf(t,e,i){return gn()}endOf(t,e){return gn()}}pn.override=function(t){Object.assign(pn.prototype,t)};var mn={_date:pn};function xn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(ct(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function _n(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base=i?1:-1)}(c,e,o)*n,d===o&&(p-=c/2),h=p+c),p===e.getPixelForValue(o)){const t=Ct(c)*e.getLineWidthForValue(o)/2;p+=t,c-=t}return{size:c,base:p,head:h,center:h+c/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=K(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:"("+o+", "+a+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,r=this.resolveDataElementOptions(e,s),l=this.getSharedOptions(r),h=this.includeOptions(s,l),c=o.axis,d=a.axis;for(let r=e;r""}}}};class Dn extends Ps{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(U(i[t])){const{key:t="value"}=this._parsing;a=e=>+lt(i[e],t)}for(n=t,o=t+e;nHt(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Ht(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(kt,c,u),x=g(_t,h,d),b=g(_t+kt,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(c,h,r),p=(i.width-o)/d,m=(i.height-o)/u,x=Math.max(Math.min(p,m)/2,0),b=Z(this.options.radius,x),_=(b-Math.max(b*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=f*b,this.offsetY=g*b,s.total=this.calculateTotal(),this.outerRadius=b-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/yt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,f=this.resolveDataElementOptions(e,s),g=this.getSharedOptions(f),p=this.includeOptions(s,g);let m,x=this._getRotation();for(m=0;m0&&!isNaN(t)?yt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s"spacing"!==t,_indexable:t=>"spacing"!==t},Dn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label(t){let e=t.label;const i=": "+t.formattedValue;return Y(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class Cn extends Ps{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=function(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=jt(Math.min(re(r,a.axis,h).lo,i?s:re(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?jt(Math.max(re(r,a.axis,c).hi+1,i?0:re(e,l,a.getPixelForValue(c)).hi+1),n,s)-n:s-n}return{start:n,count:o}}(e,s,o);this._drawStart=a,this._drawCount=r,function(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a,_stacked:r,_dataset:l}=this._cachedMeta,h=this.resolveDataElementOptions(e,s),c=this.getSharedOptions(h),d=this.includeOptions(s,c),u=o.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=Tt(g)?g:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||n||"none"===s;let b=e>0&&this.getParsed(e-1);for(let h=e;h0&&i[u]-b[u]>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?"active":s)),x||this.updateElement(e,h,g,s),b=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}Cn.id="line",Cn.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},Cn.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class On extends Ps{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=this.getDataset(),r=o.options.animation,l=this._cachedMeta.rScale,h=l.xCenter,c=l.yCenter,d=l.getIndexAngle(0)-.5*_t;let u,f=d;const g=360/this.countVisibleElements();for(u=0;u{!isNaN(t.data[s])&&this.chart.getDataVisibility(s)&&i++})),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?It(this.resolveDataElementOptions(t,e).angle||i):0}}On.id="polarArea",On.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},On.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label:t=>t.chart.data.labels[t.dataIndex]+": "+t.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class An extends Dn{}An.id="pie",An.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Tn extends Ps{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this.getDataset(),o=this._cachedMeta.rScale,a="reset"===s;for(let r=e;r"",label:t=>"("+t.label+", "+t.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Rn=Object.freeze({__proto__:null,BarController:Sn,BubbleController:Pn,DoughnutController:Dn,LineController:Cn,PolarAreaController:On,PieController:An,RadarController:Tn,ScatterController:Ln});function En(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+kt,s-kt),t.closePath(),t.clip()}function In(t,e,i,s){const n=Be(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return jt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:jt(n.innerStart,0,a),innerEnd:jt(n.innerEnd,0,a)}}function zn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Fn(t,e,i,s,n){const{x:o,y:a,startAngle:r,pixelMargin:l,innerRadius:h}=e,c=Math.max(e.outerRadius+s+i-l,0),d=h>0?h+s+i+l:0;let u=0;const f=n-r;if(s){const t=((h>0?h-s:0)+(c>0?c-s:0))/2;u=(f-(0!==t?f*t/(t+s):f))/2}const g=(f-Math.max(.001,f*c-i/_t)/c)/2,p=r+g+u,m=n-g-u,{outerStart:x,outerEnd:b,innerStart:_,innerEnd:y}=In(e,d,c,m-p),v=c-x,w=c-b,M=p+x/v,k=m-b/w,S=d+_,P=d+y,D=p+_/S,C=m-y/P;if(t.beginPath(),t.arc(o,a,c,M,k),b>0){const e=zn(w,k,o,a);t.arc(e.x,e.y,b,k,m+kt)}const O=zn(P,m,o,a);if(t.lineTo(O.x,O.y),y>0){const e=zn(P,C,o,a);t.arc(e.x,e.y,y,m+kt,C+Math.PI)}if(t.arc(o,a,d,m-y/d,p+_/d,!0),_>0){const e=zn(S,D,o,a);t.arc(e.x,e.y,_,D+Math.PI,p-kt)}const A=zn(v,p,o,a);if(t.lineTo(A.x,A.y),x>0){const e=zn(v,M,o,a);t.arc(e.x,e.y,x,p-kt,M)}t.closePath()}function Bn(t,e,i,s,n){const{options:o}=e,{borderWidth:a,borderJoinStyle:r}=o,l="inner"===o.borderAlign;a&&(l?(t.lineWidth=2*a,t.lineJoin=r||"round"):(t.lineWidth=a,t.lineJoin=r||"bevel"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&En(t,e,o+yt),t.beginPath(),t.arc(s,n,h,o+yt,o,!0),c=0;c=yt||Ht(n,a,r),f=Yt(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/2,n=(e.spacing||0)/2;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>yt?Math.floor(i/yt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();let o=0;if(s){o=s/2;const e=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(e)*o,Math.sin(e)*o),this.circumference>=_t&&(o=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=function(t,e,i,s){const{fullCircles:n,startAngle:o,circumference:a}=e;let r=e.endAngle;if(n){Fn(t,e,i,s,o+yt);for(let e=0;er&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function Yn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?$n:jn}Vn.id="arc",Vn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},Vn.defaultRoutes={backgroundColor:"backgroundColor"};const Un="function"==typeof Path2D;function Xn(t,e,i,s){Un&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Wn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Yn(e);for(const r of n)Wn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class qn extends Ds{constructor(t){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,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;ki(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ni(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Wi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?Ai:t.tension||"monotone"===t.cubicInterpolationMode?Ti:Oi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t&&"fill"!==t};class Gn extends Ds{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2){oo(t)}))}var ro={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void ao(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if("y"===je([a,t.options.indexAxis]))return;if("line"!==r.type)return;const h=t.scales[r.xAxisID];if("linear"!==h.type&&"time"!==h.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=jt(re(e,o.axis,a).lo,0,i-1)),s=h?jt(re(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(d<=(i.threshold||4*s))return void oo(e);let u;switch($(o)&&(e._data=l,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,c,d,s,i);break;case"min-max":u=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],x=e+i-1,b=t[e].x,_=t[x].x-b;for(n=e;nf&&(f=r,c=n),g=(p*g+o.x)/++p;else{const i=n-1;if(!$(h)&&!$(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){ao(t)}};function lo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=K(i&&i.target,i);return void 0===s&&(s=!!e.backgroundColor),!1!==s&&null!==s&&(!0===s?"origin":s)}(t);if(U(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return X(n)&&Math.floor(n)===n?("-"!==s[0]&&"+"!==s[0]||(n=e+n),!(n===e||n<0||n>=i)&&n):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}class ho{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:yt},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function co(t){return(t.scale||{}).getPointPositionForValue?function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,o=[],a=s.reverse?e.max:e.min,r=s.reverse?e.min:e.max;let l,h,c;if(c="start"===i?a:"end"===i?r:U(i)?i.value:e.getBaseValue(),s.grid.circular)return h=e.getPointPositionForValue(0,a),new ho({x:h.x,y:h.y,radius:e.getDistanceFromCenterForValue(c)});for(l=0;lt;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function fo(t,e,i){const s=[];for(let n=0;n{e=uo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new qn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function xo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!X(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function bo(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[uo(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function _o(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=Nt(n),o=Nt(o)),{property:t,start:n,end:o}}function yo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function vo(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};"x"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function wo(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}function Mo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=uo(s,r,n);const l=_o(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Wi(e,l);for(const e of h){const s=_o(i,o[e.start],o[e.end],e.loop),r=Vi(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:yo(l,s,"start",Math.max)},end:{[i]:yo(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,vo(t,a,d&&_o(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():wo(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||wo(t,s,h,n)}t.closePath(),t.fill(f?"evenodd":"nonzero"),t.restore()}}function ko(t,e,i){const s=po(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(Qt(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?"angle":e.axis;t.save(),"x"===l&&o!==n&&(bo(t,s,a.top),Mo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),bo(t,s,a.bottom)),Mo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),te(t))}var So={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&ko(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;i&&ko(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;s&&!1!==s.fill&&"beforeDatasetDraw"===i.drawTime&&ko(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Po=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Do extends Ds{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.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(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,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 t=this.options.labels||{};let e=J(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=He(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Po(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e/2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,a=Ei(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=n(i,this.left+s,this.right-this.lineWidths[o]);for(const l of e)o!==l.row&&(o=l.row,r=n(i,this.left+s,this.right-this.lineWidths[o])),l.top+=this.top+t+s,l.left=a.leftForLtr(a.x(r),l.width),r+=l.width+s}else{let o=0,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height);for(const l of e)l.col!==o&&(o=l.col,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height)),l.top=r,l.left+=this.left+s,l.left=a.leftForLtr(a.x(l.left),l.width),r+=l.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Qt(t,this),this._draw(),te(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:a,labels:r}=t,l=bt.color,h=Ei(t.rtl,this.left,this.width),c=He(r.font),{color:d,padding:u}=r,f=c.size,g=f/2;let p;this.drawTitle(),s.textAlign=h.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:m,boxHeight:x,itemHeight:b}=Po(r,f),_=this.isHorizontal(),y=this._computeTitleHeight();p=_?{x:n(a,this.left+u,this.right-i[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:n(a,this.top+y+u,this.bottom-e[0].height),line:0},Ii(this.ctx,t.textDirection);const v=b+u;this.legendItems.forEach(((w,M)=>{s.strokeStyle=w.fontColor||d,s.fillStyle=w.fontColor||d;const k=s.measureText(w.text).width,S=h.textAlign(w.textAlign||(w.textAlign=r.textAlign)),P=m+g+k;let D=p.x,C=p.y;h.setWidth(this.width),_?M>0&&D+P+u>this.right&&(C=p.y+=v,p.line++,D=p.x=n(a,this.left+u,this.right-i[p.line])):M>0&&C+v>this.bottom&&(D=p.x=D+e[p.line].width+u,p.line++,C=p.y=n(a,this.top+y+u,this.bottom-e[p.line].height));!function(t,e,i){if(isNaN(m)||m<=0||isNaN(x)||x<0)return;s.save();const n=K(i.lineWidth,1);if(s.fillStyle=K(i.fillStyle,l),s.lineCap=K(i.lineCap,"butt"),s.lineDashOffset=K(i.lineDashOffset,0),s.lineJoin=K(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=K(i.strokeStyle,l),s.setLineDash(K(i.lineDash,[])),r.usePointStyle){const o={radius:m*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},a=h.xPlus(t,m/2);Zt(s,o,a,e+g)}else{const o=e+Math.max((f-x)/2,0),a=h.leftForLtr(t,m),r=We(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?oe(s,{x:a,y:o,w:m,h:x,radius:r}):s.rect(a,o,m,x),s.fill(),0!==n&&s.stroke()}s.restore()}(h.x(D),C,w),D=o(S,D+m+g,_?D+P:this.right,t.rtl),function(t,e,i){se(s,i.text,t,e+b/2,c,{strikethrough:i.hidden,textAlign:h.textAlign(i.textAlign)})}(h.x(D),C,w),_?p.x+=P+u:p.y+=v})),zi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=He(e.font),o=Ne(e.padding);if(!e.display)return;const a=Ei(t.rtl,this.left,this.width),r=this.ctx,l=e.position,h=i.size/2,c=o.top+h;let d,u=this.left,f=this.width;if(this.isHorizontal())f=Math.max(...this.lineWidths),d=this.top+c,u=n(t.align,u,this.right-f);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);d=c+n(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const g=n(l,u,u+f);r.textAlign=a.textAlign(s(l)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,se(r,e.text,g,d,i)}_computeTitleHeight(){const t=this.options.title,e=He(t.font),i=Ne(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Yt(t,this.left,this.right)&&Yt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=Ne(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Oo extends Ds{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.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(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=Y(i.text)?i.text.length:1;this._padding=Ne(i.padding);const n=s*He(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:o,options:a}=this,r=a.align;let l,h,c,d=0;return this.isHorizontal()?(h=n(r,i,o),c=e+t,l=o-i):("left"===a.position?(h=i+t,c=n(r,s,e),d=-.5*_t):(h=o-t,c=n(r,e,s),d=.5*_t),l=s-e),{titleX:h,titleY:c,maxWidth:l,rotation:d}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=He(e.font),n=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:r,rotation:l}=this._drawArgs(n);se(t,e.text,0,0,i,{color:e.color,maxWidth:r,rotation:l,textAlign:s(e.align),textBaseline:"middle",translation:[o,a]})}}var Ao={id:"title",_element:Oo,start(t,e,i){!function(t,e){const i=new Oo({ctx:t.ctx,options:e,chart:t});ni.configure(t,i,e),ni.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ni.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ni.configure(t,s,i),s.options=i},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 To=new WeakMap;var Lo={id:"subtitle",start(t,e,i){const s=new Oo({ctx:t.ctx,options:i,chart:t});ni.configure(t,s,i),ni.addBox(t,s),To.set(t,s)},stop(t){ni.removeBox(t,To.get(t)),To.delete(t)},beforeUpdate(t,e,i){const s=To.get(t);ni.configure(t,s,i),s.options=i},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 Ro={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function zo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Fo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=He(e.bodyFont),h=He(e.titleFont),c=He(e.footerFont),d=o.length,u=n.length,f=s.length,g=Ne(e.padding);let p=g.height,m=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-f)*l.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=h.string,Q(t.title,_),i.font=l.string,Q(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2+e.boxPadding:0,Q(s,(t=>{Q(t.before,_),Q(t.lines,_),Q(t.after,_)})),b=0,i.font=c.string,Q(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Bo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Vo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Bo(t,e,i,s),yAlign:s}}function Wo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=We(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:jt(g,0,s.width-e.width),y:jt(p,0,s.height-e.height)}}function No(t,e,i){const s=Ne(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ho(t){return Eo([],Io(t))}function jo(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class $o extends Ds{constructor(t){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=t.chart||t._chart,this._chart=this.chart,this.options=t.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(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new gs(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,Ye(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}getBeforeBody(t,e){return Ho(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return Q(t,(t=>{const e={before:[],lines:[],after:[]},n=jo(i,t);Eo(e.before,Io(n.beforeLabel.call(this,t))),Eo(e.lines,n.label.call(this,t)),Eo(e.after,Io(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return Ho(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),Q(l,(e=>{const i=jo(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Ro[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Fo(this,i),a=Object.assign({},t,e),r=Vo(this.chart,i,a),l=Wo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=We(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Ei(i.rtl,this.x,this.width);for(t.x=No(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=He(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,oe(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),oe(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=He(i.bodyFont);let d=c.lineHeight,u=0;const f=Ei(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,x,b,_,y,v,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=No(this,p,i),e.fillStyle=i.bodyColor,Q(this.beforeBody,g),u=a&&"right"!==p?"center"===o?l/2+h:l+2+h:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Ro[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Fo(this,t),a=Object.assign({},i,this._size),r=Vo(e,t,a),l=Wo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Ne(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ii(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),zi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!tt(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!tt(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Ro[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}$o.positioners=Ro;var Yo={id:"tooltip",_element:$o,positioners:Ro,afterInit(t,e,i){i&&(t.tooltip=new $o({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip,i={tooltip:e};!1!==t.notifyPlugins("beforeTooltipDraw",i)&&(e&&e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i))},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.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:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.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:H,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Uo=Object.freeze({__proto__:null,Decimation:ro,Filler:So,Legend:Co,SubTitle:Lo,Title:Ao,Tooltip:Yo});function Xo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class qo extends Bs{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if($(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:jt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Xo(i,t,K(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Ko(t,e,{horizontal:i,minRotation:s}){const n=It(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}qo.id="category",qo.defaults={ticks:{callback:qo.prototype.getLabelForValue}};class Go extends Bs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return $(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=Ct(s),e=Ct(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!$(o),x=!$(a),b=!$(l),_=(p-g)/(c+1);let y,v,w,M,k=Ot((p-g)/f/u)*u;if(k<1e-14&&!m&&!x)return[{value:g},{value:p}];M=Math.ceil(p/k)-Math.floor(g/k),M>f&&(k=Ot(M*k/f/u)*u),$(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,w=Math.ceil(p/k)*k):(v=g,w=p),m&&x&&n&&Rt((a-o)/n,k/1e3)?(M=Math.round(Math.min((a-o)/k,h)),k=(a-o)/M,v=o,w=a):b?(v=m?o:v,w=x?a:w,M=l-1,k=(w-v)/M):(M=(w-v)/k,M=Lt(M,Math.round(M),k/1e3)?Math.round(M):Math.ceil(M));const S=Math.max(Ft(k),Ft(v));y=Math.pow(10,$(r)?S:r),v=Math.round(v*y)/y,w=Math.round(w*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),v0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=X(t)?Math.max(0,t):null,this.max=X(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(Dt(t))+e);i===s&&(i<=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i<=0&&n(a(s,-1)),s<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(Dt(e.max)),s=Math.ceil(e.max/Math.pow(10,i)),n=[];let o=q(t.min,Math.pow(10,Math.floor(Dt(e.min)))),a=Math.floor(Dt(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Jo(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l}while(an?{start:e-i,end:e}:{start:e,end:e+i}}function ia(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?_t/o:0;for(let d=0;de.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function na(t){return 0===t||180===t?"center":t<180?"left":"right"}function oa(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function aa(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function ra(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,yt);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o{const i=J(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?ia(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return Nt(t*(yt/(this._pointLabels.length||1))+It(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if($(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if($(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=He(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!$(f)){const t=Ne(e.backdropPadding);i.fillStyle=f,i.fillRect(h-t.left,c-t.top,d-h+t.width,u-c+t.height)}se(i,t._pointLabels[n],a,r+o.lineHeight/2,o,{color:e.color,textAlign:l,textBaseline:"middle"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){a=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i<0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),ra(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),a,n)}})),i.display){for(t.save(),o=n-1;o>=0;o--){const s=i.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:l}=s;l&&n&&(t.lineWidth=l,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),r=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=He(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Ne(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}se(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}la.id="radialLinear",la.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Os.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},la.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},la.descriptors={angleLines:{_fallback:"grid"}};const ha={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}},ca=Object.keys(ha);function da(t,e){return t-e}function ua(t,e){if($(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return"function"==typeof s&&(a=s(a)),X(a)||(a="string"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a="week"!==n||!Tt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,"isoWeek",o)),+a)}function fa(t,e,i,s){const n=ca.length;for(let o=ca.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function pa(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class ma extends Bs{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new mn._date(t.adapters.date);ot(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:ua(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=X(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=X(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=he(s,n,this.max);return this._unit=e.unit||(i.autoSkip?fa(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=ca.length-1;o>=ca.indexOf(i);o--){const i=ca[o];if(ha[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return ca[i?ca.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=ca.indexOf(t)+1,i=ca.length;e1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const f="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;ct-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,u=this._adapter.format(t,s||(d?h:l)),f=n.ticks.callback;return f?J(f,[u,e,i],this):u}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=re(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=re(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}ma.id="time",ma.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class ba extends ma{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xa(e,this.min),this._tableRange=xa(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o Array.prototype.slice.call(args)); + let ticking = false; + let args = []; + return function(...rest) { + args = updateArgs(rest); + if (!ticking) { + ticking = true; + requestAnimFrame.call(window, () => { + ticking = false; + fn.apply(thisArg, args); + }); + } + }; +} +function debounce(fn, delay) { + let timeout; + return function(...args) { + if (delay) { + clearTimeout(timeout); + timeout = setTimeout(fn, delay, args); + } else { + fn.apply(this, args); + } + return delay; + }; +} +const _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center'; +const _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2; +const _textX = (align, left, right, rtl) => { + const check = rtl ? 'left' : 'right'; + return align === check ? right : align === 'center' ? (left + right) / 2 : left; +}; + +function noop() {} +const uid = (function() { + let id = 0; + return function() { + return id++; + }; +}()); +function isNullOrUndef(value) { + return value === null || typeof value === 'undefined'; +} +function isArray(value) { + if (Array.isArray && Array.isArray(value)) { + return true; + } + const type = Object.prototype.toString.call(value); + if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') { + return true; + } + return false; +} +function isObject(value) { + return value !== null && Object.prototype.toString.call(value) === '[object Object]'; +} +const isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value); +function finiteOrDefault(value, defaultValue) { + return isNumberFinite(value) ? value : defaultValue; +} +function valueOrDefault(value, defaultValue) { + return typeof value === 'undefined' ? defaultValue : value; +} +const toPercentage = (value, dimension) => + typeof value === 'string' && value.endsWith('%') ? + parseFloat(value) / 100 + : value / dimension; +const toDimension = (value, dimension) => + typeof value === 'string' && value.endsWith('%') ? + parseFloat(value) / 100 * dimension + : +value; +function callback(fn, args, thisArg) { + if (fn && typeof fn.call === 'function') { + return fn.apply(thisArg, args); + } +} +function each(loopable, fn, thisArg, reverse) { + let i, len, keys; + if (isArray(loopable)) { + len = loopable.length; + if (reverse) { + for (i = len - 1; i >= 0; i--) { + fn.call(thisArg, loopable[i], i); + } + } else { + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[i], i); + } + } + } else if (isObject(loopable)) { + keys = Object.keys(loopable); + len = keys.length; + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[keys[i]], keys[i]); + } + } +} +function _elementsEqual(a0, a1) { + let i, ilen, v0, v1; + if (!a0 || !a1 || a0.length !== a1.length) { + return false; + } + for (i = 0, ilen = a0.length; i < ilen; ++i) { + v0 = a0[i]; + v1 = a1[i]; + if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) { + return false; + } + } + return true; +} +function clone$1(source) { + if (isArray(source)) { + return source.map(clone$1); + } + if (isObject(source)) { + const target = Object.create(null); + const keys = Object.keys(source); + const klen = keys.length; + let k = 0; + for (; k < klen; ++k) { + target[keys[k]] = clone$1(source[keys[k]]); + } + return target; + } + return source; +} +function isValidKey(key) { + return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1; +} +function _merger(key, target, source, options) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + merge(tval, sval, options); + } else { + target[key] = clone$1(sval); + } +} +function merge(target, source, options) { + const sources = isArray(source) ? source : [source]; + const ilen = sources.length; + if (!isObject(target)) { + return target; + } + options = options || {}; + const merger = options.merger || _merger; + for (let i = 0; i < ilen; ++i) { + source = sources[i]; + if (!isObject(source)) { + continue; + } + const keys = Object.keys(source); + for (let k = 0, klen = keys.length; k < klen; ++k) { + merger(keys[k], target, source, options); + } + } + return target; +} +function mergeIf(target, source) { + return merge(target, source, {merger: _mergerIf}); +} +function _mergerIf(key, target, source) { + if (!isValidKey(key)) { + return; + } + const tval = target[key]; + const sval = source[key]; + if (isObject(tval) && isObject(sval)) { + mergeIf(tval, sval); + } else if (!Object.prototype.hasOwnProperty.call(target, key)) { + target[key] = clone$1(sval); + } +} +function _deprecated(scope, value, previous, current) { + if (value !== undefined) { + console.warn(scope + ': "' + previous + + '" is deprecated. Please use "' + current + '" instead'); + } +} +const emptyString = ''; +const dot = '.'; +function indexOfDotOrLength(key, start) { + const idx = key.indexOf(dot, start); + return idx === -1 ? key.length : idx; +} +function resolveObjectKey(obj, key) { + if (key === emptyString) { + return obj; + } + let pos = 0; + let idx = indexOfDotOrLength(key, pos); + while (obj && idx > pos) { + obj = obj[key.substr(pos, idx - pos)]; + pos = idx + 1; + idx = indexOfDotOrLength(key, pos); + } + return obj; +} +function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} +const defined = (value) => typeof value !== 'undefined'; +const isFunction = (value) => typeof value === 'function'; +const setsEqual = (a, b) => { + if (a.size !== b.size) { + return false; + } + for (const item of a) { + if (!b.has(item)) { + return false; + } + } + return true; +}; +function _isClickEvent(e) { + return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu'; +} + +const PI = Math.PI; +const TAU = 2 * PI; +const PITAU = TAU + PI; +const INFINITY = Number.POSITIVE_INFINITY; +const RAD_PER_DEG = PI / 180; +const HALF_PI = PI / 2; +const QUARTER_PI = PI / 4; +const TWO_THIRDS_PI = PI * 2 / 3; +const log10 = Math.log10; +const sign = Math.sign; +function niceNum(range) { + const roundedRange = Math.round(range); + range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range; + const niceRange = Math.pow(10, Math.floor(log10(range))); + const fraction = range / niceRange; + const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; + return niceFraction * niceRange; +} +function _factorize(value) { + const result = []; + const sqrt = Math.sqrt(value); + let i; + for (i = 1; i < sqrt; i++) { + if (value % i === 0) { + result.push(i); + result.push(value / i); + } + } + if (sqrt === (sqrt | 0)) { + result.push(sqrt); + } + result.sort((a, b) => a - b).pop(); + return result; +} +function isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} +function almostEquals(x, y, epsilon) { + return Math.abs(x - y) < epsilon; +} +function almostWhole(x, epsilon) { + const rounded = Math.round(x); + return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x); +} +function _setMinAndMaxByKey(array, target, property) { + let i, ilen, value; + for (i = 0, ilen = array.length; i < ilen; i++) { + value = array[i][property]; + if (!isNaN(value)) { + target.min = Math.min(target.min, value); + target.max = Math.max(target.max, value); + } + } +} +function toRadians(degrees) { + return degrees * (PI / 180); +} +function toDegrees(radians) { + return radians * (180 / PI); +} +function _decimalPlaces(x) { + if (!isNumberFinite(x)) { + return; + } + let e = 1; + let p = 0; + while (Math.round(x * e) / e !== x) { + e *= 10; + p++; + } + return p; +} +function getAngleFromPoint(centrePoint, anglePoint) { + const distanceFromXCenter = anglePoint.x - centrePoint.x; + const distanceFromYCenter = anglePoint.y - centrePoint.y; + const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); + let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); + if (angle < (-0.5 * PI)) { + angle += TAU; + } + return { + angle, + distance: radialDistanceFromCenter + }; +} +function distanceBetweenPoints(pt1, pt2) { + return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); +} +function _angleDiff(a, b) { + return (a - b + PITAU) % TAU - PI; +} +function _normalizeAngle(a) { + return (a % TAU + TAU) % TAU; +} +function _angleBetween(angle, start, end, sameAngleIsFullCircle) { + const a = _normalizeAngle(angle); + const s = _normalizeAngle(start); + const e = _normalizeAngle(end); + const angleToStart = _normalizeAngle(s - a); + const angleToEnd = _normalizeAngle(e - a); + const startToAngle = _normalizeAngle(a - s); + const endToAngle = _normalizeAngle(a - e); + return a === s || a === e || (sameAngleIsFullCircle && s === e) + || (angleToStart > angleToEnd && startToAngle < endToAngle); +} +function _limitValue(value, min, max) { + return Math.max(min, Math.min(max, value)); +} +function _int16Range(value) { + return _limitValue(value, -32768, 32767); +} +function _isBetween(value, start, end, epsilon = 1e-6) { + return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon; +} + +const atEdge = (t) => t === 0 || t === 1; +const elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p)); +const elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1; +const effects = { + linear: t => t, + easeInQuad: t => t * t, + easeOutQuad: t => -t * (t - 2), + easeInOutQuad: t => ((t /= 0.5) < 1) + ? 0.5 * t * t + : -0.5 * ((--t) * (t - 2) - 1), + easeInCubic: t => t * t * t, + easeOutCubic: t => (t -= 1) * t * t + 1, + easeInOutCubic: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t + : 0.5 * ((t -= 2) * t * t + 2), + easeInQuart: t => t * t * t * t, + easeOutQuart: t => -((t -= 1) * t * t * t - 1), + easeInOutQuart: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t * t + : -0.5 * ((t -= 2) * t * t * t - 2), + easeInQuint: t => t * t * t * t * t, + easeOutQuint: t => (t -= 1) * t * t * t * t + 1, + easeInOutQuint: t => ((t /= 0.5) < 1) + ? 0.5 * t * t * t * t * t + : 0.5 * ((t -= 2) * t * t * t * t + 2), + easeInSine: t => -Math.cos(t * HALF_PI) + 1, + easeOutSine: t => Math.sin(t * HALF_PI), + easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1), + easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)), + easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1, + easeInOutExpo: t => atEdge(t) ? t : t < 0.5 + ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) + : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2), + easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1), + easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t), + easeInOutCirc: t => ((t /= 0.5) < 1) + ? -0.5 * (Math.sqrt(1 - t * t) - 1) + : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1), + easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3), + easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3), + easeInOutElastic(t) { + const s = 0.1125; + const p = 0.45; + return atEdge(t) ? t : + t < 0.5 + ? 0.5 * elasticIn(t * 2, s, p) + : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p); + }, + easeInBack(t) { + const s = 1.70158; + return t * t * ((s + 1) * t - s); + }, + easeOutBack(t) { + const s = 1.70158; + return (t -= 1) * t * ((s + 1) * t + s) + 1; + }, + easeInOutBack(t) { + let s = 1.70158; + if ((t /= 0.5) < 1) { + return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s)); + } + return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2); + }, + easeInBounce: t => 1 - effects.easeOutBounce(1 - t), + easeOutBounce(t) { + const m = 7.5625; + const d = 2.75; + if (t < (1 / d)) { + return m * t * t; + } + if (t < (2 / d)) { + return m * (t -= (1.5 / d)) * t + 0.75; + } + if (t < (2.5 / d)) { + return m * (t -= (2.25 / d)) * t + 0.9375; + } + return m * (t -= (2.625 / d)) * t + 0.984375; + }, + easeInOutBounce: t => (t < 0.5) + ? effects.easeInBounce(t * 2) * 0.5 + : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5, +}; + +/*! + * @kurkle/color v0.1.9 + * https://github.com/kurkle/color#readme + * (c) 2020 Jukka Kurkela + * Released under the MIT License + */ +const map = {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}; +const hex = '0123456789ABCDEF'; +const h1 = (b) => hex[b & 0xF]; +const h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF]; +const eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF)); +function isShort(v) { + return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); +} +function hexParse(str) { + var len = str.length; + var ret; + if (str[0] === '#') { + if (len === 4 || len === 5) { + ret = { + r: 255 & map[str[1]] * 17, + g: 255 & map[str[2]] * 17, + b: 255 & map[str[3]] * 17, + a: len === 5 ? map[str[4]] * 17 : 255 + }; + } else if (len === 7 || len === 9) { + ret = { + r: map[str[1]] << 4 | map[str[2]], + g: map[str[3]] << 4 | map[str[4]], + b: map[str[5]] << 4 | map[str[6]], + a: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255 + }; + } + } + return ret; +} +function hexString(v) { + var f = isShort(v) ? h1 : h2; + return v + ? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '') + : v; +} +function round(v) { + return v + 0.5 | 0; +} +const lim = (v, l, h) => Math.max(Math.min(v, h), l); +function p2b(v) { + return lim(round(v * 2.55), 0, 255); +} +function n2b(v) { + return lim(round(v * 255), 0, 255); +} +function b2n(v) { + return lim(round(v / 2.55) / 100, 0, 1); +} +function n2p(v) { + return lim(round(v * 100), 0, 100); +} +const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; +function rgbParse(str) { + const m = RGB_RE.exec(str); + let a = 255; + let r, g, b; + if (!m) { + return; + } + if (m[7] !== r) { + const v = +m[7]; + a = 255 & (m[8] ? p2b(v) : v * 255); + } + r = +m[1]; + g = +m[3]; + b = +m[5]; + r = 255 & (m[2] ? p2b(r) : r); + g = 255 & (m[4] ? p2b(g) : g); + b = 255 & (m[6] ? p2b(b) : b); + return { + r: r, + g: g, + b: b, + a: a + }; +} +function rgbString(v) { + return v && ( + v.a < 255 + ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` + : `rgb(${v.r}, ${v.g}, ${v.b})` + ); +} +const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; +function hsl2rgbn(h, s, l) { + const a = s * Math.min(l, 1 - l); + const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + return [f(0), f(8), f(4)]; +} +function hsv2rgbn(h, s, v) { + const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); + return [f(5), f(3), f(1)]; +} +function hwb2rgbn(h, w, b) { + const rgb = hsl2rgbn(h, 1, 0.5); + let i; + if (w + b > 1) { + i = 1 / (w + b); + w *= i; + b *= i; + } + for (i = 0; i < 3; i++) { + rgb[i] *= 1 - w - b; + rgb[i] += w; + } + return rgb; +} +function rgb2hsl(v) { + const range = 255; + const r = v.r / range; + const g = v.g / range; + const b = v.b / range; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const l = (max + min) / 2; + let h, s, d; + if (max !== min) { + d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + h = max === r + ? ((g - b) / d) + (g < b ? 6 : 0) + : max === g + ? (b - r) / d + 2 + : (r - g) / d + 4; + h = h * 60 + 0.5; + } + return [h | 0, s || 0, l]; +} +function calln(f, a, b, c) { + return ( + Array.isArray(a) + ? f(a[0], a[1], a[2]) + : f(a, b, c) + ).map(n2b); +} +function hsl2rgb(h, s, l) { + return calln(hsl2rgbn, h, s, l); +} +function hwb2rgb(h, w, b) { + return calln(hwb2rgbn, h, w, b); +} +function hsv2rgb(h, s, v) { + return calln(hsv2rgbn, h, s, v); +} +function hue(h) { + return (h % 360 + 360) % 360; +} +function hueParse(str) { + const m = HUE_RE.exec(str); + let a = 255; + let v; + if (!m) { + return; + } + if (m[5] !== v) { + a = m[6] ? p2b(+m[5]) : n2b(+m[5]); + } + const h = hue(+m[2]); + const p1 = +m[3] / 100; + const p2 = +m[4] / 100; + if (m[1] === 'hwb') { + v = hwb2rgb(h, p1, p2); + } else if (m[1] === 'hsv') { + v = hsv2rgb(h, p1, p2); + } else { + v = hsl2rgb(h, p1, p2); + } + return { + r: v[0], + g: v[1], + b: v[2], + a: a + }; +} +function rotate(v, deg) { + var h = rgb2hsl(v); + h[0] = hue(h[0] + deg); + h = hsl2rgb(h); + v.r = h[0]; + v.g = h[1]; + v.b = h[2]; +} +function hslString(v) { + if (!v) { + return; + } + const a = rgb2hsl(v); + const h = a[0]; + const s = n2p(a[1]); + const l = n2p(a[2]); + return v.a < 255 + ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` + : `hsl(${h}, ${s}%, ${l}%)`; +} +const map$1 = { + 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' +}; +const names = { + 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' +}; +function unpack() { + const unpacked = {}; + const keys = Object.keys(names); + const tkeys = Object.keys(map$1); + let i, j, k, ok, nk; + for (i = 0; i < keys.length; i++) { + ok = nk = keys[i]; + for (j = 0; j < tkeys.length; j++) { + k = tkeys[j]; + nk = nk.replace(k, map$1[k]); + } + k = parseInt(names[ok], 16); + unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF]; + } + return unpacked; +} +let names$1; +function nameParse(str) { + if (!names$1) { + names$1 = unpack(); + names$1.transparent = [0, 0, 0, 0]; + } + const a = names$1[str.toLowerCase()]; + return a && { + r: a[0], + g: a[1], + b: a[2], + a: a.length === 4 ? a[3] : 255 + }; +} +function modHSL(v, i, ratio) { + if (v) { + let tmp = rgb2hsl(v); + tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); + tmp = hsl2rgb(tmp); + v.r = tmp[0]; + v.g = tmp[1]; + v.b = tmp[2]; + } +} +function clone(v, proto) { + return v ? Object.assign(proto || {}, v) : v; +} +function fromObject(input) { + var v = {r: 0, g: 0, b: 0, a: 255}; + if (Array.isArray(input)) { + if (input.length >= 3) { + v = {r: input[0], g: input[1], b: input[2], a: 255}; + if (input.length > 3) { + v.a = n2b(input[3]); + } + } + } else { + v = clone(input, {r: 0, g: 0, b: 0, a: 1}); + v.a = n2b(v.a); + } + return v; +} +function functionParse(str) { + if (str.charAt(0) === 'r') { + return rgbParse(str); + } + return hueParse(str); +} +class Color { + constructor(input) { + if (input instanceof Color) { + return input; + } + const type = typeof input; + let v; + if (type === 'object') { + v = fromObject(input); + } else if (type === 'string') { + v = hexParse(input) || nameParse(input) || functionParse(input); + } + this._rgb = v; + this._valid = !!v; + } + get valid() { + return this._valid; + } + get rgb() { + var v = clone(this._rgb); + if (v) { + v.a = b2n(v.a); + } + return v; + } + set rgb(obj) { + this._rgb = fromObject(obj); + } + rgbString() { + return this._valid ? rgbString(this._rgb) : this._rgb; + } + hexString() { + return this._valid ? hexString(this._rgb) : this._rgb; + } + hslString() { + return this._valid ? hslString(this._rgb) : this._rgb; + } + mix(color, weight) { + const me = this; + if (color) { + const c1 = me.rgb; + const c2 = color.rgb; + let w2; + const p = weight === w2 ? 0.5 : weight; + const w = 2 * p - 1; + const a = c1.a - c2.a; + const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + w2 = 1 - w1; + c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5; + c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5; + c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5; + c1.a = p * c1.a + (1 - p) * c2.a; + me.rgb = c1; + } + return me; + } + clone() { + return new Color(this.rgb); + } + alpha(a) { + this._rgb.a = n2b(a); + return this; + } + clearer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 - ratio; + return this; + } + greyscale() { + const rgb = this._rgb; + const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); + rgb.r = rgb.g = rgb.b = val; + return this; + } + opaquer(ratio) { + const rgb = this._rgb; + rgb.a *= 1 + ratio; + return this; + } + negate() { + const v = this._rgb; + v.r = 255 - v.r; + v.g = 255 - v.g; + v.b = 255 - v.b; + return this; + } + lighten(ratio) { + modHSL(this._rgb, 2, ratio); + return this; + } + darken(ratio) { + modHSL(this._rgb, 2, -ratio); + return this; + } + saturate(ratio) { + modHSL(this._rgb, 1, ratio); + return this; + } + desaturate(ratio) { + modHSL(this._rgb, 1, -ratio); + return this; + } + rotate(deg) { + rotate(this._rgb, deg); + return this; + } +} +function index_esm(input) { + return new Color(input); +} + +const isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern; +function color(value) { + return isPatternOrGradient(value) ? value : index_esm(value); +} +function getHoverColor(value) { + return isPatternOrGradient(value) + ? value + : index_esm(value).saturate(0.5).darken(0.1).hexString(); +} + +const overrides = Object.create(null); +const descriptors = Object.create(null); +function getScope$1(node, key) { + if (!key) { + return node; + } + const keys = key.split('.'); + for (let i = 0, n = keys.length; i < n; ++i) { + const k = keys[i]; + node = node[k] || (node[k] = Object.create(null)); + } + return node; +} +function set(root, scope, values) { + if (typeof scope === 'string') { + return merge(getScope$1(root, scope), values); + } + return merge(getScope$1(root, ''), scope); +} +class Defaults { + constructor(_descriptors) { + this.animation = undefined; + this.backgroundColor = 'rgba(0,0,0,0.1)'; + this.borderColor = 'rgba(0,0,0,0.1)'; + this.color = '#666'; + this.datasets = {}; + this.devicePixelRatio = (context) => context.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 = (ctx, options) => getHoverColor(options.backgroundColor); + this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor); + this.hoverColor = (ctx, options) => getHoverColor(options.color); + this.indexAxis = 'x'; + this.interaction = { + mode: 'nearest', + intersect: true + }; + this.maintainAspectRatio = true; + this.onHover = null; + this.onClick = null; + this.parsing = true; + this.plugins = {}; + this.responsive = true; + this.scale = undefined; + this.scales = {}; + this.showLine = true; + this.drawActiveElementsOnTop = true; + this.describe(_descriptors); + } + set(scope, values) { + return set(this, scope, values); + } + get(scope) { + return getScope$1(this, scope); + } + describe(scope, values) { + return set(descriptors, scope, values); + } + override(scope, values) { + return set(overrides, scope, values); + } + route(scope, name, targetScope, targetName) { + const scopeObject = getScope$1(this, scope); + const targetScopeObject = getScope$1(this, targetScope); + const privateName = '_' + name; + Object.defineProperties(scopeObject, { + [privateName]: { + value: scopeObject[name], + writable: true + }, + [name]: { + enumerable: true, + get() { + const local = this[privateName]; + const target = targetScopeObject[targetName]; + if (isObject(local)) { + return Object.assign({}, target, local); + } + return valueOrDefault(local, target); + }, + set(value) { + this[privateName] = value; + } + } + }); + } +} +var defaults = new Defaults({ + _scriptable: (name) => !name.startsWith('on'), + _indexable: (name) => name !== 'events', + hover: { + _fallback: 'interaction' + }, + interaction: { + _scriptable: false, + _indexable: false, + } +}); + +function toFontString(font) { + if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) { + return null; + } + return (font.style ? font.style + ' ' : '') + + (font.weight ? font.weight + ' ' : '') + + font.size + 'px ' + + font.family; +} +function _measureText(ctx, data, gc, longest, string) { + let textWidth = data[string]; + if (!textWidth) { + textWidth = data[string] = ctx.measureText(string).width; + gc.push(string); + } + if (textWidth > longest) { + longest = textWidth; + } + return longest; +} +function _longestText(ctx, font, arrayOfThings, cache) { + cache = cache || {}; + let data = cache.data = cache.data || {}; + let gc = cache.garbageCollect = cache.garbageCollect || []; + if (cache.font !== font) { + data = cache.data = {}; + gc = cache.garbageCollect = []; + cache.font = font; + } + ctx.save(); + ctx.font = font; + let longest = 0; + const ilen = arrayOfThings.length; + let i, j, jlen, thing, nestedThing; + for (i = 0; i < ilen; i++) { + thing = arrayOfThings[i]; + if (thing !== undefined && thing !== null && isArray(thing) !== true) { + longest = _measureText(ctx, data, gc, longest, thing); + } else if (isArray(thing)) { + for (j = 0, jlen = thing.length; j < jlen; j++) { + nestedThing = thing[j]; + if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) { + longest = _measureText(ctx, data, gc, longest, nestedThing); + } + } + } + } + ctx.restore(); + const gcLen = gc.length / 2; + if (gcLen > arrayOfThings.length) { + for (i = 0; i < gcLen; i++) { + delete data[gc[i]]; + } + gc.splice(0, gcLen); + } + return longest; +} +function _alignPixel(chart, pixel, width) { + const devicePixelRatio = chart.currentDevicePixelRatio; + const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0; + return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; +} +function clearCanvas(canvas, ctx) { + ctx = ctx || canvas.getContext('2d'); + ctx.save(); + ctx.resetTransform(); + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.restore(); +} +function drawPoint(ctx, options, x, y) { + let type, xOffset, yOffset, size, cornerRadius; + const style = options.pointStyle; + const rotation = options.rotation; + const radius = options.radius; + let rad = (rotation || 0) * RAD_PER_DEG; + if (style && typeof style === 'object') { + type = style.toString(); + if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { + ctx.save(); + ctx.translate(x, y); + ctx.rotate(rad); + ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); + ctx.restore(); + return; + } + } + if (isNaN(radius) || radius <= 0) { + return; + } + ctx.beginPath(); + switch (style) { + default: + ctx.arc(x, y, radius, 0, TAU); + ctx.closePath(); + break; + case 'triangle': + ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + ctx.closePath(); + break; + case 'rectRounded': + cornerRadius = radius * 0.516; + size = radius - cornerRadius; + xOffset = Math.cos(rad + QUARTER_PI) * size; + yOffset = Math.sin(rad + QUARTER_PI) * size; + ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); + ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad); + ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI); + ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); + ctx.closePath(); + break; + case 'rect': + if (!rotation) { + size = Math.SQRT1_2 * radius; + ctx.rect(x - size, y - size, 2 * size, 2 * size); + break; + } + rad += QUARTER_PI; + case 'rectRot': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + yOffset, y - xOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.lineTo(x - yOffset, y + xOffset); + ctx.closePath(); + break; + case 'crossRot': + rad += QUARTER_PI; + case 'cross': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'star': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + rad += QUARTER_PI; + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'line': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + break; + case 'dash': + ctx.moveTo(x, y); + ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius); + break; + } + ctx.fill(); + if (options.borderWidth > 0) { + ctx.stroke(); + } +} +function _isPointInArea(point, area, margin) { + margin = margin || 0.5; + return !area || (point && point.x > area.left - margin && point.x < area.right + margin && + point.y > area.top - margin && point.y < area.bottom + margin); +} +function clipArea(ctx, area) { + ctx.save(); + ctx.beginPath(); + ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); + ctx.clip(); +} +function unclipArea(ctx) { + ctx.restore(); +} +function _steppedLineTo(ctx, previous, target, flip, mode) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + if (mode === 'middle') { + const midpoint = (previous.x + target.x) / 2.0; + ctx.lineTo(midpoint, previous.y); + ctx.lineTo(midpoint, target.y); + } else if (mode === 'after' !== !!flip) { + ctx.lineTo(previous.x, target.y); + } else { + ctx.lineTo(target.x, previous.y); + } + ctx.lineTo(target.x, target.y); +} +function _bezierCurveTo(ctx, previous, target, flip) { + if (!previous) { + return ctx.lineTo(target.x, target.y); + } + ctx.bezierCurveTo( + flip ? previous.cp1x : previous.cp2x, + flip ? previous.cp1y : previous.cp2y, + flip ? target.cp2x : target.cp1x, + flip ? target.cp2y : target.cp1y, + target.x, + target.y); +} +function renderText(ctx, text, x, y, font, opts = {}) { + const lines = isArray(text) ? text : [text]; + const stroke = opts.strokeWidth > 0 && opts.strokeColor !== ''; + let i, line; + ctx.save(); + ctx.font = font.string; + setRenderOpts(ctx, opts); + for (i = 0; i < lines.length; ++i) { + line = lines[i]; + if (stroke) { + if (opts.strokeColor) { + ctx.strokeStyle = opts.strokeColor; + } + if (!isNullOrUndef(opts.strokeWidth)) { + ctx.lineWidth = opts.strokeWidth; + } + ctx.strokeText(line, x, y, opts.maxWidth); + } + ctx.fillText(line, x, y, opts.maxWidth); + decorateText(ctx, x, y, line, opts); + y += font.lineHeight; + } + ctx.restore(); +} +function setRenderOpts(ctx, opts) { + if (opts.translation) { + ctx.translate(opts.translation[0], opts.translation[1]); + } + if (!isNullOrUndef(opts.rotation)) { + ctx.rotate(opts.rotation); + } + if (opts.color) { + ctx.fillStyle = opts.color; + } + if (opts.textAlign) { + ctx.textAlign = opts.textAlign; + } + if (opts.textBaseline) { + ctx.textBaseline = opts.textBaseline; + } +} +function decorateText(ctx, x, y, line, opts) { + if (opts.strikethrough || opts.underline) { + const metrics = ctx.measureText(line); + const left = x - metrics.actualBoundingBoxLeft; + const right = x + metrics.actualBoundingBoxRight; + const top = y - metrics.actualBoundingBoxAscent; + const bottom = y + metrics.actualBoundingBoxDescent; + const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom; + ctx.strokeStyle = ctx.fillStyle; + ctx.beginPath(); + ctx.lineWidth = opts.decorationWidth || 2; + ctx.moveTo(left, yDecoration); + ctx.lineTo(right, yDecoration); + ctx.stroke(); + } +} +function addRoundedRectPath(ctx, rect) { + const {x, y, w, h, radius} = rect; + ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true); + ctx.lineTo(x, y + h - radius.bottomLeft); + ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); + ctx.lineTo(x + w - radius.bottomRight, y + h); + ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); + ctx.lineTo(x + w, y + radius.topRight); + ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); + ctx.lineTo(x + radius.topLeft, y); +} + +const LINE_HEIGHT = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/); +const FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/); +function toLineHeight(value, size) { + const matches = ('' + value).match(LINE_HEIGHT); + if (!matches || matches[1] === 'normal') { + return size * 1.2; + } + value = +matches[2]; + switch (matches[3]) { + case 'px': + return value; + case '%': + value /= 100; + break; + } + return size * value; +} +const numberOrZero = v => +v || 0; +function _readValueToProps(value, props) { + const ret = {}; + const objProps = isObject(props); + const keys = objProps ? Object.keys(props) : props; + const read = isObject(value) + ? objProps + ? prop => valueOrDefault(value[prop], value[props[prop]]) + : prop => value[prop] + : () => value; + for (const prop of keys) { + ret[prop] = numberOrZero(read(prop)); + } + return ret; +} +function toTRBL(value) { + return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'}); +} +function toTRBLCorners(value) { + return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']); +} +function toPadding(value) { + const obj = toTRBL(value); + obj.width = obj.left + obj.right; + obj.height = obj.top + obj.bottom; + return obj; +} +function toFont(options, fallback) { + options = options || {}; + fallback = fallback || defaults.font; + let size = valueOrDefault(options.size, fallback.size); + if (typeof size === 'string') { + size = parseInt(size, 10); + } + let style = valueOrDefault(options.style, fallback.style); + if (style && !('' + style).match(FONT_STYLE)) { + console.warn('Invalid font style specified: "' + style + '"'); + style = ''; + } + const font = { + family: valueOrDefault(options.family, fallback.family), + lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size), + size, + style, + weight: valueOrDefault(options.weight, fallback.weight), + string: '' + }; + font.string = toFontString(font); + return font; +} +function resolve(inputs, context, index, info) { + let cacheable = true; + let i, ilen, value; + for (i = 0, ilen = inputs.length; i < ilen; ++i) { + value = inputs[i]; + if (value === undefined) { + continue; + } + if (context !== undefined && typeof value === 'function') { + value = value(context); + cacheable = false; + } + if (index !== undefined && isArray(value)) { + value = value[index % value.length]; + cacheable = false; + } + if (value !== undefined) { + if (info && !cacheable) { + info.cacheable = false; + } + return value; + } + } +} +function _addGrace(minmax, grace, beginAtZero) { + const {min, max} = minmax; + const change = toDimension(grace, (max - min) / 2); + const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add; + return { + min: keepZero(min, -Math.abs(change)), + max: keepZero(max, change) + }; +} +function createContext(parentContext, context) { + return Object.assign(Object.create(parentContext), context); +} + +function _lookup(table, value, cmp) { + cmp = cmp || ((index) => table[index] < value); + let hi = table.length - 1; + let lo = 0; + let mid; + while (hi - lo > 1) { + mid = (lo + hi) >> 1; + if (cmp(mid)) { + lo = mid; + } else { + hi = mid; + } + } + return {lo, hi}; +} +const _lookupByKey = (table, key, value) => + _lookup(table, value, index => table[index][key] < value); +const _rlookupByKey = (table, key, value) => + _lookup(table, value, index => table[index][key] >= value); +function _filterBetween(values, min, max) { + let start = 0; + let end = values.length; + while (start < end && values[start] < min) { + start++; + } + while (end > start && values[end - 1] > max) { + end--; + } + return start > 0 || end < values.length + ? values.slice(start, end) + : values; +} +const arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift']; +function listenArrayEvents(array, listener) { + if (array._chartjs) { + array._chartjs.listeners.push(listener); + return; + } + Object.defineProperty(array, '_chartjs', { + configurable: true, + enumerable: false, + value: { + listeners: [listener] + } + }); + arrayEvents.forEach((key) => { + const method = '_onData' + _capitalize(key); + const base = array[key]; + Object.defineProperty(array, key, { + configurable: true, + enumerable: false, + value(...args) { + const res = base.apply(this, args); + array._chartjs.listeners.forEach((object) => { + if (typeof object[method] === 'function') { + object[method](...args); + } + }); + return res; + } + }); + }); +} +function unlistenArrayEvents(array, listener) { + const stub = array._chartjs; + if (!stub) { + return; + } + const listeners = stub.listeners; + const index = listeners.indexOf(listener); + if (index !== -1) { + listeners.splice(index, 1); + } + if (listeners.length > 0) { + return; + } + arrayEvents.forEach((key) => { + delete array[key]; + }); + delete array._chartjs; +} +function _arrayUnique(items) { + const set = new Set(); + let i, ilen; + for (i = 0, ilen = items.length; i < ilen; ++i) { + set.add(items[i]); + } + if (set.size === ilen) { + return items; + } + return Array.from(set); +} + +function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) { + if (!defined(fallback)) { + fallback = _resolve('_fallback', scopes); + } + const cache = { + [Symbol.toStringTag]: 'Object', + _cacheable: true, + _scopes: scopes, + _rootScopes: rootScopes, + _fallback: fallback, + _getTarget: getTarget, + override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback), + }; + return new Proxy(cache, { + deleteProperty(target, prop) { + delete target[prop]; + delete target._keys; + delete scopes[0][prop]; + return true; + }, + get(target, prop) { + return _cached(target, prop, + () => _resolveWithPrefixes(prop, prefixes, scopes, target)); + }, + getOwnPropertyDescriptor(target, prop) { + return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop); + }, + getPrototypeOf() { + return Reflect.getPrototypeOf(scopes[0]); + }, + has(target, prop) { + return getKeysFromAllScopes(target).includes(prop); + }, + ownKeys(target) { + return getKeysFromAllScopes(target); + }, + set(target, prop, value) { + const storage = target._storage || (target._storage = getTarget()); + target[prop] = storage[prop] = value; + delete target._keys; + return true; + } + }); +} +function _attachContext(proxy, context, subProxy, descriptorDefaults) { + const cache = { + _cacheable: false, + _proxy: proxy, + _context: context, + _subProxy: subProxy, + _stack: new Set(), + _descriptors: _descriptors(proxy, descriptorDefaults), + setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults), + override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults) + }; + return new Proxy(cache, { + deleteProperty(target, prop) { + delete target[prop]; + delete proxy[prop]; + return true; + }, + get(target, prop, receiver) { + return _cached(target, prop, + () => _resolveWithContext(target, prop, receiver)); + }, + getOwnPropertyDescriptor(target, prop) { + return target._descriptors.allKeys + ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined + : Reflect.getOwnPropertyDescriptor(proxy, prop); + }, + getPrototypeOf() { + return Reflect.getPrototypeOf(proxy); + }, + has(target, prop) { + return Reflect.has(proxy, prop); + }, + ownKeys() { + return Reflect.ownKeys(proxy); + }, + set(target, prop, value) { + proxy[prop] = value; + delete target[prop]; + return true; + } + }); +} +function _descriptors(proxy, defaults = {scriptable: true, indexable: true}) { + const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy; + return { + allKeys: _allKeys, + scriptable: _scriptable, + indexable: _indexable, + isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable, + isIndexable: isFunction(_indexable) ? _indexable : () => _indexable + }; +} +const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; +const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' && + (Object.getPrototypeOf(value) === null || value.constructor === Object); +function _cached(target, prop, resolve) { + if (Object.prototype.hasOwnProperty.call(target, prop)) { + return target[prop]; + } + const value = resolve(); + target[prop] = value; + return value; +} +function _resolveWithContext(target, prop, receiver) { + const {_proxy, _context, _subProxy, _descriptors: descriptors} = target; + let value = _proxy[prop]; + if (isFunction(value) && descriptors.isScriptable(prop)) { + value = _resolveScriptable(prop, value, target, receiver); + } + if (isArray(value) && value.length) { + value = _resolveArray(prop, value, target, descriptors.isIndexable); + } + if (needsSubResolver(prop, value)) { + value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors); + } + return value; +} +function _resolveScriptable(prop, value, target, receiver) { + const {_proxy, _context, _subProxy, _stack} = target; + if (_stack.has(prop)) { + throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop); + } + _stack.add(prop); + value = value(_context, _subProxy || receiver); + _stack.delete(prop); + if (needsSubResolver(prop, value)) { + value = createSubResolver(_proxy._scopes, _proxy, prop, value); + } + return value; +} +function _resolveArray(prop, value, target, isIndexable) { + const {_proxy, _context, _subProxy, _descriptors: descriptors} = target; + if (defined(_context.index) && isIndexable(prop)) { + value = value[_context.index % value.length]; + } else if (isObject(value[0])) { + const arr = value; + const scopes = _proxy._scopes.filter(s => s !== arr); + value = []; + for (const item of arr) { + const resolver = createSubResolver(scopes, _proxy, prop, item); + value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors)); + } + } + return value; +} +function resolveFallback(fallback, prop, value) { + return isFunction(fallback) ? fallback(prop, value) : fallback; +} +const getScope = (key, parent) => key === true ? parent + : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined; +function addScopes(set, parentScopes, key, parentFallback, value) { + for (const parent of parentScopes) { + const scope = getScope(key, parent); + if (scope) { + set.add(scope); + const fallback = resolveFallback(scope._fallback, key, value); + if (defined(fallback) && fallback !== key && fallback !== parentFallback) { + return fallback; + } + } else if (scope === false && defined(parentFallback) && key !== parentFallback) { + return null; + } + } + return false; +} +function createSubResolver(parentScopes, resolver, prop, value) { + const rootScopes = resolver._rootScopes; + const fallback = resolveFallback(resolver._fallback, prop, value); + const allScopes = [...parentScopes, ...rootScopes]; + const set = new Set(); + set.add(value); + let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value); + if (key === null) { + return false; + } + if (defined(fallback) && fallback !== prop) { + key = addScopesFromKey(set, allScopes, fallback, key, value); + if (key === null) { + return false; + } + } + return _createResolver(Array.from(set), [''], rootScopes, fallback, + () => subGetTarget(resolver, prop, value)); +} +function addScopesFromKey(set, allScopes, key, fallback, item) { + while (key) { + key = addScopes(set, allScopes, key, fallback, item); + } + return key; +} +function subGetTarget(resolver, prop, value) { + const parent = resolver._getTarget(); + if (!(prop in parent)) { + parent[prop] = {}; + } + const target = parent[prop]; + if (isArray(target) && isObject(value)) { + return value; + } + return target; +} +function _resolveWithPrefixes(prop, prefixes, scopes, proxy) { + let value; + for (const prefix of prefixes) { + value = _resolve(readKey(prefix, prop), scopes); + if (defined(value)) { + return needsSubResolver(prop, value) + ? createSubResolver(scopes, proxy, prop, value) + : value; + } + } +} +function _resolve(key, scopes) { + for (const scope of scopes) { + if (!scope) { + continue; + } + const value = scope[key]; + if (defined(value)) { + return value; + } + } +} +function getKeysFromAllScopes(target) { + let keys = target._keys; + if (!keys) { + keys = target._keys = resolveKeysFromAllScopes(target._scopes); + } + return keys; +} +function resolveKeysFromAllScopes(scopes) { + const set = new Set(); + for (const scope of scopes) { + for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) { + set.add(key); + } + } + return Array.from(set); +} + +const EPSILON = Number.EPSILON || 1e-14; +const getPoint = (points, i) => i < points.length && !points[i].skip && points[i]; +const getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x'; +function splineCurve(firstPoint, middlePoint, afterPoint, t) { + const previous = firstPoint.skip ? middlePoint : firstPoint; + const current = middlePoint; + const next = afterPoint.skip ? middlePoint : afterPoint; + const d01 = distanceBetweenPoints(current, previous); + const d12 = distanceBetweenPoints(next, current); + let s01 = d01 / (d01 + d12); + let s12 = d12 / (d01 + d12); + s01 = isNaN(s01) ? 0 : s01; + s12 = isNaN(s12) ? 0 : s12; + const fa = t * s01; + const fb = t * s12; + return { + previous: { + x: current.x - fa * (next.x - previous.x), + y: current.y - fa * (next.y - previous.y) + }, + next: { + x: current.x + fb * (next.x - previous.x), + y: current.y + fb * (next.y - previous.y) + } + }; +} +function monotoneAdjust(points, deltaK, mK) { + const pointsLen = points.length; + let alphaK, betaK, tauK, squaredMagnitude, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen - 1; ++i) { + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent || !pointAfter) { + continue; + } + if (almostEquals(deltaK[i], 0, EPSILON)) { + mK[i] = mK[i + 1] = 0; + continue; + } + alphaK = mK[i] / deltaK[i]; + betaK = mK[i + 1] / deltaK[i]; + squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2); + if (squaredMagnitude <= 9) { + continue; + } + tauK = 3 / Math.sqrt(squaredMagnitude); + mK[i] = alphaK * tauK * deltaK[i]; + mK[i + 1] = betaK * tauK * deltaK[i]; + } +} +function monotoneCompute(points, mK, indexAxis = 'x') { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + let delta, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (let i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + const iPixel = pointCurrent[indexAxis]; + const vPixel = pointCurrent[valueAxis]; + if (pointBefore) { + delta = (iPixel - pointBefore[indexAxis]) / 3; + pointCurrent[`cp1${indexAxis}`] = iPixel - delta; + pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i]; + } + if (pointAfter) { + delta = (pointAfter[indexAxis] - iPixel) / 3; + pointCurrent[`cp2${indexAxis}`] = iPixel + delta; + pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i]; + } + } +} +function splineCurveMonotone(points, indexAxis = 'x') { + const valueAxis = getValueAxis(indexAxis); + const pointsLen = points.length; + const deltaK = Array(pointsLen).fill(0); + const mK = Array(pointsLen); + let i, pointBefore, pointCurrent; + let pointAfter = getPoint(points, 0); + for (i = 0; i < pointsLen; ++i) { + pointBefore = pointCurrent; + pointCurrent = pointAfter; + pointAfter = getPoint(points, i + 1); + if (!pointCurrent) { + continue; + } + if (pointAfter) { + const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis]; + deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0; + } + mK[i] = !pointBefore ? deltaK[i] + : !pointAfter ? deltaK[i - 1] + : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0 + : (deltaK[i - 1] + deltaK[i]) / 2; + } + monotoneAdjust(points, deltaK, mK); + monotoneCompute(points, mK, indexAxis); +} +function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); +} +function capBezierPoints(points, area) { + let i, ilen, point, inArea, inAreaPrev; + let inAreaNext = _isPointInArea(points[0], area); + for (i = 0, ilen = points.length; i < ilen; ++i) { + inAreaPrev = inArea; + inArea = inAreaNext; + inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area); + if (!inArea) { + continue; + } + point = points[i]; + if (inAreaPrev) { + point.cp1x = capControlPoint(point.cp1x, area.left, area.right); + point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom); + } + if (inAreaNext) { + point.cp2x = capControlPoint(point.cp2x, area.left, area.right); + point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom); + } + } +} +function _updateBezierControlPoints(points, options, area, loop, indexAxis) { + let i, ilen, point, controlPoints; + if (options.spanGaps) { + points = points.filter((pt) => !pt.skip); + } + if (options.cubicInterpolationMode === 'monotone') { + splineCurveMonotone(points, indexAxis); + } else { + let prev = loop ? points[points.length - 1] : points[0]; + for (i = 0, ilen = points.length; i < ilen; ++i) { + point = points[i]; + controlPoints = splineCurve( + prev, + point, + points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], + options.tension + ); + point.cp1x = controlPoints.previous.x; + point.cp1y = controlPoints.previous.y; + point.cp2x = controlPoints.next.x; + point.cp2y = controlPoints.next.y; + prev = point; + } + } + if (options.capBezierPoints) { + capBezierPoints(points, area); + } +} + +function _isDomSupported() { + return typeof window !== 'undefined' && typeof document !== 'undefined'; +} +function _getParentNode(domNode) { + let parent = domNode.parentNode; + if (parent && parent.toString() === '[object ShadowRoot]') { + parent = parent.host; + } + return parent; +} +function parseMaxStyle(styleValue, node, parentProperty) { + let valueInPixels; + if (typeof styleValue === 'string') { + valueInPixels = parseInt(styleValue, 10); + if (styleValue.indexOf('%') !== -1) { + valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; + } + } else { + valueInPixels = styleValue; + } + return valueInPixels; +} +const getComputedStyle = (element) => window.getComputedStyle(element, null); +function getStyle(el, property) { + return getComputedStyle(el).getPropertyValue(property); +} +const positions = ['top', 'right', 'bottom', 'left']; +function getPositionedStyle(styles, style, suffix) { + const result = {}; + suffix = suffix ? '-' + suffix : ''; + for (let i = 0; i < 4; i++) { + const pos = positions[i]; + result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0; + } + result.width = result.left + result.right; + result.height = result.top + result.bottom; + return result; +} +const useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot); +function getCanvasPosition(evt, canvas) { + const e = evt.native || evt; + const touches = e.touches; + const source = touches && touches.length ? touches[0] : e; + const {offsetX, offsetY} = source; + let box = false; + let x, y; + if (useOffsetPos(offsetX, offsetY, e.target)) { + x = offsetX; + y = offsetY; + } else { + const rect = canvas.getBoundingClientRect(); + x = source.clientX - rect.left; + y = source.clientY - rect.top; + box = true; + } + return {x, y, box}; +} +function getRelativePosition(evt, chart) { + const {canvas, currentDevicePixelRatio} = chart; + const style = getComputedStyle(canvas); + const borderBox = style.boxSizing === 'border-box'; + const paddings = getPositionedStyle(style, 'padding'); + const borders = getPositionedStyle(style, 'border', 'width'); + const {x, y, box} = getCanvasPosition(evt, canvas); + const xOffset = paddings.left + (box && borders.left); + const yOffset = paddings.top + (box && borders.top); + let {width, height} = chart; + if (borderBox) { + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + return { + x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio), + y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio) + }; +} +function getContainerSize(canvas, width, height) { + let maxWidth, maxHeight; + if (width === undefined || height === undefined) { + const container = _getParentNode(canvas); + if (!container) { + width = canvas.clientWidth; + height = canvas.clientHeight; + } else { + const rect = container.getBoundingClientRect(); + const containerStyle = getComputedStyle(container); + const containerBorder = getPositionedStyle(containerStyle, 'border', 'width'); + const containerPadding = getPositionedStyle(containerStyle, 'padding'); + width = rect.width - containerPadding.width - containerBorder.width; + height = rect.height - containerPadding.height - containerBorder.height; + maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth'); + maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight'); + } + } + return { + width, + height, + maxWidth: maxWidth || INFINITY, + maxHeight: maxHeight || INFINITY + }; +} +const round1 = v => Math.round(v * 10) / 10; +function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) { + const style = getComputedStyle(canvas); + const margins = getPositionedStyle(style, 'margin'); + const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY; + const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY; + const containerSize = getContainerSize(canvas, bbWidth, bbHeight); + let {width, height} = containerSize; + if (style.boxSizing === 'content-box') { + const borders = getPositionedStyle(style, 'border', 'width'); + const paddings = getPositionedStyle(style, 'padding'); + width -= paddings.width + borders.width; + height -= paddings.height + borders.height; + } + width = Math.max(0, width - margins.width); + height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height); + width = round1(Math.min(width, maxWidth, containerSize.maxWidth)); + height = round1(Math.min(height, maxHeight, containerSize.maxHeight)); + if (width && !height) { + height = round1(width / 2); + } + return { + width, + height + }; +} +function retinaScale(chart, forceRatio, forceStyle) { + const pixelRatio = forceRatio || 1; + const deviceHeight = Math.floor(chart.height * pixelRatio); + const deviceWidth = Math.floor(chart.width * pixelRatio); + chart.height = deviceHeight / pixelRatio; + chart.width = deviceWidth / pixelRatio; + const canvas = chart.canvas; + if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) { + canvas.style.height = `${chart.height}px`; + canvas.style.width = `${chart.width}px`; + } + if (chart.currentDevicePixelRatio !== pixelRatio + || canvas.height !== deviceHeight + || canvas.width !== deviceWidth) { + chart.currentDevicePixelRatio = pixelRatio; + canvas.height = deviceHeight; + canvas.width = deviceWidth; + chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); + return true; + } + return false; +} +const supportsEventListenerOptions = (function() { + let passiveSupported = false; + try { + const options = { + get passive() { + passiveSupported = true; + return false; + } + }; + window.addEventListener('test', null, options); + window.removeEventListener('test', null, options); + } catch (e) { + } + return passiveSupported; +}()); +function readUsedSize(element, property) { + const value = getStyle(element, property); + const matches = value && value.match(/^(\d+)(\.\d+)?px$/); + return matches ? +matches[1] : undefined; +} + +function _pointInLine(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: p1.y + t * (p2.y - p1.y) + }; +} +function _steppedInterpolation(p1, p2, t, mode) { + return { + x: p1.x + t * (p2.x - p1.x), + y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y + : mode === 'after' ? t < 1 ? p1.y : p2.y + : t > 0 ? p2.y : p1.y + }; +} +function _bezierInterpolation(p1, p2, t, mode) { + const cp1 = {x: p1.cp2x, y: p1.cp2y}; + const cp2 = {x: p2.cp1x, y: p2.cp1y}; + const a = _pointInLine(p1, cp1, t); + const b = _pointInLine(cp1, cp2, t); + const c = _pointInLine(cp2, p2, t); + const d = _pointInLine(a, b, t); + const e = _pointInLine(b, c, t); + return _pointInLine(d, e, t); +} + +const intlCache = new Map(); +function getNumberFormat(locale, options) { + options = options || {}; + const cacheKey = locale + JSON.stringify(options); + let formatter = intlCache.get(cacheKey); + if (!formatter) { + formatter = new Intl.NumberFormat(locale, options); + intlCache.set(cacheKey, formatter); + } + return formatter; +} +function formatNumber(num, locale, options) { + return getNumberFormat(locale, options).format(num); +} + +const getRightToLeftAdapter = function(rectX, width) { + return { + x(x) { + return rectX + rectX + width - x; + }, + setWidth(w) { + width = w; + }, + textAlign(align) { + if (align === 'center') { + return align; + } + return align === 'right' ? 'left' : 'right'; + }, + xPlus(x, value) { + return x - value; + }, + leftForLtr(x, itemWidth) { + return x - itemWidth; + }, + }; +}; +const getLeftToRightAdapter = function() { + return { + x(x) { + return x; + }, + setWidth(w) { + }, + textAlign(align) { + return align; + }, + xPlus(x, value) { + return x + value; + }, + leftForLtr(x, _itemWidth) { + return x; + }, + }; +}; +function getRtlAdapter(rtl, rectX, width) { + return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter(); +} +function overrideTextDirection(ctx, direction) { + let style, original; + if (direction === 'ltr' || direction === 'rtl') { + style = ctx.canvas.style; + original = [ + style.getPropertyValue('direction'), + style.getPropertyPriority('direction'), + ]; + style.setProperty('direction', direction, 'important'); + ctx.prevTextDirection = original; + } +} +function restoreTextDirection(ctx, original) { + if (original !== undefined) { + delete ctx.prevTextDirection; + ctx.canvas.style.setProperty('direction', original[0], original[1]); + } +} + +function propertyFn(property) { + if (property === 'angle') { + return { + between: _angleBetween, + compare: _angleDiff, + normalize: _normalizeAngle, + }; + } + return { + between: _isBetween, + compare: (a, b) => a - b, + normalize: x => x + }; +} +function normalizeSegment({start, end, count, loop, style}) { + return { + start: start % count, + end: end % count, + loop: loop && (end - start + 1) % count === 0, + style + }; +} +function getSegment(segment, points, bounds) { + const {property, start: startBound, end: endBound} = bounds; + const {between, normalize} = propertyFn(property); + const count = points.length; + let {start, end, loop} = segment; + let i, ilen; + if (loop) { + start += count; + end += count; + for (i = 0, ilen = count; i < ilen; ++i) { + if (!between(normalize(points[start % count][property]), startBound, endBound)) { + break; + } + start--; + end--; + } + start %= count; + end %= count; + } + if (end < start) { + end += count; + } + return {start, end, loop, style: segment.style}; +} +function _boundSegment(segment, points, bounds) { + if (!bounds) { + return [segment]; + } + const {property, start: startBound, end: endBound} = bounds; + const count = points.length; + const {compare, between, normalize} = propertyFn(property); + const {start, end, loop, style} = getSegment(segment, points, bounds); + const result = []; + let inside = false; + let subStart = null; + let value, point, prevValue; + const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0; + const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value); + const shouldStart = () => inside || startIsBefore(); + const shouldStop = () => !inside || endIsBefore(); + for (let i = start, prev = start; i <= end; ++i) { + point = points[i % count]; + if (point.skip) { + continue; + } + value = normalize(point[property]); + if (value === prevValue) { + continue; + } + inside = between(value, startBound, endBound); + if (subStart === null && shouldStart()) { + subStart = compare(value, startBound) === 0 ? i : prev; + } + if (subStart !== null && shouldStop()) { + result.push(normalizeSegment({start: subStart, end: i, loop, count, style})); + subStart = null; + } + prev = i; + prevValue = value; + } + if (subStart !== null) { + result.push(normalizeSegment({start: subStart, end, loop, count, style})); + } + return result; +} +function _boundSegments(line, bounds) { + const result = []; + const segments = line.segments; + for (let i = 0; i < segments.length; i++) { + const sub = _boundSegment(segments[i], line.points, bounds); + if (sub.length) { + result.push(...sub); + } + } + return result; +} +function findStartAndEnd(points, count, loop, spanGaps) { + let start = 0; + let end = count - 1; + if (loop && !spanGaps) { + while (start < count && !points[start].skip) { + start++; + } + } + while (start < count && points[start].skip) { + start++; + } + start %= count; + if (loop) { + end += start; + } + while (end > start && points[end % count].skip) { + end--; + } + end %= count; + return {start, end}; +} +function solidSegments(points, start, max, loop) { + const count = points.length; + const result = []; + let last = start; + let prev = points[start]; + let end; + for (end = start + 1; end <= max; ++end) { + const cur = points[end % count]; + if (cur.skip || cur.stop) { + if (!prev.skip) { + loop = false; + result.push({start: start % count, end: (end - 1) % count, loop}); + start = last = cur.stop ? end : null; + } + } else { + last = end; + if (prev.skip) { + start = end; + } + } + prev = cur; + } + if (last !== null) { + result.push({start: start % count, end: last % count, loop}); + } + return result; +} +function _computeSegments(line, segmentOptions) { + const points = line.points; + const spanGaps = line.options.spanGaps; + const count = points.length; + if (!count) { + return []; + } + const loop = !!line._loop; + const {start, end} = findStartAndEnd(points, count, loop, spanGaps); + if (spanGaps === true) { + return splitByStyles(line, [{start, end, loop}], points, segmentOptions); + } + const max = end < start ? end + count : end; + const completeLoop = !!line._fullLoop && start === 0 && end === count - 1; + return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions); +} +function splitByStyles(line, segments, points, segmentOptions) { + if (!segmentOptions || !segmentOptions.setContext || !points) { + return segments; + } + return doSplitByStyles(line, segments, points, segmentOptions); +} +function doSplitByStyles(line, segments, points, segmentOptions) { + const chartContext = line._chart.getContext(); + const baseStyle = readStyle(line.options); + const {_datasetIndex: datasetIndex, options: {spanGaps}} = line; + const count = points.length; + const result = []; + let prevStyle = baseStyle; + let start = segments[0].start; + let i = start; + function addStyle(s, e, l, st) { + const dir = spanGaps ? -1 : 1; + if (s === e) { + return; + } + s += count; + while (points[s % count].skip) { + s -= dir; + } + while (points[e % count].skip) { + e += dir; + } + if (s % count !== e % count) { + result.push({start: s % count, end: e % count, loop: l, style: st}); + prevStyle = st; + start = e % count; + } + } + for (const segment of segments) { + start = spanGaps ? start : segment.start; + let prev = points[start % count]; + let style; + for (i = start + 1; i <= segment.end; i++) { + const pt = points[i % count]; + style = readStyle(segmentOptions.setContext(createContext(chartContext, { + type: 'segment', + p0: prev, + p1: pt, + p0DataIndex: (i - 1) % count, + p1DataIndex: i % count, + datasetIndex + }))); + if (styleChanged(style, prevStyle)) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + prev = pt; + prevStyle = style; + } + if (start < i - 1) { + addStyle(start, i - 1, segment.loop, prevStyle); + } + } + return result; +} +function readStyle(options) { + return { + backgroundColor: options.backgroundColor, + borderCapStyle: options.borderCapStyle, + borderDash: options.borderDash, + borderDashOffset: options.borderDashOffset, + borderJoinStyle: options.borderJoinStyle, + borderWidth: options.borderWidth, + borderColor: options.borderColor + }; +} +function styleChanged(style, prevStyle) { + return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle); +} + +export { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z }; diff --git a/node_modules/chart.js/dist/helpers.esm.js b/node_modules/chart.js/dist/helpers.esm.js new file mode 100644 index 00000000..399496db --- /dev/null +++ b/node_modules/chart.js/dist/helpers.esm.js @@ -0,0 +1,7 @@ +/*! + * Chart.js v3.7.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +export { H as HALF_PI, aX as INFINITY, P as PI, aW as PITAU, aZ as QUARTER_PI, aY as RAD_PER_DEG, T as TAU, a_ as TWO_THIRDS_PI, Q as _addGrace, V as _alignPixel, a0 as _alignStartEnd, p as _angleBetween, a$ as _angleDiff, _ as _arrayUnique, a6 as _attachContext, aq as _bezierCurveTo, an as _bezierInterpolation, av as _boundSegment, al as _boundSegments, a3 as _capitalize, ak as _computeSegments, a7 as _createResolver, aH as _decimalPlaces, aP as _deprecated, a8 as _descriptors, af as _elementsEqual, M as _factorize, aJ as _filterBetween, F as _getParentNode, U as _int16Range, ah as _isBetween, ag as _isClickEvent, K as _isDomSupported, z as _isPointInArea, w as _limitValue, aI as _longestText, aK as _lookup, x as _lookupByKey, S as _measureText, aN as _merger, aO as _mergerIf, aw as _normalizeAngle, ao as _pointInLine, ai as _readValueToProps, A as _rlookupByKey, aD as _setMinAndMaxByKey, am as _steppedInterpolation, ap as _steppedLineTo, az as _textX, $ as _toLeftRightCenter, aj as _updateBezierControlPoints, as as addRoundedRectPath, aG as almostEquals, aF as almostWhole, O as callback, ad as clearCanvas, W as clipArea, aM as clone, c as color, h as createContext, ab as debounce, j as defined, aC as distanceBetweenPoints, ar as drawPoint, D as each, e as easingEffects, N as finiteOrDefault, aU as fontString, o as formatNumber, B as getAngleFromPoint, aL as getHoverColor, E as getMaximumSize, y as getRelativePosition, ax as getRtlAdapter, aT as getStyle, b as isArray, g as isFinite, a5 as isFunction, k as isNullOrUndef, q as isNumber, i as isObject, l as listenArrayEvents, L as log10, a2 as merge, a9 as mergeIf, aE as niceNum, aB as noop, ay as overrideTextDirection, G as readUsedSize, X as renderText, r as requestAnimFrame, a as resolve, f as resolveObjectKey, aA as restoreTextDirection, ac as retinaScale, ae as setsEqual, s as sign, aR as splineCurve, aS as splineCurveMonotone, J as supportsEventListenerOptions, I as throttled, R as toDegrees, n as toDimension, Z as toFont, aQ as toFontString, aV as toLineHeight, C as toPadding, m as toPercentage, t as toRadians, at as toTRBL, au as toTRBLCorners, aa as uid, Y as unclipArea, u as unlistenArrayEvents, v as valueOrDefault } from './chunks/helpers.segment.js'; diff --git a/node_modules/chart.js/helpers/helpers.esm.d.ts b/node_modules/chart.js/helpers/helpers.esm.d.ts new file mode 100644 index 00000000..2c3468e7 --- /dev/null +++ b/node_modules/chart.js/helpers/helpers.esm.d.ts @@ -0,0 +1 @@ +export * from '../types/helpers'; diff --git a/node_modules/chart.js/helpers/helpers.esm.js b/node_modules/chart.js/helpers/helpers.esm.js new file mode 100644 index 00000000..ca4eee52 --- /dev/null +++ b/node_modules/chart.js/helpers/helpers.esm.js @@ -0,0 +1 @@ +export * from '../dist/helpers.esm'; diff --git a/node_modules/chart.js/helpers/helpers.js b/node_modules/chart.js/helpers/helpers.js new file mode 100644 index 00000000..a762f589 --- /dev/null +++ b/node_modules/chart.js/helpers/helpers.js @@ -0,0 +1 @@ +module.exports = require('..').helpers; diff --git a/node_modules/chart.js/helpers/package.json b/node_modules/chart.js/helpers/package.json new file mode 100644 index 00000000..d97b75cb --- /dev/null +++ b/node_modules/chart.js/helpers/package.json @@ -0,0 +1,8 @@ +{ + "name": "chart.js-helpers", + "private": true, + "description": "helper package", + "main": "helpers.js", + "module": "helpers.esm.js", + "types": "helpers.esm.d.ts" +} \ No newline at end of file diff --git a/node_modules/chart.js/package.json b/node_modules/chart.js/package.json new file mode 100644 index 00000000..24c99596 --- /dev/null +++ b/node_modules/chart.js/package.json @@ -0,0 +1,111 @@ +{ + "name": "chart.js", + "homepage": "https://www.chartjs.org", + "description": "Simple HTML5 charts using the canvas element.", + "version": "3.7.1", + "license": "MIT", + "jsdelivr": "dist/chart.min.js", + "unpkg": "dist/chart.min.js", + "main": "dist/chart.js", + "module": "dist/chart.esm.js", + "types": "types/index.esm.d.ts", + "keywords": [ + "canvas", + "charts", + "data", + "graphs", + "html5", + "responsive" + ], + "repository": { + "type": "git", + "url": "https://github.com/chartjs/Chart.js.git" + }, + "bugs": { + "url": "https://github.com/chartjs/Chart.js/issues" + }, + "files": [ + "auto/**/*.js", + "auto/**/*.d.ts", + "dist/*.js", + "dist/chunks/*.js", + "types/*.d.ts", + "types/helpers/*.d.ts", + "helpers/**/*.js", + "helpers/**/*.d.ts" + ], + "scripts": { + "autobuild": "rollup -c -w", + "build": "rollup -c", + "dev": "karma start --auto-watch --no-single-run --browsers chrome --grep", + "dev:ff": "karma start --auto-watch --no-single-run --browsers firefox --grep", + "docs": "npm run build && vuepress build docs --no-cache", + "docs:dev": "npm run build && vuepress dev docs --no-cache", + "lint-js": "eslint \"src/**/*.js\" \"test/**/*.js\" \"docs/**/*.js\"", + "lint-md": "eslint \"**/*.md\"", + "lint-tsc": "tsc", + "lint-types": "eslint \"types/**/*.ts\" && node -r esm types/tests/autogen.js && tsc -p types/tests/", + "lint": "concurrently \"npm:lint-*\"", + "test": "npm run lint && cross-env NODE_ENV=test karma start --auto-watch --single-run --coverage --grep" + }, + "devDependencies": { + "@kurkle/color": "^0.1.9", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@simonbrunel/vuepress-plugin-versions": "^0.2.0", + "@types/offscreencanvas": "^2019.6.4", + "@typescript-eslint/eslint-plugin": "^5.8.0", + "@typescript-eslint/parser": "^5.8.0", + "@vuepress/plugin-google-analytics": "^1.8.3", + "@vuepress/plugin-html-redirect": "^0.1.2", + "chartjs-adapter-luxon": "^1.0.0", + "chartjs-adapter-moment": "^1.0.0", + "chartjs-test-utils": "^0.3.1", + "concurrently": "^6.0.1", + "coveralls": "^3.1.0", + "cross-env": "^7.0.3", + "eslint": "^8.5.0", + "eslint-config-chartjs": "^0.3.0", + "eslint-plugin-es": "^4.1.0", + "eslint-plugin-html": "^6.1.2", + "eslint-plugin-markdown": "^2.2.1", + "esm": "^3.2.25", + "glob": "^7.1.6", + "jasmine": "^3.7.0", + "jasmine-core": "^3.7.1", + "karma": "^6.3.2", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage": "^2.0.3", + "karma-edge-launcher": "^0.4.2", + "karma-firefox-launcher": "^2.1.0", + "karma-jasmine": "^4.0.1", + "karma-jasmine-html-reporter": "^1.5.4", + "karma-rollup-preprocessor": "^7.0.7", + "karma-safari-private-launcher": "^1.0.0", + "karma-spec-reporter": "0.0.32", + "luxon": "^2.2.0", + "markdown-it-include": "^2.0.0", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pixelmatch": "^5.2.1", + "rollup": "^2.44.0", + "rollup-plugin-analyzer": "^4.0.0", + "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-istanbul": "^3.0.0", + "rollup-plugin-terser": "^7.0.2", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.6.1", + "typescript": "^4.3.5", + "vue-tabs-component": "^1.5.0", + "vuepress": "^1.8.2", + "vuepress-plugin-code-copy": "^1.0.6", + "vuepress-plugin-flexsearch": "^0.3.0", + "vuepress-plugin-redirect": "^1.2.5", + "vuepress-plugin-tabs": "^0.3.0", + "vuepress-plugin-typedoc": "^0.10.0", + "vuepress-theme-chartjs": "^0.2.0", + "yargs": "^17.0.1" + } +} diff --git a/node_modules/chart.js/types/adapters.d.ts b/node_modules/chart.js/types/adapters.d.ts new file mode 100644 index 00000000..f06c41b6 --- /dev/null +++ b/node_modules/chart.js/types/adapters.d.ts @@ -0,0 +1,63 @@ +export type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'; + +export interface DateAdapter { + // Override one or multiple of the methods to adjust to the logic of the current date library. + override(members: Partial): void; + readonly options: unknown; + + /** + * Returns a map of time formats for the supported formatting units defined + * in Unit as well as 'datetime' representing a detailed date/time string. + * @returns {{string: string}} + */ + formats(): { [key: string]: string }; + /** + * Parses the given `value` and return the associated timestamp. + * @param {unknown} value - the value to parse (usually comes from the data) + * @param {string} [format] - the expected data format + */ + parse(value: unknown, format?: TimeUnit): number | null; + /** + * Returns the formatted date in the specified `format` for a given `timestamp`. + * @param {number} timestamp - the timestamp to format + * @param {string} format - the date/time token + * @return {string} + */ + format(timestamp: number, format: TimeUnit): string; + /** + * Adds the specified `amount` of `unit` to the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {number} amount - the amount to add + * @param {Unit} unit - the unit as string + * @return {number} + */ + add(timestamp: number, amount: number, unit: TimeUnit): number; + /** + * Returns the number of `unit` between the given timestamps. + * @param {number} a - the input timestamp (reference) + * @param {number} b - the timestamp to subtract + * @param {Unit} unit - the unit as string + * @return {number} + */ + diff(a: number, b: number, unit: TimeUnit): number; + /** + * Returns start of `unit` for the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {Unit|'isoWeek'} unit - the unit as string + * @param {number} [weekday] - the ISO day of the week with 1 being Monday + * and 7 being Sunday (only needed if param *unit* is `isoWeek`). + * @return {number} + */ + startOf(timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number; + /** + * Returns end of `unit` for the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {Unit|'isoWeek'} unit - the unit as string + * @return {number} + */ + endOf(timestamp: number, unit: TimeUnit | 'isoWeek'): number; +} + +export const _adapters: { + _date: DateAdapter; +}; diff --git a/node_modules/chart.js/types/animation.d.ts b/node_modules/chart.js/types/animation.d.ts new file mode 100644 index 00000000..b8320412 --- /dev/null +++ b/node_modules/chart.js/types/animation.d.ts @@ -0,0 +1,33 @@ +import { Chart } from './index.esm'; +import { AnyObject } from './basic'; + +export class Animation { + constructor(cfg: AnyObject, target: AnyObject, prop: string, to?: unknown); + active(): boolean; + update(cfg: AnyObject, to: unknown, date: number): void; + cancel(): void; + tick(date: number): void; +} + +export interface AnimationEvent { + chart: Chart; + numSteps: number; + initial: boolean; + currentStep: number; +} + +export class Animator { + listen(chart: Chart, event: 'complete' | 'progress', cb: (event: AnimationEvent) => void): void; + add(chart: Chart, items: readonly Animation[]): void; + has(chart: Chart): boolean; + start(chart: Chart): void; + running(chart: Chart): boolean; + stop(chart: Chart): void; + remove(chart: Chart): boolean; +} + +export class Animations { + constructor(chart: Chart, animations: AnyObject); + configure(animations: AnyObject): void; + update(target: AnyObject, values: AnyObject): undefined | boolean; +} diff --git a/node_modules/chart.js/types/basic.d.ts b/node_modules/chart.js/types/basic.d.ts new file mode 100644 index 00000000..1692c9cb --- /dev/null +++ b/node_modules/chart.js/types/basic.d.ts @@ -0,0 +1,3 @@ + +export type AnyObject = Record; +export type EmptyObject = Record; diff --git a/node_modules/chart.js/types/color.d.ts b/node_modules/chart.js/types/color.d.ts new file mode 100644 index 00000000..4a68f98b --- /dev/null +++ b/node_modules/chart.js/types/color.d.ts @@ -0,0 +1 @@ +export type Color = string | CanvasGradient | CanvasPattern; diff --git a/node_modules/chart.js/types/element.d.ts b/node_modules/chart.js/types/element.d.ts new file mode 100644 index 00000000..3b9359b3 --- /dev/null +++ b/node_modules/chart.js/types/element.d.ts @@ -0,0 +1,17 @@ +import { AnyObject } from './basic'; +import { Point } from './geometric'; + +export interface Element { + readonly x: number; + readonly y: number; + readonly active: boolean; + readonly options: O; + + tooltipPosition(useFinalPosition?: boolean): Point; + hasValue(): boolean; + getProps

(props: P, final?: boolean): Pick; +} +export const Element: { + prototype: Element; + new (): Element; +}; diff --git a/node_modules/chart.js/types/geometric.d.ts b/node_modules/chart.js/types/geometric.d.ts new file mode 100644 index 00000000..0e1affda --- /dev/null +++ b/node_modules/chart.js/types/geometric.d.ts @@ -0,0 +1,37 @@ +export interface ChartArea { + top: number; + left: number; + right: number; + bottom: number; + width: number; + height: number; +} + +export interface Point { + x: number; + y: number; +} + +export type TRBL = { + top: number; + right: number; + bottom: number; + left: number; +} + +export type TRBLCorners = { + topLeft: number; + topRight: number; + bottomLeft: number; + bottomRight: number; +}; + +export type CornerRadius = number | Partial; + +export type RoundedRect = { + x: number; + y: number; + w: number; + h: number; + radius?: CornerRadius +} diff --git a/node_modules/chart.js/types/helpers/helpers.canvas.d.ts b/node_modules/chart.js/types/helpers/helpers.canvas.d.ts new file mode 100644 index 00000000..44e570e6 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.canvas.d.ts @@ -0,0 +1,101 @@ +import { PointStyle } from '../index.esm'; +import { Color } from '../color'; +import { ChartArea, RoundedRect } from '../geometric'; +import { CanvasFontSpec } from './helpers.options'; + +export function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D): void; + +export function clipArea(ctx: CanvasRenderingContext2D, area: ChartArea): void; + +export function unclipArea(ctx: CanvasRenderingContext2D): void; + +export interface DrawPointOptions { + pointStyle: PointStyle; + rotation?: number; + radius: number; + borderWidth: number; +} + +export function drawPoint(ctx: CanvasRenderingContext2D, options: DrawPointOptions, x: number, y: number): void; + +/** + * Converts the given font object into a CSS font string. + * @param font a font object + * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font + */ +export function toFontString(font: { size: number; family: string; style?: string; weight?: string }): string | null; + +export interface RenderTextOpts { + /** + * The fill color of the text. If unset, the existing + * fillStyle property of the canvas is unchanged. + */ + color?: Color; + + /** + * The width of the strikethrough / underline + * @default 2 + */ + decorationWidth?: number; + + /** + * The max width of the text in pixels + */ + maxWidth?: number; + + /** + * A rotation to be applied to the canvas + * This is applied after the translation is applied + */ + rotation?: number; + + /** + * Apply a strikethrough effect to the text + */ + strikethrough?: boolean; + + /** + * The color of the text stroke. If unset, the existing + * strokeStyle property of the context is unchanged + */ + strokeColor?: Color; + + /** + * The text stroke width. If unset, the existing + * lineWidth property of the context is unchanged + */ + strokeWidth?: number; + + /** + * The text alignment to use. If unset, the existing + * textAlign property of the context is unchanged + */ + textAlign: CanvasTextAlign; + + /** + * The text baseline to use. If unset, the existing + * textBaseline property of the context is unchanged + */ + textBaseline: CanvasTextBaseline; + + /** + * If specified, a translation to apply to the context + */ + translation?: [number, number]; + + /** + * Underline the text + */ + underline?: boolean; +} + +export function renderText( + ctx: CanvasRenderingContext2D, + text: string | string[], + x: number, + y: number, + font: CanvasFontSpec, + opts?: RenderTextOpts +): void; + +export function addRoundedRectPath(ctx: CanvasRenderingContext2D, rect: RoundedRect): void; diff --git a/node_modules/chart.js/types/helpers/helpers.collection.d.ts b/node_modules/chart.js/types/helpers/helpers.collection.d.ts new file mode 100644 index 00000000..6a51597c --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.collection.d.ts @@ -0,0 +1,20 @@ +export interface ArrayListener { + _onDataPush?(...item: T[]): void; + _onDataPop?(): void; + _onDataShift?(): void; + _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void; + _onDataUnshift?(...item: T[]): void; +} + +/** + * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice', + * 'unshift') and notify the listener AFTER the array has been altered. Listeners are + * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments. + */ +export function listenArrayEvents(array: T[], listener: ArrayListener): void; + +/** + * Removes the given array event listener and cleanup extra attached properties (such as + * the _chartjs stub and overridden methods) if array doesn't have any more listeners. + */ +export function unlistenArrayEvents(array: T[], listener: ArrayListener): void; diff --git a/node_modules/chart.js/types/helpers/helpers.color.d.ts b/node_modules/chart.js/types/helpers/helpers.color.d.ts new file mode 100644 index 00000000..3cfc20ea --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.color.d.ts @@ -0,0 +1,33 @@ +export function color(value: CanvasGradient): CanvasGradient; +export function color(value: CanvasPattern): CanvasPattern; +export function color( + value: + | string + | { r: number; g: number; b: number; a: number } + | [number, number, number] + | [number, number, number, number] +): ColorModel; + +export interface ColorModel { + rgbString(): string; + hexString(): string; + hslString(): string; + rgb: { r: number; g: number; b: number; a: number }; + valid: boolean; + mix(color: ColorModel, weight: number): this; + clone(): ColorModel; + alpha(a: number): ColorModel; + clearer(ration: number): ColorModel; + greyscale(): ColorModel; + opaquer(ratio: number): ColorModel; + negate(): ColorModel; + lighten(ratio: number): ColorModel; + darken(ratio: number): ColorModel; + saturate(ratio: number): ColorModel; + desaturate(ratio: number): ColorModel; + rotate(deg: number): this; +} + +export function getHoverColor(value: CanvasGradient): CanvasGradient; +export function getHoverColor(value: CanvasPattern): CanvasPattern; +export function getHoverColor(value: string): string; diff --git a/node_modules/chart.js/types/helpers/helpers.core.d.ts b/node_modules/chart.js/types/helpers/helpers.core.d.ts new file mode 100644 index 00000000..bc376da0 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.core.d.ts @@ -0,0 +1,157 @@ +import { AnyObject } from '../basic'; + +/** + * An empty function that can be used, for example, for optional callback. + */ +export function noop(): void; + +/** + * Returns a unique id, sequentially generated from a global variable. + * @returns {number} + * @function + */ +export function uid(): number; +/** + * Returns true if `value` is neither null nor undefined, else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @since 2.7.0 + */ +export function isNullOrUndef(value: unknown): value is null | undefined; +/** + * Returns true if `value` is an array (including typed arrays), else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @function + */ +export function isArray(value: unknown): value is ArrayLike; +/** + * Returns true if `value` is an object (excluding null), else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @since 2.7.0 + */ +export function isObject(value: unknown): value is AnyObject; +/** + * Returns true if `value` is a finite number, else returns false + * @param {*} value - The value to test. + * @returns {boolean} + */ +export function isFinite(value: unknown): value is number; + +/** + * Returns `value` if finite, else returns `defaultValue`. + * @param {*} value - The value to return if defined. + * @param {*} defaultValue - The value to return if `value` is not finite. + * @returns {*} + */ +export function finiteOrDefault(value: unknown, defaultValue: number): number; + +/** + * Returns `value` if defined, else returns `defaultValue`. + * @param {*} value - The value to return if defined. + * @param {*} defaultValue - The value to return if `value` is undefined. + * @returns {*} + */ +export function valueOrDefault(value: T | undefined, defaultValue: T): T; + +export function toPercentage(value: number | string, dimesion: number): number; +export function toDimension(value: number | string, dimension: number): number; + +/** + * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the + * value returned by `fn`. If `fn` is not a function, this method returns undefined. + * @param fn - The function to call. + * @param args - The arguments with which `fn` should be called. + * @param [thisArg] - The value of `this` provided for the call to `fn`. + * @returns {*} + */ +export function callback R, TA, R>( + fn: T | undefined, + args: unknown[], + thisArg?: TA +): R | undefined; + +/** + * Note(SB) for performance sake, this method should only be used when loopable type + * is unknown or in none intensive code (not called often and small loopable). Else + * it's preferable to use a regular for() loop and save extra function calls. + * @param loopable - The object or array to be iterated. + * @param fn - The function to call for each item. + * @param [thisArg] - The value of `this` provided for the call to `fn`. + * @param [reverse] - If true, iterates backward on the loopable. + */ +export function each( + loopable: T[], + fn: (this: TA, v: T, i: number) => void, + thisArg?: TA, + reverse?: boolean +): void; +/** + * Note(SB) for performance sake, this method should only be used when loopable type + * is unknown or in none intensive code (not called often and small loopable). Else + * it's preferable to use a regular for() loop and save extra function calls. + * @param loopable - The object or array to be iterated. + * @param fn - The function to call for each item. + * @param [thisArg] - The value of `this` provided for the call to `fn`. + * @param [reverse] - If true, iterates backward on the loopable. + */ +export function each( + loopable: { [key: string]: T }, + fn: (this: TA, v: T, k: string) => void, + thisArg?: TA, + reverse?: boolean +): void; + +/** + * Returns a deep copy of `source` without keeping references on objects and arrays. + * @param source - The value to clone. + */ +export function clone(source: T): T; + +export interface MergeOptions { + merger?: (key: string, target: AnyObject, source: AnyObject, options: AnyObject) => AnyObject; +} +/** + * Recursively deep copies `source` properties into `target` with the given `options`. + * IMPORTANT: `target` is not cloned and will be updated with `source` properties. + * @param target - The target object in which all sources are merged into. + * @param source - Object(s) to merge into `target`. + * @param {object} [options] - Merging options: + * @param {function} [options.merger] - The merge method (key, target, source, options) + * @returns {object} The `target` object. + */ +export function merge(target: T, source: [], options?: MergeOptions): T; +export function merge(target: T, source: S1, options?: MergeOptions): T & S1; +export function merge(target: T, source: [S1], options?: MergeOptions): T & S1; +export function merge(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2; +export function merge(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3; +export function merge( + target: T, + source: [S1, S2, S3, S4], + options?: MergeOptions +): T & S1 & S2 & S3 & S4; +export function merge(target: T, source: AnyObject[], options?: MergeOptions): AnyObject; + +/** + * Recursively deep copies `source` properties into `target` *only* if not defined in target. + * IMPORTANT: `target` is not cloned and will be updated with `source` properties. + * @param target - The target object in which all sources are merged into. + * @param source - Object(s) to merge into `target`. + * @returns The `target` object. + */ +export function mergeIf(target: T, source: []): T; +export function mergeIf(target: T, source: S1): T & S1; +export function mergeIf(target: T, source: [S1]): T & S1; +export function mergeIf(target: T, source: [S1, S2]): T & S1 & S2; +export function mergeIf(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3; +export function mergeIf(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4; +export function mergeIf(target: T, source: AnyObject[]): AnyObject; + +export function resolveObjectKey(obj: AnyObject, key: string): AnyObject; + +export function defined(value: unknown): boolean; + +export function isFunction(value: unknown): boolean; + +export function setsEqual(a: Set, b: Set): boolean; diff --git a/node_modules/chart.js/types/helpers/helpers.curve.d.ts b/node_modules/chart.js/types/helpers/helpers.curve.d.ts new file mode 100644 index 00000000..28d9ee4a --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.curve.d.ts @@ -0,0 +1,34 @@ +export interface SplinePoint { + x: number; + y: number; +} + +/** + * Props to Rob Spencer at scaled innovation for his post on splining between points + * http://scaledinnovation.com/analytics/splines/aboutSplines.html + */ +export function splineCurve( + firstPoint: SplinePoint & { skip?: boolean }, + middlePoint: SplinePoint, + afterPoint: SplinePoint, + t: number +): { + previous: SplinePoint; + next: SplinePoint; +}; + +export interface MonotoneSplinePoint extends SplinePoint { + skip: boolean; + cp1x?: number; + cp1y?: number; + cp2x?: number; + cp2y?: number; +} + +/** + * This function calculates Bézier control points in a similar way than |splineCurve|, + * but preserves monotonicity of the provided data and ensures no local extremums are added + * between the dataset discrete points due to the interpolation. + * @see https://en.wikipedia.org/wiki/Monotone_cubic_interpolation + */ +export function splineCurveMonotone(points: readonly MonotoneSplinePoint[], indexAxis?: 'x' | 'y'): void; diff --git a/node_modules/chart.js/types/helpers/helpers.dom.d.ts b/node_modules/chart.js/types/helpers/helpers.dom.d.ts new file mode 100644 index 00000000..73864314 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.dom.d.ts @@ -0,0 +1,20 @@ +import { ChartEvent } from '../index.esm'; + +export function getMaximumSize(node: HTMLElement, width?: number, height?: number, aspectRatio?: number): { width: number, height: number }; +export function getRelativePosition( + evt: MouseEvent | ChartEvent, + chart: { readonly canvas: HTMLCanvasElement } +): { x: number; y: number }; +export function getStyle(el: HTMLElement, property: string): string; +export function retinaScale( + chart: { + currentDevicePixelRatio: number; + readonly canvas: HTMLCanvasElement; + readonly width: number; + readonly height: number; + readonly ctx: CanvasRenderingContext2D; + }, + forceRatio: number, + forceStyle?: boolean +): void; +export function readUsedSize(element: HTMLElement, property: 'width' | 'height'): number | undefined; diff --git a/node_modules/chart.js/types/helpers/helpers.easing.d.ts b/node_modules/chart.js/types/helpers/helpers.easing.d.ts new file mode 100644 index 00000000..b86d6532 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.easing.d.ts @@ -0,0 +1,5 @@ +import { EasingFunction } from '../index.esm'; + +export type EasingFunctionSignature = (t: number) => number; + +export const easingEffects: Record; diff --git a/node_modules/chart.js/types/helpers/helpers.extras.d.ts b/node_modules/chart.js/types/helpers/helpers.extras.d.ts new file mode 100644 index 00000000..cb445c32 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.extras.d.ts @@ -0,0 +1,23 @@ +export function fontString(pixelSize: number, fontStyle: string, fontFamily: string): string; + +/** + * Request animation polyfill + */ +export function requestAnimFrame(cb: () => void): void; + +/** + * Throttles calling `fn` once per animation frame + * Latest arguments are used on the actual call + * @param {function} fn + * @param {*} thisArg + * @param {function} [updateFn] + */ +export function throttled(fn: (...args: unknown[]) => void, thisArg: unknown, updateFn?: (...args: unknown[]) => unknown[]): (...args: unknown[]) => void; + +/** + * Debounces calling `fn` for `delay` ms + * @param {function} fn - Function to call. No arguments are passed. + * @param {number} delay - Delay in ms. 0 = immediate invocation. + * @returns {function} + */ +export function debounce(fn: () => void, delay: number): () => number; diff --git a/node_modules/chart.js/types/helpers/helpers.interpolation.d.ts b/node_modules/chart.js/types/helpers/helpers.interpolation.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.interpolation.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/chart.js/types/helpers/helpers.intl.d.ts b/node_modules/chart.js/types/helpers/helpers.intl.d.ts new file mode 100644 index 00000000..3a896f4a --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.intl.d.ts @@ -0,0 +1,7 @@ +/** + * Format a number using a localized number formatter. + * @param num The number to format + * @param locale The locale to pass to the Intl.NumberFormat constructor + * @param options Number format options + */ +export function formatNumber(num: number, locale: string, options: Intl.NumberFormatOptions): string; diff --git a/node_modules/chart.js/types/helpers/helpers.math.d.ts b/node_modules/chart.js/types/helpers/helpers.math.d.ts new file mode 100644 index 00000000..cc58b30e --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.math.d.ts @@ -0,0 +1,17 @@ +export function log10(x: number): number; +export function isNumber(v: unknown): boolean; +export function almostEquals(x: number, y: number, epsilon: number): boolean; +export function almostWhole(x: number, epsilon: number): number; +export function sign(x: number): number; +export function niceNum(range: number): number; +export function toRadians(degrees: number): number; +export function toDegrees(radians: number): number; +/** + * Gets the angle from vertical upright to the point about a centre. + */ +export function getAngleFromPoint( + centrePoint: { x: number; y: number }, + anglePoint: { x: number; y: number } +): { angle: number; distance: number }; + +export function distanceBetweenPoints(pt1: { x: number; y: number }, pt2: { x: number; y: number }): number; diff --git a/node_modules/chart.js/types/helpers/helpers.options.d.ts b/node_modules/chart.js/types/helpers/helpers.options.d.ts new file mode 100644 index 00000000..0bd783fa --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.options.d.ts @@ -0,0 +1,61 @@ +import { TRBL, TRBLCorners } from '../geometric'; +import { FontSpec } from '../index.esm'; + +export interface CanvasFontSpec extends FontSpec { + string: string; +} +/** + * Parses font options and returns the font object. + * @param {object} options - A object that contains font options to be parsed. + * @return {object} The font object. + */ +export function toFont(options: Partial): CanvasFontSpec; + +/** + * Converts the given line height `value` in pixels for a specific font `size`. + * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em'). + * @param {number} size - The font size (in pixels) used to resolve relative `value`. + * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid). + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height + * @since 2.7.0 + */ +export function toLineHeight(value: string, size: number): number; + +export function toTRBL(value: number | Partial): TRBL; +export function toTRBLCorners(value: number | Partial): TRBLCorners; + +/** + * Converts the given value into a padding object with pre-computed width/height. + * @param {number|object} value - If a number, set the value to all TRBL component; + * else, if an object, use defined properties and sets undefined ones to 0. + * @returns {object} The padding values (top, right, bottom, left, width, height) + * @since 2.7.0 + */ +export function toPadding( + value?: number | { top?: number; left?: number; right?: number; bottom?: number; x?:number, y?: number } +): { top: number; left: number; right: number; bottom: number; width: number; height: number }; + +/** + * Evaluates the given `inputs` sequentially and returns the first defined value. + * @param inputs - An array of values, falling back to the last value. + * @param [context] - If defined and the current value is a function, the value + * is called with `context` as first argument and the result becomes the new input. + * @param [index] - If defined and the current value is an array, the value + * at `index` become the new input. + * @param [info] - object to return information about resolution in + * @param [info.cacheable] - Will be set to `false` if option is not cacheable. + * @since 2.7.0 + */ +export function resolve( + inputs: undefined | T | ((c: C) => T) | readonly T[], + context?: C, + index?: number, + info?: { cacheable?: boolean } +): T | undefined; + + +/** + * Create a context inheriting parentContext + * @since 3.6.0 + */ +export function createContext(parentContext: P, context: T): P extends null ? T : P & T; diff --git a/node_modules/chart.js/types/helpers/helpers.rtl.d.ts b/node_modules/chart.js/types/helpers/helpers.rtl.d.ts new file mode 100644 index 00000000..ed0b9248 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.rtl.d.ts @@ -0,0 +1,12 @@ +export interface RTLAdapter { + x(x: number): number; + setWidth(w: number): void; + textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right'; + xPlus(x: number, value: number): number; + leftForLtr(x: number, itemWidth: number): number; +} +export function getRtlAdapter(rtl: boolean, rectX: number, width: number): RTLAdapter; + +export function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl'): void; + +export function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]): void; diff --git a/node_modules/chart.js/types/helpers/helpers.segment.d.ts b/node_modules/chart.js/types/helpers/helpers.segment.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/node_modules/chart.js/types/helpers/helpers.segment.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/node_modules/chart.js/types/helpers/index.d.ts b/node_modules/chart.js/types/helpers/index.d.ts new file mode 100644 index 00000000..01332692 --- /dev/null +++ b/node_modules/chart.js/types/helpers/index.d.ts @@ -0,0 +1,15 @@ +export * from './helpers.canvas'; +export * from './helpers.collection'; +export * from './helpers.color'; +export * from './helpers.core'; +export * from './helpers.curve'; +export * from './helpers.dom'; +export * from './helpers.easing'; +export * from './helpers.extras'; +export * from './helpers.interpolation'; +export * from './helpers.intl'; +export * from './helpers.math'; +export * from './helpers.options'; +export * from './helpers.canvas'; +export * from './helpers.rtl'; +export * from './helpers.segment'; diff --git a/node_modules/chart.js/types/index.esm.d.ts b/node_modules/chart.js/types/index.esm.d.ts new file mode 100644 index 00000000..ccea4128 --- /dev/null +++ b/node_modules/chart.js/types/index.esm.d.ts @@ -0,0 +1,3601 @@ +import { DeepPartial, DistributiveArray, UnionToIntersection } from './utils'; + +import { TimeUnit } from './adapters'; +import { AnimationEvent } from './animation'; +import { AnyObject, EmptyObject } from './basic'; +import { Color } from './color'; +import { Element } from './element'; +import { ChartArea, Point } from './geometric'; +import { LayoutItem, LayoutPosition } from './layout'; + +export { DateAdapter, TimeUnit, _adapters } from './adapters'; +export { Animation, Animations, Animator, AnimationEvent } from './animation'; +export { Color } from './color'; +export { Element } from './element'; +export { ChartArea, Point } from './geometric'; +export { LayoutItem, LayoutPosition } from './layout'; + +export interface ScriptableContext { + active: boolean; + chart: Chart; + dataIndex: number; + dataset: UnionToIntersection>; + datasetIndex: number; + parsed: UnionToIntersection>; + raw: unknown; +} + +export interface ScriptableLineSegmentContext { + type: 'segment', + p0: PointElement, + p1: PointElement, + p0DataIndex: number, + p1DataIndex: number, + datasetIndex: number +} + +export type Scriptable = T | ((ctx: TContext, options: AnyObject) => T | undefined); +export type ScriptableOptions = { [P in keyof T]: Scriptable }; +export type ScriptableAndArray = readonly T[] | Scriptable; +export type ScriptableAndArrayOptions = { [P in keyof T]: ScriptableAndArray }; + +export interface ParsingOptions { + /** + * 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. + */ + parsing: + { + [key: string]: string; + } + | false; + + /** + * 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. + */ + normalized: boolean; +} + +export interface ControllerDatasetOptions extends ParsingOptions { + /** + * The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts. + * @default 'x' + */ + indexAxis: 'x' | 'y'; + /** + * 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} + */ + clip: number | ChartArea; + /** + * The label for the dataset which appears in the legend and tooltips. + */ + label: string; + /** + * The drawing order of dataset. Also affects order for stacking, tooltip and legend. + */ + order: number; + + /** + * The ID of the group to which this dataset belongs to (when stacked, each group will be a separate stack). + */ + stack: string; + /** + * Configures the visibility state of the dataset. Set it to true, to hide the dataset from the chart. + * @default false + */ + hidden: boolean; +} + +export interface BarControllerDatasetOptions + extends ControllerDatasetOptions, + ScriptableAndArrayOptions>, + ScriptableAndArrayOptions>, + AnimationOptions<'bar'> { + /** + * The ID of the x axis to plot this dataset on. + */ + xAxisID: string; + /** + * The ID of the y axis to plot this dataset on. + */ + yAxisID: string; + + /** + * 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. + * @default 0.9 + */ + barPercentage: number; + /** + * Percent (0-1) of the available width each category should be within the sample width. + * @default 0.8 + */ + categoryPercentage: number; + + /** + * 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. + */ + barThickness: number | 'flex'; + + /** + * Set this to ensure that bars are not sized thicker than this. + */ + maxBarThickness: number; + + /** + * Set this to ensure that bars have a minimum length in pixels. + */ + minBarLength: number; + + /** + * Point style for the legend + * @default 'circle; + */ + pointStyle: PointStyle; +} + +export interface BarControllerChartOptions { + /** + * Should null or undefined values be omitted from drawing + */ + skipNull?: boolean; +} + +export type BarController = DatasetController +export const BarController: ChartComponent & { + prototype: BarController; + new (chart: Chart, datasetIndex: number): BarController; +}; + +export interface BubbleControllerDatasetOptions + extends ControllerDatasetOptions, + ScriptableAndArrayOptions>, + ScriptableAndArrayOptions> {} + +export interface BubbleDataPoint { + /** + * X Value + */ + x: number; + + /** + * Y Value + */ + y: number; + + /** + * Bubble radius in pixels (not scaled). + */ + r: number; +} + +export type BubbleController = DatasetController +export const BubbleController: ChartComponent & { + prototype: BubbleController; + new (chart: Chart, datasetIndex: number): BubbleController; +}; + +export interface LineControllerDatasetOptions + extends ControllerDatasetOptions, + ScriptableAndArrayOptions>, + ScriptableAndArrayOptions>, + ScriptableOptions>, + ScriptableOptions>, + AnimationOptions<'line'> { + /** + * The ID of the x axis to plot this dataset on. + */ + xAxisID: string; + /** + * The ID of the y axis to plot this dataset on. + */ + yAxisID: string; + + /** + * 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. + * @default false + */ + spanGaps: boolean | number; + + showLine: boolean; +} + +export interface LineControllerChartOptions { + /** + * 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. + * @default false + */ + spanGaps: boolean | number; + /** + * If false, the lines between points are not drawn. + * @default true + */ + showLine: boolean; +} + +export type LineController = DatasetController +export const LineController: ChartComponent & { + prototype: LineController; + new (chart: Chart, datasetIndex: number): LineController; +}; + +export type ScatterControllerDatasetOptions = LineControllerDatasetOptions; + +export interface ScatterDataPoint { + x: number; + y: number; +} + +export type ScatterControllerChartOptions = LineControllerChartOptions; + +export type ScatterController = LineController +export const ScatterController: ChartComponent & { + prototype: ScatterController; + new (chart: Chart, datasetIndex: number): ScatterController; +}; + +export interface DoughnutControllerDatasetOptions + extends ControllerDatasetOptions, + ScriptableAndArrayOptions>, + ScriptableAndArrayOptions>, + AnimationOptions<'doughnut'> { + + /** + * Sweep to allow arcs to cover. + * @default 360 + */ + circumference: number; + + /** + * Arc offset (in pixels). + */ + offset: number; + + /** + * Starting angle to draw this dataset from. + * @default 0 + */ + rotation: number; + + /** + * 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. + * @default 1 + */ + weight: number; + + /** + * Similar to the `offset` option, but applies to all arcs. This can be used to to add spaces + * between arcs + * @default 0 + */ + spacing: number; +} + +export interface DoughnutAnimationOptions { + /** + * If true, the chart will animate in with a rotation animation. This property is in the options.animation object. + * @default true + */ + animateRotate: boolean; + + /** + * If true, will animate scaling the chart from the center outwards. + * @default false + */ + animateScale: boolean; +} + +export interface DoughnutControllerChartOptions { + /** + * Sweep to allow arcs to cover. + * @default 360 + */ + circumference: number; + + /** + * The portion of the chart that is cut out of the middle. ('50%' - for doughnut, 0 - for pie) + * String ending with '%' means percentage, number means pixels. + * @default 50 + */ + cutout: Scriptable>; + + /** + * Arc offset (in pixels). + */ + offset: number; + + /** + * The outer radius of the chart. String ending with '%' means percentage of maximum radius, number means pixels. + * @default '100%' + */ + radius: Scriptable>; + + /** + * Starting angle to draw arcs from. + * @default 0 + */ + rotation: number; + + /** + * Spacing between the arcs + * @default 0 + */ + spacing: number; + + animation: false | DoughnutAnimationOptions; +} + +export type DoughnutDataPoint = number; + +export interface DoughnutController extends DatasetController { + readonly innerRadius: number; + readonly outerRadius: number; + readonly offsetX: number; + readonly offsetY: number; + + calculateTotal(): number; + calculateCircumference(value: number): number; +} + +export const DoughnutController: ChartComponent & { + prototype: DoughnutController; + new (chart: Chart, datasetIndex: number): DoughnutController; +}; + +export interface DoughnutMetaExtensions { + total: number; +} + +export type PieControllerDatasetOptions = DoughnutControllerDatasetOptions; +export type PieControllerChartOptions = DoughnutControllerChartOptions; +export type PieAnimationOptions = DoughnutAnimationOptions; + +export type PieDataPoint = DoughnutDataPoint; +export type PieMetaExtensions = DoughnutMetaExtensions; + +export type PieController = DoughnutController +export const PieController: ChartComponent & { + prototype: PieController; + new (chart: Chart, datasetIndex: number): PieController; +}; + +export interface PolarAreaControllerDatasetOptions extends DoughnutControllerDatasetOptions { + /** + * Arc angle to cover. - for polar only + * @default circumference / (arc count) + */ + angle: number; +} + +export type PolarAreaAnimationOptions = DoughnutAnimationOptions; + +export interface PolarAreaControllerChartOptions { + /** + * Starting angle to draw arcs for the first item in a dataset. In degrees, 0 is at top. + * @default 0 + */ + startAngle: number; + + animation: false | PolarAreaAnimationOptions; +} + +export interface PolarAreaController extends DoughnutController { + countVisibleElements(): number; +} +export const PolarAreaController: ChartComponent & { + prototype: PolarAreaController; + new (chart: Chart, datasetIndex: number): PolarAreaController; +}; + +export interface RadarControllerDatasetOptions + extends ControllerDatasetOptions, + ScriptableAndArrayOptions>, + ScriptableAndArrayOptions>, + AnimationOptions<'radar'> { + /** + * The ID of the x axis to plot this dataset on. + */ + xAxisID: string; + /** + * The ID of the y axis to plot this dataset on. + */ + yAxisID: string; + + /** + * 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. + */ + spanGaps: boolean | number; + + /** + * If false, the line is not drawn for this dataset. + */ + showLine: boolean; +} + +export type RadarControllerChartOptions = LineControllerChartOptions; + +export type RadarController = DatasetController +export const RadarController: ChartComponent & { + prototype: RadarController; + new (chart: Chart, datasetIndex: number): RadarController; +}; +interface ChartMetaCommon { + type: string; + controller: DatasetController; + order: number; + + label: string; + index: number; + visible: boolean; + + stack: number; + + indexAxis: 'x' | 'y'; + + data: TElement[]; + dataset?: TDatasetElement; + + hidden: boolean; + + xAxisID?: string; + yAxisID?: string; + rAxisID?: string; + iAxisID: string; + vAxisID: string; + + xScale?: Scale; + yScale?: Scale; + rScale?: Scale; + iScale?: Scale; + vScale?: Scale; + + _sorted: boolean; + _stacked: boolean | 'single'; + _parsed: unknown[]; +} + +export type ChartMeta< + TElement extends Element = Element, + TDatasetElement extends Element = Element, + // TODO - V4, move this to the first parameter. + // When this was introduced, doing so was a breaking change + TType extends ChartType = ChartType, +> = DeepPartial< +{ [key in ChartType]: ChartTypeRegistry[key]['metaExtensions'] }[TType] +> & ChartMetaCommon; + +export interface ActiveDataPoint { + datasetIndex: number; + index: number; +} + +export interface ActiveElement extends ActiveDataPoint { + element: Element; +} + +export declare class Chart< + TType extends ChartType = ChartType, + TData = DefaultDataPoint, + TLabel = unknown +> { + readonly platform: BasePlatform; + readonly id: string; + readonly canvas: HTMLCanvasElement; + readonly ctx: CanvasRenderingContext2D; + readonly config: ChartConfiguration; + readonly width: number; + readonly height: number; + readonly aspectRatio: number; + readonly boxes: LayoutItem[]; + readonly currentDevicePixelRatio: number; + readonly chartArea: ChartArea; + readonly scales: { [key: string]: Scale }; + readonly attached: boolean; + + readonly legend?: LegendElement; // Only available if legend plugin is registered and enabled + readonly tooltip?: TooltipModel; // Only available if tooltip plugin is registered and enabled + + data: ChartData; + options: ChartOptions; + + constructor(item: ChartItem, config: ChartConfiguration); + + clear(): this; + stop(): this; + + resize(width?: number, height?: number): void; + ensureScalesHaveIDs(): void; + buildOrUpdateScales(): void; + buildOrUpdateControllers(): void; + reset(): void; + update(mode?: UpdateMode): void; + render(): void; + draw(): void; + + getElementsAtEventForMode(e: Event, mode: string, options: InteractionOptions, useFinalPosition: boolean): InteractionItem[]; + + getSortedVisibleDatasetMetas(): ChartMeta[]; + getDatasetMeta(datasetIndex: number): ChartMeta; + getVisibleDatasetCount(): number; + isDatasetVisible(datasetIndex: number): boolean; + setDatasetVisibility(datasetIndex: number, visible: boolean): void; + toggleDataVisibility(index: number): void; + getDataVisibility(index: number): boolean; + hide(datasetIndex: number, dataIndex?: number): void; + show(datasetIndex: number, dataIndex?: number): void; + + getActiveElements(): ActiveElement[]; + setActiveElements(active: ActiveDataPoint[]): void; + + destroy(): void; + toBase64Image(type?: string, quality?: unknown): string; + bindEvents(): void; + unbindEvents(): void; + updateHoverStyle(items: InteractionItem[], mode: 'dataset', enabled: boolean): void; + + notifyPlugins(hook: string, args?: AnyObject): boolean | void; + + static readonly defaults: Defaults; + static readonly overrides: Overrides; + static readonly version: string; + static readonly instances: { [key: string]: Chart }; + static readonly registry: Registry; + static getChart(key: string | CanvasRenderingContext2D | HTMLCanvasElement): Chart | undefined; + static register(...items: ChartComponentLike[]): void; + static unregister(...items: ChartComponentLike[]): void; +} + +export const registerables: readonly ChartComponentLike[]; + +export declare type ChartItem = + | string + | CanvasRenderingContext2D + | HTMLCanvasElement + | { canvas: HTMLCanvasElement } + | ArrayLike; + +export declare enum UpdateModeEnum { + resize = 'resize', + reset = 'reset', + none = 'none', + hide = 'hide', + show = 'show', + normal = 'normal', + active = 'active' +} + +export type UpdateMode = keyof typeof UpdateModeEnum; + +export class DatasetController< + TType extends ChartType = ChartType, + TElement extends Element = Element, + TDatasetElement extends Element = Element, + TParsedData = ParsedDataType, +> { + constructor(chart: Chart, datasetIndex: number); + + readonly chart: Chart; + readonly index: number; + readonly _cachedMeta: ChartMeta; + enableOptionSharing: boolean; + + linkScales(): void; + getAllParsedValues(scale: Scale): number[]; + protected getLabelAndValue(index: number): { label: string; value: string }; + updateElements(elements: TElement[], start: number, count: number, mode: UpdateMode): void; + update(mode: UpdateMode): void; + updateIndex(datasetIndex: number): void; + protected getMaxOverflow(): boolean | number; + draw(): void; + reset(): void; + getDataset(): ChartDataset; + getMeta(): ChartMeta; + getScaleForId(scaleID: string): Scale | undefined; + configure(): void; + initialize(): void; + addElements(): void; + buildOrUpdateElements(resetNewElements?: boolean): void; + + getStyle(index: number, active: boolean): AnyObject; + protected resolveDatasetElementOptions(mode: UpdateMode): AnyObject; + protected resolveDataElementOptions(index: number, mode: UpdateMode): AnyObject; + /** + * Utility for checking if the options are shared and should be animated separately. + * @protected + */ + protected getSharedOptions(options: AnyObject): undefined | AnyObject; + /** + * Utility for determining if `options` should be included in the updated properties + * @protected + */ + protected includeOptions(mode: UpdateMode, sharedOptions: AnyObject): boolean; + /** + * Utility for updating an element with new properties, using animations when appropriate. + * @protected + */ + + protected updateElement(element: TElement | TDatasetElement, index: number | undefined, properties: AnyObject, mode: UpdateMode): void; + /** + * Utility to animate the shared options, that are potentially affecting multiple elements. + * @protected + */ + + protected updateSharedOptions(sharedOptions: AnyObject, mode: UpdateMode, newOptions: AnyObject): void; + removeHoverStyle(element: TElement, datasetIndex: number, index: number): void; + setHoverStyle(element: TElement, datasetIndex: number, index: number): void; + + parse(start: number, count: number): void; + protected parsePrimitiveData(meta: ChartMeta, data: AnyObject[], start: number, count: number): AnyObject[]; + protected parseArrayData(meta: ChartMeta, data: AnyObject[], start: number, count: number): AnyObject[]; + protected parseObjectData(meta: ChartMeta, data: AnyObject[], start: number, count: number): AnyObject[]; + protected getParsed(index: number): TParsedData; + protected applyStack(scale: Scale, parsed: unknown[]): number; + protected updateRangeFromParsed( + range: { min: number; max: number }, + scale: Scale, + parsed: unknown[], + stack: boolean | string + ): void; + protected getMinMax(scale: Scale, canStack?: boolean): { min: number; max: number }; +} + +export interface DatasetControllerChartComponent extends ChartComponent { + defaults: { + datasetElementType?: string | null | false; + dataElementType?: string | null | false; + }; +} + +export interface Defaults extends CoreChartOptions, ElementChartOptions, PluginChartOptions { + + scale: ScaleOptionsByType; + scales: { + [key in ScaleType]: ScaleOptionsByType; + }; + + set(values: AnyObject): AnyObject; + set(scope: string, values: AnyObject): AnyObject; + get(scope: string): AnyObject; + + describe(scope: string, values: AnyObject): AnyObject; + override(scope: string, values: AnyObject): AnyObject; + + /** + * Routes the named defaults to fallback to another scope/name. + * This routing is useful when those target values, like defaults.color, are changed runtime. + * If the values would be copied, the runtime change would not take effect. By routing, the + * fallback is evaluated at each access, so its always up to date. + * + * Example: + * + * defaults.route('elements.arc', 'backgroundColor', '', 'color') + * - reads the backgroundColor from defaults.color when undefined locally + * + * @param scope Scope this route applies to. + * @param name Property name that should be routed to different namespace when not defined here. + * @param targetScope The namespace where those properties should be routed to. + * Empty string ('') is the root of defaults. + * @param targetName The target name in the target scope the property should be routed to. + */ + route(scope: string, name: string, targetScope: string, targetName: string): void; +} + +export type Overrides = { + [key in ChartType]: + CoreChartOptions & + ElementChartOptions & + PluginChartOptions & + DatasetChartOptions & + ScaleChartOptions & + ChartTypeRegistry[key]['chartOptions']; +} + +export const defaults: Defaults; +export interface InteractionOptions { + axis?: string; + intersect?: boolean; +} + +export interface InteractionItem { + element: Element; + datasetIndex: number; + index: number; +} + +export type InteractionModeFunction = ( + chart: Chart, + e: ChartEvent, + options: InteractionOptions, + useFinalPosition?: boolean +) => InteractionItem[]; + +export interface InteractionModeMap { + /** + * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something + * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item + */ + index: InteractionModeFunction; + + /** + * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something + * If the options.intersect is false, we find the nearest item and return the items in that dataset + */ + dataset: InteractionModeFunction; + /** + * Point mode returns all elements that hit test based on the event position + * of the event + */ + point: InteractionModeFunction; + /** + * nearest mode returns the element closest to the point + */ + nearest: InteractionModeFunction; + /** + * x mode returns the elements that hit-test at the current x coordinate + */ + x: InteractionModeFunction; + /** + * y mode returns the elements that hit-test at the current y coordinate + */ + y: InteractionModeFunction; +} + +export type InteractionMode = keyof InteractionModeMap; + +export const Interaction: { + modes: InteractionModeMap; +}; + +export const layouts: { + /** + * Register a box to a chart. + * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title. + * @param {Chart} chart - the chart to use + * @param {LayoutItem} item - the item to add to be laid out + */ + addBox(chart: Chart, item: LayoutItem): void; + + /** + * Remove a layoutItem from a chart + * @param {Chart} chart - the chart to remove the box from + * @param {LayoutItem} layoutItem - the item to remove from the layout + */ + removeBox(chart: Chart, layoutItem: LayoutItem): void; + + /** + * Sets (or updates) options on the given `item`. + * @param {Chart} chart - the chart in which the item lives (or will be added to) + * @param {LayoutItem} item - the item to configure with the given options + * @param options - the new item options. + */ + configure( + chart: Chart, + item: LayoutItem, + options: { fullSize?: number; position?: LayoutPosition; weight?: number } + ): void; + + /** + * Fits boxes of the given chart into the given size by having each box measure itself + * then running a fitting algorithm + * @param {Chart} chart - the chart + * @param {number} width - the width to fit into + * @param {number} height - the height to fit into + */ + update(chart: Chart, width: number, height: number): void; +}; + +export interface Plugin extends ExtendedPlugin { + id: string; + + /** + * @desc Called when plugin is installed for this chart instance. This hook is also invoked for disabled plugins (options === false). + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @since 3.0.0 + */ + install?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called when a plugin is starting. This happens when chart is created or plugin is enabled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @since 3.0.0 + */ + start?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called when a plugin stopping. This happens when chart is destroyed or plugin is disabled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @since 3.0.0 + */ + stop?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before initializing `chart`. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + beforeInit?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called after `chart` has been initialized and before the first update. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterInit?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before updating `chart`. If any plugin returns `false`, the update + * is cancelled (and thus subsequent render(s)) until another `update` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {UpdateMode} args.mode - The update mode + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart update. + */ + beforeUpdate?(chart: Chart, args: { mode: UpdateMode, cancelable: true }, options: O): boolean | void; + /** + * @desc Called after `chart` has been updated and before rendering. Note that this + * hook will not be called if the chart update has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {UpdateMode} args.mode - The update mode + * @param {object} options - The plugin options. + */ + afterUpdate?(chart: Chart, args: { mode: UpdateMode }, options: O): void; + /** + * @desc Called during the update process, before any chart elements have been created. + * This can be used for data decimation by changing the data array inside a dataset. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + beforeElementsUpdate?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called during chart reset + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @since version 3.0.0 + */ + reset?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before updating the `chart` datasets. If any plugin returns `false`, + * the datasets update is cancelled until another `update` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {UpdateMode} args.mode - The update mode. + * @param {object} options - The plugin options. + * @returns {boolean} false to cancel the datasets update. + * @since version 2.1.5 + */ + beforeDatasetsUpdate?(chart: Chart, args: { mode: UpdateMode }, options: O): boolean | void; + /** + * @desc Called after the `chart` datasets have been updated. Note that this hook + * will not be called if the datasets update has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {UpdateMode} args.mode - The update mode. + * @param {object} options - The plugin options. + * @since version 2.1.5 + */ + afterDatasetsUpdate?(chart: Chart, args: { mode: UpdateMode, cancelable: true }, options: O): void; + /** + * @desc Called before updating the `chart` dataset at the given `args.index`. If any plugin + * returns `false`, the datasets update is cancelled until another `update` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {number} args.index - The dataset index. + * @param {object} args.meta - The dataset metadata. + * @param {UpdateMode} args.mode - The update mode. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart datasets drawing. + */ + beforeDatasetUpdate?(chart: Chart, args: { index: number; meta: ChartMeta, mode: UpdateMode, cancelable: true }, options: O): boolean | void; + /** + * @desc Called after the `chart` datasets at the given `args.index` has been updated. Note + * that this hook will not be called if the datasets update has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {number} args.index - The dataset index. + * @param {object} args.meta - The dataset metadata. + * @param {UpdateMode} args.mode - The update mode. + * @param {object} options - The plugin options. + */ + afterDatasetUpdate?(chart: Chart, args: { index: number; meta: ChartMeta, mode: UpdateMode, cancelable: false }, options: O): void; + /** + * @desc Called before laying out `chart`. If any plugin returns `false`, + * the layout update is cancelled until another `update` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart layout. + */ + beforeLayout?(chart: Chart, args: { cancelable: true }, options: O): boolean | void; + /** + * @desc Called before scale data limits are calculated. This hook is called separately for each scale in the chart. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Scale} args.scale - The scale. + * @param {object} options - The plugin options. + */ + beforeDataLimits?(chart: Chart, args: { scale: Scale }, options: O): void; + /** + * @desc Called after scale data limits are calculated. This hook is called separately for each scale in the chart. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Scale} args.scale - The scale. + * @param {object} options - The plugin options. + */ + afterDataLimits?(chart: Chart, args: { scale: Scale }, options: O): void; + /** + * @desc Called before scale builds its ticks. This hook is called separately for each scale in the chart. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Scale} args.scale - The scale. + * @param {object} options - The plugin options. + */ + beforeBuildTicks?(chart: Chart, args: { scale: Scale }, options: O): void; + /** + * @desc Called after scale has build its ticks. This hook is called separately for each scale in the chart. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Scale} args.scale - The scale. + * @param {object} options - The plugin options. + */ + afterBuildTicks?(chart: Chart, args: { scale: Scale }, options: O): void; + /** + * @desc Called after the `chart` has been laid out. Note that this hook will not + * be called if the layout update has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterLayout?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before rendering `chart`. If any plugin returns `false`, + * the rendering is cancelled until another `render` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart rendering. + */ + beforeRender?(chart: Chart, args: { cancelable: true }, options: O): boolean | void; + /** + * @desc Called after the `chart` has been fully rendered (and animation completed). Note + * that this hook will not be called if the rendering has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterRender?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before drawing `chart` at every animation frame. If any plugin returns `false`, + * the frame drawing is cancelled untilanother `render` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart drawing. + */ + beforeDraw?(chart: Chart, args: { cancelable: true }, options: O): boolean | void; + /** + * @desc Called after the `chart` has been drawn. Note that this hook will not be called + * if the drawing has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterDraw?(chart: Chart, args: EmptyObject, options: O): void; + /** + * @desc Called before drawing the `chart` datasets. If any plugin returns `false`, + * the datasets drawing is cancelled until another `render` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart datasets drawing. + */ + beforeDatasetsDraw?(chart: Chart, args: { cancelable: true }, options: O): boolean | void; + /** + * @desc Called after the `chart` datasets have been drawn. Note that this hook + * will not be called if the datasets drawing has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterDatasetsDraw?(chart: Chart, args: EmptyObject, options: O, cancelable: false): void; + /** + * @desc Called before drawing the `chart` dataset at the given `args.index` (datasets + * are drawn in the reverse order). If any plugin returns `false`, the datasets drawing + * is cancelled until another `render` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {number} args.index - The dataset index. + * @param {object} args.meta - The dataset metadata. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart datasets drawing. + */ + beforeDatasetDraw?(chart: Chart, args: { index: number; meta: ChartMeta }, options: O): boolean | void; + /** + * @desc Called after the `chart` datasets at the given `args.index` have been drawn + * (datasets are drawn in the reverse order). Note that this hook will not be called + * if the datasets drawing has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {number} args.index - The dataset index. + * @param {object} args.meta - The dataset metadata. + * @param {object} options - The plugin options. + */ + afterDatasetDraw?(chart: Chart, args: { index: number; meta: ChartMeta }, options: O): void; + /** + * @desc Called before processing the specified `event`. If any plugin returns `false`, + * the event will be discarded. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {ChartEvent} args.event - The event object. + * @param {boolean} args.replay - True if this event is replayed from `Chart.update` + * @param {boolean} args.inChartArea - The event position is inside chartArea + * @param {object} options - The plugin options. + */ + beforeEvent?(chart: Chart, args: { event: ChartEvent, replay: boolean, cancelable: true, inChartArea: boolean }, options: O): boolean | void; + /** + * @desc Called after the `event` has been consumed. Note that this hook + * will not be called if the `event` has been previously discarded. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {ChartEvent} args.event - The event object. + * @param {boolean} args.replay - True if this event is replayed from `Chart.update` + * @param {boolean} args.inChartArea - The event position is inside chartArea + * @param {boolean} [args.changed] - Set to true if the plugin needs a render. Should only be changed to true, because this args object is passed through all plugins. + * @param {object} options - The plugin options. + */ + afterEvent?(chart: Chart, args: { event: ChartEvent, replay: boolean, changed?: boolean, cancelable: false, inChartArea: boolean }, options: O): void; + /** + * @desc Called after the chart as been resized. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {number} args.size - The new canvas display size (eq. canvas.style width & height). + * @param {object} options - The plugin options. + */ + resize?(chart: Chart, args: { size: { width: number, height: number } }, options: O): void; + /** + * Called before the chart is being destroyed. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + beforeDestroy?(chart: Chart, args: EmptyObject, options: O): void; + /** + * Called after the chart has been destroyed. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @deprecated since version 3.7.0 in favour of afterDestroy + */ + destroy?(chart: Chart, args: EmptyObject, options: O): void; + /** + * Called after the chart has been destroyed. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterDestroy?(chart: Chart, args: EmptyObject, options: O): void; + /** + * Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false). + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + * @since 3.0.0 + */ + uninstall?(chart: Chart, args: EmptyObject, options: O): void; +} + +export declare type ChartComponentLike = ChartComponent | ChartComponent[] | { [key: string]: ChartComponent } | Plugin | Plugin[]; + +/** + * Please use the module's default export which provides a singleton instance + * Note: class is exported for typedoc + */ +export interface Registry { + readonly controllers: TypedRegistry; + readonly elements: TypedRegistry; + readonly plugins: TypedRegistry; + readonly scales: TypedRegistry; + + add(...args: ChartComponentLike[]): void; + remove(...args: ChartComponentLike[]): void; + + addControllers(...args: ChartComponentLike[]): void; + addElements(...args: ChartComponentLike[]): void; + addPlugins(...args: ChartComponentLike[]): void; + addScales(...args: ChartComponentLike[]): void; + + getController(id: string): DatasetController | undefined; + getElement(id: string): Element | undefined; + getPlugin(id: string): Plugin | undefined; + getScale(id: string): Scale | undefined; +} + +export const registry: Registry; + +export interface Tick { + value: number; + label?: string | string[]; + major?: boolean; +} + +export interface CoreScaleOptions { + /** + * 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. + * @default true + */ + display: boolean | 'auto'; + /** + * Align pixel values to device pixels + */ + alignToPixels: boolean; + /** + * Reverse the scale. + * @default false + */ + reverse: boolean; + /** + * The weight used to sort the axis. Higher weights are further away from the chart area. + * @default true + */ + weight: number; + /** + * Callback called before the update process starts. + */ + beforeUpdate(axis: Scale): void; + /** + * Callback that runs before dimensions are set. + */ + beforeSetDimensions(axis: Scale): void; + /** + * Callback that runs after dimensions are set. + */ + afterSetDimensions(axis: Scale): void; + /** + * Callback that runs before data limits are determined. + */ + beforeDataLimits(axis: Scale): void; + /** + * Callback that runs after data limits are determined. + */ + afterDataLimits(axis: Scale): void; + /** + * Callback that runs before ticks are created. + */ + beforeBuildTicks(axis: Scale): void; + /** + * Callback that runs after ticks are created. Useful for filtering ticks. + */ + afterBuildTicks(axis: Scale): void; + /** + * Callback that runs before ticks are converted into strings. + */ + beforeTickToLabelConversion(axis: Scale): void; + /** + * Callback that runs after ticks are converted into strings. + */ + afterTickToLabelConversion(axis: Scale): void; + /** + * Callback that runs before tick rotation is determined. + */ + beforeCalculateLabelRotation(axis: Scale): void; + /** + * Callback that runs after tick rotation is determined. + */ + afterCalculateLabelRotation(axis: Scale): void; + /** + * Callback that runs before the scale fits to the canvas. + */ + beforeFit(axis: Scale): void; + /** + * Callback that runs after the scale fits to the canvas. + */ + afterFit(axis: Scale): void; + /** + * Callback that runs at the end of the update process. + */ + afterUpdate(axis: Scale): void; +} + +export interface Scale extends Element, LayoutItem { + readonly id: string; + readonly type: string; + readonly ctx: CanvasRenderingContext2D; + readonly chart: Chart; + + maxWidth: number; + maxHeight: number; + + paddingTop: number; + paddingBottom: number; + paddingLeft: number; + paddingRight: number; + + axis: string; + labelRotation: number; + min: number; + max: number; + ticks: Tick[]; + getMatchingVisibleMetas(type?: string): ChartMeta[]; + + drawTitle(chartArea: ChartArea): void; + drawLabels(chartArea: ChartArea): void; + drawGrid(chartArea: ChartArea): void; + + /** + * @param {number} pixel + * @return {number} + */ + getDecimalForPixel(pixel: number): number; + /** + * Utility for getting the pixel location of a percentage of scale + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param {number} decimal + * @return {number} + */ + getPixelForDecimal(decimal: number): number; + /** + * Returns the location of the tick at the given index + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param {number} index + * @return {number} + */ + getPixelForTick(index: number): number; + /** + * Used to get the label to display in the tooltip for the given value + * @param {*} value + * @return {string} + */ + getLabelForValue(value: number): string; + + /** + * Returns the grid line width at given value + */ + getLineWidthForValue(value: number): number; + + /** + * Returns the location of the given data point. Value can either be an index or a numerical value + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param {*} value + * @param {number} [index] + * @return {number} + */ + getPixelForValue(value: number, index?: number): number; + + /** + * Used to get the data value from a given pixel. This is the inverse of getPixelForValue + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param {number} pixel + * @return {*} + */ + getValueForPixel(pixel: number): number | undefined; + + getBaseValue(): number; + /** + * Returns the pixel for the minimum chart value + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @return {number} + */ + getBasePixel(): number; + + init(options: O): void; + parse(raw: unknown, index: number): unknown; + getUserBounds(): { min: number; max: number; minDefined: boolean; maxDefined: boolean }; + getMinMax(canStack: boolean): { min: number; max: number }; + getTicks(): Tick[]; + getLabels(): string[]; + beforeUpdate(): void; + configure(): void; + afterUpdate(): void; + beforeSetDimensions(): void; + setDimensions(): void; + afterSetDimensions(): void; + beforeDataLimits(): void; + determineDataLimits(): void; + afterDataLimits(): void; + beforeBuildTicks(): void; + buildTicks(): Tick[]; + afterBuildTicks(): void; + beforeTickToLabelConversion(): void; + generateTickLabels(ticks: Tick[]): void; + afterTickToLabelConversion(): void; + beforeCalculateLabelRotation(): void; + calculateLabelRotation(): void; + afterCalculateLabelRotation(): void; + beforeFit(): void; + fit(): void; + afterFit(): void; + + isFullSize(): boolean; +} +export declare class Scale { + constructor(cfg: {id: string, type: string, ctx: CanvasRenderingContext2D, chart: Chart}); +} + +export interface ScriptableScaleContext { + chart: Chart; + scale: Scale; + index: number; + tick: Tick; +} + +export interface ScriptableScalePointLabelContext { + chart: Chart; + scale: Scale; + index: number; + label: string; +} + + +export const Ticks: { + formatters: { + /** + * Formatter for value labels + * @param value the value to display + * @return {string|string[]} the label to display + */ + values(value: unknown): string | string[]; + /** + * Formatter for numeric ticks + * @param tickValue the value to be formatted + * @param index the position of the tickValue parameter in the ticks array + * @param ticks the list of ticks being converted + * @return string representation of the tickValue parameter + */ + numeric(tickValue: number, index: number, ticks: { value: number }[]): string; + /** + * Formatter for logarithmic ticks + * @param tickValue the value to be formatted + * @param index the position of the tickValue parameter in the ticks array + * @param ticks the list of ticks being converted + * @return string representation of the tickValue parameter + */ + logarithmic(tickValue: number, index: number, ticks: { value: number }[]): string; + }; +}; + +export interface TypedRegistry { + /** + * @param {ChartComponent} item + * @returns {string} The scope where items defaults were registered to. + */ + register(item: ChartComponent): string; + get(id: string): T | undefined; + unregister(item: ChartComponent): void; +} + +export interface ChartEvent { + type: + | 'contextmenu' + | 'mouseenter' + | 'mousedown' + | 'mousemove' + | 'mouseup' + | 'mouseout' + | 'click' + | 'dblclick' + | 'keydown' + | 'keypress' + | 'keyup' + | 'resize'; + native: Event | null; + x: number | null; + y: number | null; +} +export interface ChartComponent { + id: string; + defaults?: AnyObject; + defaultRoutes?: { [property: string]: string }; + + beforeRegister?(): void; + afterRegister?(): void; + beforeUnregister?(): void; + afterUnregister?(): void; +} + +export interface CoreInteractionOptions { + /** + * Sets which elements appear in the tooltip. See Interaction Modes for details. + * @default 'nearest' + */ + mode: InteractionMode; + /** + * if true, the hover mode only applies when the mouse position intersects an item on the chart. + * @default true + */ + intersect: boolean; + + /** + * 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. + */ + axis: 'x' | 'y' | 'xy' | 'r'; +} + +export interface CoreChartOptions extends ParsingOptions, AnimationOptions { + + datasets: { + [key in ChartType]: ChartTypeRegistry[key]['datasetOptions'] + } + + /** + * The base axis of the chart. 'x' for vertical charts and 'y' for horizontal charts. + * @default 'x' + */ + indexAxis: 'x' | 'y'; + + /** + * base color + * @see Defaults.color + */ + color: Scriptable>; + /** + * base background color + * @see Defaults.backgroundColor + */ + backgroundColor: Scriptable>; + /** + * base border color + * @see Defaults.borderColor + */ + borderColor: Scriptable>; + /** + * base font + * @see Defaults.font + */ + font: Partial; + /** + * Resizes the chart canvas when its container does (important note...). + * @default true + */ + responsive: boolean; + /** + * Maintain the original canvas aspect ratio (width / height) when resizing. + * @default true + */ + maintainAspectRatio: boolean; + /** + * Delay the resize update by give amount of milliseconds. This can ease the resize process by debouncing update of the elements. + * @default 0 + */ + resizeDelay: number; + + /** + * 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. + * @default 2 + */ + aspectRatio: number; + + /** + * Locale used for number formatting (using `Intl.NumberFormat`). + * @default user's browser setting + */ + locale: string; + + /** + * Called when a resize occurs. Gets passed two arguments: the chart instance and the new size. + */ + onResize(chart: Chart, size: { width: number; height: number }): void; + + /** + * Override the window's default devicePixelRatio. + * @default window.devicePixelRatio + */ + devicePixelRatio: number; + + interaction: CoreInteractionOptions; + + hover: CoreInteractionOptions; + + /** + * The events option defines the browser events that the chart should listen to for tooltips and hovering. + * @default ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'] + */ + events: (keyof HTMLElementEventMap)[] + + /** + * Called when any of the events fire. Passed the event, an array of active elements (bars, points, etc), and the chart. + */ + onHover(event: ChartEvent, elements: ActiveElement[], chart: Chart): void; + + /** + * Called if the event is of type 'mouseup' or 'click'. Passed the event, an array of active elements, and the chart. + */ + onClick(event: ChartEvent, elements: ActiveElement[], chart: Chart): void; + + layout: Partial<{ + autoPadding: boolean; + padding: Scriptable, ScriptableContext>; + }>; +} + +export type 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'; + +export type AnimationSpec = { + /** + * The number of milliseconds an animation takes. + * @default 1000 + */ + duration?: Scriptable>; + /** + * Easing function to use + * @default 'easeOutQuart' + */ + easing?: Scriptable>; + + /** + * Delay before starting the animations. + * @default 0 + */ + delay?: Scriptable>; + + /** + * If set to true, the animations loop endlessly. + * @default false + */ + loop?: Scriptable>; +} + +export type AnimationsSpec = { + [name: string]: false | AnimationSpec & { + properties: string[]; + + /** + * 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. + */ + type: 'color' | 'number' | 'boolean'; + + fn: (from: T, to: T, factor: number) => T; + + /** + * Start value for the animation. Current value is used when undefined + */ + from: Scriptable>; + /** + * + */ + to: Scriptable>; + } +} + +export type TransitionSpec = { + animation: AnimationSpec; + animations: AnimationsSpec; +} + +export type TransitionsSpec = { + [mode: string]: TransitionSpec +} + +export type AnimationOptions = { + animation: false | AnimationSpec & { + /** + * Callback called on each step of an animation. + */ + onProgress?: (this: Chart, event: AnimationEvent) => void; + /** + * Callback called when all animations are completed. + */ + onComplete?: (this: Chart, event: AnimationEvent) => void; + }; + animations: AnimationsSpec; + transitions: TransitionsSpec; +}; + +export interface FontSpec { + /** + * Default font family for all text, follows CSS font-family options. + * @default "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" + */ + family: string; + /** + * Default font size (in px) for text. Does not apply to radialLinear scale point labels. + * @default 12 + */ + size: number; + /** + * 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) + * @default 'normal' + */ + style: 'normal' | 'italic' | 'oblique' | 'initial' | 'inherit'; + /** + * Default font weight (boldness). (see MDN). + */ + weight: string | null; + /** + * Height of an individual line of text (see MDN). + * @default 1.2 + */ + lineHeight: number | string; +} + +export type TextAlign = 'left' | 'center' | 'right'; +export type Align = 'start' | 'center' | 'end'; + +export interface VisualElement { + draw(ctx: CanvasRenderingContext2D, area?: ChartArea): void; + inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean): boolean; + inXRange(mouseX: number, useFinalPosition?: boolean): boolean; + inYRange(mouseY: number, useFinalPosition?: boolean): boolean; + getCenterPoint(useFinalPosition?: boolean): { x: number; y: number }; + getRange?(axis: 'x' | 'y'): number; +} + +export interface CommonElementOptions { + borderWidth: number; + borderColor: Color; + backgroundColor: Color; +} + +export interface CommonHoverOptions { + hoverBorderWidth: number; + hoverBorderColor: Color; + hoverBackgroundColor: Color; +} + +export interface Segment { + start: number; + end: number; + loop: boolean; +} + +export interface ArcProps { + x: number; + y: number; + startAngle: number; + endAngle: number; + innerRadius: number; + outerRadius: number; + circumference: number; +} + +export interface ArcBorderRadius { + outerStart: number; + outerEnd: number; + innerStart: number; + innerEnd: number; +} + +export interface ArcOptions extends CommonElementOptions { + /** + * Arc stroke alignment. + */ + borderAlign: 'center' | 'inner'; + + /** + * Line join style. See MDN. Default is 'round' when `borderAlign` is 'inner', else 'bevel'. + */ + borderJoinStyle: CanvasLineJoin; + + /** + * Sets the border radius for arcs + * @default 0 + */ + borderRadius: number | ArcBorderRadius; + + /** + * Arc offset (in pixels). + */ + offset: number; +} + +export interface ArcHoverOptions extends CommonHoverOptions { + hoverOffset: number; +} + +export interface ArcElement + extends Element, + VisualElement {} + +export const ArcElement: ChartComponent & { + prototype: ArcElement; + new (cfg: AnyObject): ArcElement; +}; + +export interface LineProps { + points: Point[] +} + +export interface LineOptions extends CommonElementOptions { + /** + * Line cap style. See MDN. + * @default 'butt' + */ + borderCapStyle: CanvasLineCap; + /** + * Line dash. See MDN. + * @default [] + */ + borderDash: number[]; + /** + * Line dash offset. See MDN. + * @default 0.0 + */ + borderDashOffset: number; + /** + * Line join style. See MDN. + * @default 'miter' + */ + borderJoinStyle: CanvasLineJoin; + /** + * true to keep Bézier control inside the chart, false for no restriction. + * @default true + */ + capBezierPoints: boolean; + /** + * Interpolation mode to apply. + * @default 'default' + */ + cubicInterpolationMode: 'default' | 'monotone'; + /** + * Bézier curve tension (0 for no Bézier curves). + * @default 0 + */ + tension: number; + /** + * true to show the line as a stepped line (tension will be ignored). + * @default false + */ + stepped: 'before' | 'after' | 'middle' | boolean; + /** + * 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 + */ + fill: FillTarget | ComplexFillTarget; + /** + * 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. + */ + spanGaps: boolean | number; + + segment: { + backgroundColor: Scriptable, + borderColor: Scriptable, + borderCapStyle: Scriptable; + borderDash: Scriptable; + borderDashOffset: Scriptable; + borderJoinStyle: Scriptable; + borderWidth: Scriptable; + }; +} + +export interface LineHoverOptions extends CommonHoverOptions { + hoverBorderCapStyle: CanvasLineCap; + hoverBorderDash: number[]; + hoverBorderDashOffset: number; + hoverBorderJoinStyle: CanvasLineJoin; +} + +export interface LineElement + extends Element, + VisualElement { + updateControlPoints(chartArea: ChartArea, indexAxis?: 'x' | 'y'): void; + points: Point[]; + readonly segments: Segment[]; + first(): Point | false; + last(): Point | false; + interpolate(point: Point, property: 'x' | 'y'): undefined | Point | Point[]; + pathSegment(ctx: CanvasRenderingContext2D, segment: Segment, params: AnyObject): undefined | boolean; + path(ctx: CanvasRenderingContext2D): boolean; +} + +export const LineElement: ChartComponent & { + prototype: LineElement; + new (cfg: AnyObject): LineElement; +}; + +export interface PointProps { + x: number; + y: number; +} + +export type PointStyle = + | 'circle' + | 'cross' + | 'crossRot' + | 'dash' + | 'line' + | 'rect' + | 'rectRounded' + | 'rectRot' + | 'star' + | 'triangle' + | HTMLImageElement + | HTMLCanvasElement; + +export interface PointOptions extends CommonElementOptions { + /** + * Point radius + * @default 3 + */ + radius: number; + /** + * Extra radius added to point radius for hit detection. + * @default 1 + */ + hitRadius: number; + /** + * Point style + * @default 'circle; + */ + pointStyle: PointStyle; + /** + * Point rotation (in degrees). + * @default 0 + */ + rotation: number; + /** + * Draw the active elements over the other elements of the dataset, + * @default true + */ + drawActiveElementsOnTop: boolean; +} + +export interface PointHoverOptions extends CommonHoverOptions { + /** + * Point radius when hovered. + * @default 4 + */ + hoverRadius: number; +} + +export interface PointPrefixedOptions { + /** + * The fill color for points. + */ + pointBackgroundColor: Color; + /** + * The border color for points. + */ + pointBorderColor: Color; + /** + * The width of the point border in pixels. + */ + pointBorderWidth: number; + /** + * The pixel size of the non-displayed point that reacts to mouse events. + */ + pointHitRadius: number; + /** + * The radius of the point shape. If set to 0, the point is not rendered. + */ + pointRadius: number; + /** + * The rotation of the point in degrees. + */ + pointRotation: number; + /** + * Style of the point. + */ + pointStyle: PointStyle; +} + +export interface PointPrefixedHoverOptions { + /** + * Point background color when hovered. + */ + pointHoverBackgroundColor: Color; + /** + * Point border color when hovered. + */ + pointHoverBorderColor: Color; + /** + * Border width of point when hovered. + */ + pointHoverBorderWidth: number; + /** + * The radius of the point when hovered. + */ + pointHoverRadius: number; +} + +export interface PointElement + extends Element, + VisualElement { + readonly skip: boolean; + readonly parsed: CartesianParsedData; +} + +export const PointElement: ChartComponent & { + prototype: PointElement; + new (cfg: AnyObject): PointElement; +}; + +export interface BarProps { + x: number; + y: number; + base: number; + horizontal: boolean; + width: number; + height: number; +} + +export interface BarOptions extends Omit { + /** + * The base value for the bar in data units along the value axis. + */ + base: number; + + /** + * Skipped (excluded) border: 'start', 'end', 'left', 'right', 'bottom', 'top' or false (none). + * @default 'start' + */ + borderSkipped: 'start' | 'end' | 'left' | 'right' | 'bottom' | 'top' | false; + + /** + * Border radius + * @default 0 + */ + borderRadius: number | BorderRadius; + + /** + * Amount to inflate the rectangle(s). This can be used to hide artifacts between bars. + * Unit is pixels. 'auto' translates to 0.33 pixels when barPercentage * categoryPercentage is 1, else 0. + * @default 'auto' + */ + inflateAmount: number | 'auto'; + + /** + * Width of the border, number for all sides, object to specify width for each side specifically + * @default 0 + */ + borderWidth: number | { top?: number, right?: number, bottom?: number, left?: number }; +} + +export interface BorderRadius { + topLeft: number; + topRight: number; + bottomLeft: number; + bottomRight: number; +} + +export interface BarHoverOptions extends CommonHoverOptions { + hoverBorderRadius: number | BorderRadius; +} + +export interface BarElement< + T extends BarProps = BarProps, + O extends BarOptions = BarOptions +> extends Element, VisualElement {} + +export const BarElement: ChartComponent & { + prototype: BarElement; + new (cfg: AnyObject): BarElement; +}; + +export interface ElementOptionsByType { + arc: ScriptableAndArrayOptions>; + bar: ScriptableAndArrayOptions>; + line: ScriptableAndArrayOptions>; + point: ScriptableAndArrayOptions>; +} + +export type ElementChartOptions = { + elements: ElementOptionsByType +}; + +export class BasePlatform { + /** + * Called at chart construction time, returns a context2d instance implementing + * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}. + * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific) + * @param options - The chart options + */ + acquireContext( + canvas: HTMLCanvasElement, + options?: CanvasRenderingContext2DSettings + ): CanvasRenderingContext2D | null; + /** + * Called at chart destruction time, releases any resources associated to the context + * previously returned by the acquireContext() method. + * @param {CanvasRenderingContext2D} context - The context2d instance + * @returns {boolean} true if the method succeeded, else false + */ + releaseContext(context: CanvasRenderingContext2D): boolean; + /** + * Registers the specified listener on the given chart. + * @param {Chart} chart - Chart from which to listen for event + * @param {string} type - The ({@link ChartEvent}) type to listen for + * @param listener - Receives a notification (an object that implements + * the {@link ChartEvent} interface) when an event of the specified type occurs. + */ + addEventListener(chart: Chart, type: string, listener: (e: ChartEvent) => void): void; + /** + * Removes the specified listener previously registered with addEventListener. + * @param {Chart} chart - Chart from which to remove the listener + * @param {string} type - The ({@link ChartEvent}) type to remove + * @param listener - The listener function to remove from the event target. + */ + removeEventListener(chart: Chart, type: string, listener: (e: ChartEvent) => void): void; + /** + * @returns {number} the current devicePixelRatio of the device this platform is connected to. + */ + getDevicePixelRatio(): number; + /** + * @param {HTMLCanvasElement} canvas - The canvas for which to calculate the maximum size + * @param {number} [width] - Parent element's content width + * @param {number} [height] - Parent element's content height + * @param {number} [aspectRatio] - The aspect ratio to maintain + * @returns { width: number, height: number } the maximum size available. + */ + getMaximumSize(canvas: HTMLCanvasElement, width?: number, height?: number, aspectRatio?: number): { width: number, height: number }; + /** + * @param {HTMLCanvasElement} canvas + * @returns {boolean} true if the canvas is attached to the platform, false if not. + */ + isAttached(canvas: HTMLCanvasElement): boolean; + /** + * Updates config with platform specific requirements + * @param {ChartConfiguration} config + */ + updateConfig(config: ChartConfiguration): void; +} + +export class BasicPlatform extends BasePlatform {} +export class DomPlatform extends BasePlatform {} + +export const Decimation: Plugin; + +export const enum DecimationAlgorithm { + lttb = 'lttb', + minmax = 'min-max', +} +interface BaseDecimationOptions { + enabled: boolean; + threshold?: number; +} + +interface LttbDecimationOptions extends BaseDecimationOptions { + algorithm: DecimationAlgorithm.lttb | 'lttb'; + samples?: number; +} + +interface MinMaxDecimationOptions extends BaseDecimationOptions { + algorithm: DecimationAlgorithm.minmax | 'min-max'; +} + +export type DecimationOptions = LttbDecimationOptions | MinMaxDecimationOptions; + +export const Filler: Plugin; +export interface FillerOptions { + drawTime: 'beforeDatasetDraw' | 'beforeDatasetsDraw'; + propagate: boolean; +} + +export type FillTarget = number | string | { value: number } | 'start' | 'end' | 'origin' | 'stack' | 'shape' | boolean; + +export interface ComplexFillTarget { + /** + * The accepted values are the same as the filling mode values, so you may use absolute and relative dataset indexes and/or boundaries. + */ + target: FillTarget; + /** + * If no color is set, the default color will be the background color of the chart. + */ + above: Color; + /** + * Same as the above. + */ + below: Color; +} + +export interface FillerControllerDatasetOptions { + /** + * 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 + */ + fill: FillTarget | ComplexFillTarget; +} + +export const Legend: Plugin; + +export interface LegendItem { + /** + * Label that will be displayed + */ + text: string; + + /** + * Border radius of the legend box + * @since 3.1.0 + */ + borderRadius?: number | BorderRadius; + + /** + * Index of the associated dataset + */ + datasetIndex: number; + + /** + * Fill style of the legend box + */ + fillStyle?: Color; + + /** + * Font color for the text + * Defaults to LegendOptions.labels.color + */ + fontColor?: Color; + + /** + * If true, this item represents a hidden dataset. Label will be rendered with a strike-through effect + */ + hidden?: boolean; + + /** + * For box border. + * @see https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap + */ + lineCap?: CanvasLineCap; + + /** + * For box border. + * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash + */ + lineDash?: number[]; + + /** + * For box border. + * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset + */ + lineDashOffset?: number; + + /** + * For box border. + * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin + */ + lineJoin?: CanvasLineJoin; + + /** + * Width of box border + */ + lineWidth?: number; + + /** + * Stroke style of the legend box + */ + strokeStyle?: Color; + + /** + * Point style of the legend box (only used if usePointStyle is true) + */ + pointStyle?: PointStyle; + + /** + * Rotation of the point in degrees (only used if usePointStyle is true) + */ + rotation?: number; + + /** + * Text alignment + */ + textAlign?: TextAlign; +} + +export interface LegendElement extends Element>, LayoutItem { + chart: Chart; + ctx: CanvasRenderingContext2D; + legendItems?: LegendItem[]; + options: LegendOptions; +} + +export interface LegendOptions { + /** + * Is the legend shown? + * @default true + */ + display: boolean; + /** + * Position of the legend. + * @default 'top' + */ + position: LayoutPosition; + /** + * Alignment of the legend. + * @default 'center' + */ + align: Align; + /** + * Maximum height of the legend, in pixels + */ + maxHeight: number; + /** + * Maximum width of the legend, in pixels + */ + maxWidth: number; + /** + * 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. + * @default true + */ + fullSize: boolean; + /** + * Legend will show datasets in reverse order. + * @default false + */ + reverse: boolean; + /** + * A callback that is called when a click event is registered on a label item. + */ + onClick(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + /** + * A callback that is called when a 'mousemove' event is registered on top of a label item + */ + onHover(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + /** + * A callback that is called when a 'mousemove' event is registered outside of a previously hovered label item. + */ + onLeave(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + + labels: { + /** + * Width of colored box. + * @default 40 + */ + boxWidth: number; + /** + * Height of the coloured box. + * @default fontSize + */ + boxHeight: number; + /** + * Padding between the color box and the text + * @default 1 + */ + boxPadding: number; + /** + * Color of label + * @see Defaults.color + */ + color: Color; + /** + * Font of label + * @see Defaults.font + */ + font: FontSpec; + /** + * Padding between rows of colored boxes. + * @default 10 + */ + padding: number; + /** + * Generates legend items for each thing in the legend. Default implementation returns the text + styling for the color box. See Legend Item for details. + */ + generateLabels(chart: Chart): LegendItem[]; + + /** + * Filters legend items out of the legend. Receives 2 parameters, a Legend Item and the chart data + */ + filter(item: LegendItem, data: ChartData): boolean; + + /** + * Sorts the legend items + */ + sort(a: LegendItem, b: LegendItem, data: ChartData): number; + + /** + * Override point style for the legend. Only applies if usePointStyle is true + */ + pointStyle: PointStyle; + + /** + * Text alignment + */ + textAlign?: TextAlign; + + /** + * Label style will match corresponding point style (size is based on the minimum value between boxWidth and font.size). + * @default false + */ + usePointStyle: boolean; + }; + /** + * true for rendering the legends from right to left. + */ + rtl: boolean; + /** + * This will force the text direction 'rtl' or 'ltr' on the canvas for rendering the legend, regardless of the css specified on the canvas + * @default canvas' default + */ + textDirection: string; + + title: { + /** + * Is the legend title displayed. + * @default false + */ + display: boolean; + /** + * Color of title + * @see Defaults.color + */ + color: Color; + /** + * see Fonts + */ + font: FontSpec; + position: 'center' | 'start' | 'end'; + padding?: number | ChartArea; + /** + * The string title. + */ + text: string; + }; +} + +export const SubTitle: Plugin; +export const Title: Plugin; + +export interface TitleOptions { + /** + * Alignment of the title. + * @default 'center' + */ + align: Align; + /** + * Is the title shown? + * @default false + */ + display: boolean; + /** + * Position of title + * @default 'top' + */ + position: 'top' | 'left' | 'bottom' | 'right'; + /** + * Color of text + * @see Defaults.color + */ + color: Color; + font: FontSpec; + + /** + * 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 + * chart area + * @default true + */ + fullSize: boolean; + /** + * 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. + */ + padding: number | { top: number; bottom: number }; + /** + * Title text to display. If specified as an array, text is rendered on multiple lines. + */ + text: string | string[]; +} + +export type TooltipXAlignment = 'left' | 'center' | 'right'; +export type TooltipYAlignment = 'top' | 'center' | 'bottom'; +export interface TooltipLabelStyle { + borderColor: Color; + backgroundColor: Color; + + /** + * Width of border line + * @since 3.1.0 + */ + borderWidth?: number; + + /** + * Border dash + * @since 3.1.0 + */ + borderDash?: [number, number]; + + /** + * Border dash offset + * @since 3.1.0 + */ + borderDashOffset?: number; + + /** + * borderRadius + * @since 3.1.0 + */ + borderRadius?: number | BorderRadius; +} +export interface TooltipModel extends Element> { + readonly chart: Chart; + + // The items that we are rendering in the tooltip. See Tooltip Item Interface section + dataPoints: TooltipItem[]; + + // Positioning + xAlign: TooltipXAlignment; + yAlign: TooltipYAlignment; + + // X and Y properties are the top left of the tooltip + x: number; + y: number; + width: number; + height: number; + // Where the tooltip points to + caretX: number; + caretY: number; + + // Body + // The body lines that need to be rendered + // Each object contains 3 parameters + // before: string[] // lines of text before the line with the color square + // lines: string[]; // lines of text to render as the main item with color square + // after: string[]; // lines of text to render after the main lines + body: { before: string[]; lines: string[]; after: string[] }[]; + // lines of text that appear after the title but before the body + beforeBody: string[]; + // line of text that appear after the body and before the footer + afterBody: string[]; + + // Title + // lines of text that form the title + title: string[]; + + // Footer + // lines of text that form the footer + footer: string[]; + + // Styles to render for each item in body[]. This is the styling of the squares in the tooltip + labelColors: TooltipLabelStyle[]; + labelTextColors: Color[]; + labelPointStyles: { pointStyle: PointStyle; rotation: number }[]; + + // 0 opacity is a hidden tooltip + opacity: number; + + // tooltip options + options: TooltipOptions; + + getActiveElements(): ActiveElement[]; + setActiveElements(active: ActiveDataPoint[], eventPosition: Point): void; +} + +export interface TooltipPosition { + x: number; + y: number; + xAlign?: TooltipXAlignment; + yAlign?: TooltipYAlignment; +} + +export type TooltipPositionerFunction = ( + this: TooltipModel, + items: readonly ActiveElement[], + eventPosition: Point +) => TooltipPosition | false; + +export interface TooltipPositionerMap { + average: TooltipPositionerFunction; + nearest: TooltipPositionerFunction; +} + +export type TooltipPositioner = keyof TooltipPositionerMap; + +export interface Tooltip extends Plugin { + readonly positioners: TooltipPositionerMap; +} + +export const Tooltip: Tooltip; + +export interface TooltipCallbacks< + TType extends ChartType, + Model = TooltipModel, + Item = TooltipItem> { + + beforeTitle(this: Model, tooltipItems: Item[]): string | string[]; + title(this: Model, tooltipItems: Item[]): string | string[]; + afterTitle(this: Model, tooltipItems: Item[]): string | string[]; + + beforeBody(this: Model, tooltipItems: Item[]): string | string[]; + afterBody(this: Model, tooltipItems: Item[]): string | string[]; + + beforeLabel(this: Model, tooltipItem: Item): string | string[]; + label(this: Model, tooltipItem: Item): string | string[]; + afterLabel(this: Model, tooltipItem: Item): string | string[]; + + labelColor(this: Model, tooltipItem: Item): TooltipLabelStyle; + labelTextColor(this: Model, tooltipItem: Item): Color; + labelPointStyle(this: Model, tooltipItem: Item): { pointStyle: PointStyle; rotation: number }; + + beforeFooter(this: Model, tooltipItems: Item[]): string | string[]; + footer(this: Model, tooltipItems: Item[]): string | string[]; + afterFooter(this: Model, tooltipItems: Item[]): string | string[]; +} + +export interface ExtendedPlugin< + TType extends ChartType, + O = AnyObject, + Model = TooltipModel> { + /** + * @desc Called before drawing the `tooltip`. If any plugin returns `false`, + * the tooltip drawing is cancelled until another `render` is triggered. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Tooltip} args.tooltip - The tooltip. + * @param {object} options - The plugin options. + * @returns {boolean} `false` to cancel the chart tooltip drawing. + */ + beforeTooltipDraw?(chart: Chart, args: { tooltip: Model }, options: O): boolean | void; + /** + * @desc Called after drawing the `tooltip`. Note that this hook will not + * be called if the tooltip drawing has been previously cancelled. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {Tooltip} args.tooltip - The tooltip. + * @param {object} options - The plugin options. + */ + afterTooltipDraw?(chart: Chart, args: { tooltip: Model }, options: O): void; +} + +export interface ScriptableTooltipContext { + chart: UnionToIntersection>; + tooltip: UnionToIntersection>; + tooltipItems: TooltipItem[]; +} + +export interface TooltipOptions extends CoreInteractionOptions { + /** + * Are on-canvas tooltips enabled? + * @default true + */ + enabled: Scriptable>; + /** + * See external tooltip section. + */ + external(this: TooltipModel, args: { chart: Chart; tooltip: TooltipModel }): void; + /** + * The mode for positioning the tooltip + */ + position: Scriptable> + + /** + * Override the tooltip alignment calculations + */ + xAlign: Scriptable>; + yAlign: Scriptable>; + + /** + * Sort tooltip items. + */ + itemSort: (a: TooltipItem, b: TooltipItem, data: ChartData) => number; + + filter: (e: TooltipItem, index: number, array: TooltipItem[], data: ChartData) => boolean; + + /** + * Background color of the tooltip. + * @default 'rgba(0, 0, 0, 0.8)' + */ + backgroundColor: Scriptable>; + /** + * Padding between the color box and the text. + * @default 1 + */ + boxPadding: number; + /** + * Color of title + * @default '#fff' + */ + titleColor: Scriptable>; + /** + * See Fonts + * @default {weight: 'bold'} + */ + titleFont: Scriptable>; + /** + * Spacing to add to top and bottom of each title line. + * @default 2 + */ + titleSpacing: Scriptable>; + /** + * Margin to add on bottom of title section. + * @default 6 + */ + titleMarginBottom: Scriptable>; + /** + * Horizontal alignment of the title text lines. + * @default 'left' + */ + titleAlign: Scriptable>; + /** + * Spacing to add to top and bottom of each tooltip item. + * @default 2 + */ + bodySpacing: Scriptable>; + /** + * Color of body + * @default '#fff' + */ + bodyColor: Scriptable>; + /** + * See Fonts. + * @default {} + */ + bodyFont: Scriptable>; + /** + * Horizontal alignment of the body text lines. + * @default 'left' + */ + bodyAlign: Scriptable>; + /** + * Spacing to add to top and bottom of each footer line. + * @default 2 + */ + footerSpacing: Scriptable>; + /** + * Margin to add before drawing the footer. + * @default 6 + */ + footerMarginTop: Scriptable>; + /** + * Color of footer + * @default '#fff' + */ + footerColor: Scriptable>; + /** + * See Fonts + * @default {weight: 'bold'} + */ + footerFont: Scriptable>; + /** + * Horizontal alignment of the footer text lines. + * @default 'left' + */ + footerAlign: Scriptable>; + /** + * Padding to add to the tooltip + * @default 6 + */ + padding: Scriptable>; + /** + * Extra distance to move the end of the tooltip arrow away from the tooltip point. + * @default 2 + */ + caretPadding: Scriptable>; + /** + * Size, in px, of the tooltip arrow. + * @default 5 + */ + caretSize: Scriptable>; + /** + * Radius of tooltip corner curves. + * @default 6 + */ + cornerRadius: Scriptable>; + /** + * Color to draw behind the colored boxes when multiple items are in the tooltip. + * @default '#fff' + */ + multiKeyBackground: Scriptable>; + /** + * If true, color boxes are shown in the tooltip. + * @default true + */ + displayColors: Scriptable>; + /** + * Width of the color box if displayColors is true. + * @default bodyFont.size + */ + boxWidth: Scriptable>; + /** + * Height of the color box if displayColors is true. + * @default bodyFont.size + */ + boxHeight: Scriptable>; + /** + * 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) + * @default false + */ + usePointStyle: Scriptable>; + /** + * Color of the border. + * @default 'rgba(0, 0, 0, 0)' + */ + borderColor: Scriptable>; + /** + * Size of the border. + * @default 0 + */ + borderWidth: Scriptable>; + /** + * true for rendering the legends from right to left. + */ + rtl: Scriptable>; + + /** + * This will force the text direction 'rtl' or 'ltr on the canvas for rendering the tooltips, regardless of the css specified on the canvas + * @default canvas's default + */ + textDirection: Scriptable>; + + animation: AnimationSpec; + animations: AnimationsSpec; + callbacks: TooltipCallbacks; +} + +export interface TooltipItem { + /** + * The chart the tooltip is being shown on + */ + chart: Chart; + + /** + * Label for the tooltip + */ + label: string; + + /** + * Parsed data values for the given `dataIndex` and `datasetIndex` + */ + parsed: UnionToIntersection>; + + /** + * Raw data values for the given `dataIndex` and `datasetIndex` + */ + raw: unknown; + + /** + * Formatted value for the tooltip + */ + formattedValue: string; + + /** + * The dataset the item comes from + */ + dataset: UnionToIntersection>; + + /** + * Index of the dataset the item comes from + */ + datasetIndex: number; + + /** + * Index of this data item in the dataset + */ + dataIndex: number; + + /** + * The chart element (point, arc, bar, etc.) for this tooltip item + */ + element: Element; +} + +export interface PluginOptionsByType { + decimation: DecimationOptions; + filler: FillerOptions; + legend: LegendOptions; + subtitle: TitleOptions; + title: TitleOptions; + tooltip: TooltipOptions; +} +export interface PluginChartOptions { + plugins: PluginOptionsByType; +} + +export interface GridLineOptions { + /** + * @default true + */ + display: boolean; + borderColor: Color; + borderWidth: number; + /** + * @default false + */ + circular: boolean; + /** + * @default 'rgba(0, 0, 0, 0.1)' + */ + color: ScriptableAndArray; + /** + * @default [] + */ + borderDash: number[]; + /** + * @default 0 + */ + borderDashOffset: Scriptable; + /** + * @default 1 + */ + lineWidth: ScriptableAndArray; + + /** + * @default true + */ + drawBorder: boolean; + /** + * @default true + */ + drawOnChartArea: boolean; + /** + * @default true + */ + drawTicks: boolean; + /** + * @default [] + */ + tickBorderDash: number[]; + /** + * @default 0 + */ + tickBorderDashOffset: Scriptable; + /** + * @default 'rgba(0, 0, 0, 0.1)' + */ + tickColor: ScriptableAndArray; + /** + * @default 10 + */ + tickLength: number; + /** + * @default 1 + */ + tickWidth: number; + /** + * @default false + */ + offset: boolean; + /** + * @default 0 + */ + z: number; +} + +export interface TickOptions { + /** + * Color of label backdrops. + * @default 'rgba(255, 255, 255, 0.75)' + */ + backdropColor: Scriptable; + /** + * Padding of tick backdrop. + * @default 2 + */ + backdropPadding: number | ChartArea; + + /** + * Returns the string representation of the tick value as it should be displayed on the chart. See callback. + */ + callback: (this: Scale, tickValue: number | string, index: number, ticks: Tick[]) => string | string[] | number | number[] | null | undefined; + /** + * If true, show tick labels. + * @default true + */ + display: boolean; + /** + * Color of tick + * @see Defaults.color + */ + color: ScriptableAndArray; + /** + * see Fonts + */ + font: Scriptable; + /** + * Sets the offset of the tick labels from the axis + */ + padding: number; + /** + * If true, draw a background behind the tick labels. + * @default false + */ + showLabelBackdrop: Scriptable; + /** + * The color of the stroke around the text. + * @default undefined + */ + textStrokeColor: Scriptable; + /** + * Stroke width around the text. + * @default 0 + */ + textStrokeWidth: Scriptable; + /** + * z-index of tick layer. Useful when ticks are drawn on chart area. Values <= 0 are drawn under datasets, > 0 on top. + * @default 0 + */ + z: number; + + major: { + /** + * 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 + */ + enabled: boolean; + }; +} + +export interface CartesianScaleOptions extends CoreScaleOptions { + /** + * Scale boundary strategy (bypassed by min/max time options) + * - `data`: make sure data are fully visible, ticks outside are removed + * - `ticks`: make sure ticks are fully visible, data outside are truncated + * @since 2.7.0 + * @default 'ticks' + */ + bounds: 'ticks' | 'data'; + + /** + * Position of the axis. + */ + position: 'left' | 'top' | 'right' | 'bottom' | 'center' | { [scale: string]: number }; + + /** + * Stack group. Axes at the same `position` with same `stack` are stacked. + */ + stack?: string; + + /** + * Weight of the scale in stack group. Used to determine the amount of allocated space for the scale within the group. + * @default 1 + */ + stackWeight?: number; + + /** + * 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'. + */ + axis: 'x' | 'y'; + + /** + * User defined minimum value for the scale, overrides minimum value from data. + */ + min: number; + + /** + * User defined maximum value for the scale, overrides maximum value from data. + */ + max: number; + + /** + * 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. + * @default false + */ + offset: boolean; + + grid: GridLineOptions; + + /** Options for the scale title. */ + title: { + /** If true, displays the axis title. */ + display: boolean; + /** Alignment of the axis title. */ + align: Align; + /** The text for the title, e.g. "# of People" or "Response Choices". */ + text: string | string[]; + /** Color of the axis label. */ + color: Color; + /** Information about the axis title font. */ + font: FontSpec; + /** Padding to apply around scale labels. */ + padding: number | { + /** Padding on the (relative) top side of this axis label. */ + top: number; + /** Padding on the (relative) bottom side of this axis label. */ + bottom: number; + /** This is a shorthand for defining top/bottom to the same values. */ + y: number; + }; + }; + + /** + * If true, data will be comprised between datasets of data + * @default false + */ + stacked?: boolean | 'single'; + + ticks: TickOptions & { + /** + * 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. + * @default ticks.length + */ + sampleSize: number; + /** + * The label alignment + * @default 'center' + */ + align: Align; + /** + * 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. + * @default true + */ + autoSkip: boolean; + /** + * Padding between the ticks on the horizontal axis when autoSkip is enabled. + * @default 0 + */ + autoSkipPadding: number; + + /** + * How is the label positioned perpendicular to the axis direction. + * This only applies when the rotation is 0 and the axis position is one of "top", "left", "right", or "bottom" + * @default 'near' + */ + crossAlign: 'near' | 'center' | 'far'; + + /** + * Should the defined `min` and `max` values be presented as ticks even if they are not "nice". + * @default: true + */ + includeBounds: boolean; + + /** + * 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 + * @default 0 + */ + labelOffset: number; + + /** + * Minimum rotation for tick labels. Note: Only applicable to horizontal scales. + * @default 0 + */ + minRotation: number; + /** + * Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary. Note: Only applicable to horizontal scales. + * @default 50 + */ + maxRotation: number; + /** + * Flips tick labels around axis, displaying the labels inside the chart instead of outside. Note: Only applicable to vertical scales. + * @default false + */ + mirror: boolean; + /** + * 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. + * @default 0 + */ + padding: number; + /** + * Maximum number of ticks and gridlines to show. + * @default 11 + */ + maxTicksLimit: number; + }; +} + +export type CategoryScaleOptions = Omit & { + min: string | number; + max: string | number; + labels: string[] | string[][]; +}; + +export type CategoryScale = Scale +export const CategoryScale: ChartComponent & { + prototype: CategoryScale; + new (cfg: AnyObject): CategoryScale; +}; + +export type LinearScaleOptions = CartesianScaleOptions & { + + /** + * if true, scale will include 0 if it is not already included. + * @default true + */ + beginAtZero: boolean; + /** + * Adjustment used when calculating the maximum data value. + */ + suggestedMin?: number; + /** + * Adjustment used when calculating the minimum data value. + */ + suggestedMax?: number; + /** + * Percentage (string ending with %) or amount (number) for added room in the scale range above and below data. + */ + grace?: string | number; + + ticks: { + /** + * The Intl.NumberFormat options used by the default label formatter + */ + format: Intl.NumberFormatOptions; + + /** + * if defined and stepSize is not specified, the step size will be rounded to this many decimal places. + */ + precision: number; + + /** + * User defined fixed step size for the scale + */ + stepSize: number; + + /** + * User defined count of ticks + */ + count: number; + }; +}; + +export type LinearScale = Scale +export const LinearScale: ChartComponent & { + prototype: LinearScale; + new (cfg: AnyObject): LinearScale; +}; + +export type LogarithmicScaleOptions = CartesianScaleOptions & { + /** + * Adjustment used when calculating the maximum data value. + */ + suggestedMin?: number; + /** + * Adjustment used when calculating the minimum data value. + */ + suggestedMax?: number; + + ticks: { + /** + * The Intl.NumberFormat options used by the default label formatter + */ + format: Intl.NumberFormatOptions; + }; +}; + +export type LogarithmicScale = Scale +export const LogarithmicScale: ChartComponent & { + prototype: LogarithmicScale; + new (cfg: AnyObject): LogarithmicScale; +}; + +export type TimeScaleOptions = Omit & { + min: string | number; + max: string | number; + suggestedMin: string | number; + suggestedMax: string | number; + /** + * Scale boundary strategy (bypassed by min/max time options) + * - `data`: make sure data are fully visible, ticks outside are removed + * - `ticks`: make sure ticks are fully visible, data outside are truncated + * @since 2.7.0 + * @default 'data' + */ + bounds: 'ticks' | 'data'; + + /** + * options for creating a new adapter instance + */ + adapters: { + date: unknown; + }; + + time: { + /** + * Custom parser for dates. + */ + parser: string | ((v: unknown) => number); + /** + * If defined, dates will be rounded to the start of this unit. See Time Units below for the allowed units. + */ + round: false | TimeUnit; + /** + * 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). + * @default false + */ + isoWeekday: boolean | number; + /** + * Sets how different time units are displayed. + */ + displayFormats: { + [key: string]: string; + }; + /** + * The format string to use for the tooltip. + */ + tooltipFormat: string; + /** + * If defined, will force the unit to be a certain type. See Time Units section below for details. + * @default false + */ + unit: false | TimeUnit; + + /** + * The number of units between grid lines. + * @default 1 + */ + stepSize: number; + /** + * The minimum display format to be used for a time unit. + * @default 'millisecond' + */ + minUnit: TimeUnit; + }; + + ticks: { + /** + * Ticks generation input values: + * - 'auto': generates "optimal" ticks based on scale size and time options. + * - 'data': generates ticks from data (including labels from data {t|x|y} objects). + * - 'labels': generates ticks from user given `data.labels` values ONLY. + * @see https://github.com/chartjs/Chart.js/pull/4507 + * @since 2.7.0 + * @default 'auto' + */ + source: 'labels' | 'auto' | 'data'; + }; +}; + +export interface TimeScale extends Scale { + getDataTimestamps(): number[]; + getLabelTimestamps(): string[]; + normalize(values: number[]): number[]; +} + +export const TimeScale: ChartComponent & { + prototype: TimeScale; + new (cfg: AnyObject): TimeScale; +}; + +export type TimeSeriesScale = TimeScale +export const TimeSeriesScale: ChartComponent & { + prototype: TimeSeriesScale; + new (cfg: AnyObject): TimeSeriesScale; +}; + +export type RadialLinearScaleOptions = CoreScaleOptions & { + animate: boolean; + + angleLines: { + /** + * if true, angle lines are shown. + * @default true + */ + display: boolean; + /** + * Color of angled lines. + * @default 'rgba(0, 0, 0, 0.1)' + */ + color: Scriptable; + /** + * Width of angled lines. + * @default 1 + */ + lineWidth: Scriptable; + /** + * Length and spacing of dashes on angled lines. See MDN. + * @default [] + */ + borderDash: Scriptable; + /** + * Offset for line dashes. See MDN. + * @default 0 + */ + borderDashOffset: Scriptable; + }; + + /** + * if true, scale will include 0 if it is not already included. + * @default false + */ + beginAtZero: boolean; + + grid: GridLineOptions; + + /** + * User defined minimum number for the scale, overrides minimum value from data. + */ + min: number; + /** + * User defined maximum number for the scale, overrides maximum value from data. + */ + max: number; + + pointLabels: { + /** + * Background color of the point label. + * @default undefined + */ + backdropColor: Scriptable; + /** + * Padding of label backdrop. + * @default 2 + */ + backdropPadding: Scriptable; + + /** + * if true, point labels are shown. + * @default true + */ + display: boolean; + /** + * Color of label + * @see Defaults.color + */ + color: Scriptable; + /** + */ + font: Scriptable; + + /** + * Callback function to transform data labels to point labels. The default implementation simply returns the current string. + */ + callback: (label: string, index: number) => string | string[] | number | number[]; + + /** + * if true, point labels are centered. + * @default false + */ + centerPointLabels: boolean; + }; + + /** + * Adjustment used when calculating the maximum data value. + */ + suggestedMax: number; + /** + * Adjustment used when calculating the minimum data value. + */ + suggestedMin: number; + + ticks: TickOptions & { + /** + * The Intl.NumberFormat options used by the default label formatter + */ + format: Intl.NumberFormatOptions; + + /** + * Maximum number of ticks and gridlines to show. + * @default 11 + */ + maxTicksLimit: number; + + /** + * if defined and stepSize is not specified, the step size will be rounded to this many decimal places. + */ + precision: number; + + /** + * User defined fixed step size for the scale. + */ + stepSize: number; + + /** + * User defined number of ticks + */ + count: number; + }; +}; + +export interface RadialLinearScale extends Scale { + setCenterPoint(leftMovement: number, rightMovement: number, topMovement: number, bottomMovement: number): void; + getIndexAngle(index: number): number; + getDistanceFromCenterForValue(value: number): number; + getValueForDistanceFromCenter(distance: number): number; + getPointPosition(index: number, distanceFromCenter: number): { x: number; y: number; angle: number }; + getPointPositionForValue(index: number, value: number): { x: number; y: number; angle: number }; + getPointLabelPosition(index: number): ChartArea; + getBasePosition(index: number): { x: number; y: number; angle: number }; +} +export const RadialLinearScale: ChartComponent & { + prototype: RadialLinearScale; + new (cfg: AnyObject): RadialLinearScale; +}; + +export interface CartesianScaleTypeRegistry { + linear: { + options: LinearScaleOptions; + }; + logarithmic: { + options: LogarithmicScaleOptions; + }; + category: { + options: CategoryScaleOptions; + }; + time: { + options: TimeScaleOptions; + }; + timeseries: { + options: TimeScaleOptions; + }; +} + +export interface RadialScaleTypeRegistry { + radialLinear: { + options: RadialLinearScaleOptions; + }; +} + +export interface ScaleTypeRegistry extends CartesianScaleTypeRegistry, RadialScaleTypeRegistry { +} + +export type ScaleType = keyof ScaleTypeRegistry; + +interface CartesianParsedData { + x: number; + y: number; + + // Only specified when stacked bars are enabled + _stacks?: { + // Key is the stack ID which is generally the axis ID + [key: string]: { + // Inner key is the datasetIndex + [key: number]: number; + } + } +} + +interface BarParsedData extends CartesianParsedData { + // Only specified if floating bars are show + _custom?: { + barStart: number; + barEnd: number; + start: number; + end: number; + min: number; + max: number; + } +} + +interface BubbleParsedData extends CartesianParsedData { + // The bubble radius value + _custom: number; +} + +interface RadialParsedData { + r: number; +} + +export interface ChartTypeRegistry { + bar: { + chartOptions: BarControllerChartOptions; + datasetOptions: BarControllerDatasetOptions; + defaultDataPoint: number; + metaExtensions: {}; + parsedDataType: BarParsedData, + scales: keyof CartesianScaleTypeRegistry; + }; + line: { + chartOptions: LineControllerChartOptions; + datasetOptions: LineControllerDatasetOptions & FillerControllerDatasetOptions; + defaultDataPoint: ScatterDataPoint | number | null; + metaExtensions: {}; + parsedDataType: CartesianParsedData; + scales: keyof CartesianScaleTypeRegistry; + }; + scatter: { + chartOptions: ScatterControllerChartOptions; + datasetOptions: ScatterControllerDatasetOptions; + defaultDataPoint: ScatterDataPoint | number | null; + metaExtensions: {}; + parsedDataType: CartesianParsedData; + scales: keyof CartesianScaleTypeRegistry; + }; + bubble: { + chartOptions: unknown; + datasetOptions: BubbleControllerDatasetOptions; + defaultDataPoint: BubbleDataPoint; + metaExtensions: {}; + parsedDataType: BubbleParsedData; + scales: keyof CartesianScaleTypeRegistry; + }; + pie: { + chartOptions: PieControllerChartOptions; + datasetOptions: PieControllerDatasetOptions; + defaultDataPoint: PieDataPoint; + metaExtensions: PieMetaExtensions; + parsedDataType: number; + scales: keyof CartesianScaleTypeRegistry; + }; + doughnut: { + chartOptions: DoughnutControllerChartOptions; + datasetOptions: DoughnutControllerDatasetOptions; + defaultDataPoint: DoughnutDataPoint; + metaExtensions: DoughnutMetaExtensions; + parsedDataType: number; + scales: keyof CartesianScaleTypeRegistry; + }; + polarArea: { + chartOptions: PolarAreaControllerChartOptions; + datasetOptions: PolarAreaControllerDatasetOptions; + defaultDataPoint: number; + metaExtensions: {}; + parsedDataType: RadialParsedData; + scales: keyof RadialScaleTypeRegistry; + }; + radar: { + chartOptions: RadarControllerChartOptions; + datasetOptions: RadarControllerDatasetOptions & FillerControllerDatasetOptions; + defaultDataPoint: number | null; + metaExtensions: {}; + parsedDataType: RadialParsedData; + scales: keyof RadialScaleTypeRegistry; + }; +} + +export type ChartType = keyof ChartTypeRegistry; + +export type ScaleOptionsByType = + { [key in ScaleType]: { type: key } & ScaleTypeRegistry[key]['options'] }[TScale] +; + +// Convenience alias for creating and manipulating scale options in user code +export type ScaleOptions = DeepPartial>; + +export type DatasetChartOptions = { + [key in TType]: { + datasets: ChartTypeRegistry[key]['datasetOptions']; + }; +}; + +export type ScaleChartOptions = { + scales: { + [key: string]: ScaleOptionsByType; + }; +}; + +export type ChartOptions = DeepPartial< +CoreChartOptions & +ElementChartOptions & +PluginChartOptions & +DatasetChartOptions & +ScaleChartOptions & +ChartTypeRegistry[TType]['chartOptions'] +>; + +export type DefaultDataPoint = DistributiveArray; + +export type ParsedDataType = ChartTypeRegistry[TType]['parsedDataType']; + +export interface ChartDatasetProperties { + type?: TType; + data: TData; +} + +export type ChartDataset< + TType extends ChartType = ChartType, + TData = DefaultDataPoint +> = DeepPartial< +{ [key in ChartType]: { type: key } & ChartTypeRegistry[key]['datasetOptions'] }[TType] +> & ChartDatasetProperties; + +/** + * TData represents the data point type. If unspecified, a default is provided + * based on the chart type. + * TLabel represents the label type + */ +export interface ChartData< + TType extends ChartType = ChartType, + TData = DefaultDataPoint, + TLabel = unknown +> { + labels?: TLabel[]; + datasets: ChartDataset[]; +} + +export interface ChartConfiguration< + TType extends ChartType = ChartType, + TData = DefaultDataPoint, + TLabel = unknown +> { + type: TType; + data: ChartData; + options?: ChartOptions; + plugins?: Plugin[]; +} diff --git a/node_modules/chart.js/types/layout.d.ts b/node_modules/chart.js/types/layout.d.ts new file mode 100644 index 00000000..4c770711 --- /dev/null +++ b/node_modules/chart.js/types/layout.d.ts @@ -0,0 +1,65 @@ +import { ChartArea } from './geometric'; + +export type LayoutPosition = 'left' | 'top' | 'right' | 'bottom' | 'center' | 'chartArea' | {[scaleId: string]: number}; + +export interface LayoutItem { + /** + * The position of the item in the chart layout. Possible values are + */ + position: LayoutPosition; + /** + * The weight used to sort the item. Higher weights are further away from the chart area + */ + weight: number; + /** + * if true, and the item is horizontal, then push vertical boxes down + */ + fullSize: boolean; + /** + * Width of item. Must be valid after update() + */ + width: number; + /** + * Height of item. Must be valid after update() + */ + height: number; + /** + * Left edge of the item. Set by layout system and cannot be used in update + */ + left: number; + /** + * Top edge of the item. Set by layout system and cannot be used in update + */ + top: number; + /** + * Right edge of the item. Set by layout system and cannot be used in update + */ + right: number; + /** + * Bottom edge of the item. Set by layout system and cannot be used in update + */ + bottom: number; + + /** + * Called before the layout process starts + */ + beforeLayout?(): void; + /** + * Draws the element + */ + draw(chartArea: ChartArea): void; + /** + * Returns an object with padding on the edges + */ + getPadding?(): ChartArea; + /** + * returns true if the layout item is horizontal (ie. top or bottom) + */ + isHorizontal(): boolean; + /** + * Takes two parameters: width and height. + * @param width + * @param height + */ + update(width: number, height: number, margins?: ChartArea): void; +} diff --git a/node_modules/chart.js/types/utils.d.ts b/node_modules/chart.js/types/utils.d.ts new file mode 100644 index 00000000..8313d9fa --- /dev/null +++ b/node_modules/chart.js/types/utils.d.ts @@ -0,0 +1,21 @@ +/* eslint-disable @typescript-eslint/ban-types */ + +// DeepPartial implementation taken from the utility-types NPM package, which is +// Copyright (c) 2016 Piotr Witek (http://piotrwitek.github.io) +// and used under the terms of the MIT license +export type DeepPartial = T extends Function + ? T + : T extends Array + ? _DeepPartialArray + : T extends object + ? _DeepPartialObject + : T | undefined; + +type _DeepPartialArray = Array> +type _DeepPartialObject = { [P in keyof T]?: DeepPartial }; + +export type DistributiveArray = [T] extends [unknown] ? Array : never + +// https://stackoverflow.com/a/50375286 +export type UnionToIntersection = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never; + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..8627f416 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,24 @@ +{ + "name": "project-github-tracker", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "chart.js": "^3.7.1" + } + }, + "node_modules/chart.js": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz", + "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==" + } + }, + "dependencies": { + "chart.js": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz", + "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..832728d9 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "chart.js": "^3.7.1" + } +} From c495f2fbeb72690ae84b024b8f82e75a76aaa054 Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Fri, 25 Feb 2022 19:39:10 +0100 Subject: [PATCH 05/13] chart now working --- code/chart.js | 10 ++++------ code/script.js | 4 +++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/chart.js b/code/chart.js index c5e42883..ec6351ad 100644 --- a/code/chart.js +++ b/code/chart.js @@ -2,7 +2,7 @@ const ctx = document.getElementById('chart').getContext('2d') //"Draw" the chart here 👇 - +const drawChart = (finishedProjects) => { const data = { @@ -13,9 +13,9 @@ const ctx = document.getElementById('chart').getContext('2d') 'rgba(255, 99, 132, 0.2)', 'rgba(54, 162, 235, 0.2)', ], - + borderColor: 'rgb(255, 99, 132)', - data: [3, 10], + data: [finishedProjects, 19-finishedProjects], }] }; @@ -28,11 +28,9 @@ const ctx = document.getElementById('chart').getContext('2d') }; - - - const myChart = new Chart( ctx, config ); +} diff --git a/code/script.js b/code/script.js index 32eb6007..2207d738 100644 --- a/code/script.js +++ b/code/script.js @@ -54,12 +54,14 @@ fetch(API_URL_REPO, options) //-------filter out only technigo projects const myTechnigoRepos = data.filter(repo => repo.name.includes('project-')); - console.log('Filtered:', myTechnigoRepos) + // console.log('Filtered:', myTechnigoRepos) //------function that generates projects html const printProjects = (data) => { + //this is invoking(drawing) the chart, using the filtered number of repos as arguments within the chart.js-file + drawChart(data.length) //for (let i = 0; i < data.length; i++) myTechnigoRepos.forEach(repo => { From f9277e7b5c89f41fa91357b4d7307d8e9164184b Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Mon, 28 Feb 2022 07:43:12 +0100 Subject: [PATCH 06/13] mobile styling + code cleanup --- code/.DS_Store | Bin 6148 -> 6148 bytes code/PR.js | 19 -- code/assets/.DS_Store | Bin 0 -> 6148 bytes code/assets/bubble-1.png | Bin 0 -> 16562 bytes code/assets/bubble-2.png | Bin 0 -> 2923 bytes code/assets/bubble-3.svg | 11 ++ code/assets/git_pull_request_icon_175163.svg | 18 ++ code/assets/mulan.gif | Bin 0 -> 1602868 bytes code/assets/tvmask.png | Bin 0 -> 13988 bytes code/assets/tvmask.svg | 1 + code/chart.js | 93 +++------ code/index.html | 71 ++++++- code/script.js | 181 +++++++---------- code/style.css | 197 ++++++++++++++++--- 14 files changed, 363 insertions(+), 228 deletions(-) delete mode 100644 code/PR.js create mode 100644 code/assets/.DS_Store create mode 100644 code/assets/bubble-1.png create mode 100644 code/assets/bubble-2.png create mode 100644 code/assets/bubble-3.svg create mode 100644 code/assets/git_pull_request_icon_175163.svg create mode 100644 code/assets/mulan.gif create mode 100644 code/assets/tvmask.png create mode 100644 code/assets/tvmask.svg diff --git a/code/.DS_Store b/code/.DS_Store index 7dc0d5f920a802bf962597df9fbd69598e584a50..11b2e77202fdb04387a2eb97b0afe220c48b60c0 100644 GIT binary patch delta 314 zcmZoMXfc=|#>B)qu~2NHo}wrl0|Nsi1A_nqLkUB1Qh9MfQcix-=825U8S6n(Yz&DE z#Xy*fEDaRjkyMbASzKaZaE+0PnT3^&or9f&nXr1w@?l^GXsk^HPhz8ZuK-fl6Y+GxJjN%boH|^HPd|dc%N5L1Z{MIXL45 zB&w^;EzEQjObje)brh;CjSPTnW3$>?P7YCJee0n3?3~=Z{4Sv5fPfL`CotfJ(lDxf zG7n?-WPL_np0ePgyqx^Jbf63)(8J9vo7p+|Ie;MpB`mu~2NHo}wrV0|Nsi1A_nqLkUB1PP$=ma(-^X#KPr_ER!EFb#I=- ooXxU%0W&MpW_AvK4xqNp6Pdp=Pv#e~15g*AhLxS0I${*;s5{u diff --git a/code/PR.js b/code/PR.js deleted file mode 100644 index c1dae8a9..00000000 --- a/code/PR.js +++ /dev/null @@ -1,19 +0,0 @@ -//INFO FOR EACH PROJECT's PULL REQUESTS -const username = 'Dorothea-B' - - - -const API_URL_PR = `https://api.github.com/repos/Technigo/project-news-site/pulls?per_page=200` - -fetch(API_URL_PR) -.then(res => res.json()) - -.then(pullreqdata => { - - console.log(pullreqdata) - - // filter pull requests - //const filteredPullrequests = pullreqdata.list.filter(item => item.xtextx.includes(${username})) - -}) - diff --git a/code/assets/.DS_Store b/code/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ded54e098ab701dddbccfa5bbcfebff20bc0ecf7 GIT binary patch literal 6148 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 literal 0 HcmV?d00001 diff --git a/code/assets/bubble-2.png b/code/assets/bubble-2.png new file mode 100644 index 0000000000000000000000000000000000000000..68946f2ad671a93d87f899c0404cf77bace6027d GIT binary patch literal 2923 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 RKKz~m7El{V + + + + diff --git a/code/assets/git_pull_request_icon_175163.svg b/code/assets/git_pull_request_icon_175163.svg new file mode 100644 index 00000000..2345d094 --- /dev/null +++ b/code/assets/git_pull_request_icon_175163.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/code/assets/mulan.gif b/code/assets/mulan.gif new file mode 100644 index 0000000000000000000000000000000000000000..94c7ff47b798bebb3de7c8549ab7845ed2f5dcc0 GIT binary patch literal 1602868 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

3@Yz3c)(2nrYk}N+of)Vzv?=I50F--;R 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

  • 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%0A!L#emKpk|@+cve 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ɠaN6Bx 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

    #Z6ptALxbyHVrMDkDtx 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%0D`-#g!V#dn`}aFy2j2A&6K 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

    dCSIEw=cTy7iy1eV|-*?AVjv8d&{&#u(Zs}#w>D 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μ#)I~Ti@6C_GW~z^4~9cS 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%0A>EoVDZ~*O%XiJ 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 m#L{kST#g_zQ`#k8}} zbAm?R%>odGsueA1(J>zu1@i+`w@CeM0SJn?sD6l|TD@v?z1r36W@VlgJXT}8v(WbR z^RA72?>Oc<(4|{WTotWPo~q8#s{=p*l*F*|GJC|&Zuq5-Admy(t<#r8ftWuX0}O0& z080S31n<&O)?C7z=x#2ZS83;0;~A{VXgNzqm~WNPyVku{vY~4(^L&$}--%YO!0Aez z9I8q?Wiv1S9FBC032=wJy(F4az!wFUIphDK?)XO&5b_K8SCjx4dCA$G?sIn!&#rd2 zMw-!b1;ZSLp_@6NZ;o%9=e+H3-+9kT6>uQ|UCPvHt=SYl>7yro@Digym?&;MzVyij z^K}!{H%`?7aB($~7bPh-q#;d^9Hn9BeA&ysa+R|47%wLY+*epWn$P{ZDHL?hS0Ct` zcaG=TJ>9VB>b0(+%84Kz0&EpPx)0_SlZ9hMt?LFx9t6$f&zbU|fPH-u6IBeuK z`of0~fOD~QO*c^oBqxty18@QZXGZ^D&i5JB!XO&AEg52U9EW|yC3y(Y0AIv)rQi*% zmU5rhePZW%+=pj97HhH=KKllHD&d0nmSplLdoZ|by4E?gBxJt88};We|K?=)=Tk+Z zVbxIpR?&aU27C+`fJ?X@UNBA!uqTK&82H6W7!Uy(Cns_;Ct{)?3-UE{k_FQM3j?7V zkw4)bSHQ5*N1+HLcc%~=|_X} z*ICA(gDrJ;zm#`K;fOo6VM3^T8O9?BM^Li!e@w`UYe4}Cz-frrNf&1tJW>D>04(!? z0l*UjFfau{Fb&i23&&s$J7)h0I&>FkSbf|=YS5F0;`Sly28VOFN+q~`CzxkK<8sEp zj5f%EbSHy`=!Y}7Z}60Z^J0E2l?-FmOL&J`dY6Bzqk9E&1j^=nLX?D;rjDKXSB(?_ z6Q^xYmpp~@G9I7+cBKFW^k12YFmmAd3jrrt*PZo}p$YBTP zf1AjTHz^l}M@=DvU(Poe_Lz^q;yeih0Of{^WH$|eq>C09avXMxR^Bt5dGv@r5ion_XhS%J;YCpAXp_*%gmxiumDH1$ zkpt9%0R<2r24Sdy&y zpU_x{{uzTx3Wx>znl`AL!%z%t>6Q)ZpbrY6)nJ<0aDsGscaVsocv*=xkpRaOc;^M8 z(Ak|DuqFy}87mN6h^dd)_idu|Cok%lLTYE#FbzRq0g=f?OnG&PX#rF41Bu`Zo(F>R zS)V7Ef)%--%vhyJ%Acv{3k2$snX0L-$*EBas@S-QyP1;lCYQfSkz49LNBN}_`i+Yw zrURFMSNq|TVgnO5JQ)?syAZZAjt6aOa3ROYX zN|4_2lz_5kc*SLyfXWj6))?1qU%c|OoTHNJxL5Q3(nE@NRoU$ciTHCqi+i(^1ly^#~%@a!0 z2TDr-0Cvl|Ya7Gh>azR0uUvYXTe+Yh5w8LqxCV^8Q2Gl{%7-S&mZn;?5K6t-Ai)&u z#Mx`XKUkpvJ7suDwF|&89*V0Ze3Jqsx@Bv9V4NWZ;5hS}yO8_DY0Ra`D6A6&#IL-{2K@g@&TEp} zm>a*@$Elhk4$Qx-O30r)!G`RO;J8{n)yP+z#p654lnj9DnaL|$v0-esc)D z{K`-2(I0Jt>zugbn#(7h%M?k^5Y5u1`D^)1FjFj!(s9iHOtn`F!sxigB23UH=2y`K z#%^|Xg9ZPl?H(m`CH&P)HVz-h`(ovJ2{ zc3<7Ny`0o(4AU3vPZ~^cHJw9{>@c_5(>@)5c0pVi*uDzQ&=vp!#PHBg%*0E*(n#C8 zl1j7A%bHYO)gryhSbfgy%Ge_9j9kr($xzY3>Bpxj))fhyz`4sqI>Fjpy=FbZ+3?a6 zTAYg9y^QSE1Z&iUw9_Lz*K~bbDpr}3DKpR0Q55h2jiit*9mxE9!+B=X%D@a!9l+$= z(UQH~oa)#g{oFn~#2G!b%y8K!ogz-{&f9q04Qk2`ytJPz$Pp~uP^`VF9jl8>B&~hL zcyp`eE8Fos+eYQZp<9sW=>S`z0R`X+3u({Q8`u*q)|P$PdpQ3LR=wC{iO!C#+>MPs z(mmBA{nVTN)qQN-%kaG1J+4e#&uJXo+pMpqoz}w~t8ATnCtlMJU;qvf0?rBF^UZ|A zx}!T9J#{K>0kEPJ5I0>w0HfgFOHJORUD`NY;WFFZ7@pCIEz->Wsm#sX0{Y}3y+X~c z&XsN1UTwZGNRgU4NT-HJExDp)VE6w3)F5)B3y<;kq$J|8k&C@XcxeA3a zB0vEUS3v?`01~UB6OaJ@vmRad|6>4=u#n`vv>cAZi@xRKdfW;|se72@2|mstz1Y?M;LB~!=PV7G>eyI~ z*p=OKmu=i`yocpp>W=Q+=@1TQjHAT{>p|g^%9@> zQ}5C22P4ak_*9P3A|Lq4!1a@Q-SWKdXm7oUPWD3Y@@B90KyrIBZ|iT52yj1>+d=nr zZ};-8HeeLb6z;oO|Lwm}3=c2(P=ENZ%$ks&_zX_*ybsI2APpO@vkkA7RsQVNZP}ap{#pL9W_j(Bqne*e^8j?sy&2Ic~j?3o)>m*xar8}1))Wa9(9CBDWnS! zFlZ1FRq9j|Rjpo4QbH@$tysHy1shiE*b!W_l0f^F>{_;M-M)qEl>vrc)s`i@Ypj@F zh6s@@EQoO6FTn%{4nAyHpkl+q3MNj-_}49igALj$NO^H&#kg=;4%~3BLx;?gF=JM- zVzy@4o{jW)GB#|MwO5ja4NgH#-o0P$v=YK=8$XzM5?kwE%LHj`445JHxG+Y|3eY;ff=X#N{?Xk-4OtgJh|j z8tB418D|8KMjLOm&Vm9mIi|1m2qUPl!X9G}F<~G>tVkm9TarnE`b)C1%?M17G-H-Q zO&Qgi$*39zHPW!c+e)(SHZ#L4lYkD_3@*gq9uRIs;!2$JL_1q-ZUaOvIKTqx%EB>F zKm{eVQ0p{Mz>;JLE5<#-?qhPGA(g}r(kUgA^1uE5qfb5okxU4%(XKo#LDe+Eh@%J5 zBoocqA}ljE2-Re>R-E9(Rj2=4MU<072~4~*MWOOs@wpBlX~2N#!ZWm4XKQ>`Mnn~r zrkH9YRZKuiA9JieZRNwPNpbVTR$GBURj)6HuvA7ti&*n$BUk68m)=%6+Ravd-`rKs zoP?S)VB&&ZvEV(AHFl9I_Kd&)KRM9qyJ#n-7}|=v(*S@(h6yquWCokG(g80uGSVos zjqlQP0hESif+(ZUWk%I?s9jSjx(MEScjj5udRxnP-+kSTQ{bVF19;#&U1Txg=M;f@ zkq(+#R^sX|#yV?@w;q&hM1MF2QjjrqQsuIf?DR8l^~>)tv^!nQubB^Ymm)BA?m6#z zA6zw?zWs*gnQESCCTRbm+q{+Nev3A`PUVD!{6s_$b~sw8=v&@MK_s5-BmOVV_ zX>!ncTKD#JfecV>0)IkZ`cz216uLzLHvq=SO2)0SrOa%gkr5rkO5OU2y zqX?lktP*C<00&?I1>V}f5q9MR;2L10DBjNDt8<=7}J z@J%3&SFb6KbZOoGyy6mf=X zAgG#Wqy~Z!j35`6QH*6E<1Ye1B^VR8xD2k+jKWHz8e&cISg!3j<- zo<^ME>|#mBi5~X^^OWh7N%ej+99A~&od%0%_ZCLa5Kb)v1&E_Q{W;W&6~G0$@Kj=~ zHA7v~Lg2fY0I`!V;(%8WY6abDO@ElPU8?8Rc!dmkqq(aGNq$H_r zc9d<5{0g*}F1D+8pmZcOzv{Em9?)le^Jo@PdL@RmwLNWJNVTv!vvaoAhM1k}^u%bv zUm5?Wm9AV4u{xL(z^+ky+*3*hY8ik82z9Z~y-{QF$HRmwRDXZ`RQ?W`-O0@7T8m_) zMKk%J)?AWl8bM?jqpg22XSLP_w~y_YvPbIfFLJA|;f(Po zuM}>vGlQYu-*0j-;(Mr+YX&NFIy$FftQ{En;@0Afr=y1LhTPUzFFQ`Sx*=GuUwd zDof+S)4^A+XH)P=0q0uS%X0*ags-vG*J+o;B0d+1)0}1=pUXY4HPBrY#Eefq2&4Z< zjB%dPtKRg6HI(7Raa?;W;*YhIez1$#lY~4OB&&0#I;rXPej8;eHyD=266}=M=vN3Q zE1$UB=a)r|fC5Zo!zuf(j}ZytGq*Xj?NMu~L|M((r0TTp^$4y_ds_Cw*u1IjW(4(u zUsli0kRIDCV1`*cAs4yP{Ics^liXzMJsG%_Mx%nST$Bt)7$uPftz@-GB)8q0xAk;lEw>82b&SzSgqx^;93!N@z_?H>QJQ)AvS zSpVfpDX!aV7^q%f3w+={_xE{c{Od}Bw44WT536%%)nu=fl;ce6W*_CKP)XyZ1E#Bz zM^w|Lxzghbi`rjjiQIaE8_UWqKm;h<&y=&!?Fk@&qKF)GHP1WV+kI?A)hg$k={(m% z_jka5?rYQ@(7iM!oH!4jUp2qBl&x)uNJomAkls8Q$=3T{D4t}xLObKsmbA5lORR6J z@wm_dq1iv)Q%5wQmPY_{?Asn{tm$YHEm!)?@4kC$HHt7;U6-k_xNj!{p4UQ8qG@3) zNy8KU8Ai{sH2T|LzqGXB>oUgV6Vy#hCdm8ZB;|?sV#>`^ui{$omE-?9o>SAGzU-x6 zeb_OOEL$d)?X$-k1>(Np68FE|Ft@wjQwZ2nDR*HYd0D=}>oe4nv7qa@!+S3*g1#J! zKEQx8r@NAoT87?9jeNT#Et0QMA}M9ai;yZm&kLjTOTXV@8p+|bSn3{18@a)XKd_sD zd1`V?dufykCpLTkAE# zTcB`yIM~WDs3Vn>@;*8PEh?h1u&S|c`lev}z7s@2jf;~qnlz+17!S&}_YWcZp%pje7tZU6NOLmL8x|Ik!47Ia zzM4V!BfD=?E(j=q6S6--v?J5Gy%C!`4ttWrh{heOIfvscyugwNdPP-~!b+5}O`OC` z6h}-f$4!hcqcggbN{}@Kr8LwzZ#>6VbfS7pLri)GTU0@fOAecQGG06*Df^&4lqC`h zIbsYqKdeDNR67fhum&i%L1ac8p@0Lh1pb>Ufgm!N+ei|FGt0v{XUI3^vBY^a$&=JX zl$^&JbB30buLqJvk%Y&5bBzU3NpXxvSFFdt(Z@GrGCBW*GAq-zguKCddYtX~wxM(y zO)E$SsEYA0fC=yubDPM~p#TP8xo*)&YJ4|o1hB)%ufQY68R7wAxR7m~OFs;-|yicr4rQX^_e+C$MU??NX67frPNHNR!4$g;r)g zSWATleJs=7?5&^VR#9EdJT%CIgwt=`Sb{_rl>3S!n1BH26AEqDt8hk!15btkzh14^ znao#xby$8K*ff;Mmc-fTW69^s*_r9 zU*82>za8Aoi&z=0HsUbcu~SnS{6qJP+EZOf7{nX{h)B4=fa%rR>V1n4SU0jw z5H;PR?b~P2TL~mz_f2046owN%;S^rs=u_eM| zgC|qPwho|N7Fk}fb5rL1QKgsxNGN~^woVDl+RL?Iu_)4L$OeHm)bCBv8?IlQh1-^G z;ko;mYAoXvMq|cH;}@nt@RLb?^;?ptjJaXhrKmgVa;O^7Ga!qTTn*fLPO(I7UyyH(=}FQ(Y0OO)!$8~ zVLEnYSuWQ4ZD)1v+gzp~Y?WACOg~Rm-s0_6)oWbDyiwGH!8I*LC1zspf#5+b(gOfl zNygj=D22AnWAOE2mYiE}c42Zp<*nrCuiP&6UJl-le%ofxWgo#>&PGW+V0q?163B~IpoldJ1df^+r~#w@6h@>(=GIQ;D?i(|icE<744Pz4?V{$fd10Q8R|M9E7>T`x&2*+CyR^8_gYeY}- zu8#8Qp7QJeuJS8?o_%B`2r!zM<|#_Mobd*^F;8SXM1=KTRRvY^DUR_HKonCbYOwxl zS;ld0*6717WmEQZ#6Dv-W-Iu0V|pdwG)&!kRC4EbZVE5yM-O&m7wajytH|i55xKh2tmx^?-%-SQqZ$_UKyA zuT*Yh^NroCexROJY9#0PM0avn#_$?ub$?fM>!$LSc4;3bUefMGwgxN>8t5GrSGhjs zSXvknM;37p6e+InljZAA$OgKNY$TUu)g^2lAMjc4aWZD%7uNOIm0LoWzzFa6f5-4( zH~8oO9{B1`c2`bzuzvJ|k90}T=P@b@Pyg_?MuDYIaS|6SiEnL1F3K>Mj*h=S9f@td z*1t@6hPQ=qbeBMOCtp=oW0lu)QTAw;e|aJwU!7I%nkCrzwdS6`@X7x9pEr1(SLsGa z_MGQ?NT;}F7vL3i1b&A0As*0+_Z|%bW}IeBgidDDwjAa9_Uy=9t8a5J(-BL^-d(R- zv2R`UefO0Y<>=e-dlz{KXXVc~^mSMAoWFU$5Bj~Qd!D!b+RuC2|NEfdVNSip;4OTZ zW_YHxG{baUJtX8~UP^2CSc2ARS%Ltdz7Y+WZ>=wYNib~W&S>BU=ffW5GB$fMruV}C z7Twfe{o2)8)iw0ipYoEg`+(nlyubat$NAgu``qvQpfT&A=S_g9AaLM?f(8#dO1KCS z!wn7}LQLqeA;XG`WGG^o;UJ`j9V~*J0dnNRk`}8dLb0fd$c!QzOc+rji3yoCXWqoA zGbhiUGc_EbAmYSMpGJ=&rI~ao)22Bo5SWB)Dpg@qmtoDi>?&1c!oGt2I?ij@saDT= zO>33v*0x&DEjtJIoU^*lo|Sv{%vrg-eevooN3L(*!Q>1NHfPuzW5$acCvL2GGG)h- zFJsPpIdWmkkrhZ-AbK?E(xy+NE?t52>Ib1+6O3J9gKUEmLEg?iu_L4nCq-ia>`l9% zZj#1LB6o>s26N>uMJk9{bUJmXBQ#79THQML?cKlk1Ysc2va)O0b~PI|?6~!7&!_L| zb}QVhbK@@K%NH-<{(}Ab7ny*PCH5F*hgo(YWC>2j8G{8fxS)TMm6Mu<7h3q5hM>77 zT5BH??%JS& z2?p!tuo9}-7XfrKi`t#6L7S(ZeAaeiLkb1T+n^^Y5@~M*Z3Gdbjy4*pO3lfj5<@IO z0zm_wifW{e@P=A%yxmyW$*Y>b8r!hM$VQCW zgw0}H=Z4Pi*{8JBTB~iggTmOYbBQWivPHfDTCR=VqR^boHeS#G2TI-h9d;qu+jGuM zLG{BgV*Oh*z*l8ym(p}G-E@HeIZW)rVosef#T8#&?A2H!Y|aAztz{f`h97$ja>^_t zGN_>3!h9{s~hoH+(*F~a0KB; zMX)#Dy91w8&_fH;UaLh@$yL&I=@l5|4D-rano&zXvFFDUcK!3)SG;WKqDPzO*QA#{ zo9e|`Yw`>zd}Lz!tdnc9jWN%>F3cTBAYJe|VR!RT`vdSO8UVlz_?5V$$wy#z0aNzi zgsjUota@#NU;`o6IqqRlGY4yo_r8ar(ZNPzdg>UTL{zQ+Kj|igu9IKPa1@b2jmu>5 zD+xcrDS~=QAuz%5R@Q_Km;1-6dna9 zB%m;1XvZ^;S>)5WtSId+`+44g%rvYs>f zl}i^73O)#cQ34F5mQb%LvNeh_qJ%ORN{o8SjI>cktTY)4YJdWDZ8Rei2$D#<+PB{6 zLP>@cSbpjvx&7GFO)=fvOp$rPoCb7*a-HkJ>e@k{ax9Dr4XO#rH=>lG$f+o5CCtWU zO1wq2sZ#CeDmOaLs|E)G`tvGfL3IEa{303uzfj)te3{m+6|1c@_2*6{1J_H^HMOP1 zs|TSeMvuAgMY2t*Qjud(8J01zF=AWYSh7m`(GepV!GO*DSlJ*3ZYeqnYf8(yw8{Mw zdZHceTW?z0>ta{6HB~JbS({MM?G;3y{3{BbI!dT|;C?PVtVP+E(N@-Qjy1$lO6-Ox z2yoT7$EEB6IDm_0EF&3NVTN6r2wk^Mm$cQ@Ze62`UF$Nq!3}0DCto|>lqvO$=e1vR zQrEus@>UV{l|lXDNKVP>cfXXSzyxf;j9!-2z;30kf^o{s#zgqW63+31x69+6QaHRp zwJ=djgyF$zxH#~OBSc~6N~lKlI90I!uW!4x(cq>lQV^I|id7ua0YtzS11qpuKRaU` z*Z8eH-tn5*?B*T&c)Pa>@@b-pr|(WnL?smLVQ1S-Zz}d}al>tL-l(n=tgl;E1%V8# z+F{~4z{`?$$^;@Hi@of{tTRqH)~oR`oK|L^93PF}E>BvP3}ApQn!&soL%7qY1$C%NEtklVI?mE|HmQM(YVhVY z&#-m1hFb<`L|rp&bOWcAbInn#HX0@Bx!-%>qJ>@wl`%4@NoAQu z5V(|zlRJ|SoB--Qq?gm3PW77*rRr8EQgQ<~!~@s@8ucdm$*CRZf4iK`DrY&{4|c17 z001HR1O*KMPyj3d0002s0UiMW2>$>VNT?w2fx&|V3o4W#kN|`X8zMsN011+ZizqOr z*r);pM;9PlfQ$jd1q>KAP}(4A14qgY1OX7ZKm$h)AwGl%;lZ;8&z(Z31O+3Micu;= z!Gxg_#!Q%}Vc;}{L)FX|GgiNxIWuRg*E3;+fKeKTsF^E<+Nm{U$ep`(V82|Qt2J#q zw{By3!lVgPyuN$`W6JcGFuF{aDp{gLNs{A8j3P^(Ou11c%a9{u&P=(p=g*)+i=IT9 z@uf_ercDDiY7{6@pZPc=4#k~Q_wTk}ga7ZIUHo|NvAvf^-(7wC@9@3f9*l0WeMtoqR@jfQKf{Iu zI3y881a@$dMjnCC(Sj<3RMLYcvE+gcD^Uo^e=^b315X?76o}%#;I^BEjo#NejeVtb2agrXo6TB8p~5ye!BQ?=M4R!*Ifql|`}0f$aXeW4Un zU)?j((6svm!y8bnabGfgC_fgE|Dpn|A6Xc7%4rDPI?ICv1NOdH5hD~BK6iYv1| zjKwQbMoAUM5Gpz)*Hy%tA;(wAUR5I%U;G;68ETcS7Fb0VsTH?m-^FB;nFzL5U{j)7 ziDHtli{-(4d;jTWynx61+?mn*8QYt3-Zr1Wn(zzo4oFB1R~Y(PT|N^`IDP2lSUH5g)@$P^V)KLv-2XRSY^wp=G$ zmQGNC4abjmwY6gyUl_TSkwMCWwBFVUP(;ZvcDq|+^2V9J1@3PS44ee{R3_9IEjA*0TxOpn43so=hH+ z0-q$U1~Zre8o5_1poj%0LopFio&tvStq*H)$Qsw=kSsHNZ3uJZA6urSKSMmlSpG9s zkPOj@yX3`#eyN+uDj|t=H7A1Y@|%|4g-HpHMulWTOnAy88-Jlmaj3Kn2t(*E$N>y7 z_Cevhn8U&fu4Z&HgcvCtMKL3OY(3+7RH1&Ux*rFi%F1*a)i^AdGpyI@bOXiOt`&3H6B7Ewd_Ve)5*+wbfy(Vlf7Cq4fz0PmAe7qzUU;v5fUf0t8I=AZYM!50e;ZS7^)b^kz69&GI5;JAVXZ9{-n}ezorzzFwPB$Y+US5K>s4B32 zv8-b~XNClV0`H~KomHs98o_I;HtvL1VyS06qhceeIps)sJ%dw9bkDJ9tN(0;bP7~h zq~;vCjY*wAjB$OZ90xX{!SDjKgF)%q!nsDpY&xR81Qt2b0_U`e`>=6BtS~}T&`cqv zPUvKt9a37%V!-t2>rPQy^}IN^zol^~h{zq<=q`!LwPa(US-Hgo?`6RI)Iy3U#VI1W zy4S_-&Q2nVmSiyGbZO9F67+)$y{74e7C6xnVQwJZ%168UWC?5S5^K#_n?el5l3Guw zQ+%-=CY;m|M|H$ijp`n%QqRuJlw_R>WaVa5F_nlauAPga2p9+>RR7$_&9d0!2o)Q; z<~%llE`Wk&r*RQDzj8aj8*OR3Q7FEWD~j%FW@OC)NZ&pmRL(#x!MX!10Awh)!myRa zehX#MRB*f(oFz=k+g;IwP9|n^=rz4*Ul>+&q*;ku4-*IDJ+3sNEzP?KOGneXWcVq} zv-gDqabq$DB8(+Y_=%59&&D|}k7d1FAbj88+v&a=UhwEIy!zMQ z9ZBy_xmf48$2VsQbs3nmo*?;<2g0(LRMjG+vJuRaGa!KiEE9SN_y9E5Y>I$$4cLIo zHeS$nD>~6MUsFfwGZt{5UcZ-S8#ol|b3e%fXKY~=1r-KtLv=i|ZtzfimGNiEp?rFB zd@?96GgV^GCo$C5Vb!NnlLKP1G-42je{9kkCzgZa2Tbahe&rW&u~B%ZW_afZT8O7a z%;$JyQc08max_IawlNC&muq2IRhgFp)`co%1$qb=dJ;f-4u}YFXnGMSf$-#WI{|b_ zaU$1-6CFsK<=QiGWUZ#GC%(@;1N zM+!AGeZQf0Zs&t-H;N=hT(LxHu~u-oK{`iBI)ArIoA?@1IC$(AaZxynPN;*ZVPHwb zct3_*Gev)5mv2DS3Y#){L^eGAw~PlEGt*Tnz}8I{k%ln0hHL0u%@&7msB=2^Y!sL) zM$rT4bx-I+6~T9oij;?AK{a+ZNaV&p{o@r^F$9727E5w$-vn5sZ|mH#J({kJJXW_gU6p2y}04;Y7#(4IRvnLSB? zKsisKsfX-?SN-If=Y@NCl|MT|XH8+0M-nagb&rz}FZ}39u{j!RsT!o#ie(Yq1|a6;5nFr8J^?m zG6+$gox&dpQIqN!qzIS+Z-@vKQ4x_TpEFQp?^Is75@sc$f$Nh;?`0KZk(6SQ75Q^E z@Q5vA0~T3OkFD8)4W@NjId5WTaIBafp~zAyMWJL#ilt6GGalGPeOm z>YhmYp4oVMTE=rqGi^X8M^S+`@3mLbMifE8UrqOP`IJ!G5*PY&kDZX9ozbAO2{;Qn z8Kn`BtmrujnXC!9Vz~o(#}R~g+Cr}-k%uaxfhwqmI;e(<3Zjs$PDnC!ik*2`Yo^hK zUI>`qIjJ-Xo~qEU?pm0b%75eur1a{k*4Tz`$eyE`q!7rH&(?EKNV+Kw|$$p<9A!6=xTL}mdV9^E^0x?nw)>?veo*yxQMgc zDmpg%oRVvcdzU+PN}P|Uo%!Yoe=0ghYaQ*%u1Tv3uh6cqaEyj2p5^(po~i&3A*!Pq z5&XK1H)m8|5BEq6=a` zEARt9Ac=g#bsRc&cmH>+v7wNEI~#s$TL9x}e0y7hONFWRtS1|i5N1nX=&~Uix-;vo z5O=vX+rKxfvxNF$B(=FZMt_R&sGrNHp@X!g+rSL0w3(`@xwbOZ2)pW;5J&0=6`{el zJGE3>s;K9aZ6vVtr9Mz0umPJ-VLC`p86;96BtH@)YOy3$nI+CU89x97iO>WOctB60V$!S#HOP_vY^(9sDnD~t5c+uFD7KTC~KS$`6i6(xH1d5 z*b2b>%dM_JYW{m_8<~9t%ovW!O!*e0+-b86Y`Uk5x_HbAs4HagI>8d$j24`p$rb?x zfB{j$cG}k}ed!UyQAqR-*fx z#+FOQ-kL%CRx(M{Cm?r!a9kUay1?E!x^|qjsq3z+(9PeBx~bc`hslhK8OYa|0W*03 z9)NR*jL5Y6o|4(GAJcYqKwn za5>A&%K!YWC9Sds43X7*Ixx$fl={HjtjDP<)Z)AfvyjKDfTKC;x|?cE=zOpHVE|Iy z0FU|3MoPO^eY?<>J92&Oqv!n8=cIrTAk_h2 z025)=Ssj_TOV9P3sw6T#VvQ?v6$Zt-EE@O)s0kHvK`m~k_moeL<29#uF#gmrdD~?Z5jyg#&}3 zo}HZ+of~RO$LX4`3_R3AP1LNdx_PV$M%~(~@Y<_O&hkpmw#|lRRR9g308))jwcEj< z3fvz&nd0@xN7E}wvCkl~A%n;kW$`P|oh;8iEdd4(?T`owecd(;8D{!Xl<)%)000;O z1S`a2U96^m%CWk^xXh)fr5+jsNVg zYXxmUF+N~G*2hgNH~}_ju@yI>A~8G!1T8IY@tQl{y+58A&YPesfIUG_Nn|qMN)9OF zTXuV!K`U0}6*=AyXMPOV*psHkNFHIItFbK&=D?1|!Oq`aKEBSp*%;c{W}cn%J=xuP z;B4-|r;XZje&?sn+HPLw)9%`F&I+`^)I1vQ;a0$v;5_O~aWnJ_KT8SSYxH)uQ8<@##KZS)jh-dou|?fB^uo0`qIE;$6O( zyUS1>(p28Kgm*Zo@!qwx7^0Mkp{*UiuHV$*t;8h{(RQ+#p*01yI~FvYmJ9f1qD>Hj?&B3s^v4bomI zi#t0TK={20tnqER{s))x#LnM+cW-6e z59Cyk(?Es|jvxsoipc0uqaBbQRkWySm8Vr^%&1X=YE`U4g!G`|Lu-#7Sb2=?A%sep zFkjAu0n?Sr*|ccWW@%T~UENNM^hV+Z@ZfdLOD%vUhqNs}yDx@5`I4*)SdeHul| zRH#ywL5123s+8x>pG9}(e9H7`RIXI7Uae~NDOIRTo!&efGyf^dnHp14yqIycOwp!+ zqC85rsZ_|7Cuc4jRrBP}r9+=Sefj0d!*%Pv)Sa?(MsK@My(Pvu;h$y{lKU z3Km?rP@u#53I}4$*xw;Wi)u;fBa})q@IVAf@(3iBW^(XB08Z-3Ckg{FpaBSgDoUuO zjvC4-rlJxNDjBe{N-Q3P@M^2AOr(K^vV?#m3^ULI!z>@#3L^`-!Z^c_cJ8{XlSvLU z(y+pkL~_Z*5;G4yRDLMH2Fywe%}OjsgUvPAKHDS{-il--kspW%!pua1C^M18Vu{8w z*j}UUHsQGI?h@dH`{a`<;XLg+>Y@vjy6Om(E;Gya{Qo34Ja-fC(Zv)i54=0kqinY1 z*i+3l_XrZ`Q~C@NC{%;++fSg1W|3&siz51u76l7Tkid~*9T24kA=LFHktl?KLZ1S- zV8afJT?)hzr?RSw6HQD}#j<+v!NnTDGKOqC!2xB(T;K=W)g&`f(Rnn@D5VTc`YPyq!Gh9%081uv*TD2GuPb`cte z7$OlyI*A4|If>KG(#h1r^f-SD71ZQHt4mqBe6N{|QSZc)6ue1&tAx@<)4McNO*fry zAX$Pg^}bW%lSmf*RHX%J0P*{eRsN#xkHK3XsQ-Fa1aaMUYnm#sX(wPUyfCK*7B=>5 zWRrzzDrK*#iY#c!a&aswz+fv|D$J_eZZm46F$-~ptV>LH-!&XC!v88#62HWBajj}k~BKTo@9GUGY5P32QXK2%9XnpIZ6SDL>7 zUoF3(rlnTD>XckhiS-2)Sb%F?S=Y$`u<;kW0sJ3OIHA${ylv}&J-Pzm>{6F3B(89Vlf)z#r~j@bbr3P-Igg(BbemCt0u`26fCV(6x!Q=L zOP62-5o{nahczsIx#A&&8e}z(Jj@X;2tpzzQ3^SYY*55w;>v>eIh4^xQH=Ud^qdDC z-ax8SP{LFzytpY(ZI3>vGMdqxCXq9yQGF1ph5Fps##*qkjU$nj>*{#Nt8Ju*^yAe9 zB7l?oO{f3?_}bVaFcd^45|K(l+lWMTBB@Yi1}KmLSro_vww;IvII!DWZlo13_y8{8 zI?IoM^K*a0IffkgROQ<~M`(lo27nrk8_g~WlGqkL1I z$3c%~lw!;lhf^8jn6o{p5}K-jrZjiP6@BNEXI<^OKCH=an0eG^Ujs@%suf@XfxO>N zFhl_S9nwRJOiCjO_>^U3QvZ@~s}@<-cED+!04;F?J zm8b+Ga?sPiuEYZ?$eb!TQJPmwVgWXQK?V>M+oJ}TS0{OxGA9uYR6LWKPqb=PtLjCS zwaiXc9BZVkh_i5t40~#I#i!mn3!*86Y4IfAtKNt{d)_s@^>iO!2g+CBu0(4*;mHE> zC)f)KQn3sbpkveaU#UcvqE;cx0x_x487#0`qWlWn+QKcie8Gb45SJksAtuuvu5j>* z)DKqh5(}*020%yz5cJX;M%-W}7WjcEu$qV*tnQfd18#h6OcRng!Ul;5#VoK2#phb} z$5~yDbag}BM}0GT+5bK3a#+K?wxTM$`w{Q>)Tmx8^T(d+70`RL=3c)Bks~#R5Q7Tv zs|KtDCrMSPg$`h${r1X;BW1w_b1LV_&hArl!l zd+MspY<=B3;fZ&iKw&w}3FWqa7oKkPF0s*@WiD?y*;MN*Ux%r~S{*g8fD|NQ$Cf_~ z&Dp3LEgqvSs#c}&{U}47YwaR4W?G!9CQ*oI?a+5{NNIpCQfJk zZKW+SB0@Qo@BannhiZfaHY6(GaV}yF>#R<(tIW%ySg-r2-B@azS5=J{g;s1cS{Z60 zM_&z)H9=z-npZv27c`Zx6jg*f(<#+M_F0(vm`zKN} zxXsfeHB&RsTQh>PIi9;OvY8m8kTXU)y%0&gNXkH}Ffgl_0Z3>H83-`hlccfmioD62 zFnGGC6Riu=Fm&-C=ovmB@Bji>0ZG^lOqdL^GrKAYyFWRF8(0t=88I393-*%i48~?MBp#fLj;J5r~wPGqN@sVdp)tB zmJ*B+QM$bqJOh+^7ZIvBu|kJQ&;bRAfk_a%FVO^2 zr1}UDU<4-w9lhg@vdXpHSgF6ju11k1JXyZL`!y}x!jJnx`3plZR3By>!!29GGTc8k ztVS~YKmTj5X4A$uJe{@U6&zD41bm4!v$+H;#|AtzKzcI>)R074gb$3zLL?vo!?O)E zy0o#17YVlwgd5J9M78)4fqcOx(L_tA1U&fx362pJqCjplp4bdaIu^OqlxL;nY1 znCp{8j${eF8iHu3DkJN~my)R|uz?W301$ux41s_NK#2&j02fdJ5D0;px&fSWs^BO^ z!Q(FYn?L(g#%FBC{6j-!lScmoz%#tYG*m-u#K!j8tE-8_9r__U+@lEzJqFZ6oYSAe z`olOYih0C94b&ujWD05#x7h2fw~#P*I|B)erRYJ(OTdInFai(&f~_jM(m+Lulp%`L z997H$8k-3P00A7R0!P@$j%-X=TtYHQv6#96%8aQMNJ&NL0L`=km`Vg9AQPMd0+<@j zAfQYmn1U6s00+2%M5u(@D5s!#Kac}Tp?sC0yv@2YN@<+Nq~uNBRLb9cO8?>fKV~DU zmm5F=(MZNbsyd`G1{6K8sW$wX&H$*+3|NW^M3#plOAX8<%3>R)a2t$L#Mz^pY$3EW zz`ZMg1C6-^y5z-5$b?W}1Q1w(6WWZ3OvO`(NWh%P!0a(bSb)Xsp$I^M+A#zw7|_OC zP*=2o2Cx7NzyJrZ00v+H2zAg50g4WQff$GZBhUdNI5A7e7fsl^<@*xexrDUJ9{7ll z!=ufT(}mh}MrJ%YjCe+*oJQX?O5c1+ryNeo3x-+<2H~{4S}{_NFhGUNIp@4NbA(O< zcmS|*v!4UHL&QLD3ovG3phh%ANP3a(EKha2J-Ea@FwmIoV3ZTxjQ<~C$WX}7H=Pr) zo5QKd{urYzNi1=3U<(sfYPQ?-?C%quvIL;qM!Kqk#to2!s@3>G+p z0LGd}UNsu$Zlu^*naZkExSLbJJKR|MdO)w7&IY(nNXSl+MMMMYzz$T|VT~*VgG6PO z3vdAgy1UlX$b?FZjUMFLQP@V$>|4Jj*$xEL5FA9bERic^*~+S$w*Z%Hp*!11Up#@_ilkik zHH}$Fgj%tID=>pEXot?tU!?uqueWwMM7h z-Qo1z-#yi*L{;J?QkmoGs%{(Eb*IaQ_5*9t_WJiyUz>vjWzYSbQ6gP&tvz5K9 zN~!@INVjz>Us%xDQv|rleczpx1xxS$@x3lNbpA z01y}gLhA(1RpN7XhefCW5uR8O?qDePUzph9)2w1fodOFeC}|Uk7Dxo!&1E>k(XegG z-bC2n1=1m9<2DA~Vm?(h3|?Y@V`bijq-s?UR$f>XC=zB;Ypb>s_E?ZL7L+AqL(E<+ z4crjy(xJGDF6~vZ;0kpUv{-;#Abw}(_#B{xMHwJ8{0(JMKG!NRWy8!d8o&V@DBo-$ zC3OSSSDa>6?jxs#0~W56(1BS12LFK_!+|}@-~?u}4d&qu(uPf2RUOjcHRg~e z29ZwHW`^cymgYQ8H3FSmNps$vKrB6+(y##=gc=sjYzh`05x^~3Vm;ZTc;UqmDRy|&Oh|yyS?eW z^{?#&Pu1%-z&$Y0K34Dj=F^@ei!wp8VC{Bzg-V8MmU#}@rtKk?fEdVJ;U;b+HUwFj z0VOc;LA)@{yDV=*nx?LJWx%;FVN9~ChzkO-d0ub;}l_x)k@JTs9WvWHY1w>C_MlI5zZdjl>J*OhvCK|XQM!YDTj*L z6Qy)B3n2hWtb%O?XRc|&0sjIZ+I!}3{jC8}GK74Nb2%sOFHlUSW$O!AXaNoZ)RpTS zgGK5Fh931zzy{Jn?}Z!BabOVaA3tV@C59gV@g8T@JE|ivqe`2w2`8@R=M|(|9W0v; z7V1R+1n4;oAePeJ?4#q=dTf@b_-`%GD8};Xw^6z;_kkhUu{bI7ujNnnV@kC$r!shm423}x*So0q59xrzw z5AwBzLzyG;5ue&8r7!B-i9gh@A`pNJ3B*9`>12VV1Ck1O|Y=ma_t%T{7sMYEnbpa^#3$aq}Bw31b8>bM8 zo%VOJ-1h`4!L8sdu1JI|paRak1Sm2ThnJ37SOGnu zNbY{VfKmvCLPvRT4{wqdcbE^}aQ}P2H+P#ScV#YoNI!gHP-&fa+i3Io2JCeA?!!PL zB%UjJQiroB-_AZOpa9oW(KbXYhjpJW__Da+lS-2uhyfmpHK}TSmB}p`7=kM(d$UJ- z+u!Zu-eeNrfdA30VgiQOdHr(&$N@wj&f+ir94G1FRe6+FesMqVz>j{xpLxSae8fL@ zO0QV$&zg={QplIvHLDOpQgWPrvwA1>d+%FH>ik1SR?;qtSWopUztR#>AO+$q9yt9( zND~_Xh#-?vxk6>|Ai{*I4i*eTC5tC-NO0(b%FB~Vtcfxv+k6lhSu zfPw>s1^)*a;Mj44$QKY%u56iPn*SL~}NTMH!vJBx7#8N9)3kxPRxZI$tSBa>6X}1wxNR8UFbL8$FBo(@Q z?~*SMK*9zaH*Z>C-@yD`2{4TIB3i#_Q>IgoZk4(fD^~#ucvV!TK2_ zuu&#jtwF}NBWE($X5?-)P{CvtKm?b_a5vzfLl&UCg5`40VJXWcK4cL~Mc82*Cb!*o zC*~K6)CK9AXjXs&O>2e_!c8GeTCPe8EHFe@bTTCszEAl{)xKE)3RR#6778%Ig&GVn zf(tfUA%lx57?Y#p#z!e&9(EWaVI?vaz+r-YiogJ&hN^^O7@Ue~swtz^Dy*`?3jgHE zW$L;stGxod8xJ-3@PlwcAPZa;OzO~r4VK6<%d|;jdBqp-U^mgz9!2df)nZnZ9S@Gw z1uxeNps?NwHnA)AyIiN#fi76xo8NzY{`+Tu2McU4q0}IpFj);ZNa5anGx|4O7d%Lw zym(c7_=lMqz_DP5p;*LYkSifTWHDPVWX&wM%qxtpt#)eWr_pdTZ#@vfvy#I700eM9 z4BEmdOKiY!_9(8)X4`L69pQ&&B_)mIy$8o6ed_kbg6ve_PceJOw51CwB* zr=I%yyZze&KNWDngwjon-Cbc*=)!KH1vrF{1}*_zY$gAbNigNrVWooI-~V{y4S)(V z00YQ?229392E-h%b~G9t$y!&R_WJ(z^6n4 z5$bMEq}%zT`py+QWFAfYQ{QHmfmErm|I zq$N|R$=*Rtcoy+w42#DODj+Y2XR5&0o;L+6)WixFD4X&gfP%DXum37YY+KxN8K|z5 zZ+v&_Wuba0#VO(~ea2K6!yslw3w`l^7;>f6W&U>VHdsTmZJ&M%e_lWkhA_X?V2MAI(fgv2y3Ha_fVv5^|7O)#@O5c7?9) za|n|N!*JE=4tTgjtxj9+TBFNWOmb3qQ;Ws6(%vl-fWCwrX_0@}tgzFa$x8_y-#7ZU1lv8H9TVA%sKdL?_%KBT5)X27rJ$7QOmA&DG~<3d6#fHWB_SEmcQkC#VZg2xZnpn8LCFJQ?Ovu+Iq7&_CE{reTTz6c$9Wib$b3yGi z9OD?1rv6=AzZ1jbRiMasRRo(Dkk^_3@vj#k1vZ=lz9>T_z6gr1ujfn5F4GsX=8IxU zy^PFd?hUgrmCKpQ)uAvFCQ~^b)wLTOfNiUGwcT`;YjXbt+X~BIoIQe|Py0A%Kz`UZ zNVvfc7Oi65n%I!1gLEN%P@RFcqtl-5cZ@yF=^2Om)69j3a-)k-6lw&NFmy*LUELG( zP}HJqVluqsH3@6*8out`<=n0u-}=5+%f&vqmrJ_r%DU9qnPpV8?ME>JE1*OhO57Q- z{V@jUJY znIN-j)gbKP-~B#2r_tVTPFs55ZD%{EMLp`YqP4nkO*IT@sI{1THzw-o>nbfOJsc7t z*W8nG6W4p?V4j@ICN*}lyZmLxPCkl+=6c%@mqyhQR0jCqSK!e)L`7zyT%z z^>0)7=tKo%%qaL8(De$CEx_P9qw0el9CfXg z-8o#<44DLc-^97Vn(&oHVO+T^fC}V-;UWJX`$-m;p`7Cpo3TL_vfUpsXanRqmNqC` zv+dXaWf2yQVYAJY;vf!#m0kjp zu}TNVfN5A=JAGgX=71u?n<9!Jy#0U^Y+Vr8z!0#Y55S;rU?L12U-Hc$zzLk%$rwCH zAHreB^gY)>9aLPcP?%)F-tnDXNq`LS(3<$wU!g!Qtk>Ll+!OvVAjE#2Y?<=*Z{F0pKts|3?iSB zY+}D1pIXtN*;!ikVT*IcSgGmQbm5&3QUt5PVl2+U-`NEDxySjbKrIZ6F8b0h70P`@ z;g(sUVZ5|ndq5qYc7j<4=0ETEGfaoD$HUf~($(aBw;5S+T z9YUZvwnmPChB)0yjhGYBrBm(Iqdj_9JK2CDI)M|6WeF-`@4*|qVSvm5zzrzLLBgey z%;iGHV9>yzrFmk&4IGV$qTERrLfIXdbfia`QUxGF5w=phAmN)RVK0Cj6p{~1+L!$i z+ZEPi%H8DoXdyOeA!q6&P3He(7HR`&?jQfP95afc#6-&AO`Bp25H%vDPW4<;Qh*8E zCT=#sIHHPewN@NW&>PXlxNX4Gab+F3fN4Y(yU9QZtw26HXAW3FK03h-l;tAAKwAO; z3l!3C(B*Gb)m$FrK`P`XzF;RdU)o6|zik@zm7>DE5Z-Y_JCH+ML6KU(UMT+n0Kh;Yac5OU>34RgcP8IllBZpI;@L^$D4yb9PM4{@l_!nF zY6@YzTmX2j3!69qf1c6`0K@peUzJTEWzyeeBHM!AUuTZyXm+N8lIEWNsb>-cH&9U+ zGTTp*S!yCGGYMefa2APlXc=*ghlZ$8mfp@W*ovfR62Kv+PCx`~6HvL)Z&syM?%|Ep zXpO>*YTTKt63z|ZxCyD#w90Ssg*Y5 z@+n_l=4Er;AdDrPduF7VP7RsXr>zm8*aTi*T@((%0GvV*4FMlO*Yn_ zO6Z_^rh~#OY1aR1X`ZJ3joE*#lw~ogYZ}Hg5uk|R)V6IK1Be!ge$3+>piZ6EiJTsa za;gRdfT{2%XbedLr7Epp<*T5ZtKOj>wg3lqV9wxx4V=KO3TX}qsgQy|rKrRNxX!T7 zEU*e|u^#J`D&#`erItdUrFE$&>L3sDm_m(&_n9e5WK;`;SFE+^nGBI+5@-}oVN1d! zyJlwP9b=w$#kYH@sHYs|0DlJdk0h}h<0Zsz{4=W=cU z3#(j`u6HKndD{5ms-68_MsX)a2L}4#08`hPKY0^WoX7pKqAm&uu)#*VWysz za2DPqXZq=b=A@t^FY(%|pBk?=6pm>kDo=Ki<_%!YAy^p&2Bmh&haM$1smQfCED?XN zr{e$SD~T%W^-8(Tz;JGcjmpNLp`(ok;!x3JjW#Zk#J~xhzy}1W{5t0s2dM?XKn?&P z0NMcm?tuSdu80xAZO7pnQd(N?h1-Ti$*v~pJ zT9Fa}!ZS=%00@MQ6*z#B^^hw8EJmpSFz_=819S;f16=E=Kp(W9ifs%hv|e|zN-gT5 z0;MteU;NBm7)g_+RPTyVBP+Ku!P>2Co~TojbR5p%$MSNo%!;aN?8YJjxb6QaAR1?9 zge*ONB?iF&PxrL^elZ6WfCacQ3_L26Hh>$WE)NpOwOr4&byso;%Ww?mbwYDP@p?nOg10t^H)(qJ zc!zf=tL7+U-b4RQfOVIC(eS3=T&K`25y$c@=dCv;aY=)3>V0fE`tr*ZF6azZ4YUBO zp6{$I?xA@l4#0p<%kMYtbO^``5-8$O!}ba^byJTRQu7`QhPa3401@E!i1qLPhO?B0 zC+S`_M1Go#{V_ZU^6TP|OtcA`tbqB!ZX#^MbrUp@Hz=TDLv?@hCLjOwUK=lYlefJx zIcbu2*)lX>OMpWsQz@@)ni=-nUbFzL2rGN}iQspBgG%c0bbt3ZsERM^m2WT??jFWU z2hxh4`Et|o06ix2X!L*=OEw4$bx_;DlA$;`dN>;}IbUhN zy&&_Yoxp9HS|#^#rvxgg2|ce#WY}6OaDy;bH<1rCsxxSiTQVmndGVSztT*|0&-#+5 zx7tQIL}!!@=P*xfO0@}WHchYNz-=oVz`>46ENA0IOZJ(kC^bIdjnMRhTeeHnbRUjR zItC&yL$M1q`0deS&g^-ApMVCa0Cr+Pp=bF0T=Sq8`k)&+h;#pVCC>J|ck|{JQi^}> zleYMhXerwbl%{Vw^&o-~(C%~7u3_%L{S`TN(=}bobtcySyNA@i#Dp$b@hQyXH;cd%P@V8Eu%dCDvs#(wj6-!?lqvJqw&9Uf*jYr*+w%=8;o z*gW!vF$0pg_xBm=0F!R`4#dD$gFuJN`@2W|ZHM^N6M7{sH2^#M%uXqb@9c2E;0vNB zz!RCkD{X#G!K|^8Ely8HC4x72nW=L!kwbi{M|^`)18L&D#3Q-I*Q>`n`QK~&d276Q zgLlX0E1BW?dcRK)VtEe>tj4(V_0nz5$z}k=Jk2-zi9r8*=wS9zZ99covC|Psn6 z-+3~}fN76A2%xbF06+$$J6@nWhr4^!-#*pPHofmYRG;|0tN4n0CvY&UC&B|MwOZLb z!qSF-eg@v!#}WjTf;BY!-EVi1cOl+WyfwJGCkMVZcz4GSzW93s$18d9hFQK|9%`!p z%Z&?xfffW$P8Za*q zpaJye2m~HDz+k!n?Ex4R!CruY2=O#alsA8#{LBQ$I~)vIrJ_TN66KG?D5GRc8Hzx@ zuY$1#l=5q-B9mNzDZLUbP{9bJU|67ms4y6AC>t8Q5UHdz+)%@)u(GPDrLNK{h#<1M zVym#q8jA?E%yMfj7~7%35!n*E5y!kPh#~)k1_&c8gb8!JQG!IgajY`RlB9;o%s9L3 zvnZvsY&6VDdrh?}S)&rOEmzZ~wlH}cQ_S5K_zgHS$*f>58;4T>f(DvHZn-+6tJAvY zw!1F7BK%~ayXC?gFG2JQoyofP+OnLthoc8GdTYMgqNGn;Oqbu2m$XRE=~hc553q>3ItO0()k)~ z=py$hB5*%T7yWNjj#9$Up_dFTA;=Xp%m4roe2SpnRBwI&!&!ZLIWmoBIx8xK^+g1hb;Y!??H0175;~vTe6D zvxZCfGaC(lYtTm9e!55FhJSA6b+>hqAI6E0qbC4sa zgi$AAf2tD#IM6xIVJuOybCl^G^^pA(gmo+<+3HXzvi}fhK(1Sf?##0wTG32qG<%cI zaMCj$A}>QmD;wE}c$gu=;07NWLJ*o(y{L&rE!#U^)-vFNu7M3ZQ|yZ+yzv;!coBYJ zjFS8^Q$I4AaeronAOGm4zq#e@H33xD9OE~?1g7bZ2V@`vcW3~`9VSl$JD774rl-hZ zjyVA+&JjA;$Ps+dVi^C^*gzP?5E1SNWU*t&%Hrb)*qsbOD?3Sm^n;QZoM2Qm@qnp1 zl#>ixAP2vz%hH7QGobkl1~@ZcADzd`9lk0DM8L|4s0TH(RBviE>ZKNQbS4XcZ3-c< zz%Hlg1GQNOjE_;{HZgO?y>T;t_X}qm<#@kxp2mOWWaB#JmKl5bW^j2doNnf_6JADe zCwM|mo~$#cf>8&N0jO9i2?a?=PC!nVM2ICRav#+xv_Sk}Aq!`>kO1KaB`AU6DI>`N z3$QXNr&3i8CN$C>+VUtcIH?bpH^iI~(Q$ngTTE+K73odyX~uHmB9KNQpE9#s64<~M zf5f$!PVoVkIFkQ2EfdE2X|t(OZ7Mj$iN>m$6RYY>r~d{h$8VMkGWmk%9p$+behG&- zf;8B1>?DxrSWt4+v5o^ASTapJ&8p6AoLR+cIJK%yH?p%_#856Vs3A|Xjx{!Wv`Ym2NL}OHNjYvc zfMJY7*GAUWt{%)Q1w=!vFs%dImRjpXfe!w-V&Dz(kP8)p17zSKB0(}mEZM?Ps@FbG7KuhT zWjp_r(D0)`%#dZdj4A@xtIPs^tz9D2ArUcU%}xsf5p3Xy(AGIG9uOb4EPOr#<^UTT z=J23%OYW}DaT|$Nw{iWv8EP=P#lrwbFD9J}d*?zIwLmtRE{$oy&2x`sgTMqV04VH4 zpt{9b>vB5H0J@?Y$m3D9kXcP03%oiZAB*UtP^j^S9u~1jzMXzj!V=wSKv+QIaxJ;c zs$;+OrwzzJ1b}tl`(nVJFdt3`xcqEr2lGU7UZ&2mZNLOky#;xqk0i=t38=m_;u3?QgRa?%!wK&BYl|@U~OH0tv8y+cjWn4OssG z)p?KjUHRVkiYF)lqMNls|APpM%BR+&)Ah(S)mQ>`3I{X^(n|STtCi=#*gGb=Og*3i z7|860m9>EigoHSvynsWuVzY>XM(sJjeA&^O@L;YeO+9lfHZACdX$B2w-v-yv-3Y$b z$B7w66XO^y?z+9fE{m|s0{YM|JKz?Gc0Ha+kMxxBbp&8=K*4?PbGQ5W^&atw|J`#2 zz(B?sYC>Eao_4WLFZ|70(ZrU#lqs{aOn^oC(BJa^jzR*uWgtQTq>MmTY+%cT#zS17 zc_>7)h9>o*BItT*^I%VFF2Dx1O)#uw>A2@iHXs(fLF#%BjlzlQLTvb~j*b7w=-nKH zxgKrOdV%?9K^JBr`f@P(#42$5&H5VX06MJ*5}@tE&jR4i0g$lne$4K^>&MOy{V?X@ zFo5tD0+S5O@EW4MKu&fTMN=|rQUb&UP)R24%l}j^00S@s45+U_zyKF;^g0VUAf$pk z00dkB^eD>)a4yYyt}1MbDb_Idjt$LnqyxmK_6p9xGO*H8L2pp-_aJcvC$YFluzxHu z-CR)X8chaium*8Z2SZU7d@#lWF5rm5`(fdo(R1cmRaD3JxLP7^tC-XKlVyiOFM&lPkqAES#Du`li9 zNjM+?0}x;!3C`id&jF4Q?;wPAD?N(rBI!dSVuzv% zn|wGjp`Am@mP zC_xYfC`Q| zO7ZOCQqzQ^`?|v*i|{VzuI}(I?;P?kS1lq93Zd5TbW8{_H?nnRKv6tW)_N_ z?I@6uB`YtMNDl+<&;VPqJ{zPdK;Q!QOC@hfin=ia@emC<(BT*%5rQB{$jmpY?*~Z1 z8q%>HC($>5lLgHPo3u{(c!3wp^7)!G`fPzjtB(iyjTHZ-bAj08a00K>R`Kl^QX#ps zAvxe7zf%?^vOM^T=Bh9u>Te=a!XPLLltf}8SRxER1wQKw16+VUhfNuGl1jO(KYhqE zf2NlDa~tV`Hl4C46XQ%`pbiA13k0J8&=GBV;Sw4&1`t6^GGH1LAs4*CPVI-pxKcxb z6B7|FjF_a+hI1J1?FL7bL=P4EZm{~!?w!&u`(z{F1`bdLaupd8{Fbl@{Zc%1R4^;< z;$)7YY7PDzN+S%<7aJ2(NJ+j(Y5zpP4UNJ|rF1|q^Gc_*N~tuYsu9A#6!r$<4(W^Z zIzTu&U?v?Pn$W=2tiVDo(HeeX8m0jjQehe{Ar}9pffsu9Z&<1?K z2dH2OP__qJfWjOA4U82q0A&_-Gu^tuPQM{%#X)Dm^(y!DW`j1-au!_qhXnhy1+@WC zm5<&EwfWdp6vGY|-u2#Up%!!jx>U3uTU0s^XCTRIDG#z=6Vk`V4@b{7V0V;9FXq!K z5_LqCQCOy77vV^0EkJ}ZKu9w3%7bEObz}ek_A~)ka4T;EJ{Dw0_CTz{EY#vGcEAT> zfWkV^SPg>_v=tJmY6ZPj-7wJ-$u(PXR$M!GtFlsQwNBpX4d1{H6rnazaZqXtH5bHE z(j=`Hd@vwww`+T<;SfM6$My(K?MBg7VAVD}(T}e%?jsvBlxo26R%bm|=dVU)Dr$V@nSB?3|ubA`_{%^9 z;&w6Vul`DhWmc6ySYmHYzzj2)V>kJR^SP4+HwPZf%xX;Md=;dYf{BR9iO3=?oaKm< zaB|y@0jNP+Ygtbx`j**ITy+_Xby=9hp^AGpi`g-4tl=0&y6awdYMaw_3l$fR`I+f0 z-bOkYs5$FOmrJuEYDpuNCo5oX44*%ehdFAYsnAFc(EXRQQt|wxUQzNqtR* z$&hz6nI(1j|1jB}saivVGPE$D^JGQAw1O;FODw47af{UhrvLzyYNCC!qKy`pd0DPM znyx|DqwiX0dA4ZLW@-PI?`e@arBhmUW7nA-xWz_#IH_4_)rd*tIL5LzcTuq}`4yaj z_Z4IDgN2%qt>XYJAe}F%QVy$~H>p5cf|CdYa!CcNwO6b28J{s$CH*pqZ_(i9L6y*Z5pklk+b<$T6G6ojlcVWM|zr>B|78etCg^jdhe2tWPO)_V~0!aD66W5Y6*{ah#t97Ndk)XAV2*Zr$wLgRc zry>l*+Is(dfCj9Ep}(&Hh+DeHA;JHp(-b)kPp;?(QZL_C5s5lbG86G=e1a zZzF1;z9@j_UK<8bAkK^3%sW28gngwvz^pug*M%)ae6quH>I!^729B`W5x@-);GyRo zm!;Eo8j|4{#=A1CYOY&c#e?&yIGyUz`+ERb_$-zGC3*O-E4<+ zA=2LAkBlO~@U(GYo+7#?A|C;K-n84R(Zt^sUHTmpCeEp1%env zd>|=bKDZe_mX-VQ3H{qW+POKpmofk6#oh9e+g!&x^e_G0Fg;H#+Qk8)+qZAqx*05J zEulhf)~HbfwjiR!i4-eZd>|p?MT!|KckjlZ^OjBB;=zL`(QAiZrRwpc)!z2zp=wh7K}jR7K<{D^^5`s&xJ8waN^! zJZPA$F~ckl94APS&|tyF4kUEzg7BatM_wa*=l1nmH?ZEnf&m9Mytgo7!aIfxR=gN8 z;~g+uL_WO328ICDRk(tJS4RZ6b&38aLoWg>;oaVc{3PJU~YoE2m1aE zJh(UE;)WMLjy$>Yfd>~-Yxo>n!-duk7Bonlxj^gPs5|_AEZDJL8_S#5cpgH?^&dqN zP=Mhj1_~-!(o|_Pf6kr!dG=<*ov1KrlO0I%}Aq+HTqQ<3M#-5nqiF@;aOv; z`GtcAu{p4WYz@f9zyY&}gB?NJg+rV`#sx_XmocHRk6o_cz8fg=^X7h6gxv4kIeF&#?Ne*OIiRDcCO3MmIoJ|zML zQ9W3dRux)^p;uLX$YBkl*05FxZH-_-iiB;}qm4Jd`l73_&PuBdDuD1=t3LYGf@M4S z;Mfp4q<|6wNy=745wRJdiE&f@hUS*pY3XIP)~0!onq{U5T$bCBsgVDh;2jg*c*6kG zOE0;+haR5pV$|-QBDFVfLGOa4^dU9nu(&&R>D8%67YADHuWS}n< z(8O@jPMamr*J3&J&_NTe9d`;yccc6FE7 z41h_;LVywwU;t4_i*>K7;Bh8+K@4)qHejMgHL&49ha4kLPpewha)Cm1=|XqD10K9y z2*cua4L!;G2z%PoJV!(X1Nc%2ed^-?nEdN{IT@G{wa2}JnScTlpp;QGz<>f^Kq}&M zSf|W)mQZ~P2Q+{mP!dNMy?~5yC0mWJTr@Hp{cl!lR3rZYQRV{u&E-T(BHghJpoAqP zsSz4nody3`tv*7lJF|lhHIzXOa)n1uQmYyZb+@|~qOgU!kf97UQm;MT@BsjbK=fYn zLkp};ltaAU5x1Abq}XjIB03NPY9hV{M8JwDpqN!Q1h@~Sg;Xwx9|+_)mmrbxMJn*X z8CBM}H!5?P0hF1pb`S#)C~$$)48Q>f@IV7RL6Cs7AU9nHrrCWb8R0osBO9qgNUrda zlU(NtEqNZ{IS*_SaL)|^V1Sj7jbEaK%i8*5%2Q?!i3COEP!J%1w=Ho3P2?B^A;3_o zU@?oL%9vSVu!5eXYBH;l%P?D3zh^cxnaynDNRj{9BGYJwMIgA@0;dT<2Qt7ZrYnx> zx_K=Oe)C!fVOpC+Sk7TIk{2iZ-6Pex!roCbsqnPZpYn9P;Vn;j^#Z`Ye8{ir`BMX3 z(8;0{YS6F>C^j!BN|O-QmY5t!DiFxPgVa)%Tb2a}reezcY9>+{!N6rVN@D?;iBiD6 zkw=8d0mxu#tU%RqS*qA6P9HlogMfo+O-p1Vg_Sj%a0BgG^IHy ztxh^Q=;BYgivi}a0`)*-QL`ih=q>;<;aLC3iuX7{%S|_!1|4OP3!S~tU3=S`R9o%eBnE0-L_F3fCgon(cfxJW4Y;4cSR-*EdHV^ITriX2qJZXk&2Ljmu7dz4om<5 zdUmCo+H}0*rILAN_fz#^){&mI?;|@~Unkdhz6uy^dE`mY0E1+}1%9no{|T@ng0;b9 zehX~~I=2ao`HA$&zyS_W0K9=91R$PYW%Bx$&A31X9=+87b1-7Tx_HonhLv7y&{8{+ zPSFrt!30$&WbzW(b>J|FIMo}qUJUT?Tg$R)R~s9b4C=LNo2`Nu zT;{M+z$r>O5QUS%fg@NT0}(ht_)=064Dba8T_miE0b{Ggc(l-jmaemr>46(Nu)B*+ z)&Udyg$RRZsc4{W7Zllype z->i(aZ6Vd9H5)}Xus%UrV`8^AM}$989>;&c*vB{bZce`7F zPi))B-0n6w!NI0PD$<0U&V{&Zg}?>ULr~DNbcp59~!EkrR2B3 z3-0d%nS?+TNWiTh1s5j5IRgI^nDZ}>`P{xpe7YAuHpXccf@oKp#{y_l9jy(7@JhOy zCGQfI#Pm~g$?3i5ezKH94Re~eo7DQI{B>q)-s^%rEH+`P<7qdj;{!Or3)F6{wy$0FHa#+QFFhe6c%hj#X|r$2rnse6uK+3)i9xqwgd5`)KT z`SCA@hjhnhTL*)D%lH3u24!Ih2LT5|0WJ^%A+T2zM{%0Bb&3OHH39>7K|0iwN7YnK zABRu|pl#wna;&F*E$DWtS81~Yd+-Ne@+W1tXLop~ZoacrEwmA)RcblMe_D2GoYVj) z5lRlQRS9N*#)p7TST_`~fK&Ky1Y==QaW}n2b)tlM8Mt|0NN6@d1Ky`I*riK7?RQh&_-PYXRVhl}Lrm z7y>8}eN&fDaWrGv_hN-6aUB>Kh?Z!jSWV%lU89Fx0Pq8?2#4z^i$wEwOoM5d#c6t& zi=bAId>CIfM`}9viy84X!#How(;E1OAH-*PP{@qY2y4!$kdViW`eHW=QxXVcU7zTM zpol*p6CWZ7dTCg8qhuhyr;wKdDuVSbPYXkOk6Ekyw-r=n?{80Mds6xYC8%h>;^@V`MmfpeF#NIF3vS zXCrwDkLLf1DjAk4NtUn}hp#wU4Y6MEGfi9{+9TvXRue5xeAV7%3w%!zBTG=0$XONlX=%5)+r-~myI86X1zH=qlQ003Kw zO`kV@9fxgi23{%%4y_5F@hP9NNQd#r3o%)Pv&m_=8JGI$pS|guJn46S=YJLOdkErX zp=AFP{e%;*c7V}Yg|fx~&?%h_`6wtMOBu!h7U+!@xgr@bK-`IWj{!1{fC53#3f=$= zqnDN9hfwJmnl8!!+5jc*IiEL*qpEpc?}wk9CYSxGJGD8NLi(TnNu<7@lkW1H`^A6% z*q22}09l0}N1z{uxttNonE0}o6*`>>5RnXEOm1W%Uk3tqmI1ip0x=M1DkX{+00Kd9 z3B6z(K~SC^c`O|HQluB7+LoiP*{7{JSq|}j_vs5Xh>Ji9mq+@Rii)U>s*g8ET7(Fx zPui0NkS_wbRSbHNSBj;G>3Gk`r4dRW;=@oRl8xD^BCIk;(Y9-M;Q@C6eG#AnJ`n!| zmM{#zK_!V0b_LLs#$u-nbf;RmEPVQ>15vE<8G~^*3@_QEhuWw``k$Qjqx1NvIEQ7Y z#h1Y8djg47_EDwD>7ZNMsY&Ng7CNqoDRpqB0hc+IC$elOvH-j)OA)02rFjhCV59G8 zqf}xIzAy<>00H>alp=^tNurhG7z|>0tbS^&s@bq4hp*>V4eG_LLIp`Nsh|8=r0S-z z06M9HD1=M;cQyo=XQNhyr;MB$s#Vy4E8D3@kN`~?71o!X!DK&xp#lL50Pi8M01yeN zxv%=_hQlxoi4X$?u(JZIaCVf2D5$Ut3$<@JSuIIUw^*pq`mEC$t@=4?Il2FT+PX=_ z*c$wDoGB}==jyU)`)@AcYZ$-*9?BQDqIJV|0q?=H2G9ULi<+ysuPWFLzR(JZkO)Dr z0x?j53xiKPE3Ye1Q&H=V>T8vob0Gg_) zL;0X+tF{ozy2p0}*K}=?d6CCvV=QtaNGq?`Q~->yxABRu@A)O?MGeDX3$QQ_(}29T z01VsUo{#&q#j39?X$`R1UKne+mrIvfTbqoEe|o8;0NHanG!jP`d?stQD%-lMySnD; zsZGK#Z!4835*Z+{FcAp5dh5JrIiGzSmN?44kQ)y8%90bSNR;cWhR$pHvQ*V`0%j;Ci=0h}zU!;Lu*SX#IXAwxQJCXw!h{(wU;%M`YOOIsSL`%tUuab4-CQ3TDd1$ghoKGjfKhmYDg7E?%&;Sb1tDolp06+;qE48ZmzxWEVD~Q83e8W^i z!&A${lN*x@%*QJv#J}LcaoNWa+@BFFq)WVe|K-F^`ox9^7yUwfR*aNcOvy=E!p_)< zVBDRnLchGqU0R91{wv1;Jj$g^$1^Q+gFMTYOUSnz!MH5J z0lLT*JhEalp@nz4;HsQgJjq&I$;m7fB|HJ_I$gN(7a=fH1yFuH7Mc!V0K7}eQai`0 zT*KXb%B2j)zq`XN>BCWD47se!M0~xwsm?-*#EhEDx;KPQ47#CvYVP3_WSeiq{K3bp z%mIzIYh?i?(oDZ3M$)vj!isHatj$8J%G(^YfZC_vjI5AL&JjDnZQ{dKd$sBe(*D`N zBCR{`9MXh*q)N=oAFId#S&V?`t;q?7Pl8(d4|*heR&PU<|`h3@1IrC2jwYwA{{yjMCYw)or4A_1x*n{1-fi2NGjK{5f z3|9ToV;$D&Jfx7#y(ewbTz%5s+tR+=lNszMe)1m4*uj!q(>D#*rM(~rlga#38Q>$4 zc+_LUs;9608t6D2Og-32joWcN(YRgMw~f(Foecpj)vVmZKD?~4?AYr(%R&mz{3+J9 zhtlv2*@8R_DjlFKeZkvWw*+7|G2v>5=ZI(f)}%e!rmb|~=fye@0(Sucyjp%|H-fND zZRCi}=_uH#e8;)n)P9ZF`pw&fE!^YG-@glP&Cvf0J-pb=n$=^yyoVL+uHz+-{o8l2j0;yx!@Ow>UA=9&tXF%7FS*iJ zW>5H>!B7gx--@~^uHs{^M3aYOADO2yil@o)t0%|-I4k?)=yjF4-1N-Bf;`#c<`zsz~IN<(Txfp)2BHlNHp5*Bq%fle( z(H*3Q&gjp5=n}5nkp1hBe%u<~?8ks<(B8wCeb0?dj0KuQ&0_#TIn$sX>Y_gCD?2wC zhUzeSr)vI@XJ`R5itFu;-x0m%J09fluII5%&cuD-<3qmNx}L8D&XT;|>%RW)L|@X|Tj&uk^uHjj4UX^$FH{pG z8_n~_9qd34$hS}Uf#2K_eEYaha^z=RK_)@R)bT9c!s@X2B>6`A^on8}c z{Z-+;;-CNdu7U2rie03*o+U^NsekiDKJzoL=iWTvIUeBIFj?6!z&)(^R}JNhUf~aZ z|Gx11Ck^ZXVQg5jVaAdfRF?lt*+ON_s#R0=uv#;4)v|%Zm{DWK1sy$p1Q}9fg$g1+ zmK<4jodk2LT+doBoBg`>0~8cY z^9DF>M)9l7ljnP0W48angqs~cXt3Dh&Gj4O%KS?*{>b_v=l8`J#)c_KAjA|>sG*1^ zl4!7s1j`7u^9WD?HVa{s-~pFTA}O}oB+%_Pmt?BxCY^-iDLEBaJT9u{q=PZW>13pi z#^^YhAON-yFkmYmvlA=30}vpg086~tOFg@kG!HQIE-G!J_Yz8GpkaKu(mpM3!R$WC zy3{hu$F4M}paVrCtuzN!+sH{K!MQNb+2*7z!whK}@x$DBE9n5AOiYou7FV?K#X=87 zG|{IRU;rl`+3K;!wIcno01iGVfRXUtT+&TW*Tcx7(xzPKpu`;0vOfP(T{YD!3H;2| z1Q|+G)CbX%@YDZ|D3tR;*<91pkvm1iEl)mUQlL8&13hj~7Zru}*=VPYkpc^h>Y@t@ z9AGp7uO^tlt0RIc@`p`5UG1+VmsC>1_OfxvFe>FkwO&^3yR21x>l>3G#LNthA&4Xb z$H547J=i>6E9|w`VISb|VTo(oQ&`;iTp$7s0A1qA5wNj+H(OP|%PhNZXUYg7$iRb+5pAI;O=B}xgqdtOYGCcG6VHiv zdr4T{W}?X^3zjWT(2orzdB(EOrqiq9+r68a1gWpSVsB^$fP+-WC9^V~?dpJ9N=S-gacDZi4%1 zCfO@kN-3#Ks7$_jrrp0^2nRFY!0jvga9SIp+4Tlhb6WMsIij5M53hc>*b$Ev)+WzC zU%UFzuLm7_v&nX<^r|!fK^t`EP8c;&rF;+XyyvUEb^!Iey|Pw!XKYoRWj$z02IJ*l z__`r9-s7^7yoPn?B$vZni1viFnP99@8#9jBoRvKaYR`ffG@Vg?Qk4S$gM8|_2zx}u zzlPvXKm?hc&fteH|GZCy^{Zdc8dD}yHKczxER4JsSGVE?riTRsAw~vBK!-srVwP)( zhBE&bqOEnra}u;(6frnODoXJv2AIWLKo~+G3K2?!;U6<>_Lvji>xD0bUmDf8!obB( zjf}zB{S-u+c%d(c%@AWk#K;VXaM4`>^dUwTM#PcO=~oGKUd1$rECTpxdRDAp6(u=I zsI(;M4v5lleWvk|MI6mIdjyWttASIQ#%&90K6DxyUgk*LaJI3-etAyj1(3naW{)|69 ziy{3YGoQ}XQjCjh#xt5Rv%;v)Aj?>#L0UP@E&{Ngxx}X*dpR{E9#M%^8|H1c#;5-R zAmEY7gk&U{xlqv=KvRE=8GB?#vpZTd8RVqT-nL0fp!v*=FhpbEbobFTlJPU= zC`MVvCyw*^WML#K#MR`Ai(L#M>--qAea0!6vO%QPKt#+Y5&&$-Oz2TUkiqRSl&Ma& z5eo{SvRqCSUYvBNOWDUho}p5lD-2o;|CUB+yzrY~)z5tHhqw0_=8kyFDjDx5&jkUo zcsH%8PVJggoer_5KBd}*0xD4G5p+01p&nEf`&3CL;B6A^<2pHsM-x6~tE6n73|+`k zQ^qiU9X+LgVwFE-?6H;yp=BHg(z|5j&{lf2Yiwhi$%w{`rmXubo&5RJVJZKRSPd+! zObGBmk0Eri$E73#EC38}q%?=jfG#MFq1MZma+KE%CuZMxO3(VNtR-~}(eRg5`K&UI zvEn1}42DbE@^z=P)vF)Wzgas@0p3qT+hQi5)DT{>O! zBI7apdT=T?dfgUE*fQM2>|C!|-t%hM7;s&j2xodv+tPNgUX&me~4Qg+I zyWidvz(k4Vo$68r8sCYT;SlocY4Rzld;#8S`BUvk^15V{((Fj7rN^S*;r$ zZT|L{!)d12wqKrUd`rC36ticLEIwi|jfmeww)wX-o-xEuhT{P9*v|imdVvN2Fo|Xq zy z9It%dn3@yQTwbTl`WosJhuPZg^>Uf#J8FO4mty%<^^6e!TR^105fcau3BYxZb-HDZ z6$Jnx8OT6#ygi%bWEa}kY7BOifBjus7#rE}bM(H|Xk`z>6{W6)hGetx3~g&0%%1M6 zd$G+|hH;zJ2-GjQF9v7cj9UQ^m;ePdh;DV496AR0!7vQXg)Utf*^a&V=A;~Us#N4w5*uJ*L+T;DQ3JIo7>c1c$`%Wbt`yc(Wui0_@+dj~w< z&1`WsGcTxb4mX^$zJUT5Q^&Igd*mU%lmd)>jVxdL+GDPH&PRIlm;b!yJ0E&U$2*?+ z`#C480S$|YIPeY^JnUaT`)w1xpZ{E5Z;f?z#Uo-78;HQx4bXMT7k~07gMltQTUL7S zJoKaIyuD2s^Uu#+^gE|Al28Acpr;dF?1{Ft`|fwzm!I}gw{M#NO|5(O4>j?<_dO&Q zpP>mPV5!G9KK}C`01LFj*w(kce-pUQ6F|9RJJEZ-(xWtlfG$^(w(v8*2$aC`gF4$= zvr;oWHzTa~6Sw%2KMzy{;A^}FIJb4nzZ0B*1|WsU2*8yi!002r>$^Vblfk&VJS20l z^P;Pj3NeOj2530C36#Jfq&*-E!Xq@g)oTWB`=xHvkgWr%tl15&vAT`Bx~%)a_)~;M z2*Ka0fW{*}6Fk8jOE(ILfN4lF79=zqv_X3lHn@wyI5f13(m``-C54MNA~Zie6hgp5 z!ZHiOAC#R#Tjfn82mgg;WtuJs{py5pKCyw z%EMO_LLg+1XK2N0U`Ka!$3dJ3b%Gb7OSoPXx_nG9WHw-5bVZEXHw5 z#tulvh0Fl13BDf539pkz%D_~M1_pR zEv$kLaD;}Oi4M@Z3SbKoyu@fE!->Qm07wLtt3i27yXphU&@)8|0+LnAaoK~$%^tVulDNoT+#o@55T^vj>?NoMFtV^{`cK+Ix52B1toLky@YT*P8* zAY@!fr<6oSe8>ohNUh{br=muSOe?r6z-u%#Z?pxp6h(duJ;mHUXL~l*TR2!Wx)dYA zS=6?p!_A}1$#&|=-t^5`f~ns0vsp4sBFjO1@h`Gw`~?L)y`JpLoJ=^0lFhxFMOduO zntX;J?Mt6DhQvh9`DjnIVo&XxwDxSz^o&tq5Qbkw2`6kG30N$qHM|JLlY!*G=)}4(t;|jBQZDRJstmpes6-7= z5&h%LG)>jViwf_sMg(lsIgP#;Wka$ow2^GfcS;|d#Km>mQ9)HlJ@nE1q{Vv-(q|w{ zpFB(ig}3#L(z0~J6$L4OCgA%ey2@yg>$dLQXh! z(-MrIuP{xGNz{&ro!K{))qA5+oPkf96h!_1>{DPZRza0Tfz8c6C5M`HhTc?AIF(hIO;XlG%TkX@n zcXCbdv&TLCS=;nkBP3eFEmk8u*2RTbc}>f-s#D1w%vlQ10v%9YD+Zvvy?@L-ZgsN? z_1+HzR}@gj3?1F_rOYn>z0i_f-PI-29Eku%fnAoBUFcZT+ND>TW!`AL)gyzceTA-> zgqJ@QUV=SBf+bu)1;kcVC#6-?&}7j`8&JdS&C(*wzVyrD1kT9)$*k2{?M0*sokA`B z)=wqhsZ3w=MPc>*Jrxc?s{GKaw15$vUw1VCn7v*7-CMo&g@|R%cUlHdVg?~?#dGA( z0w&&|C0+y$*4i{!x>VqvOicZVT9TYmW>r#nl3tX&G`viwmDFT^!C`DV^6eN=!TTvk%Ktd-PQ%KH#A( z+9g)xMOMc_?aycbNZP|h&OkQM9GqMUHq3;*G`>96AYHg)6*?~lP+2O>Gs{+@%s?p| zMm0uZaoxhGyqK{aVNPXXvdy{%D1aQXKl#mLsi0eU@=A&i6v>?9AW4*`zoMv{^#ZMMxp&LpLUOx}^Ed~PH z?Wv)-fFIv=G+8pueRo6g|4Ip(0%+%WIbn>&gvgbX|YymV`XdXC1b~AKSYG*cm`kd zjbm_~WiIV&P(|CI&gaV%)n;q}fL7|~FvAsmYRA3Sn#qK6Cng7%-bqPD)*!{~b6#t$W@*jl>Wgk|myAtzB*ausKhHfij!nv1#$}N$SuJ#g zPW@@&hUJ)m%7%2?W_-rQ#tI8S08(HKsP1EAKFm8!Jx`WTx87{e&ghNi?62l-i=Jk3 zXvK2>VC(Z{?evc8&=zl%rfq1T>$<*e=j>L!M%#HVTSVYcpAPK8CTy9=mt5zu_kZwe((2oZT1%N(3WWgGI3y% z!mJTtv!&&6&1uxNXHFGg|F%wI^gsx3fThv^2Iyx4Kk(DR09&xzC_OuTqLhxlRoDV=jiZ`cPa1idN=la z&+^tDc6-P7Vz>82-}ips@?mdwc8Ep$hj_xK@fF_d_dP!MUDu?R zTZ7_-OICN^B+SxgYj_8CdarkO9PQCgcG_lnmQU}Le}-h|cYjy*e;4>+r+H)lxA&O- za-s~8&&_Kw$MkBim`*o(vbD}Ro(T`UfN{?X1aMzdMd~@cz?h7nQwcYXZHA>?+ymtqV(8W_UVTFYopKho=*Ct zCs$L43JpjAXY_V*cZ!rbhT-H%%pQ3_@A}YgdDBj3XTbc-*Zj?wF-U*2LKp8SUA%Z{x1LEcfo-I(ypxWG1w9Q`V=AA19X- z_3`8@pJI(JovPNXU8`SzkRAKj?s&hN%^Mc(2J+(n?!9|{?_9xsA))u%-o2t3>)8tQ ztYJcg2^vIf_E~@f3Roa#1^f`sM@*@<8gj;kBvVH;E#u5hwC#4AFw!6+OotzW$f1WI z(&piaCFTa4P0cL0Qc}w;$68CyHOJb6BtbWwjyp!Rl>}FDSAke%h4-C!_aQ0YV({I^ zUVKkFNgrJ@*!LDB7vx7^LK++}L6!!B8K#&J6~G8MMlt6ggEUGwVNDkDgqw*SZdhlX zbmD2^hIHDgCyBS+G!tLVD+2T5X-jWTtwdAlF_^ zLK*6Nc11ZQU2iRBfMo(EaKHf;{5PhoTFwe!W)%@&$(arEx+XL)l13ApJY`s$pM4^m ztg?Mdv*(-~V#rK|gBrSMq1VoM8jRN>YNMmyF5shf;*J|`xsnD+q*p|$wW)bmGRaq` zi^y=Qm41mTYN_+qg=z;8P;dgRj%h%FtFQ`OtHKLMWWXh7BG;?0h{p69g|ZdGh2slrIlWKB&P53l~`b!f-0rZL$gO$ zVyGel0Rtq6Il%!4Xpk_&Qx7a40nZiv{i^av zi&}eV+!Q|tv)wh*jJJ>9O={Mu*WX@>^KPrL`yMlPRRzgr>Y|kKs#iUHHP2IaX;*nVaG2-mi#>*U z;CM#W017ZoR*?xnVBKGfh*$E!buJe^4G0$BIj8~}`2*Jd~$5b;w!O`H8 z9)M+VRuA5d zXS@{%r*;5cl<-DAbO}t%cQMrEW@E`3#~nZB%V(v?H+>Y=OltWOZoN^FKSWs~6IsL~ z9#J_tYNR6rXfsLvEoW=7;sKGTz{NTL5MDuB%pypMK=kknlbNhSUP!fw>v2zv0q{@e zSh>no?k5 z@}8))05GxvHK){I88 zqik*KBOlo}Cz>=#QCz75_o_*pUh#Q^nU@OS)d9j*;7e4a06iJoSm$Df0vH&E$w;Td zrCtb^1I?_Ra;clE{=`BK-AFUgH@dI3yVXdTdVf z`^k7|l0#y0#F(U`gh&GP#j_qbmA0K(8l~fWt#X`OH^tOr!CK@P-yCfww00C2; zv<4Y)Wh_UyA^!1&w9GyoV_V0# ztZBXPe)|l`lFsbUWWkvf<03_P?Nxf>JY15U9KpKOYd$ErX_OuuPt93?!kE^a07763 z4u@^K97EBcz6)N@nmXMoB&~{De9SiQP`$ZE>WgcQ=Q`7Q*KxMDt@T`M{Q6p?A^nlC zhyBD!9-EuSCS@r9Np)x-doqhf*5X_U^HNBh(v17LcBZ#o5dY-SSYcMyI53OQIQhiX z%Q%M$SFY4J!aLu&wlAG)PV+nWo7Vl_InLqja~cDD$H1#?-fo6XguhG3D}~;}As*8v z^To+b24%%F$s{D(#Q+%WcxNhuMy`9j1O~`~EkeYnktgd<943}d((UpJ`5fQoP_IOD zEZLe1mi^yv-S@rMKKFwse2<83QYRw) zRKHz(vh6khJ!S`&Xwi-yn>DHhbn{UAj#9^J1HCnV4-+(<%1B5^W{@^_w0O*Mt zxfS96nc0pCp_dZc*}T=#>)BhLb)d}UULQ)~6&fPXWnrHM$rcveZT*eYEgXR16<=7~ zgK~q8`p7E&kmF zmY~3Cq5Tyd@O=ld)m73-qJa69B|2Ru5@7L7-3-X!#9e^qjbb!11V+G5Fb$J=^&qQ<{mdjWKTjQMdD&b znj<>Wj3YkcFK%QD77+h6T1yQdGKM6fK~J>N06)rwRTAS>&VWfiqe}v00VKjPd>2rl z*iDL~`SF}L(w;)H<<0>mMY`o%#$_!9rA5{ju=QBqAl^rMlkr?q;n+uF1m6qV$D%3N zCbrb%#l<&m5i>%VSB@eFAc!)Undw*{TdJj77Gemt_B4lox0x-ft`4O5`OlOW`LrSFQPxho} z9%pinCUcIa3EHK81&~o9+$2UKYfjurwqubcW8qMVZMIZOQr-li00cmzZ(>>jOhPl* zVf~n8?Kvc8?po{BXE;J; z<)MIiZskdmCnn8>cwzv@sb__000DGDHNfX(VrEVnr*iIRem19yKGSnb;eW#DP%UWP*rN zU>>4qmR=!?(xr-eX?_Ofbp-?fA^8La4FFC6EC2ui0N?>00RRa902c@x_@F`sf(Q#H z6xbj_h7AxQcJM$Eg$Ii$Fv?KDv11DuE za)Jp1h6o3LTScpp=m zOq{dn&&7vZ!kahRVb-5Yk&^zpdZ|#eNr3`&eLHsV*fo9sA5T6!r}F5{lh>5cp!3Q4Ac31j9)u;jq$4EZGp#gFDy&0uEH*B!o{s<%FS7 zJM~1xQ$mI4lo=$d^+i=Ani0oVD^g|17d%}U23KL3RhA)!xRVxJSu~Z!8CSSd)?9VL z^G$Y=DAIIQfuaPeTC(1{^~? z^;1$p!8jsURLwY*R%iTp#)~=)72>mJ8FEHD?!3qpRc?LpMO^LBRaY#CC7IY@O%4X- zUwBpG?qrfs0-9x*)%oSU_>Pw6a;o_mXl&hW*XEJ~7o6K+!OeN6y~pjl=XR}`DIF@+ zQGDGg0VBHJqlcm=UU!nF_vpyuRay{ynVw9k0-7pNpF^L5su6%GoNB5IID>Rx3_8Qw zU`q}{n8F1Y^kCsnNdMH~Q@k4GRfu2om?DX3Q5DCDS3P@%(jYPwRuElIwBH;fv;dO;j9q2Kkkrf+Q;oJn4n zJhrgjl%JO8p3y`XsCAtG+vs`%Yg``4j$$VY$>yDodZgR2jB?AcxA*#{1Yv+5sG`b@ zLPw>tiZjowzG~9XEXf+72L;jKgAW%f?YvM(`TDd_BtF%YvL{Zx6;;hzs}mSs1a)E- zHj*z_J209J6^SNq$_|+F-=W-G^y7AnP&i-*iHeBA7@eJQSGr+(Zur!x@4t5SV zo7#lVO$K|Q1O@h+gbinMcCwel_HwvXz@l@F`oy9%wjGWgYIUCj1<6!*ijbvHJ$_kP z$}UAIOVuZ4ir7y^Mpd&A?9L;rD#?NWUezE5IVfmBb4d#vQ6CgkC}~R5P>6yu1g{(= z3`;Q<^`^2EWpVF|XV4H)X4E~h;OKm5fyxztw7s%mi!SbnpC;tTiF3&>G4VhbCK$sQ zcl{55k-$s=Lo>(&8nQFQK@E~V;jiozN`eqi40`dAz2Ggk&Z}(hlQx4;9q1X!&)BXh7-Y0sB~DWAL1-$zuZ|$5Tqa@y5xvR zNTLmf1^@y$LRT01-iD0w6|XQYL~5DQjJ$=SGqmW7IQoK4#uyeep0O@FYRVVKA|xWg zqiu6M*OT%n&&50r9e#Yo|0pN_$Uq+QpQcHqo(jjE==jS|kaW{+<`_wZGDmV4+>$^C zsyR}4vU8)O+tj#*UV>Yo_gTiMt*C@TR{E zCP-{xlAbOoRys)HOOV&h3NWui(&XB&J~TxR8OteM(;n4UL^bbuC=6_Qi`vXm7ehb= zM$O_LxWx62Pt@;8>Cj`{7K2a!N#<{tYy`db2GF`1=W=;j4Vtu*xRg#(O$?>rz!H|o zOWG-ctKrUTK8R7!ITm!JOO&Ea`pS}?$CV@%De46C7sfosmM^WL$u1>Rn(B~;D)>+D zavD5Up`;{04eBvpf`bVE5QIWFp@Oc&n3Jyb3X4Ob(H56NHEu4;MN`R2PGsb*AvBAf zLpqfCL%BD24*@09=gIB?dK}Lju5s(>^C0^JCH_2@jnTPk3NP`27IfP9(c*`kg+X}L% zGKZ`gVh&;dXkL-kLaiHNOGs&?F1Mm~24cgHyWRzFoa7N1Epw*4Uye3iGt*^hhXzYw z!b@T!)>qs-DckkEHYI~Ixh!#MVTE;9Uj1bqPaaN$j`irGT==L!2YQug543p<9k)#| z$B*Go^khcsQhqafARVA|sA#s@n`xR=JxfrES&U2=5RHZ?=t0F%Ek>kSktZPn5jL;a zW2Q_6Yuv+89N^FcqF~5dXStDdnY=x%u+tE5Bo~x)zHG^;7p`>*`j>-l^s9@B%wP|N zp%k|rCrSOj+D?)u9v8WYetW;~^@M=S-8rW3IkFr}Wo1ViZ$JxLv+&Mr?-7HTgb7EW z@tS-8OKCWM@@sf@{SH+QH6ozC1M@%!>hx<{5>#Zq3L-2;!KrzWTU{Zwx5J_|(&7~` z;&Eida$dwN+#?5J6fH!i7VQ8wH-dWZU^Y?FEFHU8)b)X4|XwW7lhZBcB`a) z?7|$$=0D02FEA*6jW&hnw{HuuOCRjBr+B70qG&NL3HQa+0Rq;e}ST=ESMsjh17RW|oLxJwl35Vt`ZZ-)ch%b%* zNE)1$C43ds1QvRR@YPm`Pk$ibVJwDCmQyG=zXQXs&2|ujooBxLV|i9_B2w{<+#^oS10z3SfYp*CXt73D09H^z6~0y%huA-;!E9R+iTD_U z{*@YqgHWM#iNd#nnYe8%_&6RJQOK7ksG%2rvPpN=3Z}?zKe&)%2aysvk*=78BSliN zxP6P!ZAeEPJ(rbh=|B25k{X5({x&mOXmFRNGYjV`JVQicIFp)Elh7EAIw=Ivlr&ut z6u?3(S*0v+5C>D4T;MbZX7D{7$7^nsE$)Ct0ao2pNvyi#EhERXBwZfLbz8D((k(LX;Bo7b^}jG!P&V%@hGO zu%JAElWGW>ps6&`#A;nJJ>WxJbyyA~35mc2R*(ZL@B=`Q2$>;g6Gc%1hJ%OW8sd4E z5QdlGnV#pFS?GCoSZX@k0VfpZgy9z^h?%5L=optklA)C{=qGU*00JGbL#9$QK=gi; zIYh4Fa5jKE2TE#ZI0FmnpbvU#ZP1k}4P0 zGI?$h6>DU3onUq66-aQ!qAu!{j37{$QwjmrbjrzsJL;Tm!U#bS0x_@xH$bGLilko& z8A`f2%r~PAIi(?lp1>Nc!aA&08l_vRQepy80=1TL_g{0iCy?e+FGYpYdZ09Ug&>9k z|4Ese=2L^W5*~1^db$CNKm&c+nSTnQs#c9&!4*5<6x0(2aX?*o2u@K^q15DDYFnW3x)If($4 zkb}aj+3}=Q>Z=QRvVA$M0Arqfu~zk_FfjOpVd}AZf;rd!u$a>Ni+6`9I%^;NxeRRYfhO) zUsW}0BsOy)7n~||1}mz9BW^a>ox0ai4ZCIprY4NA0uO)zR`3Jiwzk;$UU93CP70-~ zWS7HQvMMXAvVor4M||C;Fm4H^S-Fw7XS15Kn3|iWD#Iz2#&p4Dzy+Ap{QmPL{_`h<8jnuEMT=gK$b?l#S`9wU1wCO!c{d`B{pkg7sfGr z_foKjL~U}rQGc~<5?e|W#2c6J10fIrL#ijY*sOB@2A0tPvJ&$zPrA71o4&;=tWEcJ z$x69cV!6tOtCtIxdSxc4uy2fcraPNqCK+Nt3#XWNGd#0!F8L}tFf^&Fy1Tdtd|Cwz z%AnDR1F;*SL*{tBH8oA)7RXX^Mj1xAT3aB+A=2j##kHn;Fe! zn8pb()$tut`eX~ ziwNSXx<$1B5P$+z5Xk3>lYY8?5Nb56Mxh=50Yno;IVPi9Gb8i zb;e1atr>0zrf`L_|#Cy0m<(r%fct5Io4R`=I>SctrNDbI8c) z$h%fkp^*10kvb$ek`_IJRaldbPMNlwN}Q!E%44>5<=YyJ6w3}Pe6ak{*rpega04*# z14g_|sA~|xyeYp}k}bUmHjo9EfC{SrK*iJi%+Uz3{*e)IDw)BA1FoVfA@M3HFwgZ-&wRY6fjk3HD+8`8wft9c zs|K6F0$ft16_N@gsitwTmNvR6sVQPMT5$#D1IqBQUXExQk7!7oddjsy9jQ!&JPn?6 z`x4%@@-U8%wR!G|kilVG!nw&VGD%E{&~JjZ>kkX3l&wVnx~yJg*dSch8EyH&AV6pA%}D5=?0HdI44f*%Gh=(Lm=tc%BjezPPN-#Sot1vZ30GzQuVS9By`RqDb2|yL3ps#=6ba5wL|J;C?iKGhO|QfgaWpK(1;&)@H5GXsw1vg~7cQBJawzKvrYbC=^FV z!r2l|%EEF{VFtR%!ktjjS#BINjIf#T(C9g)cvPa zyDLlelOLCP3@A>IniC#(UF2OAZGne6wy$uc^Un6(7nBG;kOMJr@h4+LiXZQr;s_pK z14J+h(;*wq0SY4>0}O!mQxN>>9s=9j0I@Io5*zRYKD_UD=Q6vOZMo>I{X)NTUcO2Heeepe_k17zufPg@-_#FJtq(8wj3)7<)!ava{0olelcwfmUH{Wf$U_dA zJISuZ0uW)$d^vN*&>4bZs0aZ=g$kH~U$Pi#*Upf;GXfLBIg{ngKtmVX!6Vse5+jt6 zB&B58GUZB@F=ft-#In&Nnv71?q)Dk}kR2{III2)oLeT{T04!zN)ag^GQK2q)p!9)+ z7DE_W`gG|>hz3){jvX6jFmV;w!Kj?V@on z905DbF2ok=%(2KUo5ZrqGSh4t&PW->6eV#S4K*lNW2Lp&SYyRXE33S+x7vo|lD6G? zyRaw>HEglP3z$=LP3NkcPKFwIh*P`ly5nvk_~4@gj`P;z4-W3YV5p%mt|+LYkna2c zqR=n)yF#Kc{2K`#cT8f$zy%-F6hTZMw1kl#Vz4kx;eb2yR8+0nAch-OF!9wGLKv$7 z7E_h#MY>AKF*IIntno%375niTASIKGNJ=b&OtWY{0p&AYcl9gE*HpVQHY%r7g%&Jh zqlFc2zZ5q&FL(RxTrX?26}b#NScFaI+N_Sc>*l1h&N~@;2tI+#$YQ^O78Ue8enFbZ zK11X??}|bTLN5&ZNOGs0mohET;!PFI)TbvNhOTyEe;hVf(g9ZdvL75=?P{ z8&^!>x=spa@NH;s^yAygQ3H+8|bJgN#%SOMjf#Ts!e5MHhv=DB2)wpUOFN zg6w%nWr5BFN!3$9`gSO(ZQAK6U*VS9s8w0zcj1X29=ENN=k3KYL%zH%3C4yO-sqmQ zZeDw}vy)(chiFtF@bebbyhRNP$v%xT($Ay)Af_llk`iB>aRn96=_DH<88fcYpZA}s z1t1~@o#Pw>RyG9-i0*lDaX~apw=2-(OlQs_mS!-6EM&pX63fzzuBP?>B&FrfG^=4+ zwzL$rRd_2~-(ummz@@yc{pM<50$G_9@V}=hAOaZ}3fao02zNzCZP&RMzPd9$e#vK1 zky6O^sBoT0P2?gOVU!snWrjFF(LeC3l!NH^#l|JbCqLLh27FVM{^3xK0QgW0IM=z) zl_-HYjLQ!mm?NT{VrV{MR_iuciDSJ^NR|Mk?2;rc5u&DAO?yQOpZ2@qMY54B{MMAF z1}>{%Eo1do0Ln=dBuuFYNW7~#)N@X~uv0|0b;kz#(5yg3Hq-G9R^~RL{odsoc{NDpEkO*1i zs7I@-;3irJ84RWqgB;vU9&MLM)wm*Cs*r`Yu!XIu`ObGPT!jl+n8JVla}`%1s3vE~ z$$}n~hUofQH6@S%1Ca8Rsr+H}hPXDib!T4+3&Rks=pMH@B$ypZlp)LmKJ*yMP(v^u zfF@?CoY=2%GSw6%5|O{(R8yxVv%y$gg|ZSMP*ypZLW)-8zpJFcfu-mS1$XAUK&o?) zMUve$K9NTd=FTS*3fj(02gEq_=1xR&Z7FtZ~_7TN%30g$gH>U{in@4bXrd zN>8t>tRD8TlRbRp35r7q0~p|d%eHxkQ0VzWqVNU=!dmhFZ|7m@76Vi%W@-#3n6lrH z7=cqz&UL5M^rj7n+BvjLfpcaN?Ww3j1g1vAf(nUu3K&M$pa}&T8cBPB1KgE|6jdcEyUU#FDMC7ajT2zsrmtE$ zq_Ay^C3vWyMDslsisght_hFGlmoW*j_idIUpFovB(XeVU|*J-NJjM+Va za`t-TRmSUGXd^ETeT}@Av(>iYDMa}z=Qs*g`aZ0uSLI^SuV5)b%P;6{Pq}+*4Tufuo234z8 z00R(&;08Bn0uUmRECZdyCorf0QJ5`khduxWr%hP{4mg%FTkf?}ZS!qo$1FLU;xs$Q zbBFaTV&j%r=wj6;x{ZExKBJp!(|xf*AH6@QQyRN8rZ-+Ut#9sjT3%J44talEr|}R< zPd@m%F4a4q!j>9*{|ZAE8XM*RAdbpD0m4@x;FPr_=LJ9bxFtl+2oDSg<%7?m$%6W- z5WKvoAwa6hqD^6&FN-sa@n8t)`E%m_Jm@1HanYZ9^jd&E^rI)YqT9W0c9RPN)b*Nx z|5t$w%-i0xuQAqfOug~uei7q!C7lTW<&asn&0aXz&O`R2u!aOPiXA1X!zb2`WQx4k zjJN^gm(lM9-F$8?~N{k7Aesw#-jbcF=%En9<1=6(wM2PThG1I}? z9ZlPLb_M3C6m&d0IzdaTa~n6&BfSH3HwC1w8LF<6>kvtsJxf!90KhlfyFGrhsOupj z?O6ziUq`W&+0rpu{-9hf!?gR{jz4A6LzC+RuNJFXK8Kma_eZ4o`AL%=U2 zz0n(<(ObaNd$&(&J(EK!EmMI1*=v9|%&V)zKqv?x;2+6?>`h*(@ zj;`6VO&q-7=&6*E6>I_vGfRZ})2*CylKsoGp8H4R>Oz1zu`NtGT0FN~Oh|<+L(^kG z-DtW@Og)E$vRoXBDnDYsd~YIw()`aNgMIY*wnHJ~YlM7V%oj2=yVM`8OA9hgVO6N^xU83~|2s;a81 zT9Ry|!dA3GC$hU&DHFQeaur~mpF{&%Zyh_HsT8@45 zH0$9yIC-V*AiIIvz!7AKj=%%0shFg9O8` z3`?-wg|7rSqsIx;cY($bw10+^o&4L^{y(N`$mU3{}YA{LO^y&{`Nv z;xtR(Ko=8rz>1uTwQSD2Qchy*$Qz5!W!$kD5HBIZL+r2>Z204hktMF`MT5zY(op`qAPf=bbyQaPnO zJoXELyrV1s8{i77Dw?WXMd7+agVajgw9s1AP~Idx-xNa-^-w?!(XlK`>Do**^o^oK zm4sqZ7gf$ogHF1vOOV9TJk*Zr)JwuVFYp|!f{@7`AOHxsf)_l;UTe~t10-_-f*82I z75D*52m-lc3J@3qcVGv2sDcWx6)z>58R!ARG8CDl$wi?8>adVs+{6m70RkNh2bf3G z92pz9ghQ&zR`kcsvr|0H)(zdzJq^7;4N-3e*FUX=U=Y+nWxC*8F^EhK*>giAPuy2#iYQi>M1f=*xulf~7Fw2GrZgc^9Sk$4A_jaiwMS$Hr6 zD!|o5g-4Y$g3&}gIJ_Ji*e#vYKhxMYJ(JKo)z)+4)(>S`J{8MA1=Oe&S8y#?-&{IE zHA`MRQKHOQ7a3DVWljT_*LrebEy;?sROFX=n8hs9F z%q8%k+q!)Zg>Z;7pn(d&fxhjCXjm57lAXr5%xC}s04RVP@C;!=j2LJr54Zx!m02oi z*OKuj&4q_p@LUF-T$x>9L*Rk5^ zyAI+DsUIUg@hDhgg#aJ$+mMJ!*~(&b+64REglEavaP*7M2nAJO1nYu;Aut60&NYP5 zeTxT}fg$LG1#VzEW?(9qV8Z*%Wkn!Q)ZkRf086OW*u2xEGhsu{)7ynwKNZ&wmD&|H z*G6997KY(nfMH7>Q9`|8iF~mR5l$Z_fb3$_ATHZD%w8g{OE=-YD$q`Qk%1eXlMtMf z;(HJF#Q~TMiS_7MtLlu)^bt-Fg^aa;82OC60D;l90X61acfjMRK!Gbz;5v3-X^!SI zAR7r7Lae~1_an14C7BE8gj%pu5ysF%PUJ)m*GJCXKJ8sWh2$1~XLv4G8D2n4#^GZP zB~Rub7WH8XjMpFTXH!09tqb42f?FN{SS5xISC)YQU_hV0Cgy<{AfmPrlv6_l{~Q3s zm>iri=!9SyC&v8&0tkUb5Ctjpl|=YO8TbNt@Z8E(-KNO9MYw`@nB!@VW|}tHEU;!W z6(va6V+@{^ZXOvAhz431=MpC8qMk)^4qmEl=iOytNrq>r{#{D0oMY09o_cK8CE&STI#5l_4v6tIL` zAnFVCN)txs-V9zAcIT*G?RXARd9Gwk&T1Ds(Hyo4b-V3+R*Jk6>)GS&|9@`O>=J<5 z%Q{X|ljlHXX3R?(cxxVw+a!h)ILRfriIb94!Gf?NzJ8V-`DH!A-y0BV2~vfUzGgHo zSq83VE|mZufab}bS<9y5&~@yigoO6v0DdvS?=*#gbtXFzq(ZI z(L+Ln6g~;*jn<>a1%MC;g&pY&#=IdI7~lr3f=N?39&hjW9`cxlhZ=xzF1rdCK!URH z#GlsH7AOS|J?abH({Ytr0XOidPH?K8>Z+#dO19)+K=1}%wBudZ|4(uerTE$A6l(}D z>+0oadUMMNkWn>>)V1Ea>f}1>09ZF^6Sys}>p*c?9*>UFk0qjlEXa!;$pm=4gudKvSHpN$BG?DQzy3^7|;dM^Y7BW#a+mSbY|p8 zE^saPO)r;fT<>yS-*s{wa}hOjO+s^FH%=F!l{Uxi=nd=al5+{vaP8tQY5(vUom946 zXt~7Ee)YQSP|3nPEGmGl@V)^680HyKg&-jBIF9C9wGA1NV^AmZ_P%5J?y|Zf(4}Nb zKRy!)7=ovL^%KV3EdO2Iy>)}{bp+>iOICPbzvS31c6$z+|D_n)u-0da-)D-)G=IiO zI^VP$n|9-_c90zO>!5*;R|F#JI*|-DxCthg4}kHVY;THKnUW0EW;@YAYYtfhYKbzxsu@{j1;|OcrPIe$}Q4GIuw;ZK_-dD3B=o(mrA%gB2ja0v4>l$bQh%U+W)stxW3m3ou zQRr(L@mR-g*eo#bcyD~7cW-GngR#kJQ7nsmw?~-S0HK!kfERG47F5o!br-(+)`n_e z2y=z!`Y>n1bPgkvNNZH2WSj8NX>EVC&=TII-{{(Q<*~4CZ)!qyg`P}Q#x!)@k zC+OxFB7pS{@fZRr4t%^QV*r?hSFnr0ID8kliZ~Yf$9H`2cVHv0_b%Ij6-df_7mI!8 z5C$T{R*!YhA9z`JYSMq_(>Hz87xVmY{nZDEU;=jy3`Q{6f(Ho|E|k!)fTH`AZA5_MM87rhmEK{e}q5`qv6-TTpz=8o2E^r`oN_SqLt^ z$eE0tjs}A(sja4CFQ}~=B&@N<2HcUg4#(t>MHaVflfC*1rIc1$dF4e|T6CfUUPADt zOk$pAz_Q|%Dc-W><;32b`nl&+ob%^qtF}fK>P(1iWW;0wFCw zWRMAjjW$}B0y1ETDZl{>T$mw_kZ3BxkwJin4O1{MYG3z)dU3bihj1TB`t=H=z{4 z2H6$`=X`Sh_cXYQv{&xB+M=Kce^3JohM@4)kVU>AEE=JNhw2~!6^6ueDcfxi+#x(Q zY&!A84>%Ho6&84w8K|Jq4L}Br0F%qdu;pUg#vkvZxZ=0bY9x{-OJ1_dyz)xS$^v1& zIWZ{>`}szo&nywL%IYk1OV5_46HL;+^i$GsPHj}vGsyWAR6InTZk^hyi+c@!1`6+= zRGcD9A__dHuPgbgGED^_1d*ZJZ(CnI7<2z^ssffxfdRxV`c3x=rx?WAZXWB_IBp?7 zKID@qSAKcQod0S+<}O#a|3A#b@^4*7JmQehl&DKV6O+&qc&49>33f|kTDRyULHgK< zToN=2eNH4Ib7R zzL5%N30uGpg3&44scE%)T32Y0L7}v%KD3ho*7S5P0d??Cek_G0E?@~0o=_F4 zFhU2uKs^{TvXSqQTe51%Jru+M1mV+w#JJbJNt_QiA2U+OJ{h@#SgvI8E2R^cv$ zW&BQ=xm7|@mHlkxD>>)6=M-y}SfmaWuX7z_8E|L^Oja3lnI<#gBs~b=SumM4J7PL> zPFSm;!S<7%*v-zPQ-LNlr^$mI5Fin|I21Ou**sY=q6YsOrz3N!mx3MaoHMcz2-f)` z2Dr0R61W64U}euDF^P$&WR7z5Nxzlx^Pd3?C^e>dP+H2&iVCG!=t|d}TOx3m3H+IO zF8Y%O07YrS|GeDP4Tl~hx?PpeAts-<;hR*8X)&gpL=SgKOXs(7V@ zlFm~u`H}&+Q&wN5r*#e7Nq7c8#%4Y+f+m&0aWhzjyV{kR*(#=21hiK_R$v7;z`+eB z0gGA4qOd3=g(9fXLdLc&7Q!H}UV328$P%yul=aLCI%5GJ8Z`s1AjYhOlV4CO(X*3V z&QnKATGN&`wWi(NYGKLMDTywN3Z>x}OVXvWg7LRyQebWafPf+hASc9SitoH-yQLh{ zqXt_e|5UC*Qn>0>x+$H(1rouCL<|83Iv_$cWTA^g&0-QWP%I-COWrT6m%WscfCu9H zqRi9;VO2~7=0LgM&N_8hp%w5yiv!TpV$Q$_CPr4hjM~i!E0$XYAVSexMF^W@JLCz8 zv%oV(Xi;=p99BYj+WJ=LHn-2<@+ceYs)!W3b%Mcj@t^t%f<&|<5sn^$5MuCyOSobd zxgdff4YRg@iSxYZWrqwQYh+JB!U&_XLX0#C#QxF~S5JL4fMLC>D62Ax2fpfR6a3`_ z>sqTWYi<7=;xY)x(mIUc2%BlxQ1hq`jjyY-h7rJkC8#x{+6pn&_-xm8&B=BnHCP9r z|4Ua#yivLvgyscs;OKRCA`w^cK@5h_iBSw83yJacr-h8EzIt)gp{W20SOl@6+VBB5 zm<2WZE9K+xij=Z`xaC%va4z2(bGpuTuX(N7U2hy44Zb3<3kueca8be&CYl&2jNt@s z7y(M4Hd~R_M!bsHc2BFCT}QNmVTP1;+zM9@^a{<#s@u_xUUwqC-~$`fKvMaBdfOJ$ z7=Qm81(zgvdnK@eXvojusQkLDmostAjeWqk7W0=a-to1wJ=d&-ZAA#GKe>N=2Pb-y$ekMes}o*r0wC2Vwe2=}6B)4>Aq)|IKfx zU<0K3WFCM5CBLYhKP5IIVnJ)KGaT#?k9Af331+fWJndsvJMP_%``mYY!LWU;bqYEq zVuSSowiHv)aG6_OR&=3Rl;=+6uGWA2UTFYun_9m7UjQ=a z_3c8(P95};L9z}YHeVF+tO7WQMp9Yr`qz_I%VoFqff-n@ZJaCV-o>pQuVI4%s@B|@ zS;+mKut5az)t1807qgU=OoWMrfd`%C#GO4~%NYOzd|2UK-&f>O4J?9*B~$k?-h2cI zN)6ow+{YDEp5?V$JAA=-sbAaR8xMjA6^NSqjmCTJO{yV_LhOJpL>Vcu|K9##*{^sR z#Ti(bS)9flAjj#RY9-(nTA{~1AOs3u-650!C7T!F5}e^uwct`OIa_!D9`yNLc(4b# z5MIq89v+#L?JyoxcmxTepnwQn6=VPo)BqLS;N^Y6!04L~a#}cfUa}b(l966#9AU|+ zL`RA;tsG|`DFq6 zrQagH5c}QT5T-~6#NSZS*Ufa%1AxE|OoA<7&a8ypRM8qJP8@1c|6FOE78RD37ILB6 z{bR?W;y?bQHYi~C2pbp{n?!h(LM{~EWCbWDzKVFfL5GSYNi) z4l;Jz9+p%Lz?d^OUhv#UA?nWE=#CF0f(;&ByM@6H{-8Goj1ctHIEsV>pny46Vo_0q z2iQP@Y#dXW5)}Fh0Olj-co{XI-Ruz{0UF=}UZnzR!xmm8F=%B$2IN*cU{^T@Lw?n< zft3xJTp0NhvppN?03%!mo&yh96{J>ToNH>s#~DC=meWAiYaZ$%!G>LWL#iwWvI%H5lg^jT!x^`8Drxe-d*O0RwP~> zol7!p6!t-r3)Da%VhuEH&?GS0<=qs(Jm!v84VcxFm$Ir?7Nllo#2A((vK0%3+7_I(rLQud z2Lhvq0wYTRlO5J+UcG3a1loQ$XG%66a`Au*-~b*8h;&iG(XrbXWWf+X!VoMfqw1(% z#LZ;>s3i@RCDf;AePXAIVu4*%sAeIRzUDx3|LK5YrEG5Dthy?zzG|%gE3H~lnbDmq zYDAiSRd(Q=n$Co7SxZlZhldttoB|%iQs3eo6kSDk%2F!}6|N>#?jAr|A<|x{ zs={h)YH2~H>VkUdzsjoAR;_I&BrGzRYn7$&k(|QnjBY7kaQ?(`YGm{ct8rQY1w;Ta zT`b0W+kcE?4Oko1q?kuImkQ<~SWpF61PFF!f#ubdV+4WA#;oBUZlk)58F=lFUd9So z0pGCarTQ$pa@juK-j|)`Dr%g78mN_?|LW(aDy%B)tRAS;`fJr5DC&AC$c<^4=H{+G zB+p!E!{(L({o=5~DTldS189H#k*ssQ$%uVa$(F32U?&d*fem&7 z5uj-zye#5o?;^p2J9O_NHP#GKruP_OrEY?{c4F+gtJ(!rj3VEZ6R`br2u1A%6Ofr|K|3DTLuG^3+Z`u$9_%RiHfgxmpJHP|?8bY94W{c>}0jPpD z499*>r77=cn3-}^o-z?z>1om?m6mENZ?yip@+{x7Er;|KbMdb|=*wi$@kNruBC`nU zu1l-20Ql|*kbnlvr3HoX?fggf?a7HwP1fL1(l`Q6=PiE3Xz*}zfDpmDRfuHxKrB!X zRIjr-qjOX%aywtOJHJCa&_F(qL?K&GIr%7NVSo<|fj_rH_X>tPd_nl=jRst5m;uAY z#dSoRW+@l3U285inURvh`afP|afQm7b)7*y~m29D+ zR2DEoZu@}EL_iA(^i^XuRZDd{3v?n6_c|wc!6Xa>*jqS>$mb=D0ocG7_;WzNa~L$t zi-6AxG(aVUGMFV?U3Zy8r{-RR88+Hh4qT z^0(CLH-P8z7R%l1{?CI=q|Yqd*yb78nsFS)=>Sk$1RH=%lK^SgGzJvoQAqOyo#@r9 zAaoUV9^+NkPWnMX}Da8Eoe1LT>V=`Px0B#5?g30OF3 zJ3s+UK*(~qwn;_aPBV$|t?gvM-Oe^r>ke(#KoG3k`56LNLk0{ywQ-L+sh7H`mwJu^ zH&b`@WW<0Yx3jacI(cfLmtp={U!v&-0QHk16$OF zA#+AT|DR_Io(6mXp&L2}Ou(F$U`PE~Yj5z!mJ|i?t!>NEeGGv(+Z#OKfH?a0slS7$ zcLJ$P{Ha&`J5T|UYX>o^00^J}2!H?txImH{ZXx0N_e|UkLQygX^Of z|G8O*=cSxM%ay*%!J9IR8+aV2Wzn zUqUBReV;7DO}|F$0w^okF&BsnOk+6;o(V z3BjOdgHPImQKJUTCpKzAhXx%=w5U*QM3*XUdK8&+`#ZEDwkRf|@^0ts^IN+4PHL4~_``R?sI*Y4fGdI>9V7&oqg0s#srFwo$! zfdG&rFE+rSh=2f^103L-nezbA2u71Okif(U)g@B5CZXZL1VpoGFPfp~HtrcUX7uKr z`!)(i!->nNah!$>MH`sY?(G{nav3ssAny?*QI;!1d<=Z|rDVeh?GU;%FEEyQf&|+Y zRR7-m!1D&F7(RK@MHZH^5+-~H@4uEn67VBK7MbfllQ1BnqL&;5=?fofq6sG}reNR( zVz42`rw%)0YN@0`)QYR8graIIYoc1ws;gRD(VDQbib}>B!5XWqva&*}|E#ytYRfFd z{(4}@!HC4muOjm*%t!znYwSrV6@%=6Dj8^iO2`n{jLR)S)67fKl-QC1%oyW57ZfIpb(RZn+I+o71*Adoyl2J@+(@hbw>x;)*ZELkNY4f{@Q3 z^V++#9d|D6{K zNWj!h*ROTmeOJlC4r@%x0;oK|GRd&q@&L&8ZJ^9AGb3|=fC)Ch|AI8vbPcvQ;gs_^ z-ITj+1{9Qo1Ww-e+_Q@29v1XCJ)=90hanOPB8YYzfq~Obvbdns7&y)J)0$_l*=C$I zwOP|nuCTAvlR(f9p;$puHCCf%1*x4GYz;ah2!^=AonEbG#}HsA3}ILc8<;{vqpA|y z#A{z1@!6-K@(M;8Y1B4GxV^%$+iu6@2Ccla0@vGecWg^ZcF`T2@OX_xu-+%}&9Y0+ zil}lkf3+l7%+dyCi~)rgc8!4vFu+*OMI^4`w}>TvIJ)FI_88*bqO0yu-b@~XicWk0 zAculF8G^{e62bXqoIed-c;Vr>!V#!VieQL?`s37)E3OD*|LQM@ZZ$yvFv4Ex0ndOL z=#zF>>1wOn3B!h9zosdK28>Ng#A&DUDcTdUYFnyfv64I6xcwKaZf3a~-|Ch(aMkUA z;@aEaxIqBB6b^!dgO}l$gdm2{OECq=puO;=ugO7lF=YN#ox3mIjX+JS`$H_<|wg=n?Z6B0e24gc;JeH3o2jeGHh!v`%C{X+aBr zgX9Xfz(ONKg5{zy(&$Dxx=}@b^ni>EskjCh(r*=TZw{m&;Wn8rxoon6gpuh59RnFr zJ_#}qm=c!!1;SRsl7z90Kmd-g8d|Oi0TB3{|LBGToQU4-A2yadgKSzF>wggy9STtr|xLs)L%$ zpUmj@65D5pN>sW;3` zo{pK-*;F-7uOnG>#F_)R)@-c`7(zB(|Im=)VtkI=S64rT}zO)M}h z9*1C|A)085@^@Ps)ix@;&5Dw98(fh3_Q@apEdi5T<>6L2xH5{%x-!Yh=W@A7GL;tr zFlbZ7RLNf1?N?+Fz{*vsGN^A(7<$v&8VVR-sdBQ@=oE27{1#_WhnfK-SO>#E?HAF= z8Nv<*>`fwUKmj(mW(pp{fgq${LE6zYgXhYiD^wr^Ke*;v69fUcW+74lxIhTXDp#G+ zOjGfZwe#X>##d$UBVlla1#R%g|9a+lpQGi-W?LfT9owWrG{Hb3P&A`KZj`pqUUF`m zyjzY+nYU4n5w^F{ZEtrQ%HM9JagjUa|IvsT=_bZXy9}>(aZ)c3c$$zFut5!;8B6^l zC3z2EFoS8v07b1cEj^RxrsBrXQI#s7k4fmQwii%MMdrq&!s$+LfE`=` zuuRmBU5OyQlAFBblx_eBLOxCyFsQ%)Xnh1lmZ}<{*%kz~c)akwX|Hl!IXTm_k#ig^H|UWUg>UqhL?6wW*y^Y+rlZbu;(2 z#ocx+yB*8RotB2w9SmTw{~OHFZE2VfC!WOE``(Y~OupCL%F*N-s8$;IQI8NC_5#Xc z?nSu7_M9i*DAVCDB%PjMrzbt>Amg3Z^cDWPfD{Y?1PuuRqfp-Z){`1)xr0W!c2dac97M?>FI<7~O0cXN-pl1;F)6cLGc+3HP$6jAe3cze?f1T_~PJ6Yv z|J!V%eJoRk`}p79cDaYBC%{m@`g^epy?eRcM3SytE+=xp&?BLNz~;B07O7;ZQ~rvs)VI&|n`fJ2!kuB-M031DDqMi2Mg=?YXJ1CYQ6 zRN&=GZV0~Mn_9!k__y0D+{|X`?PQEJWBk?PYlOUx!4B%)~^@R zu>Ep@4dc&n*sX%L%r4}uA?Sk4@~?v=M_a=Kr1#F@w|G3~LW`SF#%?rP;8^7<{!jKHRVI0X(xfID-d?MZ0Zx_;#4Rt{mW?>d& zL6cm{4Oc1-rE8{W%FOJAGNuGyA_sB`Z%f1r5JNx&j7ktU2R0hu5h>=q=A`nLLpPME z3WTXP5^gv4U86j5;%VG<^ZfYMx12X-Kx z0DzrF(H2#3^l%WbbWwN?f_N&$JyvBHhmbrvLX8aJ4Af{q+(8aPVxYd@*pN+qCL#RF zt_!`-E6E0ZfiCNDg7D7%=CA%FXv_ld z4)gCZ|9UC_{I5z}=`{2$ASXZr5|S|&l9uia10E70A@Mgd5;`Q%z8ulLkf{Y=M-r<8 z2Vj7(SW*>Lk2faV(iP}2aN;xXsLM$9(*D}$?<%7J2$Pj00|K@S@rvL|9D@NC(*PZF za~i;N5Dva1bK&|7I*wy?2(1u>2&^cv1YsaGOED%>Q#CylCK+u9g1{4V047=T;}$KQ z{}#XkVBjWqUO>! zsSfkAG1|<7P6^-e&;e2?5E1k-JtqPu5Ap(SzUXV0Zlln2X(MqUh(7Zq3F`_#bkSte zLr;@ZO|())ltdQ|Msd|D42V{mw}i12cMz0}ygt%Qd}V16|{bK_kY6{?s?5N;A2t605^&rvo%= zzy(HhUqv)uH`P)H*1!H$RPPmS%@%G6R#RD$Zd1{27uNMWkO;CUVi`mz|A#WfhV%D= zE@_MuDvMMj&OjP<)dF_R0)Qd>v{Nk2(fnApWiL0&zHTkglNXwGJ#RKzW#JZDAzE(% zK6zG6fEM)?ZTppN-}Yaz7htt_do{Iezjrk`6gN*!1??(gH*Mo? zPMdPZJ%F*qf(|)9LVI8Z4nmf3Rck^T02LxvJJE6syVG)ytK9y`L)gz9;}IT1mo9A~ zXB!w=QTHx2i6rz=Fs`+NCSZ0Mzyiu-cPW5_JGjSs%y*l%gn#!n|A04mhc`7Qpa8H| z@+MPsa>H8&J*TTgv)FZXb+_uK>M zE>`GTrG90_v+#F18}|kFS1Z9!fGKx?y%Rj+E^esd7&g}}<5F}(*K`@UOm9{`e-hV6cLVu^(d2hkc!gQm1SlW?WFuWAQ+XY+bTBd_TW4PP3kOhu zuzr|`x%Y?5c5T(xhe6qF@zre?jeJ$JMn~?!ZjhV2X%{giRE#qiA8UST0My& zG-Fx&$5hzt3%K;J>?Q~-58E_#`u#O7g6V2PAQ0yh?2UnTQ8ks|(towKt$c6mInuMTx*e8CI2V zk(+pMir|4}T1JZd!`7_0aNps4sGy)S+Q+1@0T|(<|5sL+lk2awbdo6d8@$1=N4kuY z6^-pKfoB$UTbhB}vu5QH9-TEF+piaB`u*zI{s2IOy_uXtdw0{hcY!*ng_>Ls8EU20 z1Lms%ADKAZl{XsE5#zNYF_5Zx00%&zdb!%Sk>IxldTp`ypuzWS5n7=Y7Uj@-ebu^V zcBWMitD+wZ>J~Snvrd2a`j-P+3@Mi!2b*sQyBmo4EJu30$NQ0p*}TmgrG26;mzkO4 zv1W0hOyBsK%hYD+(y?b&4V78_&=k75Oq=;~zzKuQ5THyrn1jLjkIPvD%=xqnS+$G0 zH97~LDMk?@c~ISzh7PqtJC714?j+giCO>&o|6eq?-`2#9fW>`##Q|D~jeB2DS&13C zVHYf}iicAM;#1gKJ!ToM6T%RvAeVKueG+OE9*J1pj=R14yq)~X(;L0dyRgGy$`M<= zpZtv7+b!e!W+A)2$@I&gRTlVLfq6jIE2SJw8Qy?Bb=yH zo6i^0@fsP>36)T^%6a7#h>qi{NaiFlAmds*#ZTPPBOSOO9mNIupnDi#Ntra2+ZGwD z!PGacb^KBe%XuyqI;n2QVnAeZ;%jo@qz?(oV_nwCJIcv%y{X*RvHY-UogBMvv4>%e z@PPh!9WuzJ!dUB$V&-tFDDRTH5(lm$;t^!zr|b0$7A zMR!;Q;lIGH*~c1bf=OxONvkQ60Q=iw9lXWc)^R-?M!L#1zRJ~m*QdPKeZ5QFQl|6U zOu<||a{(9lyT8Bmy`9}d=!Y8YvVsGA+6nwk5yW#kN5TDA+dmkcxt)+De5k=)+!y&z zD>HPWiUMo<5g#(Fq$7tG{o)Eb-?KjJU%cMAUh65HxCdG$O*AH#*hWQfo2-c!W35t< z(jCHJ;j3`RL||+7+ORR#yTO~h|FeAWJs!P3zT*KO@U^@{mU+MRTg<<_%-`|M(Hu<8 za~PgIjc0yJb6$dXejg8jrxhHWg&x8=z_gq8==c0US@=pWJkTMosWxWN*uCkco(8-& zWTsjMVt}_ReTXGpxb&HW?~gf;R}lHt#MeMUw?U(IvGL9 zn;cv&KI3bh??L|K4g2p4d)Ebj@OynN)$m#8^0DL5W<6Iu(=*M1J^f~W?9k5gt96^N zwE@Q60uq4p0fK@B3lu15Fla%8LJkWVIu!9R$p{k?CsMpfA|u9)96Msv5Mcra6f;Uz zQG_z3B9k;^%s{jO5+ao}|54VcA%h2vn>umwz~MrL2OBzy?l5vRhti`=kvMG%HLB64 zRGluZDm5$CtV5u79rAStSg=Hf5V>O3?3J@uvJlDQ7H&JZS=!CD+pbePcX{3Ez2d{h zln{dp6P|)NvEnHW7hlXs88nt7?cJb1c zOP4HJvUSyl9XnSq-MxAP8}|DcwP31MW7CG*n)2n9yD3;80lM_*)T>*+UIF`q=oPwO zkl@|>0ssmoFc`>yLi&M63MNe0Fn&Z15bIm?h(AAm3I{~GEJ;#LRp5jZBr(Y}Q-U;= zbdwA?$Z%7HKZP)X{|iW6h}BhFZKzd;7;5;Thahsb)K_DH6$Dvmsm0b=anU7LU3cNd zmtIu(U_@es9kyd)D#v4RypOhXH3MINc-xl1ky2Fy*|nI#SxW!4mou)*6^hp?Y|UcTMJ1R(J61O%N&(0d6XWbs3$J6aLy z8h5N8|43qA8sLI0k({8)0y0=bPdt^10}LE^07DKs!wN(28_wFQ&#xlyp{=);$kbRl z?Aj|@Ewa@#UF`rSL@sJ`qYW^(v_k$g=9@ptExjCboM=T_30ad*z8$w{OQu^l{`yxL z8J6&}1`K^2gK+#ZTyp;PFC^KIZEkvwNs?L4n(pYp>*$ekn1kTuzO%4DoriOvo0vfy03U;lFd`gVT?$zj0tN)& z00+3#$WYJ$myt|mwu_;Ja%ZyLh2R88m&DPbwv6HTO|ASi7JEwKSCvI&`Lu&pxk3zxu>{|UGH zsg#T?Wu_UKNk;?%3|uRfTmQD{MrtTyIKv5GH}?qC2Tm}86tv(40njYZVITnl*&w1o zNV-LyFrM<Jr^9=n)lhT&D)R~fXDKp8{nUao? zfp%0=zVa2oGxa8@-t=ajP75AKJfL9%fLO#r=K%MV?w#;-WK}yR07{CD0h#bgdME-5 zd>1MVUBO)GYF_B7@`&1%s9s@^f}p5i$e2W>2RxvFM0}5q;&N|f!I;@8MYg{B#jlmG zjAi>dt{Tdz#vO|T+TY|&USR4{9vQ6QG!yl~MI9#~>4X7w9?DRoThxUytYHp6G65Ly zTvizX!#V#wa+e#G>|0S*%*eV1dfWZiy z00^&0?;N4j*tdPFrlQ%ed|#dASj&3WFs-9C+NheH!s|D{DHEB-G%wr4=FHLIqnaZq zxi&9Mwa;i30Sx3)(rIoq0HoWY{0e)6X zzWz0^Un6YW*rv34Jg_*~d;vhNwm*U@u z#)O|KHni><6d@RspwYtva;1d^WE%{T-bbJJD_f8PrnDdf|N902zr_YN$Ix+(!!(zx zzm9N)i(TQi_A;0U$ZLDOW=t8!g~s1L>@}lV!5&|*bd;@HWs_$h6hP+(2a+g6DdY$k zuC29Qt{)3zU;-A&Y6EbNvI`if(3pA&Ptv-R-1R`{99a6!JTTqkArA#T486Q*9O-(W zUiBV`0aIeofvO`F>jwb9C05<_D1)6eyC1vnf8Q?ob%V>dK0Chjwk0yH{YzzjyYn}W z>|-0d*b8p61dA&2kauU_ekPQ}q6$LVvK;ZZ1qlOSPJxeID!5{$yl;1R*0lbFtr-D< z>8sLEOoKiLE+9(kn+|{hxI{+B6bz+r5MThbR{)w|{~BL(YM8}Ry$5___foSK8C<4Q zyVh&T_ZrOCfzS7R7^e#yXIcz~ciy2|7vyIgBrzcbcnSd@g?D)5_i~c5LK;wm93V+8 z)M;YXNj+y)JRpRbw>$JVbe@M5?Zzs_GZpz~1pc>r0vLr;5fmB%0vCWm1rTEW)^Dm% zaPS3dTqJ>GIDut|U;Sft%7Ath$9Avbh9U@uaj0={NGI1Pchc8jcGqCaRsngZecT6P z>9ih)G;J$4el(au4l_zM$R8or03mk)C?h*1qhdrzAVRoY9HRkmg%#tK6)tddDNtQP z0fnn{S4`()IxrMfArxEFHDc2M0iXbBBVPxX|4g@ti@TSL>q3TRID!2I4$I+XJ2gOm zQ*j`uac-xK&$o=rNNjV5ht)@YActCcH#r%kcn+{0hJtd1m|=#8i1Y*j&XR)~kW~Tj zF+6A>fz~nrLNi0?VlP$#9K(qb<$6@%iP~jdH-?Hm#uNld6)r$^2^fo$R0IYqY6PaZwHGH?GYxzQPzvhM>D2L66j2ahrdKird<3JSza*()v3gBAl zByESJNZ}`gEf5E>8|AwkDK*=ClZTOLA$&AbRhR~OXB}rOCb$1R1 zVSvPJ05B*XG>F{jPKG#xkup!WHA?((1Te>l0e}HGcn}ltF;m%TkbrZTNFX?*6D~lQ z6cGX-U`j{;14CJgH|BImiA3&JSF5-)@V12pDF73&3%m$7TghLp>5yLel@lpHT&4_a zI6!5&mUF0flgb9 z0X*ncK~WMjV^Ebz0twY!E&ycai33Cdg`mlv{7Ni8QpJaxy6J%-33tFb|A)IdoY4rE*cV9QQBDltcXT!}&B>P=CY_Qpj)$0j z2Y`c`co2i4m^H@$BGG9_R#4xF0h`u4n+c=osd`$`nNqlvM~M{n=PEBipZ#W^N&q&q zfR(TrphZfXv)N4D5RBG9jK#=-a2SFZ*P99og2dLK9rs|;c!C$ik_o^;hJq*-wwKQd zjvER|<}p=)ICC1BC=jC_j2VltNJ;1DIUsOkcIs9s@Ixw4JT}0Y;{^k$QalE=nf}+0 z|97JW=x863127N)4kG}ZQv{p?0I~oY`e~#P$)B>xslgYKRd$g&m77|!n{YU#Xj!Uq z_=Zc{C`tgNmWrvFs;RN* zsYlALni^6$m78X18>T9fz^Sii$*OO8hY*I6cBqnCI7o9ATQ7O5-x!@VsjC%10T4g| z!nzUlWDpE{5g$;Q&^c|;wn6rkekGa#y44?32{K(nvWodbeOgyr@lc7X1Ekj!S@WpP zG62acsRK{|UI-3E>aIgdq@4=1v^jjkSg-aff>Ro$sd}&Z8j>VZ zD22qF?xb>Ly08sv|FQfLtn)Ze^+b-us;eO<IZHb4C#N*&ikPwi8egFtDvQwvR5m zgd3m(jcTXmiU3L=0DxPwl3D5*<%sveoD z2U>^I*RP)Yszt?Y3&26%$4)ZIwPk9t4QriwmVOD4t6mFpW^1e;T1gr3sGjpfBCwvJ ziCt1*e<5H2COfHu`?tnRp-NBysc^W7%ec<_yqvnY*BzdJn^{U8;g5a@lEO;mf5kd!nx~eO?5}O}4$#^Ps9$ibnUi+70+qR3jtP`NE z)n%j1lLH`d|C*3$yy!XrkvaejJOBXj3C*jx?pnd@I=#<3v=X zY$u%1=%COTy34kG%_3*grYK{&a`U^tky1~vD=F_AyEIHs1p&9_kx-^|qrMZeU*o`> zv%n2JxJrxw3rN8i?7TnQYMTn1Ln=~4I}9GI#oX(?U5u8PJHlUb!YGV~P`kogY9~u2 z5U-W6TRW2)%D*i~u{#{LJS?{TD^Coe9=W9e7@(t`DKw;nz|iWzObo%vE2&Fht_4sD zPpqFi3&oENy_2lL)u0T?K$fJsy>IBnS`5av@yXsx!rnW+pG&?`d&c8Lx)a8YFzAhL zJXQK@|HsWGx3g@^__33ZngJ?cw{zt?c1kGuhGeF=e^3<&D|`ePTQ}qntf1f08Le^vbDCjy2G{% z0ufNhaD2)Jo<^0X&yv3Ys%BL)ib||ocq>>mEZ3ZjD@|@2$8~`{-yD^Q=(z(xD z=vFHPz>tc}Kb_19J*h&i#7f`*2EYUq4ABwI)J;9n7JbdfkjZDl3t3F6AKcNLJkBG{ z|J7Su%BK9FQ7e}K8%XQ>rLZ+Rs5`@}d&>v_qBU&Ow|o#^({BhsvwwTUhD_8;e9V!m z$mnVS9N@@KP1uF~)WGOv%`mD|oyA?v#g5IzV64&p0Cqr$zdDU&d@!keoOX%UfoCye z`o{Ad(~>01aXrg?=C_AD)I`14e9go*djyHKi%V_T68*eVEXhq`y{eJT9jwjV{McI@ z%8an4cfLGsn31Kq>abdR!<1%)(mW}=&H97+f$t0$lTXT(A`XIdxIU#vK`Uu?bMLm z;kS0Z#hAqE{^W~Z=u$f3hmO_2?hC>m<&EB!Dm=BPrIKasC*1zG^^c2eXc_dwH1&>{MZDF)`@eY_91MTkUPG0R~Cbf8F5QE!47@)I-YQ>>cao zeeSe=ix9o;>VC~$Ht54(44q8x_pa}Vj_>x4@*>XfAE)K$i=3O&((TloZj9*&pWvL{ z=?kx`{9%xFZJ&b@sS%FM4jkAAULLC>s|RF!?NK^pJ@ zGNuhr|IFon;kJI>>wfVe-we5)(fTgzU{CfaukvD_=!kCiY^M2`?T5+jlFaSdGOqJ= zPx^Adp&>v?3Qr$Qg-$2RLfM^ij5q;WwA5FR?oyxbtq%2nZup4L?i_Bt!*`pQ{P>hV z`NMAfmru@KkMf63xrZM4q@4N1hW4A!->W6JFNv_uiD%Yc`lkQ=Df9vTODU@VNE|=_ zuHX&g&i+v^>rvnSx!C(v|N9(1v=}-3WEtOG&;J17ix)0|0|^o=$p0&$LWTtiHcTi` z;=%Qt&#trC^0;lKn9Sgmp>5Xl?3aNx+6MO*f4IJRrk znng=iF598_RQ7A{`1eY;fytW0n+!ovg_emD`Lz*~tEGd!qRGULgMD=QqvQS)Za zD@UsQ47$RF(WF5Vu;7xyk(V=J+T6+E=j^3DuR^_@Tla3SynX*BI^lrq+Xa4%)jN0Y zUAk@0K41Qvx%9nt_b$%{4shVX$A%g61zz#vi3k(>GB26D`v1w3dmYB?YuJ3w_3bY> z{h4EFlcpb-zQB>vAYjQQ3l5}-0-JEcDK^@Gs|`X4C#0}K+1e41!e>)<9t}uKm0SmBEi$oORQZcPKqle^hcF8@2BV{t{klIyFiJq1(7(i$Um zl+pE;E$=)YFEcdK8mFz)7)y`ARxl|u#T2FdNJ>f5{siQ&+zS>kVAN8v^eIbJUxhbb zSLLlrRWF??AQW3)oGwJWv4OBkKei?K}N6}N%M~W$Sb}?y@ z{LW8fk11A}z^dW43Zo7jr4!MF$3_7|M`z4z1z6P%*oB!>I^>dg&8;17BfzVsjV#u3z`Y}`jg$3OSmD?Gr0Z3@0lum)x{pz*C|$g75SzPCKWJW5ayn+OCY zMj5Cj27=UkAb7UcF+Y8cSYj(&0+BaD^PNs*9}!LK(#E<66reS-lbQYImOtIm(1ug7 z00xM`GvJLdfFnGf@YIr>Q`>4mfc(F-LT3Pzc$RBbUzySSLcXM!Y@Gza*Z2hh)QniubTw01P=v>CrbJ-9L&s4EkW0(Kqe!XN-QK3;~BNe z{Zdd#JW}?k=((_M$8bbsW;x5bE&peZBqLx%88ppBuJ*YvU2Th%DBsvkigFVGJ8Nap z^60~CbTk|4q-8rX7d6Hu5+U=98bKh|L}ww=VZ}HW_d3@(g(*Xw2`rrW1iDk?ov)z! z5m!(ZO2%on4nJKbU(caLK7OzOsa&MciljgM3tayYLlrobZTJZ1yvBa6?x*T>PM~0 zIguJ>t0*<31QDsyuyR$GQ|zGUYI)OR2GpRgaWgVntmsr`!eO0*g%$!U;C$h~VOmtcNY+HRATCxds zBP$~pCpno{01Ri1p>*wQV++{XmUp~YIY0=sVKC43#iNPk(^Y?)RjxkvxRkwESgS@) z;(`@W$#tY=nH%5u($c_yIc9F7yG-gvlQRgdYic)HO&I$1ujDoFc{3ap2221L22&;% zJsL@b8F)rz1ukSMd%^zRqQCrIaaa*q3>qufrU(8WEemYR8-I?i3+Cus8%z>RlGex( z4iH|cDFFfuCng+-U2Gbp;SE=Le_gUb0Z?&AbY`)mRyA=ln1SLHH_V=ujWK^^yk@bg zxvMo!u3&T=BQRfe%>QEUt&gEQN%uyVhy)$7gN2IZ06j^`c|9Mg+;$TS!@Yv#xvsETh1ky#xxFYSLqq3G{2b5rk3mlY0SYqGo!#ImT#v4%nb1T7`H)I za2ErOvLg@GNlV@?UPq$;jflaZ^dlw8n0WoI(mn#5Z=#+mR<@8D+h8w%v^17F(RS zxX?Iyz`Ej3o4nlR=55GN3{$RS56|H1b9+|~Z7%~f-X4v)%+p@lUa!v3NrpRtS}X8v z`rPgk3cwHe^bD*s&z&gND#W(xU$AbRo+nkaSkbKCQ!j4ae!BXdk4|zFKR$CZs&&{A ztJ9XhT*U9q&e~<3I?|pth5Z(G1{7eXrC#{%udm7hZa|Gb%{P~eTWQoS>vTjmJ@KcG zUbi{^3+z39@|jzP;w+C#b{qJgFP|jn$zJx&Qy=D|A8Ol8J5AIp83IU!TNikqZ1Tf? z!(8bF^Zy+m_^<}b)KQl){9(*{;a6Pv94|T7KTT%-%hcgIelG>%JTH?s0<1pj%OcUk zzWgw~^ieG{I<%wGx$zq~3^TtfLx2_F1*H2lh4=;c1HRv5Gx_SAuLf|X4+=G}!`~^rnM8W$& zQ2*<{k)t&lL@<#K&!&)?f z10e+}jKp2sMQQLwUwp(WJVY#9L|=fvMvO#A#6n~wDaVsRJflHc(llszzEHG2=VXAVzZu;->`rPumteH$M{1@%5pJDOh$dIN0Pk4unb1{ zTR+R=v@`r1XmB@oQ^=fj%guYsxCBRVQ9#qnu3$5x48X(hOTwsR!V|bMsLUS?n1D+F zL6ii`v2@9PWHXf%%Sd$0c#OKO#7AcYFmf|D0DK08i_4wt%+Gwwx$F#7#IA8M$BV?n zL_4;i;7Gx|K*BW4eB?@btU^RQwaDzsexyytl)_3}zR1(D&3pzD1I?Z+&f=uT_Y%zq z6C>0rv~fgAVJml6yWj5MmW z%EbK2U$o8doKO>Vv3|S-U?k76Tu3y|*h+Bb0z2^`zE( zN+K1k37CWktx%SnP?Y@B^K40}`BN4&OLB9*GV@pv~}1%*pi1^9)o%g~Vp;xG~GK z_pHGabyWP+PZcfGNkvm*H83^J)MHK7HFdbiTZU-u)Ns@!abzFVoYPV@)eHE(01#4E z?a06!QrqEx14sm3uvLf=20@iSV8l%dO;^MVJ6MA?*n>^jXth^lScdhS*0@qdan!B}>%LL#07%eQM2mn3SXFUt)jq7K z-r+~Y9LXeg(nk!-$80}wLxx%VI%&K~``p)?{ZfPcC}({Jg8yCEXf?VQ4BBXgsmVLK zqcsK>M7s4X2KBtrISfLYt2vED&5pguMbK8&Gl2dHS&f3mefaF zEy-UnM0&lvUZvD9HJpAOR-0|noaNVHRncdFhBXaXX8_uxqp|fw2EuLH!Zln(J>2z_ z21As`i47ytJiSdCjdILZZ7o%-#o7+=(XB1EuPss$PzYp*QYHn|LKUmWG+R((TA2jS zWKBaaz1uHM&e~PO`K(>}G}FFS({giI#cf(&EL>?2$>MF?NGx7M{J?chTcDiQ2E5p7 z#n$PiCac97hK#(blj4JSB*o`u0-E`jJi&RQ|L9#jHO!a&D;*C zg6zd$MSz5l{m}sU-0&4&8ft(XkOh`xSGBcOc@qcvt=xGvpayv^a+;&Vo5ef%*|v7Xn+Gi00h`#P(Gyz5L+`gTT~X~s8i4V zOW2QdZ}E@i=EK~|Wxt>YN&SNnx$ z{jKHt?b~M1<%liZAU@?vEa#GQ*rQcghyNWj0ajckj!6Hcs~qJ%Mz%<3c4&o0gerby z3XWo{I;78s%_|}PHIH( z01W8d37CL1!qbbsYTYo7USQr+=4t{)V34LUJr+?-^U@Nn-#K3CwPtIzzGHdr*=X%! z#!bdg^UczJL7oQAk^Wbn?OERyZi6)jfey4GWWXjiYQ#qBXqM)tj%*B$Zfb^TYrcT3 z;N&U$tJZApriz$2 zR|5ubjbmJ4-sglZH)qH+^mga>UT+<4>$cY0_-^qS|L>m_;D~j>qs8(4#yV%v zzIAE;CDXA6?ul(v^0?-rkDhRtceE^)m!H{f1VGDUGWNAEHvax^9I|3q#iQ*y^n z?9FxVg}$qeg>a;fa!FnU3;#A%h~`!U=wLRo>JxC#EdPoLNQ7bVMFvjaruAx>Oj=_o z@c?)4Hc$06SMzmV^H<;DHFXBS^<9GXSsr&|ztwfWjnsTKb6EG^F8%W#j9Q{@C^;SU zLVxNepI!%#Vnac6W6bm-m(ra&o}; za^Q9U1@b%JcUUKf82^8Fz6JPzr^ugQZs;cTXMXVPedbD5bZK|?rB~|6j`+mp)~Uv3 zE75qm$#DGn_9X@J7AD-7mGgo1@icw+cXxS~=l8OI^_stVAdl32CwsJy@ty~C2-Z=*I5+@oIs9?bZj2bs`?CA01MhP4%kQ8b1K z8dWYd7{NgU1quxy7+_!_1P2i&*0OEu_N~_vaOKjSYxgeRymgc4-P?C<0t~Q{Eh}7@ z88c_k7BhzSY$4>xk|#G5Xz(#X%$NmkepuOaM9Y*xhpt%gB1({|SF=W)TI0!*Fs`IhDypbjX)0q_{#Oo@ zVJ3KMt)P)2KJawoWvV$Hs;!b-W1&LE7<~f`ULe2DCbcbdz0i|=j zK!S}EjD-LNJYsq-x{KmvzzWK^2kMdsE~sUHuR2rMy@u(#FTeZd>#wS&1}tkupOM4h zmv%z^=+DhT6CyIiiZ8EgD^9gs$bJNW`v~JGu&u}@cv(DzP z0LYSvX~+?7njNt^hNs&F4-y!|iJ*q_yWUMpWl&*`bdF^$m&pKmTDbrM`2W%)3osx@ z(32ht$wL4}fa7{yGuo(DrLWATuY5MVAr5nB!}huFa)&uuXGW(#bL08vjdz>#_Q zR=5<-v5g{B;UroZDy?;mR#6hz049-*#vzf2N0XspE?2`t9x{>4w4pQ2hq-|r4Ru9~(12am@jJ~sz&`s)M;2%R0Mi)eMkiS>DWz(L%4Dbx9h%69 zDsrNgD~7+UgrECKa!d&GXeB#(y3%CRo!O zR(V-cwM#@R0LS@2DqgX^C|#SiI^wOLbIXWwOld2i`C6mRI3(U46Vvb$t98@60WUuWnUq{(*iR90{?+qaP$r!f}n-9KTVCSWZ##= z4GV+I&D5^>c1XUK?3MrM(oJHms9$E;Ljp#K(zt&NN;vIHB0dvwhOOvDK?w zcf7%v@^@~4V$ofZj6AX|Z zL^{)X#IBjfFv$<8!#PgG!2whi|-PDzcu>TEA%?KSD$Y29AQZNeN_-trb$^bd& zMmeHus&fRA(;V)$_%uf~aRaPXovl*FWn9TuKex*8CM%0&Eb{{qpqsBbYo3L5V^8{- zfpm50DfJp`K=Wz0Pq~0q5{?MGb&!^Vi!{{j^2VqClHz|U01&DnFz?aunV#nM4MiSq ztDzZd?5UDP*Q^<`nwI4;mibrXUfMRJdhTv-GlT9uwvqBZihCy3IejPixa#h$DO;P; zgJ<+&Z_wzjoIwYayx<84z_3=odLp#WFU+Y=!#Cu1mMv$siejx*j#P7i^aFEww>{P~ zXLr40KXaAi9q#tldxdH}A-{K0f#ocGZvWZ#-)prL*!UH;RKj@h9uI1_IIY2NF~G}y z`i%mFyW{2mq5%b1q8UyN`E{*ZLm!g-%%(Rn>Qjzl^?$bBvyV6IY5#V+zrF6QuRr}! zGi#jV`_`KDzu(c0&&}1~<(37B65P-hRT!U44IlG81x_K^bUYlCX@KQrpSS$eC0v;J zDUz0P*JN!PBkc>v6~;M~+UY6Anx$OE)d!oQ8oR}t?ZsgH*_Eo(uy5n-kVeqCFlBBpxCPqjWF@EXk5q9NPt0;W8>?Gae2Dgg|yd6-8Z*365by zYGWRz+$y>vI>I6xrlTBEr2j^qV@ASZ#;p!J_Mg6Ki~+$3$M_Bb4&I9}qT%UcB6bm< z#1kQ!(LZ(&S6tvgTHOKI04`*r=v@t}aL;3L<2e*13&I`^(%T#2AMH(KMm{A}mZKd; z?SQTpZVUF1@xB2^Y9U{WPU8YXI4c}`_;${~5KXAb^l{}3nN0pKlq5=kOpprvGxtt4%&3|VSs z7Nt^(jHZep;fqu!UwsgPZ6_8cPBMHL`JGw7pj&=?q$)0@M@gkA&fp#Trh9%Ui2kK4 zGGf)1DkTpxp8-Vqo;A|!+8#b(*H zM|*N4RN|pxwr7Yosonjhh>GZNvg0?=Cp^-ZWDcSMs^#*%lv3d1@c|=NOhpq`i%sZG zWs2r1C66RlT`61eC|00RRa905>>7G_at-f)^?{s=#nTLkSQgI$S_e;su8rWZ>B7 zqlb@=AVYrKL1hRPA0&sUR9R9bks)7(5V=B=W|o^cZ??;_vz^a&?tHp)*U1c(Fky}& zMfxR-8K+Q(n1KT)j+v`)uAY%&=uB5CRKPTKn&pgFLuk*00TZU_nXG5g8iMx@9??dO zBI(sT$?csO@$F-Ld>|a;!Nl+S*j#ylBB$QGh^P&xwB@^phJruP5Ses zzL)+^BQ+|p<4ucS%bra;@$5{QQm3}W`?T-RrA_}nO^J8vXo5$TO2r)2@=$|A5k5@) zFegx&vTMhl*t+!X+yx&06u*#sLJ8+3PJCE#eZ&eWY~bk8W4=d`BYm7iNo9vgmMgg= zQ%yBxafN|7@uc8SKXn3BCx(Evlu}Dom{nU-nej!2W}GocS7(6{)>38}l7(FDsD%_9 zZJqIjiH5X;mOJmf)5#>8NkYja$6cd|VbgWjn0B!h2^%JtR8mQCz%?1%lTb$KWM??? z<<}*dtfpLRKGsHCY+ec}<|er1rkiBF{Wc|ORc6*#UsvL07%9!wsoZzo<;k6%eC`RJ zCl?@89z*2~$`E_%CEA`v9c;9b4L;!T5v2H`v;#=~`4C`9Ev*#BOjmqr;28(zU!DBT%iTGBWzlH%xooq(NmfgHbQdSwcc$uqqzT(1}F2JTJ*LA#(fl2pk zyV;AcaODpFM;s;n`m1HY%rQsG!VD*l_~LwC=lH>gL12(Vlp|E}<%ll&z@nFXfP)Jz zd=9b=^5HsUZT^^_S`oKdv!MjK*=5Ie6J zmy9y17%T8$G(F?hoq)R}maffBBz4-thTXMf#+IbL;jYcL`RMP(FZQ6Y3%9z3*?sr? zjODhZy=tECruu&0+oQCGqf-DGr?~78%z%n(+;^l?3hV?*Ap)5gp)h9=ja49HntKn& zKo`2uZRBI73!!{;Feyx3Y6mD(NlIGhI-0;vX0=<;Pb8F-3XSC|uWAadsKTLLDa#DL zij`acn8rM`gi44mni^U5ZJe>tmENxj@jEH53S2^ViYVk@D-ElQ|=mt4alou7fcdcwKrff?BmmI?=#%hX2 zYk$eay7<_}A>GYPddr{M_GPc@`RiYVvlDa(=BMop5|9Xdr#!zyIm{VqbD7&1KGlQ& zL5sI+pYZFH+N* zNbStoo`}6I*-59fA=qr>cbj^pNt}KATW-pfQ>WUgInR+I;^H~a?38t$@6@0@6RB2> zRipwLJk$apkb+0nRgxilr08q_gV0^lbegmQLoL?P!+O9OEu9UC|Ro0u#5iI8-?QE|rc+ z&24a&y0vI|6=2c|#U&=8&2D;ANM%Zmx0Y%?GM2GxXEenrysA!sG465jJgeih%ZYRx zY^`mrm?Gh-PlqHD1CadZKV1+|ONK0=lq8)F+SIVN^W6>s)4u~EsTVk;5nIDnC^l9&9|>9WSh zW*zHU8@NDGaKg&m?QVBN@c_1#m%N+f+<4KGv4}*Vu67mZ=lbdb7{r(VuYkSeCFfh; z!Zs9?p%mpxE1HEN)Zi$9)|s(z_{*q~)GTm`gIC}n1R9!Fm{fB|SDF$kwX|xNhG62= zkb}VPF*9sdgiLC zYz0`IykrJOr%!-U98obyA=ZXRlfBdKn98wpf~EOK|dvGrY&jF3;|5FAkUYk?TYj?OscDt)1>&v6~s0phi>LZrdizM&a0c>9AAUVSFr1@Gbitx!WP1t z2sH3P4PB*_tb73u_|A&ZHpF1FaHVK#VHJjObs|*7NYY4@+8KzL+9q<^TAaAzYqK@m zp(^R(n#p*MI<8yi3eKqmbJr;t(E$nk02QJ*F3IUuMO}Asnn&%+)>K1dVXJeUHYX&` z(b{vziNeZg3?#If4GN;?(}Lk0bC}QU$Z(H)+-wHjdkZS(`KG(hQtxD9`5P(8B4yr7 zi3vfT>^7B zpod-VBzioTbEn{Q8Hjq)VP!kFdPE|7=H*r+NP@5DRv>@^wWk6s$U%}+Zf+I>mt;^* zhi<+Xe8LA&Ri{`VBUyr$I}~yuxB_-$p%q_X6=i1@X-5SJhAVR?JqoupzjOs)$21y7 zBX$vfd#86>v_+y;3Fu&3(iC_Zw{d%c7w-puSw%+w(?<-nMgYhN3IG6)rwRg?2tkko zIuHXO-~lM`hba&Phm{DG@P^AIB+6w8y%rpDbYxurlTMz;O$ju5q!)luhE~hAfzqad zo9J`hg=^fR09__@iGnC6IEtv)NGS-2Xm)!r5KwMLP<(}My$5_acxOfsQ9ICAN)be^ zG6b;lOHYwmR}nlV#aX;!6e5y5OOs(I5)_mMO#K!tKXElQLL_;ocUlxwWm9T%^hJV) zhNz~7Y$9WUVPjrXEnu<&{C5eia0!g?12E8d`viN0Vgo-g3Exp%xCTyumw9@zHD$y= zg%gQSMv0zSi5IAlSH^6b_>d0yJqSnusYr@%Rf-xUdvKKjf4G83cY85lQ14ZPv}lXB zh>I+Q0yuDd1BMj9xO_d6OBg~cZ!tVxF$ZD)&}b#$lB6;$#1a$*hbv8y1MF46E z0BqToZ7GTo;RrCm2>4e;TX?8CDXQfnvpMgQ+l@*ogz$b0El=5Sftggj1OynUBCELwAamDWMZeUXJ9E zEyzKAbx@+&SE5Oab7qoJH=@Ef1UBF~$Hx{a#gY{QEI@-p&bKRO@FBK@d@j;bSGW^W z7(Bq#A*fYMUE+oD&@Gi95BPF6bcCJL>2cY~HZfO5-AQF#13uQFe+rNSIe-Es*q&U< zrSCawyRnE1*oghZmx57{pVvTPrE_Sdn25=V&<2riil7Dh9X*AB-co9lkeP5vp(U74 zruYCDu!5ZllA$S*q(hQ6SYN6Cd6KLdZjRO}Pr(*G2rRWCQV4d8oYfU@fIG=|TD)Wz zy;NGk@+rV1BSQhCLQ15R5l1VQhE1Ak^4BB(`D62P3YHK90FVJ0&=7ODmcZJj!pfG1 z0s}lkWcO)!`njL(!;qzCpl=GNb*hPOs+gzOko#CBThxu-_$`$1o|fsSt_P?XQ+um; zdynLyZ5D&G$a|={sE%4#E`S0ykQ7RhJF?QL1*RdeLNvNUQf9z!z8MBm5u9#UHIi0Z zSKxfXvrDOklpQ8i(Da~Dd4{>Aq#Orh*aSt^1yx|Ocnz=s8vqf%I;BzLKZJEEtHgqai?UYEmdEf@kB z`kCbxnzLAvbB3BEdbPQTLY^Zbvbh$ml6*pBXkRBhwqlb<*cD5N6e=Q23I`NJQCdr5 zoWe6KsS19P;de+1E>?M+85^ruX^!2&C6&h*)DjBhSx>=wvWcs>qG$vy%RgoMT<(Jk zumB5bN@bWkpfszX9GHP>nzL@&felHmKC7TV!Y#W7IQOzII&wBdceI)_t`r0T3*d)^ z`cG`;p-bliq$7i&d7AIqs91Zo-L?Y`_Jf~Au!MG;J);&;QzE+(2gC^mI$4{P<`p$_ zg~a(O!#Ip=+YU(o=@*nxRAabe7?)IN*reFRRfOT4P(`@dkpt+l5DTEV_A9J#i35y) zmsVnAcr*=8<{Zoc3(z55gMqp2gR>VHx&+z48yLE!JGwl(fi0JayrCob@+L+5aY(Bu z9Xx`jxREO00U=PRPs>4k)n-!*qEE+A!ke`t3Im8BDW1imM-hy_BaF;jwwPr!9byP_ za6JF^DMxWq3<8u$VIWdtQbF;s#I#&Rl|C5jw>hGf>~kl|F)dRXRhIw)sJOWI8^-Q= zF*3lidua(F*LjiHi3seu-!ZML*O;ldvkpAR4}8a(iygQjRFlDLO!7BcgTXqor|$u~ zA1rif$%-fc+-7Y?1MK>tidvE)dbNHC7B!4~O7XRp>b%296}#CXSpa>E)@TzlI}ZDH zDMGMjaRo&~lnQ4TP6U-HHpRR3B(z*jTFIAvS%0-Ad5i&;>6s89nPGrGD=Wf$PT?Y#+P%nl7CD(TCQ+MG!yv;+s&2u` zMU$MwL=@5U?gL$rltl+7(XCa!(7b7e9VMsM{e_oXxd~rE6oaQ%@29Ab$qki zoS@wQK_){>&cv~5aa6ST0w`u!J21V zdXpp<`O}pt)YXPT92ss$4N328P%=o8^h{?@4Z}JR)eDdUR2>%crlQ93JRo%yNZ7m{ zQc_)E6r}86Ez%B&;C-TM7ArM(z!YJUHqq{o2$uoZean93GLHPS%*N)v+Y>+i2ns*{ zaB?BQ0O8#L1<=>#t(F%91NK6zQTmt5(Uor++4B9;kL}p@ZQpMCHPIPP_~NQ*qBn44 zPFP~d=B$x{dO>AoyPk=39!di#3}=zt)b_jsF5m$Ufdja6$!tL(OW`xjXIWi6Jex&J zU$CMq2@|L6w*00Rq*@l&Clo``4pk!Eqe0`;gn3i)COv}1j%lm5u^6y61r{&`Rxkxq zzyK#_0pwk>=Pkx?`2(JCcy~f`Pj=XAn%FTt-}Rl%TRzj3N7lN42+cJ$P?X02X z7K=_7XH{zi5>BEvkOT90C_Nwq$m3bdI3h{&&pgAhRk2{3Y8E1*QClZ>M=T?7z{)}+ zJi+oJFz(jVO?cyo7ctgb;wfyX5b&PEf-M$Q069^M$R>a2dh z^&12O&tz#z>nnZh9*^s~p6fmC3CU%_z)nU?BJ6;3CR{b;%wd8sU*Hx0NkQo`SDfjz zi=0=EjM}A1GER4c_I#ovD*-9c1JtXN;GTA~La@HGA!9-4=q?8(!l~b0n{4qEQv>5@ z3saFklxNVyHdQ?}KKA+UB&deLr;!MGkz+)V2tV-lM9`Y^^+es9qx5kU==IXAu(z+YLVeL z9B{;voGy~Y7skreNa^j+35)>O)~!D{{*4Ma35fs%dB|5NKoE%kw6usqk@XAysOSL{ z?gD^+{-hoP4nX8bZUKgW`1tz(JD>`aTWpCf`S>63A`jW301&874J0U#U?@j07 z;7Jn%3KS}Yx@a*Jh6@}plq$8+6h>31I+{wAYD34>t2Qz?l0ZO#2OmPj3ZWtd%vms0 z!cYMdW-XkyZoixfbH>b>EM~%7F%##^-@k_bhB?c2ty(i#47Foy$elYwZo}w3Gxtgu z#qQcYZa0b1XV9TVk0#Bik?GQ@KTA?AsUo99L2elN$<^lng`5h!#@tN+z;EEeeGgv% zV#;yk$(4s-fZT!w48o;Pr(S)!f|ZtBks8(A)b~&Y#g8Xn-k^Ds0!5u?KM)}%h8rzi ztSIr}B>EXScKjG}V5*Z)5)dVvbegF^nqW#0!P{(V>9z$t5DEkkh#HD08-#)Z2N!JE z&?yh0iV7ux8Ycjw96YLBy%ujg2-?ymLQ~QIP2Q1PB#x$ zP;O4-LI@!_3mDMNO+NeF?FLmu5_BZ=3O%Sj@lrwmR6LZ(L+F}?8p5c)i}Ks3Axu5$ z?-NoKJt@EdQAx=q6cIG_R0AJ$P}P+(NCAZqF0{~vr8fL9L=io#$|@3dNTH|QHo##; z9>nsYNV3?1QLVO+oNO{5zlavFIRM)+##Rx>Nr{d@n>1`m^xdEGz;8`#OcqL(=YPNxDWu)^f< zG$#fuEP?!501P_!xr&iTQ5e&h>K1kXsE=&|6PSv~>mqU~j#MI3{b||6UWPju%1jlk z(4Fskx2oL*FHJU)kk5cdD_SWf2DW+%QB6K(Sa=E7GxMR2c4g z%}3CZ)?9}4t-qXwEX{IDVwA)r$3ROjVxtSU(3LLF@NZrI>sx7D;~8HS@PHHKqr)nI zh!{*E2M%P8aun9MK2m1^h=_#;F{r_ceNbbl>mUe2$Pk7&q=Y4`#6~(fJCJ;$h3PTL z3k4)YRMJppuV4i&Y{OQZt<2|1B! zQk-Ios;0ddQNc#tlMCCvATGWC2xe?$tBe`YvKGR)#e9o_n_$=$hp+9ZE=sbJX5{!z z!d2u4F6hY~6M4_yU?&5Cbl?;$aHj?y#{m}D6F#pafke>4a~sUyBRR-Wj(O}+AiD%Z zB611&lu%MDoQ6k6!6{FPN>r^F>C9yK3YoD2r88tH4PS9X9L6%HGS%76JTSaj#Q=yy z1Y)fKjX-k0l9H=4Em1lVnw}GtdA%uO?`l^hOxK>J7d38EFjFUNFoH-Dxo6MpnZfKKON|RIWb4B233g;Y=J?B+Agq+ zDqY3`r8-l5%o88Uq$W+cpNdv=|5Gb-At`f*l9R4dr81*MOIe9hnEtM&s#;J?>v@}8 z{!nO33F1$YrbHCUl_wsk!VG3$)F>jgMON#9*1$=l9ziR(K@yA{{$f?Mtc`wd1lPBq zB(CtyWu0(qXB^kMRytl+o;t`t0lTu-x#Dw?H0bBSmJ^-uI?MyH_@Jk3_fYdpbg>@U z=q5LbvX!Z9P$4BLN^W;b&7yR(s_3jsSK3Mf&vJ*QJrFE&s6*nZ7KlmdP|{$Kf)42G z0pL~1PN-Lf8r-&eN2OYeiX{XeplwFsjEiLS0*4+2hHQG7k+P^z)v;E|xs=gM7Vxr{ zvOy+)e#`D;RZNZEbB+Qgh?SHXpa|S#G0lx{6%KQ?FGb^IS4`o6J`U z#J~s+v;dt5`f3OubQV}Hh?WOy$xAXelN+lb4`{egx%SNl6kS`RDpTIN)t-%+)znIl%?wio z%v#K{ma|N$G3C??|Bil47s`+mf9(j|9Q!u7REG&aKQNI^T>a|wsssl+pp%^bnVc6) zAp}&;_yUNaP%|gHy{l6!$QFVQOgXmL5K-ZnL2B6n%}f>mKCpqG{c{2nnA&ch_HMdO z(>Z5*$qQz1Ei>SO2p^@Vugb873(BY1UH}D)cz1|#8*kl`MJ#Ax3mopPzPnhOo0X|| zTdF#jw>jo+m6^W?ge`3C0jyafT&PkN*H|M!ivnqDp=FiIFvjw&`Em}Er*Smh`4~C^_xsB&N z*Hb1>=e-iG|9*9TT>xrZe>c2s3wGW1z>3R?5jb7UEp84e3uO^P82()sH{$QpSFp>D z=sx#SYsR|QB|qU3@q%K;_VDXhpk4ENr#V>w<2s-`L@i&6E(begGXH!==))gT5|sZ! zrIUKL84|G6n*{=UHrb0kR&qetdq8Ycx*Spv2m2izVmjjJ4MHoBI@kN`yBy5h5~ zMZ>M@X%Xs6mK8&i8}ll=0HZUA12H1Ix)`gxYlj;FlDc@7GJ>BaL94zqvj3^0inxKM zQ9t%uLO-&BfJzQ4D5Ur!x$v@q`b)XbSuD-tyqN31{J1ZU0);Xg5H#C40h=M!OF#r% zz*lg+|2BNUH*`ZeY$Z3O!)psI+{2EhV~}slvkmh=&FR1hA;A(1F%-Bh8F-=;R4Ool zH0}W|vH^^;=m8jUJ8t+W8FqEv15WxR(1(Y(wV|)c!FvB!dLuIVPSxCUw zdqZk;K-ZhVJsd5Z=`h4ZydxCBt)Q4ghdmv+_IkC8jBia7PgQdAqk8yC>E?? zi@CTa_koNq`hp>_5huBk#K1(sz>-lUobofs94Md#SVe{ujtc02D5H~+!<_U|0Sx-6 z|6udH{sYE{pbs&#IWZiCWy37hV<`lzMrT|-IE=QHtTt+-!#1ooSGu7JWEJ4CNt^V> zCA_$>NJQ6fCh5YecrNBCZjq@}Y~dW2zy*yKkWbLuealDI=%?wR|*$M34xF zgE+4=zYxg1h8)X$l7JL=MTD_{26DXP(36Zy0ZOt3<=NN4~HN zx>!N7D5Fbc40phh9^6D4bBn3^7QQROhwD2^_<@-qOWXtijbqE>sI}v;0>?X~|MXg~ zQwX6h+(`TY#*)Fyju6J1D@Ip9MrUh70#iL}Jj^(p1;yM>?&Qvz%*OA`KyRZZ?@~gH zyMS@5%*zDI;}goTvzqit%CV7_?n9Ou0|WXrAGz_ty)c8z*uke9CnY(uI0~Hc1H5)= zgcZm$TFlKV+W;GgKPf{Pw*XE!NgciG|GTK2P zGoLd^gun9)&zJ~Cs7(;qGvISjhSVptoPq|L(Bz1q@QM&hhz7eXHeXE6|Bbw;FpSF$ zikW3h$ytyE7DY_$jL8+nQy1;iYO5)14A1doItVx|^L#a;LWCS$RLfk?6I4VgT1T-v zQoFdDs+_mwS_@8FyHHG3D^1WY0iXp< z#a89gLXA*7fj>@tBH$Cm5i})ks7;;7WrmTGwC%6iASM?N=|Q&^htATIHh$P=QT4*fyOVhxL>)oKs}2Q|%P07$som2KHa9kKU}Pw2Wz_`I4fg3`E9 z%}@OTvs0g-H77%;QhbG%N&temlG~--)(UWe8*sc?HJA#$CkcQ7hrmm#B{nx*h^#H8 z0h!b2%uYMKSUx3Njg8h^KwH}N*gMlhw|!gie6Sil&k3ko|8EW6Mflb#a8#i@sz`m2 ztL&O0Ik6Q%lEBCU8G%=~$QCI1s%z>5qCM4oUDZRaTnB}m2qhTb6r?E=uL|%1{!3WB z)D$>%8UO09h~-*4727-2*x2RH*)`i}-G$oy-?YU>3WU)N)H9Q%+=g+Q2rz&HP+7ah zTSom!;#IV9JzmbFN68SEY%wvbVHPj4Dz_Md6;qqF*nw-x0?-TtDV5E9rGy~3P4Hb> z>_CABdRmbqSh}i!Ah?9lZQl^pJUBIpor}(iO~d-d-`CAp`&G>S-A<2fVgQy_|NU43 zW-yVZsXpY_jO#822HxO>U`2>vpXAXBmbXa7VAU)P|6*|_?O~gKLz@=UmbQ2jA1gTR zy;oDUQcB1H0zeT})I;7t;4YPbjqA?OIKC)?DahvxVX*rrjxi=Xf6FP!44QPUVml)ROH9Z8a#KSl|N) zfVzEPFwR>N5mt+*%nKX=gRPth{FsQs>8?LS zRNQrh8Snuhi#sZyfdh_V-K+o@;9SMS;R#CLSjY%X%Ba2U4pNF(V?5$?cFA=n+gccE zX=UdomS?t=>dHhnmX-n5%?L*jGelH?!=4FK~xc4q4SRcfae<#`@$sIKQgyCu(##QY*$dA|geFJ? zAoz?^tbo^UlR0w)9LNHAAZ+gLZgx0>Du~<4EmRli&B+l?sl5P3&?LL;JYnSN0Z~SC zUgB!AQ`oIGq%P{C*6*j5;-+S5)2`>J9&G`a>Zv~PwuM{QworiX;;rUZu&!l;E?z=> z)MZk~;+_!`gXkI2i_0jC8e1{KD9y_l0v=GJg=CxpDAdWd)eb{}Fz5vDo^kGm2Oik7 z7#2Z~o0EVVx#|u<(7h;2kR6bO-{>?w&ED+$eq#N8=cVr0s3zqC|KxgxYAP>q)K+b( zez2?7;(O{YSngs4Sn-s_00_3_{|P5+%ydsED(+t%N=mFI?Q!!fDhwg0foaywp1FY^ zfNtpifgivCJ?ioa!rdCkg21NnL|1fn@PT{r^6;$ys}R_{O613RfFQtCH^ndbE>TvZ zZ~Qgt{Kjwo9_r5qa44te(8h9BZ*?p`@GTclL(M%%PwxdbfE5q(0ubm~mT)v@*%Iu! z-8Pn*C07@z-Vvt)N_6NM=>bIW4G2I18%VJ%puE&c9aY!_L1&c~@0V?(0lkX_MqhMt zFZUgI^dGlSk%K?p)GMh40dThLzEr(AO=s=Y1t{KAv}I=}PxaE4aw>mnS0DIRzg>JL zS$)1%#Gc!KCi7Sp^MLMk|6l)gU=LT_Mn3CFv0?E#hCUKyFN?6qmLBK;04M+thyfg# z5g)h$jN}BCQHMk*s9?#~K&*fnFobc>`R)b-bWeBBjU17CLNG-ROZWCn-w#dcOO&X0 zJ~j2GXX5-8g%3036VkizW+Fz`Ri4gi}aJ3|t@_;flw> zjSU!ra@TpC=Yf0i`EFJLSuGeJ=c5XkglTZjh4OTu&fk1@dQmU+si%4?5AZ7=@T}MR zP~Q65zhbtvz_tbC|17rV9KL`CXaEO)crh1%1NdsUFX*?g_%+{c`3}xyRs#dNR%6c`67Q}}Ub4{#8(PBki5HWJB<#CtCkRNO9DoK)L zNsuX5vTW({WyxS9gT>rMY}Wz_Id$^fS)sztpgo030Qz7k(xX3@DlMv$08{`{r&6tI zRVsuF7Ze!i+7&{90|mx8aQ|e z=^+FRmBKt||MXP^AOa35eW_5cEW}4FQKv$2qLoNN1xJn+U>IVET`V&|ud>eBq8+=~ zvS-t-J^LMQ+p^s)8qNAQ@ZiF$f<`grICA767!()|d_jaup014=g)kw*h7v1o-{}4O zMUmpYt3+8IzybMQwI8-kT?dlu~-;t+!r#@WHndO)~Y_r+mTCWFMja;a4b9 z{4w<(fU9{q6=@JiK$celbY-cfU{!j+1{Y!o*CHBfNLLkjmFgj1i*XnjV}vP&!wfpb zkfLE9_CN&~h^d&!LYm|N0FP3E@P#|Gh2bcH63hUblTF^{Y_qb>;M=3s4wn-MS}Mn7 zwMW^2P$~cwMi;@9WU5??g9+GW!wAbyk`pv)xrJVcW9!DHYG4q1rKMa!wH8)mZf}`1>uAe zgE}h3fNf}3UW57d*Qq7)MMJC*$e_5%CQ?Q#4@3N*00x;5agNtzFe?zIkre>3wY{NV)8yeAvymRPWe*&KEuO z_^$nSesH(#HljT8xWMdAAzbPB1t?7ER}E$wxZoALPpTpt%Kw++d10(q{W{68{}}&% zeTXuMYLEc}ykIjbc*?LkVH+V)3sMBQ0FYWILDmJSH?Wgkw;W-E9Ndmu;d?*}ETM~W zX-5{|5lOl_k~KPgq+RcF3G$jpHulg97|;_G4y~8N9FEOjpy7#8Yh$|7~L{zx_fe|Pum;o7EwW3>r2thjq8>nk08c~3 zD?S4O0D#~M#bO-}e!?~h-~b+~3nT?4$iO5Tl4uV=ff0_QwBsz&V6>Y=E_^r1ILYZE z%k$*&R=5&7eX=FJ0NV`TGeaBV(3CbrCE8S}Q5;e)80-93PXfd}Smxx1`0?J**jCG^ zpbsizaj6u=0s-~?(qRoqi-g*T%u&J5nk{JNU(j+!yWl_(r16+Ct=X5pfT0G^!9g@o zp^6*m1OldUmXd@NL>s&lp7H!@ZL&bfdfIaVkg$QaLSTTq0cZ%Y|ELAMaeOP8Q4y`$`n2*jWedD708?@PkPU zTM5HCizsM;UE-(g*s5^>x9vd{5S}|5}?t{+H23LIhg3bvn>xAPAFi z1xR>|E{ycT)8*ZTsLdzM zY^rF3%9)?y7~&C8fR~FX2%tFg5dOIH$&1?^F1~ytTcDgp#()S>bwxnc#B_Qev=`z{ z=tDalHuIYL-~Z0&>v5F8y;|*!-Rb%W(^w@g&E-F)CcmN%C#Beumu{?g&krahgch*`GpT$!3Bih z_zmJ9-i*)bU{(Bt3WNZ1G{6*uLb)uRC9woU>DATw+eLL<6be=VdL8Xqq3vy<79!v% z#*#_(9@_Z}f6>yeb;(P8$pwJeE(?OQ3~8#s>AH*O*@IHA@JRwsI* zI*MH=W?>fU9x-48?#Uy4(W5*v{~%*EQ3I}GKB5#E3fL>sBBgLe-Pv7c3BZDcMFZ$v zE_xjF@nSEcV6z2|Fk%SC)P+vKK&tEo3iQBf)SxrwT(bz5fK20aRHNouKm#NKF(8z_ zfg?mUp{YHTUyWk`o}+wS;q1BE?TO+j+Lt|&9X;Ncl{K8g`QASE<3GaPE3T6+iA64* z4+n-BLL%53I+&5ro6&`61S4Qz2*)+sT{s2?-~ckJ$`^>=GXjz@gd{Xto=F;w z3UH8eOhExe0x?wGN`%_I(WKefVgaKOu|7d`QTZ@(3G(G?#XkH^u!8J1BOpc8cX5Bav7CBbvP6ix(u_LTq zr(!OqC{8AtLMCLY=}=1MWD=d*r05soT8nn(8HOe>=}lN*N`VYpjUoW2eAX7FW-k&W z$`6I4Tx|}9#?$~65DSx5YP9s+A)?;{bpVwf2Lmu-0sH_qxW^1_DJDi?*QH~a z0^FFAY3>=|h9)2azUi7yrkipnc-|^yVuPGknJZvCyrrd*E9=w%aL%P!HCI|KC?g7Hssf+@ zLgyzEV0DUOtYYDr%9?i8qrZ-5h?3~8+G;!oEYR|5l^x};Zl)?~g_fPC#L3;U#$Bdt zN}m=10we$fa2767jG?L~gk8*zHtMu!tA>!qxBB51eB_~ZmAJ;OaY0G3UY-O*fCuF5 z07-z*&Da!hL0;ZOOkdGfNvqiYosY`qk6NV4qHV`19)H$AZWbDF znXKHR#>ocBfY$ADL4b=4K^R=Y7koh&_&^Qd0C6UV12EzgG=RG**(FBj>m9DER-w)c zC9Fa&<9a8qn(wW~qc#{VoMOZJ62tn+WBh6^of>RN_3E&)=()OL1}1A7?&+pXtN;u! z-a!oPM&Ctt?0tUaYqo^~KwF6TMYy8u&j9c6J}LUS+z|Mu8JvM3xPv zIN}sIz!cEy;MOadBBmB%=gyvQ&kC)G4sEV>r{!Yq`|hv~!!Hoi@4?zH5vi!q_{UO8 z|5q#)-~Tdem}M>NGChFBv1(%3_cUd_fkp zt?$MLJQ#xW-VW|quL1l(tI8fH!te{XqYRtrtje020`k$~@X%tet-3EF!|(iB?)*}w zHfRH8Msnu@U#3z;KuQs2Jq9k-Vz32j*G{Yw2rA&Drf7{3S5|B7Vh9hQKo{>Kbm&DN z@&FEmLCusg1+SR7Ri2%HJL2Bs+OT96 zav{6vAr~zWKQbdTayGl~BfBrcAzV>zCW|I9Wihd6`b}vTfB;Cb0Jk&iF603t|0>6* z;9E=x8qok+;I5)&09x|d{_MqC2Cprzn4;(U-2fl95H&GerZSn_f5C%^N= zDp*5?Eo(Yc0(Y^7?en6>PdBAN^zH>R>L$6uZ9&hiRv@%<*Z}jo?WH#FLoW?-)G;4L*2g7$lbBLNRH3xF$2Jtnsb>^NlB5$)It8_{~a!V8OODpWc%JgIvSoxq2 zdp1A-6hSC&ZR-kfW-+9ifnbMZSPfh&KEGKjOWSCuKwuyv@16lL-!f;5|Jy;!&I9DY zLbr}Pd;t|G5+fdS17t#1?_}AzDk+Zjla$ir8VcTe7Pd9T+0HFfoFtXH+r{oGOZyW9W1~G7FE+WTu zH?Oa8H@JhZudj|XOYNo5qjb9F1h61c7bD0UnkPHS?=U7S%K zz7{_Z$%QcniSPv#ShWpG9(za2XLrj6%l8DiLmYg;?R=_zvm}{@|8)Y2wI6HrnFg({ zCM|+HvLVZ_lqYyxD>#Eo`GaryHa9pvN^<_{uhepxfas~0v8Mo3cTR8Znp3eu>L_=k z(NG1oMUsew@Uz<1Pl-f^w~ebvu6Hv+$%W5OZrZp6ok0l?`O=I+Yv-(4qbcMn;Lo}# zZ4Wa0PVQP?bCg$ka2t1VGdQSoxpC9ANe2b~f;q#H^OZCT5;qcPf@V$sFQyE()*iM1 zuQ@_Oh=w%qLyqnJxHv^hHl9bohVjK(I`uQ&I94IrpMTYkSBVWYZ!?N86{K5ogn;#~ zfCX3qMlYtM2Lp#TrsDQDHaI3Vs3~o0y1K8sZg2XPZ*zj9|FkxHv#8g*mxFoR{GJ3l zTn<)XW#N)at(5}wjok^V02g*B4}d$rGu^dM#vUFu(XPi-9~TdMK9fiv>SiZww$3$) z$1i)1$5Sp#^;EdP6^!wZf58w~dvaJna;&7RjXSuGcUJTf=XyMuGXsq5E z@EvmOTm%MW<8#ZM98uxLU}S+0kVYpU`?r0(-H&TKq|6WuK^C+_CoE|V4vF#pMmaHc z`I)vHTkkPj=`7@Ye?z*rgL`A1dt=&a-!K?yt!Qhcy#NUk*D4h* zXsywrtqd7dV$?(u>s?^Mg9#Tld>Apic8+%1#Ay?Rjx6s0v$LG|a%RC)993}qnWm8} z?KGD*eVQG-Ghe2(cI}$M>nRL2X$wY;+HGREgAv>98#nHS#1;k@NSyb=;=&mUbnd*l zL4pDqK2&(Hdco-wxm(oc-C}r%8ZS!pUUH;M_3Kx%R2kFcg_xi}{{*0bCjg;A3j|=$ zpsAyh8W1X@3=jbU2rz)Fs|M8yi>wGCltHVw6hWaax8CXiE)?GS>MkBKqyht*NW%=p z6c1bMG5T7ZDFPolF-^tGYDmvTnnJkZ|HQ#i)6AWA=J>)8cq~)x3m;^IEd|93qb+@95+PKlb!w zFTOrklF!eOa>VH-od~rrDF2XBRKNk1An-o~NYLPb3^u6HLAkU-VXZ16{3@)pG(}4W z4IP22gGJ~fi-rtk@BspwVyNs#!;Gxa)(Zw5bTV8^a|e-;2E`xd}jh(trdKrdlx5 z20`^ILQX}U0R_FvvaqaDDLi!p231XUED>qIONJK-NQ71z5xW(hSl|IVFrwc98U>vd z4q=DUI_c5Z!3^n4>70h>_1Mb{`2vnGoQ-y{A$7R6H7Ko}!ipFe=p{^GnA^=b<;485 z+%C6V*X}Ukg~+)xrJEOUisF3JB8&>pmm_+$A)q~h{l)L##wC9by@LVOPXR*}=Fflw z0Q4L{0T^x6C?%H2*y02k=(q$98kiteO&uJWWU*APU9YTc&kI$VD?p^IyIPfjhYobM zq36NCHqvP3nHMZt=LPd2|KVNlbAiXKqyA#P&tk{|>{<<(_KbE^bH_9!l{{NE2bN?Y z5pU(5yIkSq7Iz?b=dWLHGs|q#Occ>h;36_O@f6N*Z`#)aG2#t9rRQIcb4lbZ7ZUzt zP9_aI)P4*wF^CNSVh4bVQz}L}NRjXW4q#mp{sS_su5d8p@@Lc-K_ zbc9bafCW%#f{%qPh9mnFgdRkyRw<%)UGbEsYBmEZ^zt(^3Z^lOMoeV>6qz*GRRo5h zQ)%{enzpI}|J5D?10tjdNnuRZ8BF62GYo-^WrI@tc0ot{p-W6*0uunQb0)GXB%k-> zPFl@_kbEBUJKPA5c>Gycxt8ay0$rR!A6d}%P*6UBZ5W~+z`4#H)^kLOnCL=SgwTBy zq!&v7P&m*!6I}MP5oiF1P-+&Mt`v7K%OzR#!h@yWGNpRC88)fsm>s0%XvbV)Y>U~6 z+5%O!RLG!xMD8c2zdmm+D+=X%+@4SKEDy@boFeCO*8Z^#wD^;P7X80Xi&POfqZ zjU418|BwNLon){&3Ccz<+MfVCw6UWMB`HfOfDxw9vY5TB1q$H8&VsgNI2`Q{Gt?HC z;*vr%z1dz!tvabm#DV9S&>BF$nfI*h#iv`<+-5bq_pR=Q z^ET#+-?-)%&-uM?o)3rLz5*D~{~g$X87iOrEWn~1jM$<-cu@w3Fmyx#P^3l(S&(K} z!@J+*P?Wmc7#~hHw4lT2B1yfjo z6++M?w5@;vAeaQ1#QR;nrCDCq&`x;e&E9#l+0AaAGn?i7R)5Qx&jA;>ofWv(h5A>L zgeLG`yre5i3&~hrpA}g`VV#e7; zeAZLM;{owzWQZ=-Bm%fbCSY)U>!$Qi0lCv?I01+MCKBO z7R4n)TQgy(fQ+=6nKNK{xl}F9YNQM9)@VzjO&Eqn)`gt_u1U@2WfQ&eUH5$7|6SkK zIAp*1PG`UWec*vdWJd&D_yAkb@Pr1eH51Ia034t{6R&urKNnIHezal*NC2imu7L?q zh10n#xyf;u^4XbscrktX$!36;8jvW+??Adum~dNOKTXHG4wBJ@-utHo$@f04PmtTu zgIEDT1y{gvuW##YXVdoT(MDonZgmE%Z4-Q1bI0|IHit0SU`gSYjRna6gI;*2p7n+Z zcIeJlyW{=+ZRUG><*WC71Kj?2&VQZpd*40hdGN{%8~DVp{0o8zrh=FW@)icd9O|Mf zD&rn302u4BG>(KWu)-pyvOq4=D1a(fiKSi+=0$Ha*g5+1sz?{0QHC8|t?(5$CCcW}0kkl{!?k@i3&)?#Vp8(Gd-w+P@EUpSpA&vt$ z5RR`PiGn2QCi2545DoGoAP^Icu^y%f3^B1djzA9J<2a84BLH?@D27aqEO00E*kYGv z0A?g{#75)_93cp3(CKR82H-*Hf@BGaP6v0d_keE)Ur`5V?=xUP2VHC?it6`T(deLs z`E>55pic^o##hb&jkIUiN<+(bfD6&a0)D_7{-^!Wg#FNjy{HlX|K#rs*ATuCDLnQs z@Z#_r3u(Nlq&I>A7=R&9AP5fw4G$5J@f>iXIOr!JhQSo;u@td{pdw<9z!5pH1UM`b zCs8b5F6BmzmP#y$NX_La5iO{o9cTaoh;aLm3jkmY_*~HyVNoMBG7F67GgcrGI`Sq! zAPaI)6;1K?YLM52jmK*37n?|VYQzwXrRxr(j5K34ws0AVfg%p#8h;Wf-)tMz@ZZ2O z9FNldysI3K0T_0n7o0K|3UD10YJwJT0bs;F8gQdL=ddV`qZn(HE^lJ|kt`1&AZ14c z3G#MCjdoy3M8<;DEalTKL`1OZ3LXFiBytB@fD13+uoQkoy+~EtbY8k_g0dnCP>CGp7G8<1*DD@6C@lOo_ z4k_vE&IIqS*or!K;~dY?DSIIob~7s1kpLBs;TBIF`)fZS>hUtF;{2n7BnAWXk(3T# z^ZJo2DZl{aa&{OJRB9k)Qcm>R!e)l(Eo7=Y+rkG*vIhu&789WzQlKU#AQ22fFyk{m zM}t1=lRgD=G}>V=KVt~m!3MgBsOD2Zckl;Q(FcPr#{xsgTGAz-ZIkV zN{Pn@f(>{euP1iIFc!UUU?of!J9dHVJ@KZkTvoUqie1e9@ z%x6Js?AfAC3b9T_m@7%hhJDJ70XXajxM597Gbrn>8?kXH*Kprd(;H3nM7iPr{?6XW z@iw1wH)S*zWWiKVRTlb1Djf$n4-WzkOg?hrlH$=vxpKl9jX6iB;{w1)rE^I)OqD>; z1Q}9FRjw^!Aa}A4Iu z&!hBFQhfDSOW@J0Qy{mqc1%n>U1f(*D~5!pJPm<9lZFG-6Q^b(1ca*vU_iL6wN00{ zO|5kZEtj%fN9S(Y0q^qg)1=g^A&$?=u#3DX^=r{Y+i-2xZvRn zzJSX@zykgQK&HS30Cp61L9X@;-wI-2|0{J;=}$Ei)-~g>Q#WG+cJvPiODnr_lX6v}Fb^p@$Yo!)btd2}pH$R3g@#&6FI?s;Vn!fq zrU!UrP5+Z54YMX-;AxRyYnwJ{iQr6K3;_xX33=-I*mjz<3 zQPix0p>cQNad}flW#M8a*A;HT6-+fH=pvF@f^rXT&~nt8AWDKG3LYN@!X)PNCUE02 zkfcVygOi|irIP{zAa!L(5n5Me|5jIaT&9*t?ZZk12dG!Lc3>oofC#`9MuH%Eg%^5x zn1>ZpXF%WwVo(8WKzP4^2#}bEfwya$*h~l0b_G*CV9tVJAPkV; z2c|(5+P53ZI7Q`me&Gv$*EoL#4pZ4BR4H~hT~rq&*N#thRU5eQ+z|o}jln32WRLSl z69i)ZLxd8fD7unkKG<}BH33SPrdp{W$0AB|X)R2x5_NWGX#fYVhKbwsKQq91Yr=?o z*p!FBly!hwn<@xe;67~FhfP_QKUs#o)@iD^Oo0#gRB|%E_n2sm$y8)oY{44d*CIOf zL-Xx4FV#{9w~RfNjoUcj|BN}mK9x5bSB`Z77k1NB>sS_U;f_xgoK@9<^%zG53}8Zb zf`NjQ1QD_5v5*VdViwB*Hjt4UnJhH`0~kP9=aMZmIW2eSWfn3mp|mYfxoLg4O<_Pm zs$u~wK!;KJl!pM7DVm~*;6HI90*oLBoDKwXAeJlo3M4v~OIm50m`wpwTQ{;mcd-|N zN~hM=>Jpp>g`KR}mnmLuIff~-f#T+NL7kB}Hy*Zr2*;Nm4 zIP*{)0Zm8I`D4|YRwXWzLdYH!OGu-lgBIDI@%dLN0ClZm#6~OBEYXKV>~&QSc$k$` zkU*A4+6O3l2S6YL|ClBSbac9mD@;hHHAVz1ghJ*OQ598I@1K; zEa{qdP^N}RP4r&(W;9V|=dvzMdI)^L25f)^bif91;0FwwzK4La4SNR&dkBI6m5~hu zY#<2S8wcWhvg_NxMcR~0I(WC$PURC_e=rw+&M|Mymu1XB1+{4278sJbwE=hk>`!6c z(5R(3&))Za|83it5BI2bdl=+67f4l`gBzSp^vUzy0`TM}fT(8Sq z2lUzpa-htW*P?eo%*A}aEnB|>+oZYndCm1%(R3qs4;6cj`O?<5*0!_*;|st57BIpZ zR=dNsF~kcO97lZMAYHb*A;nMJz9`+c?d)M$Jex^1xNrPawYiRA^u8TiNd$ zvh5qP|D)a6)ts`Oz0A{`*{Qw0*?h1oTb7mh&YKs{2UH_35_?;6GA&$sl!*#%I??0z zCq-0^W80{WTE(B)#O3N6_AKA;Yv28y(v3Q|a|0M!TsLuCfWsLV1UN<)UPfVDMtOl^ zd!Z@&tDO1p&-Czte_VkJ3j%y1VGM^P+?(;CfpDDQnJ0#de zO=hHAhgyZQN1EB~o4$MA=k?m!b3o1aTiS)*+S~ludtTdte$44yvlF^a@pCX$S|daI z1|<`>mZ%+2`@a5G-XFc*$DZuVKHxdEjKd-A(SG0az3nf3-vi#52cB^&_Qe+-xG@&E z|D9UYMg7z#o?_3DDOEiWd%UkW9$_$GZYKaJGDkn;v0+~IVK#vhehIhH{VxB^e$UK)?bY6x-Cpi79n;@F988>=^GO*N_ZTRi zsYeymQFY-#o$pEg#U&o_DSj9PA6y8(xH*=R095fOfc&6hZXZpa0fK=A4Ffe8Ja~|U zLWLtlI5Yt-B@4qm%X@Z5EZTNj>ODp|B`vj#Y@;K72obqjphaN=%@6+3>+IC3{{ zk|k5NJUR0>#+$!+_7-mP=h37uAJ#^V+A(0gdgamuTbC?ZvS-tt9eY-8Ub$MgW(_R( zvEivxW7DQ!f$|3um^)wI9J=)B(W@`0fZcg^>lLm)Z{GZZ1Of&uOc)@Lf&~le)f=RM zF#bY=4jD?kkC8;h{rN9y5P*RPA< zWMxG{W+Z1ycBYwUnu#XbXWfL;S(T-2c3Nt|wFcX3xY<@4Y_z?mOD(|#tUw{4` zz!8BSv7{0Tilo$0O*Pq+AW90#RFX$DFc_6nJ&E{Xtg?ov6oyj~^(u;2u(;xjVuj^v zj5N+gtUGhLW7iivYU2%%g&7v)kw}6gWRli0X_}NyVhh@p-hS)k|6y7V)5|Wp%reVu zvC)=WF7Ec0=5NFmR~(Sr?Ad3&-gSp>zuNt|T>%Xsz`z6+FwhfKm|QIAEc8$ zRH>yFBY{ZXPzj(!2StMfn zuvz#p#4VI9O(bAYTT8r=R8Kvn)mB#7fh?Fab<$sv`$N5XcHB0~%~B zLZ{MH=VA~mScQ&sNO)PxSSBl5)l4T_F%j&#(zBldEq7(f!Vr9r2y8T~S}c4Tk%|Yy z7$PruQPNiPmIpm5Jx@wqTTN?r(VDWwi+XJW-}sb4KDJ>dG)$5Xpw@S%>ey|H>}y|n z4ki#nCCmZrfe(BbWw`qA&wu;N&j2vxDNa>^R5MW!|Ai=2ss@^@ayF5H1t*9{ql~U} zp_AZ<)RpI#RoJP#qTQPLL^BB9E_o)3?qXjsxirGHRR-IxUs`f zhB8ajTMcm36r5D9W_Kpm@sr#2^&2lZ5r4s=irK%j#O zBDJY{Ty1J!%i7pZ5LQh|oy|ZVE!7X)F5`fbJL|_^L7CFSpalE zi@$(x3WKaRGbRYzVsz4}Fqva5x&1w!+WIULG2VC$W*g8eR6Nas8 zovPXo`7uLCsafk_@HrpAKn5tt00xc=fD}WZ0S%aM0e3*_z^Nov`Gt41Mt-oLhTHMb0D`u6lhxYg~w;~5wN%+t4q0nR2s^OT&gZ*)KEgj@cYybMvKDL%#i!+>6dT+glZEvCfMP=-CM^Nxf zKz-?F%!l1?zhdOCm@P(u2}CoE2DB!LvAIn-ZpJ514PQA4_pNK#n8HXLky0kg<7GZ`Q4a zFDy=wGrQR%*RTb95(5{sa|kfVz@QayXafw)0R>>fJ^`xMf-X;aQ(CBw;SKblZ(7|z z&S+#TS`BI-v6QDw6K~L@3sUbA;Q!r8^HZW;_CpKTjA#5CM;Xa z&6#$42Gf-1w9qfF?u8OPTn@DcHIj}*H?8JuY3dD`$Rzct16<0gUaTWly%7rxU_Am! zRIC|>Kl{*{?ETC2*)fpz0+l$;Zdb4x-&_N^vqbMr$@|FhyzIV5@Q)oz0ZwY00~@$J zIT<*7p_YJv284iF$jiAWZ;0c{TORY=-8}m@eROM7BfX&>4)x;2J?&x7UD`{%|Lp`Y zuV+PBS9`9eD2wtQ%A{Wo_y2IbmmdK%U%)pLy5$meluZ!AW-@V2HPB!!pa|i_d=Zuu z(HDXwmq9BKXGReOKam0wPyh#T00XlG4xj`K5CC4FLIbr{G{l4ICwc4lew62aL-=l) z0bcT_bfMNJQiBH#irZ~}UmhafnDbSNt>a8*zN6fO_} zf&Qb>hW zD0L+DdIQHV!4yA%WB-d?lz?K_fMM7l00bW}2m)yo6TgOr7XT`tWikvRcMV2&AA$mP zM`w431U4{-clH8CkcTc10xAFk^92ECw}^))b1`UWh892wZ~+4WVk=OBNudJOm=qoW z0r7PJN`M{&!vN?(0H-jC-9Sk>*J+t3kOH}h1sQaaQ4OJZ49Y-?_s1ou$cj(5im}0O z70D-2#!FXdQYb}xShO$>U_TF&dtI=Lyx1QBq!7{M0iShzKxK?2(`KB7GBn^#I1m!4 zH99r`0@p}EuN4Eq7*0*G0@=78x+Zh;7=z+S0SRC*hN2#Xavo;~gHtJUGKT>m5CS09 ze0T;GAOMZor~d&3ATS6Z0QlI5Syup;&@JVrLzhU9Z~21+X^`wUR|u()!_f=(mVak5 zkrCOK7HKz$wQp9}dUcargMwv|l`vqJi(eRKCV3Gs=nxtaO&hazB7uPj29qbl55h|qUcD+mK;CvyaIkIgwK@^b)<&`?x@iPUMG*ExCEsh!(dSK4`baQU5|C}Z+B ziVk@uQiz^@sh+MVH>{VDRTqF2000uOQh&o9T^BfvnR_L9Sz-7BM_@4eaZ>4qd$oT;Unbyz`o*m4+fl!q5h20@aDbDOvcamZu=R9PM;K#1k!0WhEe zFvy6`nU5_xCT(PF@*dc^Cp9&;S&St$e&Ko}YV?8qTH00SB!j`)ZkHTa?eP=n5C04tz1+-ajVx~Pjfmyaq} zpO}zJM-9o)gg>gD5s3?#x{8E$q^d`l@KuZQ6IlqTpAE;KRjR6Fgp#+(0l(J)2s8tl zng0?Egdi>PX5O?a4)&mZxRrRgrWv4|2LM0tF{gBDF$Qs`27m!yiH$BWUsNfBWC^3y zDyV|$qQSWfk=m%;ilcE!myoJyl4=dgz>uVM5j}N~HbgWa;Cnf|;Zl8H*b! zoP4u&>2XY^Dy36;tjHZcLF02%2o7Ix3gmS%jz24B~UCLCUF{ z`mXJY3qDJcp9*F5I%WS>m{`|0#FTIbfqP(7YaH9L`N08_c^@G#0T<9Wz_zfP3IBI( z$boN211Jy!en^_#D2^CvtdpX#Q|o{snzk#Nt<+isbX%y^TDR3IKLC&ki5jzxdZRlE zbTf;i4wZDFmX|!+v+cUL6WL@$i%Uowxl|?|zoZ^lre$8&Wf|+3sVcBX&|(x3qK4)H z7Z3qp<+YqMDhK8P9bjT@8URVj0JUi!9on{1>$YO10SPdbE~>ZoNVhF|x7NC{%jLH? z3b^i;yfm9>giD>ENS>@k(gic>fh0JC{a{tLiC%pW%BeFki@32?x6YqDjj1dezB8lXZj z`?uaY#p-9pKPHfeahK`puG!l7C&3}kzXg0s0zf7$&0Z& zQ>_WIx~EKWEW~@<9{?J=D~qzhtHgu~ega?s+bYEmOvQ^_!HT?zmgsp(w}ivM!9Huf zm%Oe*yQ$}?y(3JogXwx$H!%DvI1aO)F#Nx%d}~#k0L)}|G_1;e9RJI*Y!Rb7FvM%b z&8f@zSgmRKvQ?bO!Ca#gEVF@&yp*)XT#|nr%!*^IJ?hH1`ZvZQ?8%=@H%EK405C9G zHoNQ51yKsM^C8EyoT3aMwY(dk>^sY}%+45b0swRXhFq4ui>*qWt%-KLz+BA1T(gd> zyjBce)nKlqcqWw0%<0L@(0tJP7s5hX&G9O^*lfbeaR3cNs^!ZtPYcHkn7#mtH|>I=P~t_%Il2d&W3 z?99;&uMbVaidAsLv@p2nWdJ+Qd>o?sL$xqC5bGS(CmqtrO8>+zT?8uY(n`>>`E1jP z3=Ue|_(E!x+8+Sy&&cAeV#rq>l9fa9S62WN}$Q4kDA+q_*L@yr40d=a^J z)#@$ZW0U~C>3!oE0KR>)@mv5<{J_Yq+yPF^GyUKHl>db2T0NBP(*~{G*lpbpPTHpZ z&=75P--|cNk#)9*i{~BAVN~0DT+aRjK=Ex6?mgeSJ++E0dqjMWX&bxZ*Z`7v+yEZn zG;QM$3=TOysmXxg2EE-7-rzxA+CQzX6Yg)`{oS)@pXH6wr<&eb?a>C)-my#&<@@1K zj@2h#)#j|RVMLM#unFBl<25eR6ui&N&Ci*wbUc2klpkrtN|MU#C@H{eb!@6<^nFv*_qh_z1a#b2*!yM$PG<&TnVD+DV=_h@zNZ~_xV*WB!?7T)8*zo?FjUijp)p5+s9 zQ`oNU2QRe(VA%Ol0F@x-myPbbp4K_8;|YmGZ0-w`tgah>>=Az2obIzfp6vBb^6#1N z6J2PqRzC>{$AR7I15ZY5YVa>l^9T=_7BHs@;ONX94&;8^)*0y%pYA>1^9iZbJMGpQ zPwbXl?3?ZjM9%R-Uh?*S@~Ecgv)I&xWB4cZy;R08Rk zE%e1r^c3IoIlbeSD(p`$)ko2vZN zkNWivpA&uc7v7Y&_;oKOlCwYG?1B5^j}Zqj3EoioKR@(wFZqfp{OTX~6mRtAI?%^p z3>shh(r?|<@B9G4OW;6)0(~7ki2p00FNF(v5m2x|;zWuSEndVZLF2}Y6)IT#_~7G( z3XU|A9O;oHfCdyOSaA6=rUnZdY~HlVL8l0wJ9~~W5me|Duo(V zD$uD_sanOFbtnTC-ok+k7gp@ov1P-8H49elS+i-yqHRm|Em^hTx>dv5OqsG{$&3vf zW)NXPf(;ECK1_J9;KhgsBSe@{GRMi4Q!WU3QY7ZgDLqO+i4r2rmlkTiq=_@9&ecAD zYK0wJ1O*KwuFA%pTldr5ynPR4K>-9dactqb9g7y+a=Fam9+!J|ZS>^HoiE3mms&Dq z!~8A=e~>Y+hK9{Ee5|k_LjS`K6*~3>vGRQS4=R3^cv(N?&;9W$NB}0&j&Ml>+6-)s zHP;qQ;S|x)WFY>bh*IxeKqo z{OZe?gL-iYJoDNUs68IvTWq}Wh73%;`i|^~Kg~MZugU&Ql7N5+NOK9M)M{!i!PhXP zFvHwz;?PSm!_<(=F|j%T6>pZCPPyiyTT3|=tD_FZ5>31=I~iy6?y>X)W2`***h3Gp zK@0VhNMD9QvQbCvb5b<_E^q|O(MYSwGz2$Qu(h9D>+;O3YAaJzQ%|+307|^NF2p#Q ztFFxujg!;W7HO>uyZ;yWq;Z&H677*tAcZ~5y@h-vbUela18mX10Aut~Y3ZAk$!bHh zj{(z2vnf;6I%RN6RAnP|TyxLe5Gf0oV70kg-IQ*{5s!m6&RcI~)4A;QYKF$YeEAhv zL=7dFA;W$VSiFSA3v5w`nf=R{h>e`~(Iz)r(n*n2;+OyfEMS19n6S(eTyfDwxzveD;GlJPE?8kMQI z(abn@thH$!6E= zfQFivfc-3w=>LL~74~Qzmu1>n?A zWjl4%)h-~DxM^0=&70?a^WJ=KXH!qT{EGOX!4pN8=)xBt_;5dQY#dsr`;xqJWvbCj zPl_?O`syS-=Q#V1J}ywx(oIMG?A6Cl8*TElGT?_bYnQcNoAvZtGvX-DTdEV5v-|}QF`6i2(9w@hqmlD=Sx5x})1isH zr^U1u$!noRBHNnDx1j08gVt0`Z4)C@CLoEpiSm@(bZ9EGA<<@p(_g+ySUUN*(Tg?} zGC;H?kC%ACDm~e>)vR*0tCq3M*09x5?J1xDRkEZ^ zXKKEjvemQZdcg!%pbellwysG$q|b^9xQ@2+uY|&Advj9&IO8Mf$wE^8Zqv zjCCk*PdUBEMmC=joZ?B2*|jPX0J8?l>}EMT-OsL#Oq&!AHcWfFts)YycwJ>jY1mi5 zHZ_2@ZAf`%D6z>M5ROGXtUMvARnrc$xQtvWKed-kC;?P#8^y- zN>pX^ORo;I<7;VKTk|dzG6AHcREbzr_;&ca@Wl&)={sVS-q)*;tn6f$ODTzjY$jMD zXj%t6$wklNz<7efYQm5KUZqH-A4 z$@np{;oCO_XZg*O-g4&j`N(OvG?`%D-f1uyU{I;q)Zd0ps>Sh3X3O)gtEK21hg`$o z1^U*7a(9u@bL(OZIvILlMp2*fUA#8q$;-GOz>QJm5W_jkb){!8qYXtS9T&OD%$rH+*e{J|*CSd!6j>toxgy$p~`V{la0NC!DeKWOmRI&Nl!Q9cvS*G}6QB zPn8g!BvrJJl`77~+Q@k7kI#w)azKrKkKE31FQ?aCPV0^C5XooHHLs1f`IC!xlRfOfo;k9$uU9|ne2#>UvI6NEd!g6f;CV;??f-F~dx&$bite`{1TGt0 zs2AV7K_ z3p(|qw1#^)qx&-VD; z1{mZ)T-d>NOFORfzMXqOLvu9=v_J|pKP5!JzR|$@(mjW(Hslg3Wbz0Rya4$FH4~&R z6x2A3>!c4b4N}-EfcX^w^tByyIT{?ml{-M{OT)2KKr{5d?gJ!3!#BDUza~7tC8R*q z;zPc{J^Zq?E9AZ2^F5LYKF9OIE-bzXxP&rP!%0LKHUC^WOJqZpBfUzzLE4f&O58IA z1U5Siq#t8D4m(05?89>NCG$fQ_W8^ojA7|II4TPz7IlmG*$B#Vo&sB6SVRDem? zD}?zKO4LCF%t21%L1t74P*g@=dq$VDL_7;Z-ubbSLq&;thN1FCR(!>}1H@L8Kwknn zSuDEE(U@8UjdoNzY{5c*T7U`AtX~Yq*uW`p>$qWn!D2|pH2lX&ghn0=$T-}=fwZlR zf<_%o#(y-%U+ccO%cWCnhG%Gop@N2LfCg1$MI{WnRrE+CoJ9}hGRZ0lT+Bs8jK6v$ zC@{Ro6EpxID8^;1#DiqUo5V?)Y{r8C#R*HsXaC$upbSO18?@7FJMp_nj%-3$L_a1Z z$J+bIze~qPB1x1?$*YXVENlRlWW<*g#vsrkPHf0aJjjAX#+r;nXCz2Vd`7n1Nr;rW zAX^61%QuU>$fW!&r36P+d`i9KNI@J)Laeqbq@t|MfCVssr?W>*azwARzXCwMW<*HI zv`L5DNr5CtX0%Do97rF0NFmfPZPd4Fc!rGpt&-|UzuZf5TTRtuw!maR!TUg~q!fRu zpe#&))ZjwLyhj1Z0bM{#%@od>T*%-w&a%{@;vCLjlLn#$IBm?gqVh%s!b{h*&g(?N zjVw3Vq)JSSxOdD-lb9r~1V-MpzXW&zT>tP#p7e#ygu&t*Nccp{g3Qcj#5I!}!etOm zx@!h#=*Dc&PSxy7>{QACl|b#}PLhnG$$CfTO3B-N0Bs4it~5{L%K#eyPUF1H`t(HN zJkDwKOw2sXn`Ae*V=w5m$iBhL03A>Qby2?z&;-Sgz}r3Atj+KoK?nFn3a!woqsI*0 zP=t(6pR7!2Xv^ia1)NS&8y+RK9{skEk%cpC&ztnjOLRk>%*s8ng& zry4!H{W4Psm4FFV(=~0(FU-eKHJ1qh0aEo)`ozp`#Y`VO)#VIDI^4NJtGT?qRlT&* zDs|Lh-t%R^%4YNfL3tWw5-^PRZ<-^npJgL+EPOW{61qa z%5+WCjWkd}JNn#Mb(BB(Q#c%HEh+1bx2V>TZwtjeYML*#o9mx&?~jo%DvKZ z!&>dk)m=4Nlx^F$62b%pgL+~FPG;CHD?h2vAkU{syp8W!6o zMP5nmPw5?0%$;6Z24X+PS^;JTur1rNWn{&*%&`>Rwyif`c3aU6P7Yqb^nEz&0l}Qj z+e{Y04TyjOIDi0nnKL$(4?yElHa-VvV>iy=!*yB;j$p3q*L@v1uYFSIz2ySt;{z_> zTXt7mp410sqMLfwtl;J71U5)PXHbM7+^1-egFCXb7n01ISIr zbV+ZXrjP;7HwI>o-odkN&LKouwv*R(wq5ispR@S+etvNh4 zR3HZA$vxn%CSb4rYCrzku^rn9RztKNva>~J$2H!^-B*7rR(#!MoPJql?qCl-#4>GY zX|AA6HtL6t00=k$W&)F@?&dR5WBE<&6J&rD$OTkJWGFu8wtZ{JwM$2})dfc2%@*R$ zK50J&?JD)vem!Ou> z(f_q+$T?Y@j_c@@*N_$9m-gC<9J$+u!h_arD+CSrdsd_VYlz+ez+QwZ2=3tS0DsB= z184vS_&sVxY^Oe#35Wsp6b3j(Rs1|%2F%7?Ztws6Z11k;%>C}}7VUNo@eudb2ZmsP zPUm!1X8@ktyxOJIIabB@6XzG34XIcM zq2%n{C_ZPlR#|lh^;`dNG#Bq&$8}OC_fn_z*`D(+zjZJd^K-Z7=iT*44%lC}MNA%c zVn=jM?tnuN@Bz={LKpH3=wxSa^up#@N>})5?+wTth6#tkD3)NdZDnFvTI`>r>7j-Z%b&n?pRexSyhZNatX8Z>9PUY`nA9R5S_(TtKoBs#!|2A;K z?&Jvw0HPfovtjrsM+yb_0e<}GV_w_z*4K28appz&kN5bg|9DYa4i_?n_z>bk zg$5U3%&2iA$BrI9g3MS!!h(?xOrn%9a-^dQ7hb+}>1gJLmo#tIoQVk1PM$q~DhevJ ziXuohH~93qXz9*HI-4?$ifCw5qD@hBAc~^s%M4w+HkeQ#0)hkr0 zD|aplx_0l@&5L(0-w}QP0!{+Az@=u(m?3`V>>1<64j)5~OfZ||hytIHD@P9VK+K*E za_$_tV&#bmC89PBF(m8Ou1lIcsWP@~*t1v0yqy~-@7_s&PyY>0)o4!O!Z%2TsysP! z;W8A>KxC6?)+!yYOUHmALIeY34_Kf;K`qkWb_@-3>H4K1dXBHZ zoc{j#|If$RW&zH}kZP&jm)dEsG1y>8wAq%DguAg+oNqi8_Y-i#6-As^KqUvFaLrZ4 z;UY7j5Z!c25jBI0F4BMlA`w`?fCUpw5CB;?+DL%~xj`o;; zj5z~elv7HnSd@(|mZf4)KKWT_3R>2rMFuwHpqa1DRvShTriq)IF~NDEoKG#sp@nru zHb+FS`LOCMnpF+tHE)F$h@FS+@ijY=#IeIsNjUiN8-lp@? zYaRt29Fq-wr2cAIXQ;C3YOJynT(H3h7aXg?wA$t;qELC_^ zvq%|t?Qt1a+muq!ip(6hUV$83bkG4>gA6>-;K&4i0j7bEId+G@1eEGkFSOt99%s7}BA_t%fVH20^jI_svNPFBrmn5oc)5CfjgA_hF5?GD1biWRFi5quNf zR3bOweXMv^2})LibCZ&VtXj+)p;eUUoc}7!pav?eUIi=wz9DJA0yXN+1lB^n@!^mz zFF3#ox{=BBqx#~k15-_Tg$N1x8f}ia4uR|8e25I#PQ$)H>+2t5MY1|{0w_H%;ES5 zaD#CC&|&JDp|ovwydQm>imr=Bz&1uOc=Nn&MZb5z`!7d6aor3%3VM!CLxIy0Y-pB zZJsk*W1iMXSy9bukYwT$C)v$z+W+qt;OwR)EjdM4UCD~HTPHg^>CR8OQ+K6A6G_zM zHVJ7gSz{z)219tQTGH~3Ba0&mmlB;h5=Ue*kQohT#sd#9?s6|^3kN9BC>&Ahh0Vm_ z1SSzp+`02VjI@;_wVA(3Qj(h}E8by79B0 z{wxZ%dNM7-2{eQSW!@ZDtQ=m+qIEo^_=!XyOc}IX zG_B@=ONEl{febDHf~|5YhX3vgPtdrES@T4|5@D6tT}21AvrY}IYz609Sqn*XVp3|x zh-(!?XFzyv@us=mtzFS}TXXdFi})OF1%WzPp^l7~9kK~PlUi77af>MjEuqTp7$X{x z>$0AG%e^GG%z%8kuWXEl(+hQr+GuE z*WLOyGiZ}%aCui;;>P4cEu$sKke5pf0hCW6+mjp-I+F;)462Gyq2e}RKJY3EnUd;4 zS3xW!4XnTx3`Co4t#sDc#TUM7Ehmiuc(rA~^=q=)q+H?CKHc85fOl;tk+7V)fCoHsL4LfxMd$R|*rqfp?`dgEBbSXE>RV2tM_s1evX;2a zrBI}++zVeTTpXqux#E5A5P$dP`947cZlH`Qox@-*RjaS}97#WW4bTU(udH&Vr6JOJ z+ENEF#Ra@hj9VSA=GA(Cr>=2gaa@97e=-FzXw<#E^4x|cw+FRcZgHR5PlTIpxKv#; zo6GvFnISry;$4@z)+4`l$!|TkmCt&A zzYg}WPrB?+w%fNyZtAJr38{Qjxww_<@;RblTC5Lq3TLheV&+}%dk1jHzovV2g3eH*6v&H5R|>8)VGpY}N*1s8bv2Im#Gm2cI*u|QY0c6PK$t>PizZ{0Mj_$Upx)X z#m?!FNYY_ClB7s#KnPqyI}%(=-B`lJ<1U`VEuMotN+J_#A3r)G7E<8_{^KtOq!dn~ z1@>e61Oxyf`2+100{p85mgzuXhuPT2p1__$WWmpL=PQZh*+WG zg9{5TRFr73qeVqj+8HwBj-)$x?M|vx39qF~c<*4on;DZG&6_rJ>eP9LM~#6C6a7M2zG(dd#^@KLP`|`6BUURsk}=(N zYQ!i~UAuSl-koGAQ>IU$ObHeY7?h{Onl>rUbg5D$zL6y1)l0eZ<>5|{Yn=mOpyt?(Z)URD5mQB01?c1*XmbSzj^5@Q+MO!i*7%*zsu|cU;u4#GV z!~zpaKiIH(M2H$WZj`{?V|VWzLW=(+Igp(MOr49OfyO;sem}jC#A4v zqGF|8GMZ$-W!U12Fvj>9hLKG&Zj zqf8^@iH0@zT$NXP0!eiW(bv#)i#!x2MH6Y~-FIhJ(18ym(NU5+bfjb+dg-axQcW|t z7vG*ah4Iq^3KUQQSp0>R6je@r@l;q=8EBPOa=<|a7-fZ_l_6(=<)5NzW#tx0Ep^ff zjFdd$S>#U&dRU==N;F#l%LIGK~UQPx&fPpi1g;1=)rT6yLQ&3C!h54 zP=zA~C{RHUSAYRWrT>{#Ra9_13e}~UdNrw~>7H@uQdyYg=@~19N*8C1NVcqE)0`66 zh@bq5nu?(r8yT%AAFDE{!YRvJX}k{k>&(F}hg*>;@>Z;pCfj=J&o7(iVTex}XCkyn zV`*3i3~9^d)7*NSU7A!|)I+*knP*-~=eb*Fym!hpFTFPjaj&3@fOQm7NJ$u$q7Vvr zM!{wvNTC@*lvS2kBAx%$_EUdnMUsW=$kkbsnMg^ZhsD)~iE6`A0&B{YSHAL+H{Q5w z%&sXOGL@^!47zhX0;wahC0~wN>P-^&G0~xXu5{9~OAE>dU;gCu(_!{b(eLGcN3KWN z;c%&&Tgmw*o$r3#Uf6h!P4+uxbLR*TY#*xBeorlx)>CWEafTcehM{&+mn!Ogq6JS3 z58>`4(zDMwN(tr1w6_L%W0uT+?BtdUpo>h#x{~EeXj0;wY!WCsUmXWIB8%LS{1>YN zvTigl+XUl6#6iVf$#$UtVeJqTorUabd(ag?=bZ&RECoLC-3 zzVc~La3Wb$_o_0nPFToY?U)N_4wyLmfdXWSaiCu+Avp@N@tBtDnKAc5noB5d8qv6h z&E`nWUJh&g1@cp#dX~gZ zDaj}EG%5eK_H=T3VMtpnY~l{1WbZ)?63`Xk0Ee|)aU@0o*jcpFj&=x0LRo;=-SXL< zF6sqWrukf|#wZ)o*^HRH*&{MniZYN!!$TmeCT*svzdGjTjw-??A1AX+%UsZpFnbM5 z!$}xYj8PLIG$c~Z2@0lyqJ)V=p*!IzPmiR43gw}L)+&k;ec~{Oo4gYzJ$VKy;KX6t zLyCV2_Ju1{rF)9~tdsU2zTM!{Zky7s~BU20-*M_VvW6?jy`ZJH2)g9g>}!<9sdh)3MD zmdHgt?17$G#|DotbV4W0MJN*0C!nxU@rqixu71Lhg&C64QfJBNQsfHUP>pv(Qt}Xb z5koDTnQ=B|d|YV)4B7hn%*ronCbRN;S&>bXrZm+rtA=$=0k?>NJmqFLoitPtarytK z<-8JWA^aSt-mb#DyKwLv$>$0{KusNB8lr@v(mgmRs(o6a7##8@(GSm(mJOmV*0lJ(QTg$u33Tdf4vSdGIXN|t%LIH? zB$+B>`PVaYX*AtD(weomn!`eA9?g6?*5N2cez9z7O;OH4Huc)Dl`yrE%32EJnIU2d zx75Cs+de~r2VrpHhd+F1aBHQZLJ%}5K}T21GdI1ctHGu^L`|iBOPlR!4w5pw9WtSV`+25 zW>ld96@XOjoSBU6nj4bNA>6jNp;}wt+4h~~)@?^*K!sEb+P9QkHCLB@l1?l-lVGd2 zahH3BOV5ER3Qdb!3kIRA5Gd3m`Ip)%CB=F&D5C@~d%8^A2{4{Ef3=QsVv(ckDd*AG zvBLYtf77}xi?c*NLM&%p(^=dUK4-jvmEsGmM+37w+9V>yw5e@p2VWcKHm}{bWeX9W zCoga3b@xKjGc2>(Jni}+6w9pAb#BwOTm)LcwB9RWYcH?=ZO{4ttCe% z)_yz_ei^hQ_JdlJhkrJwZTuI2tF?InC}CWfb2{g9Xb3eWg8>f(%dMewj>N@IObMscbEU+CZ%DA#>=k#R%#eHWug9XD*I;0mFT2<8=2 zBR4vr!x}g*EpuQa5_3e=LCunR`S*ojm~&w`hR)cG>3}=p25#07dOx=jEEF!} zB6Q$EhjmzodWeUe$a;G?63v$dfB1(Q$TgzkbWO)_>QNHwv4~NDC~Pr^;Ut#@G+;rk*sBHWXO}INiC%iLZ7*s zr$3FpGat7?L*$EdT(F;0h=CEWHRiWY!xylX5^MR9bk9U|1N}mYT}Q zjI9}f1DJCj^O-(rhSX9fzY~<#0it?Vo3?3s#4}Gmz!Xgp23IhZzB!d`g@?Z>qi67& z#aW!px0PMFqsy5R8u*UxB5yHKL|lh;OTkc9R3KU*J`}>8h7v`uhmJ;}DGp->6;*a$ z)0fIIfSAx^W`qvchYs48c=D+k_IaOdWMBy72_F*;KcD~&FbSbqIuCl2KO$yXGBRMa zY$<1jepJ>`r-E>+pbqbS!0RRvJmoTRR zmyxE7|_*BJ89KhlaZ zj6k1tkulerkqi0>mi0@azzE*@1A*Z&qhJY%kOMFv1CSs!C@{7yU;{*u2$#SKpIM-u zb(xsSGTGW@@;a}wBcb|QsCZkUtSPY1xOoJdfPh=DfV-*X#(+opXOJKRKJXQu+PDwv zsh>Kk7RwYEYq4#GsvB#g9lMn}s+`TKMJv$>4s#Z5RZ9B-fi8;`L}osdA}RbPMZbk9 zYE>{(d8{MhvwgX&kAsTY#~UcsSZ7+1PWy_IrALn^QZg3`nQ#LDPyhi63YKsMIe-I* zaGTzU0yYo?l#qF2h9hr#X2bvJcc}mig9=FaW3PRCx6xRrJIS|=8i4NWT9!I)f=ip) zh_DK4q85=IiMzN|(5e5sxSk5Ypz5hAI;t%Ssu_E^8cPJ4OPo8ZoSu7uEfFzl)jgxj zC|C3pcjF)mQ%b{WPdWQmQB+YkYlzGtnDGFSd&*et+KTjPtxx+IERwCKb-tl62^IhV zH^3M{00RmrE`TBw_W=M#e8ffULKk2Iaw@Jql9EE0W*P!VS15U%86pb?7*Ue1h?=(> zy0-%RudDgKRgxN|ag=QsxNf*YX?&@cYPh#axD!zYKHvj8P{)gV#{x_RJHW@0TfmWf z1s2;B3CzH#N(99Dz#IQN!R-*TPRD9lpf*Q(tEg)!sw+O8a$V;W7T{G+HEI@CVJU`2 z67mKQK>LuomI)T;!iQNI)Jm-|Ji|+(ER3N+Y}zQnL34F+x>%hOM$U2$`H~YDrz+8TF zq@+t-N(2=QH8El_YTS8Iuxr9oG(-^-qc^*73>OP4tZQJp%8jQ|Oq+3Mijlp>OB_PA z=j#cU5CQ}M0zv;^129Cy#+=hS4To5(yeJ8b#-vQ#bcI7xzU5mAAL7OPO3q8Iwx}7u ztEsjb8W^mJPWxkbl)z_HRjB}DK%Bqnyp#)@spzbYIN$^FjK?})$BT>B^~}e2462`+ z&-~2KL}0Op?7*2z&^ii;3H=prV?|uoD30Qm-=)d=k!r{KThzsGcd0}s%xWzGv|tKf zs+gZFnbIx7w2y@s(+X@W9Y=%g#biBLfvs5 zH@8+ydEA!GimIrOO2+RCu%Q6P{kpbQq8rKP!jrIJNx9r^oRqr79T`!g=$rxB;Q~H@ z1M+MG+FjOnYy!}W2+`oZDmlf$QLd*lzE_;Q5}M7pz1v#rF^&4$?kn6=t)Wd;ca5PU63G|& z8Qou9RY++)Kpw~ObS4@>-7)^>c>_59uAUF8Lw&v5O}axKuAo5;mk zQ6Za4k!%)lqrudL6%jamPoy@UW)#eavn5fg4l}xyMxM3T37DXY2fpBJw};f%iF-0=gMP^M_MQ);#=^Jm*wJQ%Sql#pjIg(T4MjqDW#?D|}xF@OtHo)Xfe(O+9*50iHzCPtu{@qv(*IQn|LBP*J zAkdh*$P--V0mBxKXfPX`6dpB9`CB%hCg7KhXXWy7nk@+RV2Y%FQ!A)dVlxQSGmdiWrO$t*b5? z`NiYL?#uaQC%c`M%UF#h7=JjNeq>IEOpGCsy?pYWbgcdDK_TfZV%?as8` z5zn2l@2tNY0RbN10)B4;G;r%M;N&0=^1x2=SPtx09@jg-@`5bLUw)%Is?Wwp^C-AP zI2LNGTNXvf$r8-p{%t76%2i+EYE>4zOM8(?KfHU_*?o~X$h&0GU<&@(#vfkwxL?d_ zvP)8&N6(gpuyEV+x>}vS%}ur2Ql0z)PwHtec8(CfZl@>U+~<9+hxt?XXjxr5z*Y2P@cW1&3F_Yztz$<4gwsQv$9!5ryRHkIvvSlMi zFkQ~1S<~iCoH!>qQZp>3kXaFP}S;HtXZ{gt=w5wB~MFffo7UEt&}NPspQTrYAV#*w|7tN4F!tt-@bZ92`0>U@Tqi%4gX~f zI54J6KPy#A+q0)xN;@e@y3AAR*98wkj|Tnpf$0jTqoz(xy0qxmp<}cD`qWYX>I^M( z(}3Xu29Do0Y`73!+_(0~9DR?6u>1PxR$K?KWED=1Km!fTqO zmOAB<8$gq)D-JvK5Gw^1SRpgaCK=1JpDv-06c$@-v97%A+AGG!9J5id#uTe@MpSg< z3n@<^`>C?dNHoh5&M@oAwb@jIjW#H2b8X7jsEiUd2_jH|1{Zwm(gonaguw8 z9{s|;cHS|`okA`3Mhc84{Nm*LzQ_GUJlERBF7-`h2FJpH^R#|3uMCIAW`r2d@$twYNPW zWug+7m<(FX@`zC_&00N4k@=43m2#a6ednr@7}M51(?A6R3wWOj+{ha*!9b2OeQ)JiA&|t6Qy|=q(r7`JqcfCth!B~ zbkmDNA;q&=IZpP8Gptua4FH*`ap;9dG{rSd$kC@C^<@O+05SzFn506# za8QUyu1|n+C_yOKo-aspk__nxMlp$>@$3ozA`&sf74Q?nk*SoFHDT$=Ix8w8W$Fi` zT>+U|fPxv^#x|<0KnFm8rXNIO5>v3i3T|oJom!!1xU|3&U`4c`9xVmYkjw3)C!_5t z^_f|drZjCTq?Z!OGUAIV(`siSxwxX0+68NO&uPwel98S4gr6Jb7_Z(8M~-^4XCLkA z9O=xBad1%RK@U0*$N>s;>k(9Y%s>T6QnDc;%|fFvm=TImaDyGe4}LJx4wh{ecA8yj zXVF3lMkL|~0~?MEI;Q~-jr#xst-sTX_mhc7a- zX|DvOm_ii_XgE+Xa)O4#N9I7e{Tc!e0B*<-#@%K`WfUU?`D-UX5)q0xc%z~`w1F;@ zk{=+!1t?H0YpWF8&}^UuHrVw4rhAIR9)g-fp-F@+N}W_xGu5fhg_bH*y`v%CW*C5C|{>)*?3l%&kxLX6i%4MyvJxu8_i*uqLgWgL>!3&(HSc=gWGtUGQDzcx10C>tU23D1!l&|- z7^t}5H}u`6jc0bPgeV89fVjjPBNw~38d?{pI8-w}Rp}DxrCr>rF-0Eok!!c)BtN-0 zL)>^^r^`00aVJ`ptzKpaN6dMIHa~Ol`R3SQZfT|@&l9}K`ABZR9qaZP!0kvlfI*Uf zWk@AO@*f9h!8{!tNCzMPqNoSAV}x06+3V24hpJFV$m z0=4-d^1vo`9PuEBKYOY`1^Jz8(+WwIij`siua?Xfp)3n~hfn37=nd}kAhMpkE*ZoAT0iPD2QpK*i(o~>N$zv zoQ)E+&_NH;@u)px6ycKulp?-J*bL;;fe-Vy4cR^qX{{K@fwkKuoiaEdvcakd5k@Gg zQv*MV!#j%8J68*Z!O#TAn3f@luJ*H*6seu~<0@0=vBXn6S5O63cm*#E!&UG?R*0qp3{@Yfe1K&vxU(wqwB9Q zn5aB+h;F-}2Wy}cj5CJ_iN}Jll|nR3yhKI_0vK=#Hk>pdq_GN+flXTh9lRk6=s}+P zK^qjJSs0e3A{Hb}qVtm`^Yf9w00mW%s;rtqweTh{Dkj6*LM~i9R!{|6Fh(#e!!v9~ z{!_zYb00T+CuN%_`MI0+%A-2ur+rd^2}prHWC)}iw+Xbbff$c&iyT7iuZJ=Nr1Qf= zF$9ddh=XXeGvFAGnGe%31d{12u2YFn**X&Hm3+Gm)&j*)yp<4vK7w027PF-l1D@hZ z$RTirB0R$XB;>oN0*v&7Lcj~W2Pr(gpo{DkeV?;?Z1Vb_mLu6D1UNggUS~)9& zMkQ zoW&l?LRu6*t=Sr`NfBRM8m)33Vbsf2LOfz*$z@c=R{+CgjLgWS1(b8fXS~ei8!tzI z00=lUE>pI(B9l3ct1%nO{jq^Z3k@2GAaUfm_@E@FG>=EQz&J1u^*BUB_^XNHxk~!I ziZHPMj0n0R*u6;UpvTfgP5G>qp#&g60#9VVwge^xr~pL3v>p7Jxx6J-+&&Nh1tR=Q zzEsRr3%|SI9^Dzt!7H0tqXb}_hLLnKV!S_;JjTjw$z-I3W7N<4jLFQzOqujQ&O8^L zbQjU2C!j%Bb*)L6Rg2y)!?owmdPUh{!h8dzd;Ki1!eJjgXjZ zyFCXxh|FP1szXi^HK~9!8G+<1&R~QU$N<}@!5cNZr*MH&EV$m<&RyzGvpdr8R6_F1 z9%TX&3QVziS~p7s{?JMM+n9Ofi*AR^ZQKJy!ip)?+Qh*3dryy~*l~Msymx z%JYrhu+|t*ub$i+7+6pSg*F#h&8dJ;8|VQcFjonZ&@`*i(z`atiAwXx0{W^Pf-t&q zW7mSRn2|b&-4qYT(G!uNM@&t$lzJJSU<4c30M#neQ3bWrNC6#KJ0RsP2LLYrQk{e( zWi=+nJEVZ67_wE$kiuNW7WU)SCVMiI3|3W;g;!wNFZIG;W!YqX1u~sXW39|$r3EvM zv}gTKGs3d)s#dh}lA5ErnxjK+6-p4e4N!~#8t4IY6#{jYAfzKb@R+1Rj2s1m7>GFt zjfkYu0|WK|nSBj9pL2*Is8@cq#06o|P3=_WGYy7qScQAO4xqjkYr9SBrREEbNpLt= zMMCsT&njHck-aKk#L{b!5MM1uSs=eJWm%UcQ_7qLnngyORo0okS^bm^E0MIw>ouDk z-8E%XYLx-hb(eUt)_L02o4Y6FPytXCRbw+(9+29or2-$2Jqk?-pLA%1V@y|gT*(d7WeirFt=z}8+|2!7&8697owCqn8(}-(mMbe6 zh&iHVU3z)oxzZ;+3RmfTJ{;fy42D{%-C)H+I*IAZg!+PPyRV3t%JwJ-jgZz@2{!~^i*4ddAU;>sr&2(1($5SUZBr7g6FW-Qp znbW*`5z0trL^SkGXCP7#mqECQ=l~sM^LTLgr94T!!M&F1=Rr+5Ia$|3aFrg z8mIw2?ql19j~-ap2wW(!^{a-$O>Z+guhk@Rj1P-Rw|Zpn)KMu^cMJyoEaz7#3CbglVwVT*apUn8~IoJj{<%CHmE_T(;ja zb_HM#W04+aGA?P8KIxn-<}_4eXqDEikMPZR1OrIPD1JSI#fb>}su*_@iA;IXwp9rX3xQ1@XdnIx z7}&JlD!85zXzJ{~B+ZMzqoP)>49(!U#3ekTXfpaEKaa*`%A8#OB<5c}X~7=sS}18| zbjCBS$u(STH+|DCal-?prvo&Oebeck=4o~L>1__`ZjM?Nj=&0CVGJeYMKWOzozSI( z7^!aR@erL890H08H?7t>e+KBV7VGV;&JAeDTXKN^vo`B%rp`qmu2T5eTXkiUO>V2o z)xiTswz#!Ya3wC3Tv>40F~06H7T}N;VC^RC!v1dX*4f1F+0#HnmyU{Rz1A-=z`X&E zoK{%vo!erQfo-PmZRP>a9_pb6iU zrd|m*kX><5sF+*a=3eUz;<=pI6+7Y?vjG+n3iX8F_qAx{F4>L~$?T%v{`G5`o}P*fsDjPb?4Sz!pAi=|;Tj=4+X)@kY0CVYYD`4{tK2bV?`hUo+67v8QK!Hb7@|A1ytJqTl*Z|a;0o2;;%@*pRrrLIPh=Q8b5@yHth&@J4 zN_eB;_9!=|G?WU3r&-3562-3uvqFGqT_~Q_igTAWL)~IZg1yb znw5oKe)Pefg-N$`bhmT_zRVu?aUnl-s_@*i8I7_-b!@J|3~2Qk_-QJ~V9xGi#exq- zR*3Ovh|(5tqf5jIT{;UIDTw&j*pnFlt38+@*a@zVgh~Jc7XXcB@A#+ifm`~SQe1%$ zpmrdV03wJ6Y@apemgV?FS&m-WzV>As2W)en^m5OIbl>^HHsE&G^zaJZ(j_+Ogu7S4 z_eF3(MW}&&r*dun_uG})NUGWomXC-y;fF~?(5|F*lSh7yEJFc<22V%l1cBUV zIoIhP?)YY}PVc>?Xh%g>{ULN>gt&HPx}HMkR*L6g%vP}9`laqgH+Nki_hgmyo5yjT zxAey6d3FDJ9)CtPPUdxCW+tz9dq0{ANOeT00!2^+eV=k}zHck{z{s|!FpQZqx&?kY1BbS3DzhzSDQM{U@GuW43im;!hwzF*vQXMc$&wKQ zj5BlZ?)^LW3XpW%%-ORig9hMbR!DT|I?|@{l|F@fZPcf$SY2(E<^MleYMrHvfNdFQ z)?IbYr668->19`65$@8MWPgD~A%&D(HkgKhRi@#Gn5_qs0-l9NnrSnrSlVf-xyBl7 zU`QmJjA6hr1RTX7bcPvbKm?m}HR5*MaqSGZ97Qs^CgXC-Q8x*cme_#Uh*es7rAv^Z zP@V(l@f3mrR>DyKlv3AGQVD$W)pto$pMX-;Ra$kWihr-zIhKHAp+(?l4 zV1#=a%GaPAW>}$zi#jIRg^EQ=*aeP!SeS@du4LjOC!V-si#4zYV-K;>Hrs5!^+wPa zJ$?aPM8kbCt8s=X$DBpNf#Cym%uzJmB}VBGn5M-VYo!E^#BdV>Q|#oW1?sK$mwWRu z_1;rX*#}A}rlcY#fC0)PSAl4m>!(}{*7cyFhaNiUpzg+t=)1KzS|MeR3f7^dhE2Ai zzn5Ni>`D=Q2AZdefU06@qK?{HsZ<1+To?lJ7RDD6l{yi|U+75C5EC^-#mKyh%;Xi= zuCN`!DTS&3fWBe2Y^-=I*wn0-H%klN0x-O1W}4SpQb~PLwRy^Z{QZaLEMb* z2p823<|Xgd^v)|UyznXpGoxSk8@9fX@*D7_mSH;cNtGVlX~HYkP+Dpa$F?y=%7I}9 ztqEO`F>DgkHbg?J5_F_ONj|q4lDuA_i6%F|oGHOz2kZ#unNLbN+uj*g(-aNl>}&`- zd){6pNm;uln{MW(pVD;(I18Uo|G6i+fUXN6?_BRCA);LipXj}t=UX<}VNc4h+8eOk z`A8*t0QVx0bnv!mC^C$iXgoOFL#eMtMB_rdWntTlvbjb@;X0lnadgh9-vm}8RMB^xE zn$IPO#-=vGDQQbXi_`REyQod=PwcW<*04q>c>Qj8HtgEH6lFXN@o+Ma(oh2%xEbh` zC<7aSgd&ibL?t3DdvvRtYDN_s^$CY>RCSA9q@<+JK`wEIliMEUqFEnA^4q{;9vz77#&Vb7oH7F;yoZl(+Ejum8{>8(5z4XQ>uf#zA;3s!nC68Df)bbj1dOOe?9np+ zMWIs7_rw=CAArF(xw(RE#;C>MJVZB!Fhd!cG)BhhYH^5o9?kxutSr2Pj@GZpzF`aw%b6l=^2RqFDP)Qg zSzP!erbQpnV4IbL3{Bd>4me)3rgJnz4c6Ap2r3IF7Cet2Nd%b=6w)b2!B)}KNtJfG z^G<82T|8TembWm7YA(d2yYkYPPVUp6|NLq|Ew{X}iPe;1E1tm420hC}paBv8oux#v zx3IZg6r(VT6+9*;Ol`8>gSpnfaF+{LqQg3YSYQiu?Lot z*-lAR0U4ObOI9ddcVOlLMs(1qtiuF4qS7s<#txoQm8aAel+PK)ke|Zqq*p%~j8Fn} zLT5c_DGgdskQ_#BAG&M?uM|rN7$5)*xSsV623NVx^_F%E92I<&kmbCF2U`?^-g3i)2+VDPgMC)^}RNZEiE%TTyZtUc3zkaF3TmA0~9H9RiX6Wh|52DqSE0 z%?&_vkEqS)B9X>&rE3-Fih>qhw>AuURY_eVOp1Kr3gi7%dM6UTh}o~D7XrX$Fnc;j zP=UVkov)SI!GrtaS121$K?p{do(M9g1(WC?QWLpO2Ai->=7MU38&p+HdeXvL%`l#O z%iCHAl(!t-t#3mt+!3p?xM|gC4q z75c#En#3*>u{dY}9wDH)kL2-mH0Xq6ubkys&yj%_STTM@8|I(dBm@=!@Jm+t1EXpy z6C?D5o4nO#NXm1hw-3BL(tocSOdRV`3P3Ap$M;J;DIPZ2Dz-p0eeGRfh)+m;j?as zHXqRCEL~t(UMd~1g;D_K;- z+KCyV1+8=ArufN@{fGgYTY#Y(U;;9RuB55w#HF(cir*uqMQCGJ#yKaLQb(*rXrPGg z#8L)0u&l(PEFK@kf(p01H{cfdlGL$lrUJutfLpu(M;qWL{cpelJeM{h-E@iG(lv~zshYcmp3FctwsKnr}`)Xib$5C8^T z0X)bN#2H^oB+KpzpCQhX5Ud~zM$ZP=%moFNc6dM#oLRPf+&Ym$obZR8K#kz(&b)*l z;Sr%fncuc`7!o=m6GmbCts*Nj;cn$z{N)_xv669}9gA_E7zQ2x9RLHcTU?o86ER(j zSQIYt0KoOtX^e{fNL>|#1Pbs9_~fDOVGd*Xz}kVJEtZ6qxWgfKV;uFKOD&>FT)^D* zLLL?QU z4JplH=J5s7cJNK|lhoMgq>w zYRrIkG?q19li3MkW!k_S{bW#@pnYZkBivPh2N;1P+JpsQfN0U+I^U_DNoKkDNy_@h_m7AXdl5uT;`5u`#UWLhpKG0farI^GsZl>hPH(Bb6)_+m%4TQH`fj;UV0&5eq9kEpl?B$NoMsV8LC4P}B20DwRi_#{x~ zl=1yV48+=JdM2&GL-lCpXd;3QJj)7%nFYi^5Zqvzz2;IWn=3HQRB07ic#=KhrVxHo zaJpPT5~o=*r-+WIbCzgxGURk#9(2lOVQ3+N21SX~rMkgbqg|vf8jLnkPk8!e_8?&0 zgwJB-*bJ!W*HLB$SX45?B=^Ywz}69f+9-er+Enl9q&E5hfd1!|eSsn#-vjg%PMl){ z{J=CA8&XAOg5}_ZG8;YVg+9(jFYJXsVpxZIrB@CoD4ky^4y5CWr7M!?a;{=?2CAUG zqI5GqW8t)+krv?l~00X0z;*!=|##44-?C987bB8o?t@dN|> zz%^LnC8B~3s_BAcs8-^mJ>D6IDxNBuBI8Lbv`VXqR;!>=1Ib$Ji5hCRR-VdoYeY&0 zu7$)ZNk9a^Ou0&G7(S}G%2JI9(rP5?z-gl9nYGEANa(LB$USE0plIl^c1?#WE8}t7ai(R+QfqUb z<;Xf`-Ja}jq3pG`EQ(T|wze$&r45(;kKxL!LOqmrwYH2M000_LK(8|qdtYi!f<~GH^8DQxG6`~1dt*jkvQFcz3mLpI6(I$jK zezensy2bBcEU|9oZ>FvA_TxSl;hmyl+=itT&h4~LtF`Ve-tKL4VuPSoCUnALq?`?k zl~{G^)Zx-!Vhr8Q4xIwfXyaz2U0NiK!WgHh>$+xYr8$hJq9?*E087dnyxH#qKmZ5~ zW)*w{6(quy!fx9MDF29K?XCc?HNXvs0`K}qJZ+za+GFtg<_!gBvzn!|_NhW9r`^)6 z2sh!N@~sJSPC~MgXgTsv0nWzAhcft^z0D1es%)(t;!5P7UQkvaap$ zo-v4W7(Z_C8VA(koh6@!u*iyN^y)43Qg8JJs`Xm0wPJ|3;@salN-Z)JXJAGh0$2{) z@B%b0`TCzl>LSsp+y6P*Mi!vuW@<3*Z}+r7YGA51@gXtVuM?Fn1hmLA;lKxCF~Jt_ z0TyN4`2#$iFmH}=+_ru?JE0oH*RghD#GZT;}4i$@Mf?-wJ}4-F+@wWRZFy5 zI+XY)e}E?d8B+|?lf00qp*HBcxe0R&(qZzno4 z7ynVJ5O>OSy))*bXXlQ_Gf4nGOJ+|i-CrmS>CJ#6_`ttjF)ROP@M$T+P8?72T6vWJ zjwKMo@El=>m7)?h@3WHSRZp~PpCvT!)<)y;-fA=oe|1@V^fg;6NNaOiU*Yx&u5}hN zX1$DE(=`r@p?5l3q@J%j1945i^JtJ>(dslJ45KGgj{-CRVhZU73_)iWwRe9v3Ib)V zg(H`ufbE_~vxI;ugc30$p#~501{?F+9%O2-HZzMbS9f(-^R3BJ^M2blN1Jtk3%FWa zj`p^-S-tGrxs1#vvJ4u44eK=yZzo^t>?8}IjWu_5!!wIi)ZCEf^`wYlV-HARz>amw z+@Jt=8#M|NHF#$kK#%4H_<)#E&<$kU%XO^sei#Saw~ya#E7omm!!{nHtZa+_H6L>{ zS?{q&dvqWdxZnCVi_RrVKe$S-G;u!wOXF<$*68DsAx#6VV0&(dqlOHq$RczG+~62r z9*lrh_h`_-WV84+x%i7)ldUBzd5n(eFhC;sS!r|deE0Yq7dnt*bdi^J^(HxP3%G#W z_L4Wbqd)mJM|p4mF)d2KTSM6mV|iR-`6Hk6jixiBjUkSP`57AEN7_=30kCEC>}g!8 zbO&Q(Un8B1w=mFojCa#=iA28wl6e@wXXh!g0~A2otrSwUq1Q3V(spd)@kTRxl1uud zFZ!dOHMW~|lVd|c?RKNEYz5fg%#!y>6SujWFZzbF5BFbQ3mv3Ys(4QSl>D+fOzvwe z-55T+f=Tz_?CrTLp|WV4FMI%fO!KF1>KA*fVRhWFpo?8vO{lv!?v@J zwW0@jM=v=sXoI$E1GbO6wm-VJ2bZOH^S2M~p*fFeR{4WN_*{c}(1kh#z*vQ&Gb2O5 zsq5&^Cd|BRa*Hj|XP`M?Lsz)(yXPAA71()Y|NAwaf$!073$V|}unI#kyszQJ6bR(< z66a~J-?A%v9cy*Q`?sQ>y`z`>wO_mSg1n@|y;+O=SwH8=BX|qn+LR|3BCE%_Z+W9B z_g&iPr0!+>Zg{7hIERg~6Vm z$4+2?vtYmvfHuV&r*igbT59!(UVI%_Gk{<8SbKcOSG(MgJT~n9$78!J2JXIWGxwJC z7Ot2f&+yAgD$aU&x|?gz`Sm5cbI_j%lfq5rD3K>?4j*PRBJ_Z*3txC!KKZjlPJ%0V zV1N&NK>?khJNO8V=gh86fdfneHaPTsJ8z-G{`3L_HDJMr5iDpBVL^q|3NkE+O(8^x z4~a>%SaD*-huAn?nL z4kIF;_*^4LiWntQ?}$xX$CB7fiX1tzdra{#agrZD-X{8;JAKadY_uuVs0HLlRp51g zeyR`whn&bwmjNH{^m5$f1OkTW-1{ql*qYjgI{2 zI_a8hGCS_T`;H_k)hqA3EN{}1yr0&qpgj^xbgC&b%d9HDsPOY|&Hu(4@J#^^oU^Vv z8N^JHJ0aPCfCgrmvxY1t%W%aH6)VlqLKRIc49vtdam*dQFeK5!4Ee$a7+I6eg4Qg! z;WprQ+wI2SO#P9d;!r(K$m1NUu1JrTe9j_>K&sVAlccM%yD6#kPNbZ;G>_O}vGnpK zWM=|1vqznM%1i>FZJ@q0yTUJkrtlL00j&UpGp#x4M6e1O*rMytz1#|H14K5+ECLk% zTBHgpD6JIV#R$!}Lq*}KVnj#g0;HqtaDPkTT9vw$|^_t=-2GN>lGzqcS7&j^-`Mo%b%P*Q9c05tQO4!w4INt zYl}8O041_*0E0N?Ebu@(7qrvqxZcbRg9#4|W3)y2b!=a+zmBZYW(78};Dh<4!;FPB zouX6MUV&)G99g{)IgNjuNN?w+gB3|7mqgiP?w*X&W$c*rwO8z@?Df~0W!{o|YO`oPPZLdTugx}q0Zjj@0lc0LH)^<0s4zis1B4{62C>fbuNsEvnzBm6?tSdw z8-s@iM>s#*GZ+j;G+%hkc=7GoTFc@8Q@l;x*wx{%KQ2jzG75Qc@I`KNWGJ=!2<61l zU%BP>+5hgSWRWeFew-!ma{de2+i7$9;Op}$3$TxVszMc~a0P)*F&zRJ&=&{cMRiak zSGf{or*!G%K^H_s1qjeI0#yMKHTVKy@&!EMiS28K*x=3t=7AxoZER)DR*NiS#NWiO*x@Bj1zE*Ac||>Q|0?-xR4NMflZka+RCel_a-6 zFdffCp95OZLU$&s?1upiP@2#@2*IZrs9brf3%X+W7Yx#iU6@gd*3Qy{FQCwbCj{iz zE~66UZ3YDP8YGLp5Ixq!%~P)b;M=Nz)Q}(bjYyfyq!1xu#7>?MI!wfsC`FmLl_}1O zRdnAf-8U@zWl?9bCv^8~wj9f|M0t3J_a1ls?6O;=b>tdGy z(Pb}toKp`3B}i*7GG8Gw9t%B#fgw~An}uEMgF; z;Upz8@t#anpZVP9IK{b)l>u!TEMqoHSyrw*wDcl3`-Dp~ePw|6k;>52bjAh{lYt00 z0Dqk3#&Ok&nam_myJ$xP8Mv!i;-Y3auh~*Vfx%IS^qCF*c*4`TC7Qg=*beiV*zF&ACr_@)QSAdh|0n$;BH0~op#v4|z! zHV+AdD|DiS?vSix5p#weIMNCs;OT5o0g`tbwIV}oh){>>RMXNkw4bc!PfO{<#kuyB zE~{r0v#M2XY;`1C#jRJzD%P-;6`?e_octazCit+GDFXBlTeHGTU~*i)@vXMhAg~c|kb$Vs4(8#DrTtnIHdR>577~GXAA*NF&Ts}eoWT(8AmKY? zm?=lf$Tc%k5^ClD$xfmgRjCR7=~5ZYT2WFXO8TT~b|6gQ_f567RNC!#aJ$>xb~TH} z5|;dIW>96(WOGL`Aad7=l@%|STNzE-0@qkwXIl5VaFoI80awVvc{zldFnnQBk+HHPV`G63pwkK%V1zbEi>l9ZQmL0rFq&D* z=8m}erxtebNFdBwG6VFVac)_K1G-@i=k~T-)kasldPUzJ)WipkrF#+z+$SGJm-PwV zM9*ZvZOK>(nVxY*4`A10*2yjMGFJuvG?(sTumdz;7Y8Fypc#~x%IU3C@8AKCM6?6f z?SO1zVah@OZtfrp`|S|h&M=yG+-ossXe5`V2O|bdgUn_=aGKGK)Hbj7sSaMSgP%&~ z*G8$%rbH#5t&!nB0~*k{E%Zpbs@q=`I?-JW?xA^7EX&QzS-EVeL(kN2l+4E~S>ewx z)hJg^8xzMl#vKLsx>xO5&ASzJ)CGzx$1ogL$t!A%A$)*=2)u+S1(*N`LJ)*qTeAmX zGLZ@%`yoS^!3?~E#~dir-znq(Mk{Dd2pr&=8_XsbWL|STvCYYCw^`fR{>W;z{X{uS zQO~O+cWvG6;dBrBJA}r1p+QV_!+_Y8ECrgQ|PTLeuT{3>-#IP1oh zCv?I8PP-6{-Nf}igp+4ny@v?{77uH zkp*(GV0xli>25B%(IadPrgP-`UwK~^t3-&Dyx3^*^vHk*P+@O3; z?PxlhQ{oz9gTI}DY@D6!@cMA6MI5ky+9SAXaPccp;k;tgc;LUF0GR>+1Q$A?Hhs+* z<-sG?ifPAvg3veJPU?BZCWczZ^5Ek$IGQhl8iu_0f1A+kAD#H-Kpa>NszZRoK+=kg0 zKt>wi27=*M7%bbG1oWCHl~AelChP#)r`!FaL~9x4Fk;^)==wgj{?W; z>lDf+EKn=r18B^sqGSvKOh;)L2>JSO07kF`3o*Oq!qn`JukZq}%ta;Mr7Zpg2Zo^h zg5U;o5ECJz6Wr^N6d(gUfCkzxvh-*(bl?m`u`%W#<}_pp8zcT^2=i8;{-7=Y8Z7CU zj_D{2JHqX%b}<+I=?lS742Ln$!jKFVQ1;NU-PCXml`+uZaNdXub4EznP~g#$0tCLP z6HpPGIzdE^Cj(xHL(aeq=#eq#APL#w<(%*dXTcj#5A>dj0J(7KQ18yH>HrOp7{kyb zN8%$D&=|L20h=)mnUNWn5ha;1_GXD1Vd<6R@FjafXVB`aph7;}>JF=d4~sw$!_g-( z>MI^d;Y@JhdaRjtjIdmg2CCpCs%t>jLIO(h66?_(ec;g`AO^AkA!Y3}YM_>E;0pY) zFbt9`5yKEBZw|hIhUO1$ejqzi>-4xyw)|bt$`%}bBiPgGZ~w4 zB@c7ZR1z_{0UE(dxE@m`aSsCKN33|y`%DBU@sP!qYXd#-8++3D+zx3Rpf8rsuIx^Z zPSD5Hf?baC1zjQoNa`)7GUU3_9(9m5O#}mop#5s?EEfqL3JC(fNkhKi3>2ju;_Ecb zVA(Ja=jadr=92&7j0+2pWdy3+$gRTovM;&wFFkTF7Z5NF^DxWvFwf8=8`CjsqO8I$ zbIk7d{>|U4rTBU>5I^$|1)u;lKm;xdDvJ_96l4)i@B|M;DP!FbUw4~I`9K& zOrs1y1U|q54qyTb@j>ot2GlV@7BNgmjS)=>9~VG>+NG}uPbd<>D(z9&hQLiX!|xDf zzd9icuI~yC%PR}x3XbeC;$R_JvHdQEMBQ=<93bfaPtU@Q7a^>|VAMt{^+qo>Bz4pn z$CEIHv{OA5RD%>TBS#J)Q$3>*RoRp5EU+lnj!iI15JR&{+l~QBzyy+D0w#b2OHega zlaA7H;q-0>cwh#eQZ{iXH;KXq8g%>i3qs%FSxJb5+TpDKI3on$)G*+o9m2o`K8^q` zAO?0PPBGCC{1Lz2p(@p{{Zhlf-0}tJj}cU~!u}}$ts#{lEDZ4#Uuo1*`PEW0l}B@w zM?;lh3szKFau`wXROu%URkf@jZD$A%xzvO|WYuD=v`PhlKW|k74xnl5sz6;c1;aFs zDr7)Sa7>*t0@gG@5`?if!%sCXT5An4YAqHZ^jT@(Jqln4b`2g3!3LTI17e_09n>og zK@Mgu3E|-j!XSE{6Gp5+=b&&HvQsZJau>bxU$+)hGj%Wp7HkdnV8>SWswmBZ!Ig?M zRbg^TnZ?(TE95ehjHp5!FABO4pgy_fVuMl;4IlykNZ?j)l>x|c?!fdMeKqf_D@@V! z0b&!#X21uMwJ4AvU2FC*(C=BH6h{%MxfXc;6-U2TNYm{wyFqM|cWm27h;*YDj&uSU z7Jm@UVQI2j%m@Ocg_oqIVxbFxf|71Q^8*xPS>59{Q0muu@D^Ky*7njw8VDaF%8{SB+a2 z2mdq^Tf}K?*8yfE5iUU%s1PNY7i@hug^MwGT{uUP7gPrphA+8zW3+jXVIXWc7d|-` zbipMHDu+$=#3Ive!(=ndqyfg!KlUT;3V?jMr5mNxi7{$prFd}LD97vsi}lJ}j*>2- zPlLADun6M{zz75;VU5#xX5AQ?ebXKP;J6*?^jg^=3lf-TJ0TX}c#prinbFvS$JymF zn1(C>oj>J+@y{E+0k=%pgn8HWw$@)Q)g)OMpNThy_j!3e(({0UlYyZZ1{#!SK^9~| zl%rR~)E1RdnbGV6Dj>>;hlW2Y8i6YIiTUalCSu?l;8sN(&VH&EIl7()b^HrYj?1UdVg?-GwOE!UyixH)Q}ml)Bb(x*zpxzTlXr-?$T|nSryQS^)q>JHZB|B?r72j{8xm zp%soNxQ#m(s-fBtRO1JxK^Mj|JGC=A8@Wd7Ijk?WVDs6mF}XZnv^b98HrV>D589v) z`W9S47D{<->6&d%Y>Was0*d&E&*%VSK%BpO344~OluBor0v3A&0#{ep_do(;HT&uW zBe5N8fCq#Oj0=kjDu4)XmRgO%5=GmMOZ&8^`Lq{YvX0svlJlr_Rx=nN5wZXVIw%W7 z7qyc*nm^m71Gr}Q*pGF4w*%=5|2lzF>1?YZtQu$(x&8IUSD3jixw%)e4W0YB5%8Y{ zx)%yM7i8hOG@q3$mH0 zgPP8#S}2qF_@#W5%;^<|D!SmhX5;M;HckWrYASFMVru*^Ufb!*9zU+J0aI3d?+Ab zPp8rb?%dl8o!saAs11Fx5WOG$7qmZIfOQ*?&AZ@}=0= zx7@K&(97R9WbIA{cz{@2dQH0vFbs>&iQu#iAp?dY1jrrNP~hm1-sy8KsCVFna?R%# zln5p>2ypH7W8e34t?1kRv$`FX3eBHo7QyK4yrqt@KSc_xyRc%%!W)Y=EjzVr(T3?{%^J11bnDu^i#KoGZFKqi{R_AoH^GFr6%KrO zu;Rsxy?N{AII`l$i|Jych8b9|Ub}MX%H>&>E?J~Yn?7xNw5|oLTQ8^};X!QIvuWGD zUHi3c+`M7?{_R>p0pSJ;7&xGyf$`%F5F8Ki+&O~-0uWTcZXE%GBG#uLa8M$NiSgvi zn=dh4AVP*8BhG+Ga0W&c2^rF`SmQnepr~m*O0$@Q98AK37A`coxqEbjH#gtR+z_cPfvA_hQJ2Iw}Raak~1r}Ln zg~elAKBi^J7sL3aO_4>;rB{(j?iE)z);M|ClZY|KSYlQhMwwvY5cUl>T|Nfpm*0R1 zS(MsPbJ;P$Xtv8|o{c8UEv3mhCuypYHj8MwxY?U+zO@D$Z@TqKXlxZ+U}&O&3diVj z${kSL0S!Rfz@(FM7XSp-Ng4pA-C+tqN%5rO z|B5fx6k}Cb!BeAFH{ysRk306*0l>Sm#rInOX*5#OGmf0o3 zk&OxFmI*s)88ycYGt6eacs2{1aH94ZE_bSyv75Q{qClav0P6+jl>^Ap~>jwHUpYH;psGY+Tmzs0h%1zPBX(mo$ii^J3r;-cZw1o z&1z;mNkJfa)WO+wmKOj9O!0ZngVYg3P(ACBY620!!1me$HHg?MAt=ZX|3(_3hz#Tk zSLl<04-(Nn2xS3S{&U+9@W!n`vTcBNBjDU50D>G~zypPBq$3|G$O5u0CTo+>vchE( zsSvJ36V%G#5|=^6?I;Uj;6>y>xEB$UkcR$3Aqu<1!Yyg;a|RQgEk$=QYg7X>YO)wF zK;yC2iKa9mD`qcrVY?#s0vKwN7&Vl*J3t}vWP|b@G=cLc4L!;@@Jr5dhGQuzGLL7? z0~PZOpn(ynQ;h7?;;J+PM~0xlX%$ff3g+mL@xf|8a|~Y()OLk1u#H$SIN-Jj2uXz6 zZ3sbVfeL~!1RwZd2Y(b`MHAY{gYK0NP30;SoC@MB{}{@5oFNRbK;`60 zI6}-7CQE`Lla^+Q(^}qAhC7X+VB(^T(`n{nK_uodb$L<-V zBNc&FL-^TGh43muR~P~nhCtCF*b$)zP3Rwo@Yp|6bO$)F!43}lSR!0hvxQZtBL^AC zO15KdND-0Wa1v5-t*Axk$_h!v!mhHwBMVe$sY|7_N|?HGF*J>(mplis@6 zA-2mKt}cheOlrntfw4V#rm345#xa_SnadzaNhQ0X`PZ<2afbypHvrDX!{FqyflO)+*fW5 zv)h`wGGRRSsZLw?TNy4)9K;>+44ot~<>pX!9>W+@oBGsdMinz>3L)>ZnzE{%Y>DHQ z0PtG!s3#V{y*TqG&ML*J?))ryZ`Ch<#Ylk(s46~p74Sa$`5pw{nU3ty0chm_{WsXms zxrcSbx1jq5tAkwRSj(EHNXE=^a~Q#{ZBi8Cut36NcAvg%}gd5FJ3@7%{ zJD9A6A)VNHL;BJ8)-0qKdeO}a@XsWcBmy&yV%2Jr#WiY27{Y)HQujr-sIIsPWhvZn zc!QQOoS_S64RYcRriQ)rC3TnCizurJ*k}qNV|YAGXnr^5)oh|}(3_$4Drc-ytdyhN zTPf%jr_Er*ubaF5=DK>|uH+6deF9sxH#%e>{|5G6fOGIj4HLT2K}hUj^Sy7x+MCgn zoi}97&QPp>*ur%S_#+#;QKoeC#9dP@RoY>QF!aC{5+AlsXdO?zoQ)AM(T# zdGRyU{M} z0iz?`+oiHV8R_{dc%sp1RHqt7Sheo<)L;h{E_4{+J$A95J>O!lxAV*HeC0>K-pfDx zy(4X5&4T#t1SGMxPIMCy6=;F&*mNgINd-hC!ZE6>M&@!W_?fO+a|i2qa0|AuRV#k~ z#x*YEe~Ko&6jhdoU6^+n!nR5uXE48Y{}|o1Y@&B;5ZG1E7BgZ79g^}KX$C2g@_Mo7 zfwEV0M@M_-K}L(@5Fk+n=B9fIfoE3pdwjM%?WT2UhiLYOZ(-Mb(D!^h$b&m5ebP5} zIY3d17H^KmSpug}BW7@;^&mWP1wC*ftA!L-Km|6C0u{grnJ@{75Cm2*3IP*;sa6=U zv_kU-I%c?WVZwj5WMss}cy9=YKNT1Ff_X?XReiB}T;hiG7dfE!fHHSwf3g6<<7L8A zZ8bA3jIv%~1y*F_0O|CBA1H!xHG=2S1(M?!KU=yKd3sH42$VNJFeF@ovt%!=O*pLsY zibgPf*N1krsC|(`u~daoy-@ z(YS`!Xp`4SQ#&S;F-bbzPz`i}dE&TiU;z{Wl@#EV8bFWf zbOiN?m0b{tk~oR`NP6SX^iW9kSu4sK| zSCJKEi=Z_~+d>1}QWHZ^1q+afWt43WfB_b;3prVF7?*MOw}50glQl_`H))xdiJ6mG zjhe}mW^yE#2YEtCbLJRQ3sq**F8GWoX9zs$_b(&YMj)k zmLw`~U6*L@=13A{a6ZrhIX4^}F<&7t1rAUEpP)h~#F8(>empvp`UjamTABL?pG9h< zjHhwA^pm=TdDpcjlUFfq!V3;4n$AX)p+{cNW|S-;XB6+vIrWm9S()K5q(^G1Me2Xpn2mFhTuGKX zMN~1Wb4=1T|CB}Phc)+~xVohZU;zlwtH0Wst|_c!I-6*krVyGQZ<=R$wO4%h9&cn2 zacZXr3738fsDX;DaVd5>paV9r0x$rs;R>!V00Tylr;}A^v#6*V_K`^F11RuBgZQ17 z>IRQk0P9y6gm+UwYKA~ss-(J;oO!APOR#TP7;*8FrZa%bB&#O(OR+-$SBh0tnv}VE zjySg{-?5qq>HtqEmG$VF^;ng$XQszGdnQXBsq$a0Qcni?tOPl&!RG3 z4`~D7ssbROD)UGwV^%2{Kt}O60rUt1c?z9sX=pf5P@d%i8BhQvd8wFMqYiKYPe3M) zNqA)F|68QGo&_tm1xpx9T0_ZDpA2Z&5mhz}s3gb4r! z$^Z%Qlpgz<3>upYTCB!Oi6{GJ7LY2rd4lNUJ?VCC1^G0?S+mNSvpCCxnQH_qV1-Uu zwD8y*ggd7AIHm@g01WVsQ2z21eCOq5Lrpt|4rt6@q3R|%WM z`k-eDp<@(1GVl?R8<6OBAD|eVa7we)YOSx>ocGJQH~V}i5Cb3}5L2{84B()Mn>40! z|G)=K9+zr+4REv}U|F%412*6S(5VA3V0&klyADvV9L&K>Z~%+>YX91e#!IBfi@b2C zyhYj#!K+I_bqvao45`ypBlEV_d&4&@D5aUb5{S1(Ntn%Hpn@xvAN!P~OR`B^bmyD6 z>3bfSsDkZlPXhTW2tyuZ%}11@m8j`F}HfTn1yxNvpAAwZR6 zbOF-Ctrpg^;L5l;lO4Oe!I%oB1~8sM7E3g#o?uJJg)BpcEU<{2!i!8~%v(Ct0K>65 z4APs!IgGgxR)g1JQzO8%$YOKJvmqjiB0~#P_7}zP=u>=f&0UunF ze2mR*ps8u-FeZ%1h78W%+{oh0$YU!@32QoQOUZ6~!yZ$~m%Jx(+rtv*!=QX94?r_a z8NR{#v8imjhilAo)xf>^xG%^mR`YaO6Pym=0l2)m4*k%&yuY@K0g&>*#T?M=qyY%9 zbJgY?N&wR9$h!^z(o4X*>uA#2fvIj_09e4ylS$4oEz{wg$mP7eg7K5P#7nSRT@Nce z?+nzKJkLXIbGGVLju6TN+LTMpu?Y&Y9B`Ed4A4!S(dx9OsuB?fZ4mJB|E%n*&{_OF zF_4_ROx9vN%FOXaR9)3?wgTay%=EQ9OAyyW^QDMM(z+|x4nPd!Ow%*%*L`i%19K;Fp!Zd#Q;o7}J%UF-Mh##AV!0ly;!w8I zA92bmZ`9D%>d;`ExnukSAyBk(Ms&!$)@vL_mzpXQfGKh<%^`i)BYn*Xpacbg2^&|) zgDk3l?ahIm!rkv(Ro+^erCxFB1;tIWi= zJw0?av0DF;m+M9Ih|w^lXAy2tJj^~D^8`3z1>Io z-A9cm*@V&?%bHTsJ;yo;gMvbun zde7SFz2(i%_Z7G~Ua~vR;~|jeI0FJx9N+Bwf*cX8>!y3OQUx6#(PO-WnM=VK5CNb4 zhy_078GTj_{@{5G(kK1525{UOzTsq!>SbQeAkNo6rPEHD|8i}M;_$rUZNAuXF6X3) zj(J;%EFse7ExxXq-Z~EGQ@%7Burx{+wqrxdZ_41IQibA#RiH?$?<)=B6r3Oe!(4n%FD;8Hnx9DgM)* z(YClQ@Om5Guu%Z1>!n33zExSi|LpCXJ{_?K9n_3_c$J|>ZXY}Vj9a{eDp0P@7Xz{l zKMjD{oBi$VoqE5`9VL10bZw(6pbZ=z)8GK_eO>eJZq9^^(~$hU)&0&*X6x>}C%ho^ zi{0h}Pt-8J>%W22gz2|>ZrNDr&&2-lw_P3Tq`D?Z{~zyRPtLB;VVP$<04pDVt&$D{ zaYh^j%-OA+;3scAbcG#Q&K+4U;nt=K?0)lkulK3W_XN8okNmvRTkH8A^ll#TNdMxa zC*$`_Gp79X9gE7uO7$k6(Fc$KXzbpZC{Of_#j)bPJOKI*A%wnsyOo+M^w{=pullEA zZEFSBu8#l!zzBH1_hD}HIDeU}j{AHa-8`>c$3*!2{_{c~{6CNQiQnB!w6_CV0KjUX z3Qv#Sj@b^s-m8BCbk$}J>@>7|#gOa$ts)X-(znZ~b1$xUi4XaBTo6 zDf6~p^S8hE^S}FKe$G2R$pFDiATL}44GzRr|IlDUUkDFAe7Hd3M2ZzHUc{KOVg-pD zD|nRfKx9agBtM?Ka3LfC1{Nq-faww@1qvE8)U=sXgiQ`TeJ1HyVuT5xM2!kPaa1W% zrc0d`En%TS(47$`ct9azhSo(JHXvH02$G^IWXqnFfuaVF8Z|MpGLx%_v4#3plJ^OzC{rx``%z(oL zK#V}d5I78gNFWofG|?V}Fha^4q;NtCPpd|mW0GNw7u_EE@F3Y@n+>+#H1g;~6h~r_ zxZ{R92{{8S00BXlUZUx_o1~kLy6W_U>ObrPU;xM@D5wtuwbHx5J+aI}p$Zh{+n@rt z7|72q5`^TkOE0w}3P}SGJD|)15Cq@^1~m&OGYQ{>^UVrD>*h2KS!>Nhh(c_rL_bSZ zF;Ep<3~r z63hI$sLlXJbaj(ggMsyIP6{KtFtcvDsfLkI!ClhfS|dVV1`-J9eMm| z=W>xYiUFOSvS5M;TB7bc|Gt^_^4`PqvLFBs6emFg2p*fd^2@4L_*c`wfjDAfE6%f_ z(90%WM6^#APVLmAHQDV&F*poIm+h7r@4Rikba7M-XDa6+x**{L#1|)?cnT7Dihv(< zwY+)Ft@e!bYOKj{Vq+^7yL7Vs?DNEDQ3noW*4K7DxddE(>Bbz#CHHpRizi`s$blMc zQlsI=zXaj$?+?qQLBIy{*d#UQ6);Z1^4#YzracC3uOS3rk@!>xz6nz6Bhp$x>nh*~ z;{d<_EW6RrCN-|wRmwYhd*9;jGrSj+AV8bqU;bqHrJXTF0iqD#01aqB0z$8I)}RKl zfYBNUI&dKjoXrCv|3E>J#b|sWaU0uQSAgcA&pCFRnfvx8Lv`IxFv^)>7>ieccE;$xJ2^T*fG#F^LJx>N%Yg zYVoD{D{ETS3RBL)PXPm?=3LJ>)X>h=pmFVKQLFLBAWqC{MD(j)nF`gwvJ#vYooG1| zi?+3~|MObailRj5f};_#Z>9EZsTc#Nf%$FLx&EPm3!qk4(xO&tpG2s2vD+rQW)n52 zX@*{3+t=7a6{EHN>uo6tRl;_3x4cy>`GO1F1#k<5GWqIcDVyA!!cQv9)$DTxtQ`$t zpcdlbWOc9G!vv=`yVmsNb-Byk?|xUj4>mA{NM%rL5kG9u~zbl3>bIoIwqyq`m_3R*YvnuH#xZ2{To$0D{t79@p7$ z{}ado)Q0TVBon#1d>JVA9HZsJG6hcfsrAVQ?tQty#2` zU%6h~R$0==9yXQ-Tf~d`qC>s*a;7!C&Q5Pot6PN$A#Z|K<099__!Hb^Q$212cml|N zes!&1P3t|Y+n_}4oP{^^HD_m-#EmAbv6qTlEtgl8u=U&z0YfFD~E%9o8eix{Hylavcm{KiaE3_`|7}$UXY2KYTfW6=*BBD!vzlx{=GZ3dA}? z6R&wI2G|0-SaQAsvsNM2+yXL9JsA0z|+dgeB+OumdEg z9+ah<^93mL8i-oE@cO>+L!ifF!s3HM4cs&q13HxOK$Zw09hn)U{}V%@_`+792^1Vd zN>UnHI6O5hD#sJW#{ud5BRn+Z!^PEd!pEb=TwBEQn>%52z216}cyfT3**h-mLQdqzX7tDZD1d=!M>W*N zblf!?OhvBaMsW1TaBRq5c*P(Dwt-W-Bb2<0M2&{h#eq~rUyR2oRJaO)y|$iZ1O%33rujJ(T>G(>e|N2XN6r-aI%`?*MLr}Dusaly(_>q@UgwZ`nk zz-cvV1V5S#KgqL6ql7ZK)W)>jNn&$Lhz!C61WkvuJi4sQwnN9eJV%VoNWWZ1QDi*` zqC#M-!eR6@7@M7ysvApW%-$>>Xgs{JWJfnVzH1afMJr97bjZ*AOk8-&0(8!wghjcW z#X+>p>%7i5M8^tDM2@^VxHGt(`$&2Gt@%nneVUz`|Kd&GWY5J3$hI2Gf~-uNv_WRT z$sF9q&h)|MY(8oD%!eG!(Ui{oG=`k?8fIuayu8SBtk15o%R}Q%@9apxtWA*|#wcP5 z8Ee1wT+H_LQ0!0uAP|R*tiW`n&+xKOugS>){lzi03t^81yWK0NHp2@7tXIM}KJfAbIV1^T2P@81agfvhg9nLnCOgjZn4K%+bbs`0Dy|$ss zMVTE@qZwtK(nIBv7f65?poY`1Ny+2VF3nHQ|68=@4AVPwOB!WPwIn+*rPM#nNoGLM z6ID$oOVMRm(E{DNHpRv6oXI*xL|tS=@f^=7yu!wc#2Z0ImZDNb^;N)l30bhr%M`!@ z-Ns7Q&mG*)sB%#mg-$XJQ)k`ASsYbEV+KfFyJTR7R5exu71i!D#J=py_^i_ieY{zX zmS0p?#lltK!q8%*#BOslLoFVc{MCSx98$;-Al*8-)Xd9UNN{Y6vLDq}V?fmcP1QMNQ^||ajeX5rEY}M>(sixSGV?%dQvm$P2|}IMdv(lS z?L;4IhGZ~Mf90@ZC|FCy)MdR{06kbw|JAZhP1R*MP|TE5Rh`+JV^icCQYPeBru|r5 z1V0Lm%Bk(NC@PMWa0CK~fG4d)%Th^}1zV#aqYVL7O10TvINO@t*`4Lo02NcWbz2*4 zMYNq(nf01w=(U`zSZ>WxZIwVQ?O2axTBsdPSq<3?luBGu(vi#-Yk>ePsU73mudh8C zdkx#&yMbevRL$H}pY_Is_1so;*3Ko}FdabZECytd%f0PaYW3T5q)eywwNXlT{Jt;WI?U%@@scVse){G!cPll@! zl)0kemD2fT%)=N3n?(ld)!zdq-Td`m{(aFEMpy%GUIb?08(!hhwAlq#Q$TcJH*E%J zh+Qm|T_Uz!BA(0%&W7CWt&v?)GrQFVC`Kq1;SMEX_B;Xun1*4%;T(2h16JWK&SB=9 z;VbK6GyY%x9aH^XV7jzVHho~5>{0L&;$}c%BfjG#9$Y+*Rr8hFdGuXG$*MtyCx2lx z4z=Pd?#*YsgebG&1MXii|AyfkmSpLTV>6EA>vi2Y zmSZ~};#9`tJN;4ig47_JtRo z8KWHsHS5q zE$H1Hv))x--}Q>N(ONFFy_?2q-!y19gVR#->q893UzG$Cr*ftJTQKipOmg=ac zYG{CJswU#Ro=m;=V+}^%m)5G7Zd?hN5gN1Ua31S1EPxw0YfOG*8_sBpcI!;-=w1eC zzI9+$wc}^F>(JI~zRm`{F749ZYt!~#)Mn}P%^++hY~vv0#zh%@icUo z;_!Y3Ylg}W|K4h=o$cS9=swy9ai0&D+Zy3 zZXRcFXIKVixN|(m^E+RLJ{Q_PPX<2+bU-KQb#iUQCp@CT-L<^{N(c z@D^1+Pjl-<)sUX`)U9Yj z|7ryjk7ty(bm0EtXSeKlKXZz;PiJsoefD1G?)Yy1_P(Cxr)PBq2k<{fhGkH9p7;5a zPh*r1x=B}k*{@i{{>{&dWHY##{XZ(zx$RK`wL}K;5vJmMyr(qm=16I z`qO#2=lZX&?8kTE6n1yz)=|0!Z>A^hR+saqmwHua^=?mmKEL%C?|Es@X#X|yl9zlJ zE_Cwd-IuR6^qzT?*>JUg@6fk1eIf z9y(+gQ6j~P7B6DVsBt65jvhaP3@LJ?M+O;26_ch?<*$`4U%o_EEG05z#*8gX#!Oi= zX3u_RYX%KkHljqc6&-rCDAJ`ynGS6#6>3tVKbtvQHdCgwU&y+`T1xcP`z!cJJbS0JlPgxP9mHeGqu?;0t^WBd)MPAmhf1FDz)F@ZiFU5G|9; zta&qM5|=-7K2f4G>5CH*Oe@y%D1p* zgB!Q{lXgv+t6Pix<*S%%>N9VyO}4D(ZMDnPs>MklFZuH3CD=vpSN&eX?h_x*aDnlB z$Bio#puDhh!qWc#V+Npr1A?X*0~1`LT3FDrW?fmy;KYnhxb0RAG!_y!TvSeNSe%E$ z0jE?|%dOSiS6%&*l1kReCX-uiMcCbKxjo~PGu)}Ai~{HJ*kfLVwa1>2?;SRukw@A` z-vg5A$6tX2LK&r$o=rI*10bX(3|K6=1RXM7naI|6xaqc=RaH4vT!$h;wV`nywh7Ho zS!q=hb=9%xVoqs+*WHa}UiDL;bNX1QkAJPF9*_$V315*&Ch1rO{{&42QGZWXnJJZ; za@y%=5=}5cG%7CGRZY^ErPZD??)D5cLREzvRmVN$o117JWvfzd4n<;#HpvvMF*2!2 zTc15S6R2*yW#cMuyOn9Ew1+aPm$ecM79_Tg4)kb!k>1B-lb9yqX}RX2`)RtR8DPPv zTW;Bsoz=O;=WVUZsbQRG?knQ1v9=lOt^>>Y44t&0Mca34-8SZo%L3|ZuOhnYYO``q zn{j#BUaKgP+k(7-x8H)>tp*P{Np67avaD{)qP2X0sHAr3Rf@9R6l1c>{v>B`xDpI> zhy?q~E71hc>5MbrEi9vqJ(bC`ps(h8biTc5oHe!Dg6wT!|B#kUp8*u?m-5S-qJ6g7 z=cXF~1}KRoO>?Q@f2if^p0>=88SadFPPW*FXdcK)}GID!Yuj_i48bK56;ca$<|f zAnY)pwBL%n-n$zQzx)y(U-8rx51)V4@<+bo^8a`2V_nl6WI{GQ>LFq=8^{3YAaDS( zaqoL<>z)KFI1&ZGKo<_0iLvgbxcli!e*7vL;P}?N|J~t_cth#U?vAGv7ZMGIUP^#X7J1{?t)MVw>!#Aif~P@n)mIEKQOu{7X` zFn%V)A|a3F!sBW2g#=6F78$9?p?FbaL$aIza|pIGq7f1uP@ozyFe%U-AOREzfgR~+ z$~&44i9e{um|7*gLIw?%kDR3=7YWNmY7vpTd}Jhh=`p_?X^fW)+a}kjM(Qadfeti4 z0~ioQ3Z4?0(X3-0CsB4zO?41l#I5COg|8H>RAViAehGGM$ZFXDw-|PImgT zP&cI94WCCw_#}ptJTztklbOt7LZAT#c;hptIYEP>GE){ z%;zv+s>Yk5wTGSyC^JK4fu9CdnsNOP10Vnka7@&STs5afrK+?(t|co6Qe z0D)W-rLjnDWc|pQw88;4x4PY}ZVM||r74xM?i{Ibp&{9nRyI)_i(VNIsL#xv)uuI_ zu4B@;2$^nDwAKs2c0+{#XHtM{Cu<1IJ|NfC9`wBG4W9)d&%Ubk$?*JO02AUi>QABo>qkkRjulU;>VVuf*a{Eet zfed6H_m^Q0l`lCGtY92Nxye$_|K&*;+~D+tb-9NLnM)t#+?XQprk%~OhhutEFc;Iq z+8yWwMl8^Q^0cQDK){?;Y=I+$H@pWqLL3jG0r8g3#V}6jM`Ub`*v|Hfx)hu^Z<|{a z8CfNf))J*FZRtzP&B*(`Q(%`o6emZS$y1gxsGl6!EC1-h0fcb$?&<1GGDfYjhVFDZ zdsF$$TBc`4=7u@!YnrAxyE$zD1Bo5bWtRAdB5pvNMeOD{bC=mNo3rR9u;OtEde9<~ zKnN@}+pO-=e&u*-A0hn}Orty9>c%vY0eo1&fjgZ}p7)bO4dqj#x<`}5T$eG~x$A;? zx&r?vt{2#AUYi-=zP_$>{}<74>w18uoV@@B%AA3UV?5&#kN5#VJm&;pAXEnsKm?l2 zQ#US?0V*#oYGIabZCAtqA;9Z!3p~7x;CMwoY`jYPT-B9vi6@_{&GUUIKAj9zzW1sb9s}qqvNix!t~4Yp9`ZUkdM4e^2_N? z_l&lqK6<>3uHdHgXr9g+;KvYS)?9Cx*VLU)1`^Kot%E)G44;8NwJ!FWrd{nk*nJN= z0QZ->oFa24TL$)C|8fMpH3S?8KFnkOgK&U5`sXaV;25v-ANySLkZ+0hE8UuQ5Ba}C zS6Vp+XY)*i101eat57Yn- zC_)5`mw*@q1yGw#$qZb%tm>+?K zn$aZ~y{%xBnZx^~8d%K}4#{6xQCNl*lj;qeKjq(I@Sk;A80^{K|Ir@)0U@WdH&kL?v2c9Z`@50Kg^0mVD9IU+LD5o!hygp_YhXx>a5YUfvr5 zmoubblX)JLWmOC2A`I3c)8(O%WSOdM8IjN*g=w9c86w&3pTcon{~00e4MabAUE0Y2 z+wlMnP#hQf2M16<0t7&b>Deb*5E7*VIFw)FEfp#@p5qZ&8h+rVb>ABD7j*y@cqB_y z2@ip>;HdQ?FYeO%LD~8RBbJHYkd$7l9b*pa-w^sAPI(Rw9wH(_}FVZ3V#b7}ym$p<+a(PU@EoA*YWa=RaB0gh9rqvOy9uNXtXNjHI9Uu*4<03$S z26!T8gyhP+RRFxz=#=GJqGTnG4q#XE zzzl@tTb95JP{|3f013F}rnshPuqJK7=BL;uZO-OwnwNRKKy50Y2ZR7Atw3%5rg0YM zM{dHv2mGdPGN)@MXLO!`bT%goG^cc0=XEBhbtb1l^aA17*MDhREBf4D>X(1z7GWAz zQz;d^m7ilKW*zz@;>qV79#23303rDV1q}d904x9i007_t9svLd{{RtH8Mvrmje-ah zDpW|YVM9a^9YvHV@q(iZ87xYusIkHYj~X>@;7G9~M+pQ{0$8B3KmnC07rcx~v*t{e z5fIhrK_yF=pFiQ4ffMEnQ8Pckd>MjN=$SKc&KNQ@=SvtkV8WPLid3u6FJ`uyd3vT@ zJ45c^!Alg0QCqig-^QIAX_8$_mo|MG#n)7*QJ+9*((8$^-b|S;U9!Y@lBCCUA;3l4^~}xHS5-?Ul)!&yEg4igE4JFte7z+yO}vp zehfSkWXQ%PIrhvLqQiy<8A?wW{b9t3CPixh*b(H&?@O^;5oQR`tM`%W4_lPz7qU{#afTULg#pGHV0BfLR$-YD$5wN=cQPQpqKdOjlh())|BlL068K9Z4RADdt6DX7tfTUq*xj4K+lE zCQ9hVX~28%x%VCfj_d@68B~CEpHN8&H57vbnlXnQQhhWiBt|0%1dibZ21jWd#VV~?=$8YGZG z(xw}bsjABAtCd0dnP+#g+T>%DNLdMDRSwkUbk<_4Eq39FS%C!JdMB=#X;#707nvFo zh7bfn^es#COv$&-B+8e-REe5=c)=^7-DH17s%&AtYiYGcba zf^uYcsaoW3pFN^-k(H#H2|Coyw`~>ILcL|ST{@TMN#Tae9l73>!~+#(7^2oY@2KU@ zx^BKpQ@wPyJ?~5}vE&{iivqRpP)9ZV=vHJw|NN+ddyaL*zJQK3mZN60jPtI+zNXjBu_Z?2$eX+Mm~x-h znwXJDOM3}A(;^0>Ce>2s^wS7M7qyq%zS*7D+c{4W4Lpgh*4SgS^G-Wq@R0VMcFswF zylvwY6AD1_r@mNP{lquHXUG8u6+}g)lz~Nsh2VexjU{p8EehIbCPxZTSne>0nNrB= zf~4Ak?tv&{j*N2EI-FThSQV@d>|!@N+HsCqxf7o36vMPj0EuP8(hczxvb={-4SCG_ zlJua5CXrmkA}H`dpE7m5>yZr}WYgX||J20;f>a;^<+In@*3$qa#zX==uuuC4hm?d_ zWnqR33!)x%u%A5TiVP|Wg2*zKbY)6HvEqybZ8eHejH)j+OH5;a1Hn4N%7K)TL}IVua>F(9tRrff>!PaD$r-Vq!HbgrV}ZG&QMVONKS%&X}~8NgU$92Vp=< z4@U_^AeK#t?l=P#idY`=z=wP+83|4tQ8)kG$17H8kXF9<6hlY_aEm%a7Q$j5L5cBS zPmx&J+##GpUgIyMK*bvmh`>u2sgQQWqc)RO7ssefcYq9*3d2cG*6l`izBy4EEt4YK zDTz4D!AoIah9eTe#(`0{$ zYA}NuYyey}F&|6l1%XANL;^CnrTfBgg?@cyL572hRD5ZmMGZliSKL?r#zMxlpkjXv3(-Auv(?ss z!a2rc;qk_rylqjWJmHxk4ao$O7Wm)`36)SA1EP(E!n7hfu2)t3RZ9S0K%l=$$DdB?(mxRb-RyXat(qKD2Y9ep zvuM{HbdZqQ=$bw78d-a(WMyC7X0Hq^LI?&5*!A%Aqdn(xFTqNUit6g zl35{lEc0_n!ri9^SilfjIRB74J640|yv@zPs5s0@syR{ox~J|Lsvceygg;o9Zwj{* zqe{ibx|(9+o|wg8JzjIQ1RdnnSgq3ajtoGFDaB>?#|!PDT}yf7QX7H_Mts0V(F+0e ziBw_6WXgV0n&qiHiVAfL_(^i==g*PKb2nANpi`>G5nHsGd-pr zoW&49w)&6d8fxy6+OA$FI9}bst|~a9CXRqIeq`#eyZz)rG}SVff$|@gE()=S1yF^E zJ>ZdZ2z7tKRsU<+J$Mcye&y0`JkJYVZt)`!^BANcIlIleo#>6?l~sGk@kt*tS&k2O1wngvQo$F!y19H%KM-f249^1ypqICV&E%bWhVJ@V0>U zhGP#%T^@l0*foK>2Wq}|ff?v^@DK*ZH#eYEAI8KWUx5^Z!#9S5dx)|wlC?`Om{>(& z6=dN{ivN=-Wz!CJ7IUZJW*!rShDUgh^dq`4CFzuYM@Us0a#f^KTIB?P7u0Q2B2+}E zAwZKHp0ZPjv=NK$wth#(UX@PRTVWr@`& zi2r3cQDKq;QXol@1sS)9y7XV>xHuBR4)D+poe(2{7mv$kk9{^gi^MdZC}=CfkD%Cc zqJ=u6S6l@7XB{SmR>&y}33JL4Pqi{Yp%Rg8bdl=@hNd?doDhI=DVJ_ZhB4N3WVL`G zxgBg6F4NV9aK&%A7l&D=l3Ul3E{RtMF+LSQA2JmbhQ%LB;UEn{gSLhh4Yx~E(GFKs zckD$|=(0HM*bYCJNT>HmQaK`wbdN)*c>NfgIwf18cW%p;ZKw!nyt68;Xn&G1iFYPJ z;1qc07IaQokzr_bbt#5(IhS}jRx|cA(d9hQ6D~3^m?x=>{w8E}#dY4fm_cMw68``J zB>8sj(-nd;Ym?F_!j^GgkQD)g6f2cV4U!=76*f=dY1gBavk{NU1xcLvel{~KNppT> zDVwrsRcuybaP)*e0)Hh!NF#Hgu<43-aWt{8iU1jrS;d37s0kRUi_96K LRs1Q(R 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

    6&2Qp-Pc;o*L$H2!a z(TT5gro)Y?%EhIh^hRy#i<$dMXu{?QE~QUGVv10!PUtQ#g7J%i z$pK+nct113$a>h5p-7OWEU0BeNuoJk0f+R%nK;TNjXDw$6-cP*SW|Z_d$3M10;fNi@IO(QjxB1W6mUR*diYGJI1E7csYFG7cJZ z0hAnJ+nCu;fBrLG0C+(!<_Ap|i84^@Ng$+x_e$b93VC$YVdCznLq}Q4dCNdzAYph; zj_C4OT$>zbymq4s#`8amG*FcYR7`uC>SU4(!4_+}E)oKCnK^Y?0XiuRCN>dJm2u-W ziFhOeHg2LlbY+iz_{xYLNopINQHAyl4>l zD$&{U(Ro-Stmm$JRjo~~P#2S!W3y%4XMk0*o?2-mvjj;kW#GA7B0vcF8PL#T_g$R5 zjzPOeFwG&+h`xiAl5Fc&sD=}&5j}5h_efhl`mu8#K_ch0O464FhW861W1s~GBeF^1~#XhVl5w<$~i`KqN&VfLK7N3geEhkm9)Iq zGTKpUUULR1Th`{vIg$+M!kzPM>NFML2FK8))n?4RLt#40f6cUt8NFx~Te{MezVU0P zY-n1udDER9>-ga8!AB+-5s@r_`mTFwO;Y&T6=uOOEN9<~O&U_-1Z*A;ePt}G_|~*` zFFF3(YhK4%#O5BiriHCiPvfSgr8_XPjhO)ntgipm(vJ4NsRM&yKv~d@-LIu{Z15F> zo81Z@x34i;?rz6=;r(&g3FxQty#T-Ff3wYVit z<%h$Z-G%^jK#aeRxyvI;@zmUA*cZ2K2QwS$2&jyUo)tMxiEfwbsD!+^Zgj#M-SUXi z9MMsC)YPF~b*p2Y(J_B`uy5XJH`Ci}Skd@a8sG&>g52n8$0=u(vFl&gTW|+>U6Jr)~9awuJ4%G2Ab#2$rW9)&p9g)@c75q?)bpmz#99FyUWQ@-dvYs>Cedg z+sk43Bbfslp8x#TXKr=8Q$6pe-#gyP0Z*?ZC1m9P8)o4ZWcwf|dqK*s0D~LP@5kdA z06zc+==ojWr5*wP9qfsf&dnRo z9UJ0xTymgY+MS=s5x@_K!}_gW`}rULIZp?=*auRLMuDIQ;$I0ej{vfsk+dHBMP0ce z;04iMYm`r%AzoG>0>{~u1Ww@E6#yfIL-E-i^#LHH)t`%nSJiOTMsZYl9U%xhVbz4$ z^tIj;s-OW*VfM-13+h~f)t)2O+sP;!B!%Js1w3H+?cfgfAn{e+6=t60mBann9};eq z5&}{k+Tk76p)l0p9L`}AhT!z6V7Y}}Al_Xd4&oKApcXC{;SE#Rl?v*F;l@Q`mvkIW z{hkh^*H#+1)KIAukBOp}`WK|zJ=He8F-bQBRE%IXQ zDWH#G1q}*gJKpQ6ZV@?S~DmWu9ijx~6qz5Xb5|$!FZX-k7 z3s4dzL&oBuG@l^mqB`Q@IdWtzGNtQ%ivmJo}q(W1vUas*U|5;5eE+q97!PrPHBIagLbB3II5Wr`&tT&7r7K}uG|S(@bpSU>_$z;8sLhI~Lwwk3xM z#3<+lB4%FlP2*kKpl z0002s0UiMW2>$>#AR4%cpd*6?4=P;9uwlas5GyQ@Fp&U&ix@L%+{m$`#{~cs6evJ| zq=XG9Y6uZRWhKiVU}Az10)|RVDq(EG2{VLe7%*Xi3JtR}%$F->%zS~P)Qr(DX3iu% zbH)kXhF(^`s5qr|4I(2JL zu3^V!Ok1|?+PGn3QjBRgV@#JITZ$Y>^5)~61r}U>5TV281EDXJSfToZ2NpeQ-_AX| z_mT=EApe?Cg9l3?Jz7$+d9$X?pg@Bb%}F$Vn56iFeu1hVYSOM}$nk}JQ9*UaSN>5| z;2iCk_0Bu)bYdKG6k=xAaCv2t7+|FQ70QRN-PTxecuiQLXD6bVqKcVa7}_PHDaKc6 zrQJ3gY$4j1+hV@yxFe4}^2Qs9cu69Oi7c|!2wjjY=VWtFLg`R+R7w|Jb&f=Y-FMw} z>7{oQ2~=JWG^yuqA;vf&WOpIS=y8;7n&hXAy7(xh*U0GOsW<9~*pImd$*OOe z`2U7ZaF{OYsb`cm>Ey0YI_Il&3snhGmRfH4<*^$nz$JKLE>hk~>a8@BP3zeQ)K1s# zq}6>_$>)?(`i&)3REEsaCmdJo*VTS!AQhFKg`#!VTAT!lFC=95TlwZjuUUH1FD5S-sk!Xn|lpL(EWx5uG0X1>hB%#PHvm}H`fCVM~q$JBlE zZEL4dOeJOYe^WbUbXQi7OBH}wo8k4L5>AFN!+AY?%4vp8!?ur?4riREayRe1Tld1K z*Tad`Sn+MgV_#{-e*@0(XuuKvcH*Cs&j>+~tDL^ekH5S!urgncc}JUbUQy4Uf9@;~ zGlAhl&^M7&>!^aK)q&v)LK%zJoEC=y5s+#)$xqZ2WQHsda1LZKL_5*~k4eT-dmSXmhhEQZ#^J5lxFk&;$DeF2_c$Vl87!^aYtqu zDujhwMnTHf00fVA7=nWy)XWOuVm7^;CNRb0LIIB!o z2m@Kb21YQ#!)Z&))9Ju4Ks9ydAdo3vX(m;E!ZcvwM_l46 zi!>pGq&*%7o6+b?U`R+v#Q0`6ZUf>ucWO@P(QTA1q6Fb+_%Ip*&XRni=f-e&o1ChU zkxJr}tw4qs4DEAaR2@!02g=p;A(V0%7#0&1db6D|lq6@hqDgF7g)pE6qrG&;MvdY$ zu5oKnhM-DMfHDNAxywIOq2L@;$~#WY#h;MO*G$*>PT2sg5|D-JP8HVE7dmQGcY~Pq zjEc#4ZV#TV(wN1Nm(x(5sG64%Svos89LPMPwU4Rp-m=ef z^Fyl@8M=Vsh6e%=q3GA($_{uS5OoO*N*v&@6Q)Q7g9J1KF^!VD`^afsVEKv$3k4yu z9rh6x!mMHe!`MP*Lbl42tRm;jqUBBE5{X?W^{!!5rCt(yOpVPZY2!ou5~s2&nrc4p zD?J}RDz=0}hhBEGRokMh3I)L}hBs_PCdy18y^Toa7P2ysAghYAoMrt?vepe$feIGA zsB=kLHK&1#jbCWs9Fii3s?bN5P~+kdvX)G$Shp(CG>cjgY)$A@6-H!2BCa0SuAkT<~2Q+%ZGOYX8D-=FP4&JWx72i&t4(1c&#m zK4F1%1H7GCD^&*EkG%5GX|7dmnafx3^Tq<_kp^EOd0U!zyA+#eFVB}L7xp)QY zdbF8_xPu&=f|a0T;V9h#EbPn>he8=bnx>Wu+14D>KXND(?X9VUGlk`TW_i||y3m^0 zjB6eCI-X(A9*O#3xn}fk>+Hl8ARF@xKmo&lvM>}qsY_7)26zYSLhItl zb}wmTZ;oIU&R6%-><@2b$bc6d!bJ?@pd~XVFZQ>8+0#U5f2kuA+o292m13;X1VNsy z@(b(v@QBB);`7XB4FAfYA+|ZOYTinhJ!$6*m7+*`o@nCQ(yi+zO6&Nep9cmAPxeV> z)t?sFsYo+kXGsLvR(KabqNeYENjPtCs=T~IJnec1S*C1Fakxv&hQ`N@QX7*At2SIS zOzxv%(w1;!Tff3ZeEFRf@AAXLyw83fasSOD|7YK7d)rXFpKyiV?agc65ftr7)%a5< zISC5he8R~Upf(@ZL2XdFQ%73IWCIf#c;g{|K|{$_Dw<$yz+nl`cTNQOd+2mo(L*Yo zm3$g_aU#+&2IeSw2SZ#ZN_|8l2#9cuWql@ON{N?YclLs*w0MixY`sEgl{a%Zh=YK( z5I6@BiogTwkrTLeCGvx42S9Y~$8#bP0TMMk9`#&hBq;YMMtwpQo>pTD?>}w^niOR7o31U=C)6T_;MMVIrU*RABfQf-yp? zR#SqwYOGOPyuxzdH&KN5f{7S@AOA*vWwPN+CGa0}GaL^N6bW#d5UH!HvX%Yrk zaBo#3Kw2Xf{RWSB1P>8{TKvR^wnrGZS8^FA9KM%^^EH9#6(c0afz23)bogt~*mVWC zFl^U{f`JOwm~h@?LrA23+y7U1-WP4*NP{-GTfz9uN5LTK40W;uTbQLvo5(l=ES8GHqRwG7OK}Py!K~k}WXweSTk5 zQJH22*rg!s(Gvs|A4TylUP&$z$vaCTeWdXTf>eDQ(;GLn8?)k(gsGQ%*++#j3j5W7 zO9hyjRA3)Coopy;ri;#ip(29Dn6f_gTYKUq0Bc%QxH17`qD z?m(IpnUwA*FR3}8@knPiBb5N4kM`&RjsPAgpfum&71RYFOyQM1_7k&H6-!}89<_hE z6o7U#O?!ud$_Wbn#R+v;Y=q>Tc!LhZVOpNzQhWJRd1x2-MU8#eU*0ody%=|a>4Eli zV6gT(7kQZcm6+wZSd@~U=((IsDvtEYc&H?UGniXVw3(gRTQlbYIB*6O*`Htvpzes8 zr#YZs1P@R%kBg8{5MWm8r&bmLTo*tC9pzomwUtq!idB(UKLG}0v?rxQSEmDBb5KVP zQjuL|f`h0VoBzb3&e?#_iC>ifp43T!_mYv5!fP4Gk%9SZc1Wq9QEROw8Z}al=J|(& z*rZIls@NB$^ZBar`HhU&o-N~HoT;UrSsjYt16~uRr3s*AYNo=fQA5~|Qt74yfCv(? z0X|@30y&UYGn@e;2UgLi_SO!v^Ide}bY5B(Xwf^A@O7R*BPGhH#dbW;$)n(8I5XO= z^|fXun3z+hsd85-KemK+Jce^gN#?DK3S{e zh$Xq2P@m}oSpcTK`l}oitilRc@F)Z|Kr?5hc^ROri*RWkwLo{36xc2&D{*ld}4-@AF~ysU^5tu@{T6{VApa8fhI{x6O41 zLV#fkr8(<|a#%=d|K}7^F`WN42WkQogklCmkb1Ise-w$7YB3s$+Fn&A8_Xy;(dm(S z>8{QLLU&`Tezz)fXp$XRV9p0hWy6<`M0^;iwE#OjUrVrEJG&rahAtJmFzV#5 zSu2xCs-CfHun3&M35`)inP@wX5j(M2S^>h#pS~)$0-C%We5PT5TlFZFhybBZ zkvse`K>XHke0nbAVhGP=V+PU{cd(z{IxprsX4=W9yJs=QCSlQ8B;$ly^7}l}rwM(R zr0Z07y~d+`W4bRIqk0ECm<4vzL!L=0WeH5XTKpk`1c(ZJauLjO@#(6In3-w2M6HA+ zCsDy_ECXQBtE3snz&fVL+ri951t9zY`$zx~Fv8!`ElS~`__1TE_-|5CEin6UQ2)q9 z{P9521Wjqt33#(AJj;O1>6{W)2`-8${4~UzYqYk8sZw^soi&%2B$#J-IQd#tkhEER zF>+Ttz@b12vwXl`d>9GL34(OXpDBMbSOWDEDe5TC12-mTBZAHCsG!>yX2h^HZRsUEu8bmeE zHF{xymgRgFY)Q*>shy7cW{-*vt!4@E45N%N&-AQF!Z*cegL_NbH-ERN$a9xM3dN$d zx-w*{vFy64w#7`k%MQ)OqCnOOtc}0Cu(L|W5&S+_+O{2C!7@MvaE!6d46Ld7Rwo_J zv0w;!9H&BHfA~>VIGNIa8XU5 z{mEGta(LsfnR>ret!q_%LQWjeic(G^3T4;%)mrP&HC5IMjLU*_)}fFNr=ZITeG1xm zw%d40J?VH3t6TB2w#eMZLqNQEt=9s|*L@w$85OcyQUN@G%@Xvz@Be~9{}vRacqjkX z4pieVFw3o!y_V(Mi;!BEu@b51pt-a6+72ghO--aPGCjmYeVV$c8%Qe$2A-r%8h!x_ zsn80sY}>Y6)?IAYz&#jdJv_V}wz1m4Z%uf|tJ1Ih!AAOU^c16czH)Bj~-T%n4(nY}zQ6Fbqu zWdVh9lslU?zPy7sJ=_~U94nekBntM~jWFt)LF)PaQ}^{K!V`vl_gNcw<*_j$B|_lE z!OGbbQ-DFht$^UEX69w?>k2FwobcOi&gK(7+!>zH7aq)+skYb#yv$8AEkFf&9=CkX z*MI)!fc`~7psX{XG+Y$vFFr2hf?YXLg-Y>nHyx1PEiP0+YKFp=vEZ}q91lS&FheWP zO#a#+*W_H*WiizkB4m96CWoWzBdq1W@9LI`h3j7~WxPJ-X8z!2o#w+1;itgn!@lvN zQ0&Ccp3L5!4m-@hwcH&Jyjn^FUogHSZtWVo!5h5o@BfHfR6vo`%M}BOA0aiv;cXvQ zsP66nHBlj5cv565uR**M3+XWAz!9CBY$Qs4T0%@2q^{+9ISI1W)x{HtHDr9Njqtzd zzOlxy3{%j#4(3u;7^m^YX#K^2*!Bpl<|5?r8sFO;@5NwT#=E=WFi6G)#nE#e_!8>^ z)Gp$5fY;W3?IvB_?ob0~@I`XPp-FLy*bCnO)*kY)pXDt^xr91XsQIvWZkRkPhlJ!I z<9nf=4K^V)vm?*AYJodEe{^x}5n9~Ii@ihcPqF@J`T z1?oO^J3)1OYKfycFE9eMvn4PfgLeBKRqqQBkr)jmSkT}>gb5WAlr)JFrArZ`P5U$| z)F_LdG-~3w5tFBnn?!CTIkF@ulqXZ3%oNcQrAaXbE}R)jrp=fzUtWq9jTA;yse}$S zRVvicjvS8~McUMmw4SPZYU@?3NHuQifM`(_v}e<*W!v^_jki_c zx~1#L?jl5X^<9;yc81(3cGuXkJ9v>LM}9{c-aE{hHE(9exwB_? zW-hY}9mb65(`MknG4myk88dPWojK#~4F4D~aKeNc66Q-5L&4jffz$i+moI06D_1VL zQ!GsAE>)6OiIODj*%@wM*yx~lh2R;9r&->7&777h@ys;MJtrT%D)rOf zUtjven{cX$kpK&nX(yg2Dy0<$gCeS^i%@bZKC8T{&_WEQdg>}pu<}rY-Xo>K2aTF)Lr}9i z1;Pw546#&Hw^DVh`0i^-I!Gaj(Zv>Lt+iGdXU%Iy8fyd$M;rNafr`ZxV+=^ghNP@A zB9nA>Gk4<949wlA^z94P&WIy9=7Ix*iZ74Lf=e%>WR2U|x)jnKhu92oPk6tJcV2l9 zw1hoC-9u^`O%lb=P(}l;@6e9&>sO?RB!LOeNhzH)y_eeaDHNe#fu&RULUn2?Q!X6U zQ&B^%_nR9hIM|qQ#Pn_}MMq|K{q)=)#vG&r(gjkd1O2m@SduOPQe>7#7zj4#GKBe8axhUXyd7#>e=^wTHbp?mSg zD3n0wD=|@l3+Iod`&l}Dl7=4kUqE~HZBrPtTvjL+s<2>4fg)RA165(62Z{FFef< z$1x3~o1Vxhp3Ja)=>yW|ns*@^v3Xr0gPT zyI;uwF~U*I3Jvk27d|G2z_SdImPNc#ekL@j6q{*iQ>8h~Mmb?{l&? zY=-c?e+EY~?x-T1@@B$xfL>1Ye*qru>jOMnxTrnKw=5qtv;^n=I^Q zf6`PcMnOP2;!&yL^h#B}!qk!hvL!8p6b7StpoYLKk*#y*I}ypjM#_k*Jo8Ig@oCl( z(jW}FbXz7jxyi?LqA^K>M<)nM!{Cw9GYMsywVZSY>mlz9bATRkvg8}zkS(ObkzU$* zC?>bjwf__FO6e~N;?j~PA`w6MK@e_`10C2P1}?w>3|wFX)D9sCK}ZCFEb+xuxI!rK zBi&AO+9<#^)0r-b6yw^cFx0iAs7Ng!IgR@jjO(`^_Z#an5@R3|cZ&u}|6Di|*{oI-}`9;5qIsjf$z zS^w={OJBxavhr%Y;O(Fy#VW$|-tL}|Xn`!D*Ir8+>#aYMYqIRRG|7B2zecJJl6Dv- z)F3ZwR+{LyzSTp(hWTt4U5%LBs+h=hA`!i`n`H~~5Ded71t};C?H*8KNJpB)3ZQhQ zDJ=mA{7f*KMuZJ^kOfBY1Y~Ax<{4@1%$8)ry6j{l0PVF2M!5LJr7-5?JatS`6`8rZ ze(J8JI@On zm7q?`D`x(wnNp_Gq1t+=a@vL^A$;o#)Jrfe7n8kPhT#goFxA0#3gF&0U|3>P7z@bsKAz3%@kwM9n6UA<7q&yL;vV-w^Sc-&J?UD>QQLr5StUD12~5DDy4$!nc5Y>Kzw`xoz)gBZ zhcE&NLx@4b9sc)-2VU@lU$~_yet{GqA=J+GxP)vfp^yuTr#Ds)Ascpbn4X9cA&9^a zw)x{+&%EX|SMCFY@>IzqjJE)aW}Ao|%}1clWfFmaS&tp`u5Qriu_LdDmH!Un4V(}; zPtSt&$W(2`(y|@Ow|cj=USE>NFx-Jw77gD4cB)-#YgJO)Dw6~6!+yz<{`Acdz$88E z{h3G7e-}+EOcRGlA`v-g0f;G1V#4QN|N5u&q)qIB9niQSE2I1Qwd%?_lf%4wX^9`e z003CITPO0uk?XuDd{H`CaSwt+ADVi&tBLt!ciNl+<9xB(Y9JpaJkKRAp-!n3pr z=rkg@gas*uL;(dt;i*xGpXy2+%o{`iTEI1IfCroeSwID#XvEK}K+)T^4BWsY^T1Kr zilEq+o)9De=^sKWLF-x%nHmY$Iy~RIy%%Ib7j!n-Nw~t8q{2V}A3z(n@eLx_H{#<# zG8q#~3PQI^giPwT#-O4X61VANmStJOA~A$M`vTS&7gdTV?s<)Gp@QOwGk)?X?#Z6h zke+M{sFE@?N=d_mJF)(gLv&2X!Mn6Nw1F(xxKoIq$jgYH7@XCsl#_F{dzpkEh=GMe z0!xssmK(^Th`9=+L`g&i4}6eGjIQXi#28D7mM}r9D#6&>3IFww2z==x2}Fh813sXm z!J`wp75vD-fW??uF)FyhYuUG3WE))^7q$bA<*P{{W1aBHZi9EoC zX*EK`IUra8M6`e(xCB>l1^BtOqtYh3JV*;XJ%`*&=yJ$~d@ktP3Y4fINa;C;c!bxZ zgq{<{Kk11-d_)E@u^Bw86~sM}>={$sG#Ru%U#UGs@PQ#%$(7^{(j)@pxB}F4$(S6I znxwj$jIa0##_);0uFH%!QzeH|4Iv_qRRV*G0t0FpKmX;3FGIMceM78oj3FMWyI)e6 zAJBpG@(TsvO6si6hto70&^V6UEd!NotS}&(Kl>+l$bv7CQECIJ z6;jSbNJFaJ(MU*y71)6LvrZu$Qby*rikdJAcz4E;7kv|0nu^+7k~j9 z2m&IAiA_mQ_QXquM9BF3OT8@945Y2yD$JhCPyd%`pZ<(F2Wb%X6i^05uK^7f800QJ zwLMr=PzjLC0d2(%*Z>^xfd~yvL`Bpq;0+=$zkOqy3@yGLjLFsn!kZMvxw0=JX@|s` zlC%3%Ixqv=z(Op%CD$AdW2v4N4V$$Jso2yy9yP;Wf&p`U!y&y@>ZCYC7y?TO1!!6) z?}Qje2m<;8(o`H&SA4-mK!PKUE%MKrcffD2yu-zP@Y6KT>c{&%(DF0150~}mbIpamf2u6ZK9~}jPC_OJ*#Z{B# z%1hgTAXtwnih2^R0SyJJi}O> zi3TLul08|<)k+08FBNDpP$aY;V1g9@feiRlg;Pg%{7NFAPY7{Op$OW&{8^#BL{gX^ zv&>I7W!m{@&!LUlsoh;wc!l(Qh5xDzvEY4I0!_LS>Qgs_S35m15*pMN5ZkdOTY4P= z9azZ;-GO|aP}JPlTZ~ij|01L2y20%mrMn}K{R2N8uxI7An1X^%? z-D)jM%A;LB`IC_NB1gogrm4)8zUEfuONUPa%1=QjF+Mk(BuPw2z4N2hhu+u^< z=oQ-?_~DgA+X=N^-q7CeJ>q^XzINEb@i^wy6^25UeT;4pF_c`mGYz zG!xrsjYZuJ8QsF~*`0QnO8TX-U-z=?loe5Exv!{K})S$ z+MG8W#IwGwLTP-ZEWs8nR4}uNq1hN?*ocyMNM=(3GBP>E zWE19O-vwnARs~v+X#Z9~WfvA+Qr0v&Oy%XhT6E>;5dzW_umK#P(pf&~v8`o#<>d-x zX|)Xk?&a4D6=n?`UxV#7SYjS3QH>MbSUC8WimJumV9gcs5wyWK8!LDeG&gd4#=#REPkA7hi!rIbR zx}E_69EbsuMlH_fVI8RDTfSwrb!lR~MeU909lS-FK2?I%x+^duXlAJOEiB)}4fD%F zj8d1x5M1;VT>pKW4O;qw9Mw_tQJ7u=f*ZI24zK_Wn1Bf=07=@5eJ(u7RD>Sb5l})B z?d}YB_yQbQ1j!ZauIx0l{$sOd0D2Aq254&{HKAx&#MTWxYwd|^y|KJ5LH4n(#GZ`Q7+|CwqaHlU5^&tkM3y4&RVUNfE0*<(kkg#?rdAe zS>=kXbRV^cqX<>d_GP#0c?u0DB!q_gbIUB5Yn+=YNx7~Q9p;j=X$y>F8Xa~*MZYn-&PZPY73 z?bIfMSvu83s9vmLD8FT2;)pjR(s3tVEaJ>@TOv)eu{Q2WV>o$;A7D$s3xO5jEFk!1 zip#VMSOh9?aYrD}Ijn#g_yTvh@+{x>ZT|xB2C**}XGgFBF+b}-M(aT~*~?V{Qm_S@ zs_Q`MiMw9CRnu#w?N69v5OHm26h`4s{&#>6^jR2qLjU&zAM95cbXr*S2d~)%muyGB zX#Yuv^gxa7LA~_RDlO6KY>p3Y&<<_trCwgnff5Ji3r+1Hl-pOT7CA!>RWgGUm8dtf zbrt;*o78Qz(UNN6jk6h-9T^aB{(%s1xCSWTA8;+5_yHMgogT<`c4!B`SVsw<0Yi9) zSm1VT$9ipdhaRwt>2_-rnCEhz0(*w%cV>XEkMi=efl&#hrCn3}&hL7s-M;YzZ_;<|}m5f}NEu27h6R8^l;RNw|RsShx`Q0shH5hrxhUq=74V8hAj2u!gt_sB*2Z{;bdXu7~n)2LKa`0kanK zb4P2mSNA^+0#d*f{Z4;-m-~CCb5C(r0NrH2A8^6{`@uhOiU$0GH+Vn?2v!RQN+?M1 zU3KvQwDDh&!3kfx9%y7X`1rIQ2z`#)whYc4tVAxpMvZW3kHe&8T zQuF3bA2^5b+`)6mjw?g15FuLhN|vNPdhq-L=Zu-CXReru^To^=Ls_AofeJ{V`tfNjS2)d4^}XchM~)%N53m=`ZQ|Nsx9}>$aygA*s^ESu1&iFBp*|D^PXa5 z3WMIe8x*i@{P)r>S4kxm99Uu16^vSa0R|XUgk@J4RD5w(J8q$+l~^c_ z6;>8`6!^?U42bNSt|wLKf`Avi};HWtxdvW)i%H z9Gh(dpg;vO=+N75yM+*3Z+8~wCZ7^`Fv%s?SyIV$PC_T>bkAwG$tKf)LW+2;l&2ng z=gIQQrSjD$Uw-d(`ssc7)zayH0+w1Js-6*8pnn@hWFUhJZsg#DCPBzjNf%xy6HGQ~ z_~A_+@}$#GAr5sE4Lw{T)>~YK@dZ>>odN9`a&%?L99`82mRw|+VOEcZ7?RdoLCTe5 zjzhtf1(Gkk>BL`*JsD*af-L}nnjjFNC28&~qS>1Z>;TW1sTF)MJMApeC7%r&w}2xt z+#nop7VK8%6c#k#aGP+taEWt%9co>o(1Dztc8-20X(}v_C;tn~nQ9uUeKUh(163aEk+fU zie|J(EsR~!VTc(t+9(!|Uzl~4xM{&b#kuI(Xjh7R-K7Em7RalZUr{m=g8~3VFc1I} z3=!IDRH#V+3W*?W@a1N@6sch^ia z4S150=ZdBBWlD2>o#Gd&&N~-Be9uG&y?pY`A3flLNr&{H3%0`G!h|ubRN=0@R(-XH zzPz4OJX)#35C-*NSUK7&V4P1sHHVd;dl|bdNi2{qUx@z4^@yK5zs8 zUI3+eL1_{{fWVt>5Q5D};BlC<3_SkjgHDVoa~>4U1=(>1*QgG35plujh9jI60B21l zjLnx4A)VMMN>Phq6z)!8ib#&hLjwUxK*4SzI}TUPof zuKB$Ue>t+Bj-KTM%`kybjhUBqj4&9%{U8H_(LojnRwlP}@Pn2NA!e-fLXIf_0v$-< z6haUJiiIF`n+)9shER!-MdxHUj7E1x5egl)4F5d6V~@;$Cq$g#?1;V`6)=6-L|75i ziNjQ)6N_dvqb+SCR#d_DCKMrDwFD(y1fzzsDMqV#C(hrHume111P`uwt`!F=h?fJs4CS%i7W zH0CjrNX#iV$W<6)dhuGi>|NmTIC2kOb1YU;`no$7}D$~%tGE{P&(`d&e zfCAl&t^uQ@7y~k@Q3+h2b*-G8NJqLdm+>xUxD4LSF6B#4xfG_J9aT=F7}`_qbZD_+ z>=d1ey`WZadr`Ay_mG;+q~@TuOHDxsd=S9;(Jx41Sz{QUGPbeB0jqPQA6VQOmK}v_ zk9+B(jlcqy)Fa&-rbg!7?>uENpNx-s+u`x*Dok%$a z_QK`?DVUurMY_XUQr3r;QYmLOyGxd~G^Pgr>`V7U+R>&er$tNcX*mK^>cwEF65`&j zW~<>aiV*}CIFUQ`7uDW|VOqm|pZ`?SHpjOJ0Y`5GLs#^;$2idFkK5{j5U6W|98p1r zQQGccZeU2ncz^&pAVPW3tK{>trgQW~4xCV61QuTOu)=YGDFF*7=43~|{FM~UDr?zU zXjT?PU!{fc1{RP3>QOJ6xH8E#zbM-cbGRlj@PI~i z>qqpRYcKjU@%y^MMmZXS4%4zDS?mG_v+&OyS<%Wp?I&F!SZN0~qQV9nXo(vH**ev^ z#19CduTGek$xBvEJ0SXG+dzh}h)p2_BDzU9?En;u@(wM>17`nTmcW|@RhtbQZJ4(C z&2VP$XcY`aowf>T4Z;_nvHuuNmAsZ}Fc~zV%UEOuWI)k1@~YW_8>Fk`MJki-O13Jk z6|>s&tMJ_88Q4`LAE1@sr0yq=zaqm%NTL$42EYvh<(x}^fOX`>q^&cKagCp*22S2J zuPcCq6k2R_iG8vJXaGw{K}vTo!_*I*jpmtmR?X73HcWR>3!U#`7X-j5wzYjz(K3-E z(tE(3DZIt%u|#_=dAgvFnr>g!7Pp>L01AeX)*4d*4w??q*hlHv|2@E7K6PKvOv5k;{ED^q7u@FZ4GYGK6(*|PiHF*ljk8(zw2h1-UGfU}0 zfjyg>k)8pX9?zZL&XryQ3LQ-a-Scc4Y84&QR3HX`z!lkwN|4*rQIi)L)zsMlqSY4) zpj92&k%$=|T&&Sv6bV-B1*ORmR?tXtTKxTpS2hVKA2DJ7h*N&PGJQK;&f%eCZ#3-9RlgTN;Mmr`RNd zVWT&CBR9gK9l~KZ`s5wrA)Wc519BS$Qp7oaL_$PBpUK`8Jx%RpScYVi3n0QHzJ{M* zAC6&P4c1frh*r-S4(3R5(SXQ3WDP)MS5kosBoHceBwvPt zD_lYh3|`@xWUcvCN`_7gj84g!oMK7T1K7Z*Ok+)Y9_Znu=p|qr(jia&0^T7~ z0{`NJ4P7`c*l4;6gh7B)#vU~JnS`u_2VN6RV3P_U8scqKvaDi`eMMLKk#EgKkg!V| zQ48~F#T-Cii``LPST>dI7lPfMV{JkB2srGP5xCMzyv_qk2|teseX3;j^Vwa7sp0NfeyCcnvz+*IEg zoSGucfOPUe4a6u9{9q6CAOJ){Mr!AG=ujdE=6H_hLdl;P9;SQAR|;X-du9MAu>T>O z)u$WAVP4hLNE}hfI3fso?}695M)3sxu(F6|QmV#W}Y$%5ez$ip| zWCMhWFf~VM|eL`vJktzb_f=~)2e_ko82E$N3k!g{m1j_18 zF-U3MOYCJ2_Lu|?kegI4VuYvwgi3_4y@^LqC`9U}SLPU|x!7EU-5MF6@u^euHD8H- zWguNaz3kB4P&u_9Gq;x4orcjivLne4#&Hi zPz6K-F!<7a0u!q8q`-b-srDzU9_$^uDwftlFu1C!!0Lb=C9TTYXiAYqcmM`2T?bwW z_Rs)sEl9p5hen_P4UB8DTIVUcjn{RZ*Y%eE)LV>L3s$w$spZA~sD)S1V1=$?jFzm4 zSP2FMf#sd+UIu|kuIr@2Lz-MFdd>tgR@8esLNtJ?o82eXjvkfr=c*d)l`3q)CM?4$ ztgAX~Q9htiCe!kC=@eyQo%IxMc>udwMw&&t4;uHrNdZKE2k=YB3GN$UBU zR~G16N`6TW1*B)#y)c@}73UI?>>Hp?#6B9%3 zK5W{K=B$#Y0V4=%31VdY75%*mXKaA^ByZ%NtXFP}S=q(c$s2KM#fy0GsR1XoXrhJg zY>du8jQ$*rvT&n{f-59~x;7O0BJI-J@F_tI4!i*A%y0c_nGDbZ5p!c44)K&8vHxCj z?n1E>M=>X7X=z660S|9DDliwDXX4!^N6i58no$HVuj6XysqxJUVukaWLAICyS{3Bm z1j)93#qxS@j3STXd$C60a)%V)9UW z?bmKHFoZKOK=Ig?bHg?)D9_mytKKN9Z8J$Iyqc%)$^XC%)H4~E?DFO^;-)cK=wl4N zApZ2gyV;0dP>WjqGK^LMqC&tAnn(@ALU_EeF8Zi4Bkc&mb4p%73Q*J(NYMORfFZZn z0{j3mtXaWs?Kb=GI4kiuhcgpzvL;8dOPljKdvX?wW1JcA(2+8Pg)}F5F{aY9LQ8N2 zPjGeav;BNkaJ7gWjonwM-B+B;3wA3jb}!G)KtfaxMApD0*uo2k$G%MAAd7VkGp%6J z>uyA|aDem}P69DVX-aeRH^cNy*L5b-v^dvvUhDNa9}`U#u-T?_s?_a6SgcPw%rp}~ z2GsK+Fm@FXwet4uKHE_~GD}l`0gdf5Sd0bQ`2X^B0<*`lo5?=3D(H|aY{C_EZbefn zYl9HNWKc5`DGG3OD1nlm_;4`fM`xm{5${40%e6~0u{hr~6t}c-?=@d1cTKMzb7LD% zdnp5-r(m@xV@oa`dn`Wl?XqGYKQjySk<$osH{xDFSWLyWZZ&9Ii3(&l56pnjTAnQQ z=xSrmShu!i9GqFFXT>n`VLyxw7%{5;wp;*ZK$^e5v=hhlIg|5nBR5_vH-p>s>IHTc zQ!Ml-NP^fZ)BYR^C_;uSG>6+W8Edy!;*Z)rZ&OEAh^H(8J&P;y?6?A|56Xav@T?C+ z$`yp?d?PKF5F?Sw>wfPr>7?#r5rGtUrhp6hT>JlLOBZ;8H}PI0cqccwf)j&YOL^Hk zH%`M!fV#8A0`*~j1R@|phjVxhJa*5zDTq%t7!1Lqb;UojpjS#_hJwL3iMaQ=X$<&onrbvnGS{ zrgJ)|k2|@aGnJ=vbCY_2gywTc_xpN;2Q2?WtIvCNld+7NELZYd*X>Wh?M1h8r7H?y zkgWK<-+7)#c6;-{D98dS)cEEeJH)qNAron{&k3VbjC(p}1=zqbbn_F_^-CLfIU9Jm zi@Uj>{HLdUxf6q5^Da5A?a#D(fB&>cFhB-?InLAjWAFSJBYbs6qzU3kz?ImufC2Z} z<8BTR&)RtlWVHmdI1N~WF2q7Fb^<)8cElsQX;`Xs%fQ62=UO|u>Uf4*`!=Qt;Gyvewd#m5Ez1O*Rzaj|N zo1TWNDxzA~Mb}p2GbCuVLPv0+#%LnE!UVm>=QA1TuP?`0pBeeU(K?j-o_+`Dz+v5M zDQT2Ols(!%adPLbf&&DwU;_yjG+2;W!h{DA5>)tb;XsHA7d((q5u=0(7BhCNxX~j> zjUh#HB&l&@N|h@wRA>njKuno4Y1XuPGbV%$5ds`AaAAWYp@eI<@~t4 z0SBq7=!B7*648sY2qlw{GIwyW4yOoqfRIAU;Hjbl46z&0rUz1pVYC!S3&8@^NW4j- zOo*xNwb*jIO*h^S$`Sv!h!*vdAKV{Ef(mj-2R7Y(9Dt*eHYj^*LduloDC#E<%;d4KnZv%r6@tv&=Km zTS`r}3T-nis{9LMh_1kZN-8+xqvF49nYsW48q{M7KpbYc0tK8B(G*`u{|duX)okeG zQNr{Mqf=%zhrQ@z zVvSv{*p#TN($a@zswjgA4uHUb2BQ6r+McgfGrgzEeJ{T_$wD_QZp9i)h#C$|?}8SX zO3zO=Yrp{loOB2{->%!KcS}sW=F1R7LX`PB2~tpa#ReRESk*~>yBK4Pf!o-jiEb4V z$X$OM*~q{HXIW*FTZXdO!dLppWo2PPnkER^x^d_dfxC84uEA_h+<8Q@OkbVfO7b>N9UGf)0Jr$wpw0G8>3%l-xh zH3KQ)i?fVN4Tb<1zQCgg{d$20-B?WAVJ8DHFk=?l(GEkjgPBs+C4HDrDoN)` zFe{-;wgaY7DgaD615*=I2}LOWj6ki_qJI3BG(v%{mYl+6MAvjDxrD(71oQ#G&hUVl z%x*C7DCSDpk%bLxQzjX30TJ547Y*tK9&FUq?_df!1$dKfAt2#67k~mwq%e9(&7S}C zI+n;EeXMVe6q!6F8Of>AGl%=sr*f2YPsE`_h|22J9S`rDia8x zUun#h{L4@C!X?*7*sxDS(a(fHUSUQGPu+0C>#Q(1-qPO;UsxRFYOGDY~wf35+Yb z($a%O9Agq9YCtF8;Ql0%!X|1pt76jgze)1aQ!fN5vuwSpew}zR(Vp`WG>l z!7r*5fC3xP`3zYw#2K7vh%bDBfW#AxgM}(i7?q4zE(k&@TnJlBcetq^d#B(eS=Acq z7OV8^?Wjjhj1y=p+Ig(J?}$^`-y#DRgJi#oXnN ztU&w`s!(7#6wtId10-A5YEh{(FckGR08Ahj>z&C8$lMqB3f2ZYIINZ)U<3Z9RGJ;Y zkdED^01phIzj)@soK!F^=SvfyR*{SSGbB&ZY2p3Kpw6T%XQ!#UN9O?*&hUj_bize5$&?wp zjhJB0qyaPCcVB>6a7hG%7TMQ+Eq0*_OWa@r|HAW!=&c$sf8h-A_K+E<0D=)(;08AU z!GH{8gFgphnu+LyB}%ai57S1S9FA`|tnr!(Nj{CLJZzG>r|{}&@*-)}EHCpk&(t(e z8(8e*Vr)sur#XhmC1^}`cInC)(x|5ZVW^R~XT%gR@=EN6GH&uJ z55-Ol5I-)(25|yUtmQCJs}RvxOb$z4qV#Gl`9$l22*3bh?yPK1=6vGEN+|`w!zhf5 zx{OX}JV#!5Zzv4JX?U>qWh{{KO+AdWDt_0Vu5_inUL=f0`4XxCw0fcM-)>>@?jSB=}WM-@*ANMg6C#Nibt=A&JAa(B9a4B1= zpmUriL2{5h5FyD_Ny^}oDdge{?ko)80T};6K?Q08U~bWCD99$z5G5Bg7Kq>?TXHYp zfrDVm2Cm>SBgh>m)aVn{j z9jWr3_RjOVGAlpg^t3YNJ`g7FQ7qey5>Zg*0I~(2i@CT1_Lv9}Xpb!;GB1^k6`d@B zp7So*a_4dn2XNpE{GuJcz!s$N2TWxGRv-spU~E|G+lnX(eX$B%p%;g-rXbTL1&k&X zU8XHD9w30g*N{R6|p2 zlN2$CTrHChQDwXmKRuG*YODm0(;xp?Fs*&Z86=x;8LH767h@l+iv5JNHaLN`=HJJc$1 zljOq3^yX3YTEf=EG7^iEA9oB=zohlflDP(Q1v#+;9?Dt{(k*FlyLz-d3dBdv14nCs z3hI+D+yM+?K^J^67vwVsUU5D3C60>d272)dU9~ZXU<~b(Fbu2w^ivF5@(jlGGZ+9B zj^tK=p-qeA7>J`y(bQJ7r*Hr0l%CoY8y>VysWsHzR5ktZDY0rcGxSdZl^as*T)n|I z-O;PC5|g9^)`sW_!7@1=bwzpXQ7e%XpG%=iX~>{cl{l4Zn&Mq_)J#B?*tQd1aDWPW z)!V|L9a^@X zcC@-=Ab?iZFbu&A3?UZwHWom@K4;(udQlU8;059j2(F4B`Oa+~Lqlb`H#7G%VmVWC0tF0fR@gS#6eQOZRk#wsm!ukTvdTV|Qo^ zv4oehXj9mBaaSGHwS`kmk||jm)HQu_GXr~9Yjx8rF9|G*7l$cP=8iLooR{@t&TNG^ zU{`TEjjfB8_&F6J2W2@T;o^y>4jzcKB^MzPycltFAwFXv5%9NsOSX(B#4>z<2_wWE z%mA9@U=05u1dh4pCe1K&%d}0IwU77sX9M|7e^!G{*L7Vtb`e=N&#_#~)sdH0cc0dh zCwY=N^mhfd#b6kC!-{JQZW3vcdT3dfgslOD5xJd*S}LCwo-5gspSF^@LF71@cjFcGWUPi~?Gckxp^Ucx zmN$7*&^S2}$X@Sec5Hfwm~Eqsqs%6WmqL3Jc9qnE3S?EJ3uBBsp@0n`Z{4Ap)a!~V zL`(m>Mh+BMU!Ji^pV16O!;YsQ253RWGPrdE*|D{iLKnH5%lX8#Rj65)sM{Hy&y}+w znX_A1UAbYN&$X!wwQ8}p19x*ofpec95kpi3l~>OvwwgIvRIJY`iRfoW1@>B;!Y!o? zqG@>sWI3(d+9?Cz(6P&u*LkJdlxifsPom4Ukn59&Dd~s4m8o&yyzybd( zVWy+?rd6E0$vK2YZ5`Vbvj_2zrP92I+8T1)oo^Su)w_~^+`T#bw4HjBHSoTr{gO!=h8O)^P5T|| z`;(8$L|+?ca5z%`k=^?Hd2KGrpSOv2`^dgX%DgKt*E(*qT+44SF5WuKTb(b)TwprO z5JFlq=m5;$;R`O8R1P}^tiW0uThtI)gJ)cJ)e+BW^Vo@9$NBuvn_b7Z0h0f7T-u?1 z8w9=3FFDcQ+Z#mt(7Rnksn$cK+R>-hae(uNjrV(q(|Bz=^?rDV&$825nXHAb!3kE1 zOx-SJ0N;<|OvGsTcxS_1J>bju)+I#lDg#^;CUd3n2gbXxG20wPxRIqY*_A!Tj@H=+ zG2=J>Udr@h(-@tsGPn7FqS=_dET9P8*MA248@@_qHW?=}od%d{443JO4`RX1BP zRM;;*>r?E{QNPbG6zo6V^~YZ9%U<>oeeKh}_TgLQ;a-!u(&fa*wTF`gNjdN1XR9~8 z<}UF|1YiIV00DF+D5{(WSx3scH&f-7@w=P{V!(`y{_=fw;0r@AEdTp!=imp!&_pOS zAb1L--V(e4>t`I#&za*}U-jv~*zY>pwOX2 zhz}(|posB81&shYdL#f+LC69l4FDinvVegADh;@7$@0KTl`{WV#$+&n0RsaKIxIr; z6R4t}Rf-ZFI%Clc88d1$b&518B1e#_DtZd(0@bQ0jw*7BgNKhV@YtC>`!20ov~1hD zeG7MO+_`eu3VT}@FWtOu&(wu?CX9_KgbNq8Vj+a#2A8~Hqh>9#Ky8o(R;DaDv*yj5 zJ4epE?Q`hSkx850#x3<|)u>COW(_;GHg1z0QapHjLGInUD^C2)TS7+R8gG9LiCkoI zl?0fRG_armOP2=})O6V(CIsrzizv}qM1X+|Lxq}0ioObpq)cTvb=q{PRI5OtZUqV{ zJ&hXs$Clj-V1RrLm=}Qp8h9Xp@EFpTA%Yo3*a{F@FopjWg)xwcH<&?InKd19hK*;F zi6~l$r_pv|im$C0TZ=BXhN3puVDnpzz6obzMZp2r+i)Bm2P8@gIQPd$)uDB;3NP}N;J^Zd2Al#C4BtJ7oSt~Jtc#hYnIoP z3-0+aL_4wE32n4>N=xlohJ4|JpAcH8ScHT%@WcOXAs&h-iI$e=*=dhb3TdS7vRf%^ z*2E~|W7GtLFEBmgmRqM1`Ag76KH^B+s1<;8Dykz$z)_quwn;ml>%Ih0Im`E zr0bXINhM#IMa5SY$4k+m$OReP*Hu(9xXA+*3|2cW%{AK$Ej(s?F_^a7GSDZ`v~Uw* zqKt}|+PaS_{ch7udjoHal4(jcFjfQ8%PtCldLzJ|7R0q}yNzuy!U+>pQgh5D3300z za~CDtNQOr@#^8;IU&kI7wcf}w=!bF#!_vUieZyY$D-SWxjC12|-RwBz)`pR-&wc_8 zA)uDfX7tgW#W*jzOFK=vq)fOFXRUES^ zELBQk7`cF2Jq0GHpH;i2nkaoJzg)FY9JKkmSYs9&o z7QGk|2&ycCXB!Ctw$qVU9jSQS;m-edSkeIJHP1>Qq|yN}Ks~+v4SR~{Td$fjy)F^! zg?V%tnqKyWPROZ-He_TDacC!Zn1P2q+}00+I0gExE?r1;jS`pWKh?>riT1MEF{D^P z1Rn5;tQ1MuB4V4{fiZZm>{><)W~wr(%{eJ~*mE*iBo5B8jk7P&^YjX)4bWh6spLs7QJzhNIe@y^ zk(dYw0IoQuH#k@}5>!njXZ_AOAlYjwxk-Eo4!^!j%6WT)|n>a)(S8i{A7iwz2Bni#xyo3vW!L0Y0@{2&_O1q9T#A z@N8-~Nc&XM3OKZzbmF~IE4u=^_O<_nEmsH1MF{hDcVG3bSx;p_RjH9C$n8!sjVVXx z$~6HvVbTVq_a#4mH-&yPQ<%h*rtS*Gk4zcU7h;NDLolwrJnpfN*&9hP#A05(nCuiP zTi?u0p%z5dU+75Z*(kG1%9L_y>IRHu(3X~-r%f;~s))d?iWwLF#OiD%Ot4VZHmqG7 zSaBY3;R&`%B){aaowKviVb1Dev=XsKMc6_xm9WL?DYT2@qrED~c)EF&0Zb2j-glVc z$C0iyr7w+X0loh>7De??P?M}JD>NVky^trBJ3Hk`fp*H__^+$0JYc7OgQ-?l9ha** z3@@(|7h84kKdT7rGoyLJ4P^5c+dLfL_ObyHMXSRw%F$?hFs>9}K(4wZ=%|P+u+N0% z-=qoHk%??sS5Ty-4Iu|h+Ylb+&9u9LOs95$0Un?WLZCoBAqI>>zp*)Ws{d`}Dl65$ zvR<{73;tiy&N|`nvWC5Iolh#hR<^99I4iA)@mUH_Z6Ru>$=2=_)f+75lSzuiLt%r!4kIp&LJm7g2WMZ~4p3w^n=*f|P3 zkBBY!g_bRCW_74?D#)s6$Na4yv{gn8aD>Z?fJqq0c2o#mdMDIv)>Js77g)if}*BRoF2=s+y z@M8tPX9c66R4G^~uhx7qn0zg$R5J*DY)6Xh5*f#E3{muD{FGI%cy|WGTC@{!2sZx= z!{9o{Ks8F(cOiFdO}JYk=Y+kZP`br1xH3^{^K42oB>|984N!kDCyhE`e;`Bw`bPpL zU~O9BOlJ6hLxG0U)h63@EY5_02{=QEWd>&u3x61a?udbY2pIB+f%OQ1hWLPln254B zY3c?Ka}Wld@O2{M4Z1*IR!~`$m^t*dIZ!h%lu`{*CQ4-|aBk;!nghY6Y!Jv!4KsAxUi$_>~3Zz8_^CR%LJdTHF$cQV#bO3TRN0B#7TX-=E zz!D~ajhAO)pvQCHm_pbE6yY|9`!RHjU@`$Xhs*K>iC~X^*a>i8UhXK5gDC%qY2hI6 zNS1?0k6*bKW{Ho7h=@~X2yk!)vzLcw@CC5|45VdLqCpKKXikZ71Ji(6V^@4DXpvP` zm}qB;3a6MGxsh*ogSmE9V5VT+hhS1)QPnqoA)$eF(QKws2AK4M`*qE<+GPmTB2zI^z!FbYnW!4(`wn?O+ICkO;+HkkfZb{6@G&6kmhDGmi{pa-gOG|2yDR<(DO>3!gb zHC8hWH>ir4NiOU%5x&!z5%!C;L}5NM5^Uon+W`ShVgNf4D|V!luK89hiW5Hhj0eC0 z*+`T%S^^eOhDxbID1cphB}jBAdMAc$f>mSuF&5TYh}`K8VPFW_`3{}%1z+F}SzrkA z7MIrPhghneTbiBm_-ABSc-?rm=Ka=Ic3840}WsS7;s-fFb=yAVDS2Ht=0|xN~r(( zug*uHF=&d3N{WlAs0rGU6pE56nTx?dshK%0qSI7ur&PeWgt8QJ=EtF+`k^IfD#hh~ zPm+^7ksXe=qOLlP9~NRYH>);Eqb7i({r559_+kRcXx8K=G1i+d$FenwCqN;Ra>n~yQTFAmWHU0jWqv(d9tJ%@DU&&rw{pLD;2q@4+QNQDbu$r1;S? zXE;8;=>v~OtwgJ>wyUkyI<->kwC9POO{=@WYqU|zZcR(H*Sf7kd#q%swQZ?GO4o;H zfCC-zThV|zXZsrb+6@tTu?8A;aeHtA2ZPUNiUW(0dW*h_s=fz`ium&yl%jkYxo}ga zsUPc^iaU(;o4>cDej^JVB3b|sfT}IQHa4-EvMK*<9b_>FFaaMRvkz@Z zqrZL!c$<2^8cU3xDze4+xc^&G8e_Q}w4$4vh09eXkr%o%tA7cQa}=zzMyEn-LY#+G zGI6+9Zulm~3cOJJ!Zb|7C~U$hoSrY7p3(Zqk?gyU?8uFr!sv;#$oaG)yt^U1yxggr zYHylvHxWf?<7PetBksWN~R%?u!EZefPnK1?cx^w)%8IUUhcs)FtXj`%#VBuFk zs}#OTKKmgS%gV@AYRQ-k$&wt&SwPS7Y|k(($&T#8k4(ZROtqe@rA6DN&iM}Gxqxah z2R%RlDgda0DyW7l%ZJ&5y-d;3SJAkP(HU)^35wCLw#wE}4IFZVhQNXAgH{#L89fi4ZWNosEz+YIK5X{q=cdOnkfZtUEsXG+ptUWq+fU)~4GBCT# z3eQoR1*06viEz(XkOg6Y)nPCMH)j9I?LgJ-kOlWF$>?dxFMP=7DZ@@{yq=7^Sxc5* zFf&}cq!kbZ{OQoC7QS=SU04$c2Nf{r>R0UP3LU34g<*^^bIworx){z_r zR}cnQZPn=+*0W8|wmk${{o7hS1VeBIi7?y7{mAt^+qx~*ku1aUjI>Z|yV*LmS&OEj z40~Bn1(TpUa?5IWOUq6?(c*p4flb)wecq^84IrJF%J4)*2&s%+(#UMg4204JV{*?1 zM+0oR&n(T*mf6wRQFIL2Nnrn*J)x^2rL%~@G2X^k<~*F~OeWUk174k;hG5%R9o$yE z+gWf0LqG)}KHOSO;#45q93Iv`0M_k51S`JV$-Uw+F4piIt-V{wY@NLF7zW7cr4eWd zLJ(iC9EycXw@&QKg$vl_ZQkh3s<{Gr;1QCKvqT4SDv_DeBbIflQ1#BG*P)= zh}klIlPt=)lD86FP~dBRb3ReQrmcqJI3}k}A22kWV{%PQK?6y*+g~8!Asz-)VB%MB z1%m$DzfA=@-~&R?1I5ZLAs*uNEa{UD)*b%hG0xk~UCHpQ*1~(dUl|zSik6)K2DZRd z-+c@X&DXHZ#7h3xOWyzFxXjV99*R&-eYyxm5{h6XX+Zz-sr}-yjg5XO?HdcDB+!f< zHkq<3aX0hl#yJ6o*}Uf3Ji4!Y&L#CXCzWW~E~LWQ6zQxuVj|lv9_Um+1Vi8hI{@N> zUhY2N12*vP>h9+`0PnMl?&j0mldkXkuH3v`&yu{{WF5~nuEM%Yw8lEL>|h4%K(H4} z4T%5(vH&%(%<8W`u&xg4w7$_AU)Tl;uFQB7j9 zVxH`4eC9A(d7t~)(>{g)fB}9q)Iq(54DJ&&w%XoR+TR84ZioZ;4%Q#;14O_Gi4X)j zpaWFk?(S{_LGb?rKfnl4-w2E_28=KSI5u%?0^i7# ze63jh&qGTEyfER?Urm5@^kR+#iG1M%Za3vlZ;J`Y+<`w_}9nd#$zTk+^qw>M+ z-Y%?49lJi@;q>h1>HY&>&j>#-^*O-xi2wwV&9uND1#`~T_y@h#jy zfdma26qo-{A;ENW5N9S3=~lC)Ifu%4H_IM5a2+O16vyi z09yos*s)|0Fer-^frb(yMwoybS1yUUb?I_wfB{7nMKc!l^$Qr$U`2&z)Tl87g^Vg0 zAQ3Jc`EQlOHFzM#EQ5yTAz7|`9*U6nbc-q}{>JAUyJ9tA91+mIt z$`t<*Q$mCw*6`r`g7od*r7)c(Vvwbw9s~-grhdW+ zLZT*&38|ful7PddU~(!dtfaE4D+5L}@hbtoDl06o&|=`K01$A?E*o!@i-NrN;%f#U ze?;Li!WbixF-0Kh0J6yfE3AeVEW>Ow&1BG_HzJ0xLATOO+p^0oXX_HSA7HQn2i>gv zZMWanBo4UXmV+}o=$?blohy1sB)fLLlMcJ@;Blv&D{KJ4s`b_jVLdb&7{#0V@Pjl` zgdXLuQcEWaryFp(v8Eb~HX0^W14~k=)CL)}u)|apI0`}xSCvr14lDHV!wVJ&QN;hJ zWJK`*7J1#O#TV1ciY*+E#c_fNJovF$CY4OA*}{aBj55BO#OyL2G=s8*HLn=L2O4zv z!Asf9{W8okaWL~r(0o(V-FVSNQ@A&Ub1u0#mE(a<>iUF7x*=jvp#cUGbuVFs8(_py zNd=NGVoEQixZ?aQ@|2otHuC5gkwh|;B?VVni6xa>qKQ^mFI+i73R8W6!iWtb^^wdI#* zl}TmVZ@2k^4P*j7@~ahz0RQtwb3>E2Pn#BqKPp*paF&+$`4`(^YuZr%7l+ERIC@cl0giH0KhAG?FL(7+u6Egwzj=5Y)s%l20YLL7w}Ji z{KKR9060dw&Ffpgu@@1jK!fHSXK@Wgivuj+p2$5eQHg5gdMr4F0%QVnl;Ru*Lny+5 zIBb&$(NxBiL7-6~Xmu?yRW4N55*XG{c1DSz>tc1o+$E)ExN3j}CU5}XK?P^565>^O zCY7ulzyi*D9ut?yfeB0iicaHRWKe(@BMoM1k@*o|u7(2{e6a@H9D<({6aZ?Bp0dN=6(B@Ce9A+OR->gdRhdhy-d<$DBSr9NFjGAY zw~mCxEN&5e;oD3Qg5ZK1+|dRwpn(hU88;WWpnfTMYYJch1F$i{OHeq0GgUxWe(LXz ze;p?g`nm%j=l}*TI4lT400PD~76d5(feY5z&KwM(2P%+kp@QWAM=qg}Az*+TI2(e| zVsw$Doq}l9gN=?#Or-nSU?w%mN!Xs0V<;TPflzrW)}j9-7p7d@gDP~>49!v~IgMqj zd@@7aF=Z*w^_>M6V1Xl0zyjC3?nBWcT?-UV1K(Y0c%>)ar?y3%$fAH=sU{gjNOh_- zklHn?hAqT=QCltOW({&P19yf-2Q;vO4RjFT0rRu4IzVuM@wwo$I>DVMU@YAF>fe6m zkDob!!D2CB6$o&+nGrz11Q>t;3``)q*CnwBEC7NME9(Fc<*Xa1D_YSyKs_*?f_h>s z+KKk~aRmqkM=|Nq*A6+hv?Zy56~!x~^QcVYC< z9LJcmuZFb)DvDYMpaGH-EdUTWdSuNJ+1E*KZINM1kc&8(bRhG^Zlg?+WS!D<@PG#~ zSixf5nP@^Ec+rc_62B1)@Ip`8u#78l1eSFG>mu_7BzQQf)k$iJSDfN6U_lNf&Sni; zV8f1!HI9*3R~coPahcj)wsHj^ z&}D2px2F>Ts&&2H@MD78>Emt-)XQxn>Un@iewiAd+ueZ;sCzP9@;QWLE2P`1O0GPPx=AC$5PC%EuTYTa#_&df~aPjx3nzMZB*$P{eoBEHFL4tErEt_O0X?D(&yCI(|7gjPeJxz;FOVl%*0uSvjP&MFf z@IGDK4)+scIDy({*chZ@yY5J2j!?=@58e-!Z^}4O|fYv!8wXX{G+z z1I*6Bww1&^!@$8DeqOndzXaz6eBb}okN%5OeDL`Wfyb!}<5wfT$4G1>;|s6?$U`dF zlFyvUgSjL#h!U!XjyMKiK(@{+mC!Sp&}%7^X&vGExmOx4)g!v*@{n7?71*1urE9p_ z6T#b)I^9be1jqoXVlNfcjIDwUYN0A^>a%aMA|5!q^8*3CLV|(Y!ND51!V<8zGc*|R zIE9;$yE88(daCt1fl(8+Cv?B}!#GfDK7)agkkhUlQ@k8=gAf1!RM?yV6vHtbz(@gy z5*nppFb3cPJySBJonsvbgg}&lomZ;B(aS&${IXjifDa_Irfa%0vpo__CfqYYsyl!Q zNH=LxjK#<^ujX z!)c>HX)8UYsF~a$fC#9rhf+Fk3&arwH$yzcqur6wDh5nDAIqeZKv zCz(`}Esv4%UC zW8zDf{KlmOOr|t14)7UfITFJFjA|N;n}oL+ls7Jl0rEpN9lXa+WSo6OfMW_w!3;>e zOT~#hNT?J6>Ef`2JPZ26O0)<8hw(~+Xw9z_z%s-SaOf196P1i)w%qgukc2~!{7AS2 z&I?4nx->cv2>>#)uE$9_5%f!#nnbj^YH=?_h$i+jjB4T*@u4@&zyTX{sVL_pk3Hq+re235udr9|5n&Jy%c z&ZK}uOo763D4MtwL} zECCi6f$RS|0Vxc%*;_RRh>s?fO->z%Gd#o5IZL*@(q)`O)oC^Y2+mctPz|g`YxKkG zVmfcMy*52mxX_AaVL`<>5=WStchkCgqcn=6@whm=e zW|bc5@f8o4P9k{>UuDdkyqZ0Qk{i?j7fVD7C{#toS9}#npn}3E1T_R$0hVh`uk_YW z1=nx&MFBOT0m;bS?8tK^S#)JkRrOMJ-O|w;&f9raSTd%hL$hyFQxd$_hHZ-@@Rbpz zj28a{SV)wXtSZ>|vcVPrtzFWz&BR$7{Q!o2xMS*3ifao42(sCnkBs%!i=D`f&71%o z#sMAG-AvGuHCbGMz_S(GlubS0gitT7P#l7;`#jS$rPaT@S%;+n0pL9no048d(QG;l zzR;FEMS%^gyBcL!=uF(jUD_mc)*OvE_KZ|&{Qw1Efo?U3jy(vj)!2>g#n0_n1LT-w zFwn6zS=}_-(?wUYb;h-2TWOrjw_OTfJvyaBQ#2E|TD@DPWy-B^fM&8f#@GPeF~0S} z(|W6c!o7eFOWJ>I+~;*F_E^ePB*@8S0UZejanRh(4F{~fTG!-M@6B4T_1KL`2DAUX zIo1_h)%}IlRbP^L!1sMnm2F#=DLS})*$e%{Bk0RD-QC7bL}pSiJN>%Ih?YC+01wyz zg);yogx&{M8cuuML|w&5-Mb|1KhDiut8LPb)m)4X&}=ZkjY&h&RbQ4c-LhR@bA4ZC zo8Q+R$!W7jl+2+9PR`|QN&mG~oHc+17|rTw0Ro0M#Yo_f>k1#vJqT7}yd$@`Sb+*I z0cR!134j4@@CMG^-p%D+&&^y9_Sz99;qwiZVi*b2McegF-PB!S)n(AMrC%;xS$2Kb zm(865@I%>?y>Qdr|HWIPnH~{UU|+RUB#{6k%!-Cv*d&=yH(sJ zep9xffCNyuWm%TxEdZoV0HvxC^jzd)R#Zb3(zZB&9KhV~)nbkH+V1_-0Nvtf?pkUN zU60iWvm{+9HRS{?+(HH8a4W?U1@<-M~2 ztcU;*fW0nAVq-?;g3f1SrT_(~TKdpht)=FNo@9vbTx)*Kitb+W4bV*HWHHXI6Fz4( zHfM8AP>>esbUtNNW@lEd(7FUO1(4P1npqv*VdxzI8i~4QI?o+7=$-!t$O71?tIgVr z)@GrOXotqwhxXv1rsyvwp-nDJjy~y>4Rp< zH?;s`4KeM8aPj_b4IqG1cxGunZ;6iR*7oq&#%SD*?~sjZ;r3|%7UyJZUyvT@{!Y;2 z_JzP!!%#t4$W~dqbmiHV2@~V22CvuL?NFZPJrF=oU19+5#_%QwQJ*$%x~A=;rgDqE zXlt(RY0icxMZ--N<6;;FFt6%ywrcwZ?)|3f7H4si$SqI4@lXluV=&89)^V=}y5;V1 zF=Yy4qP?QwP~Ej|To&!7bzWV{X(vbYxtM?uU@a_n08v1$zx4M17ICG{V%x@O5zdBY z5Z$K^Y~JSWG-q8D9`j%DbWS%$V-S^Zj`L*5?P?fsxV*Mke`ge z&(}NjL=W#khhE3KVk*aLVkc_XzH%?l=n}$or`B}AR$o#t^Q%_#Xead>w{dTl^W0wb z5)$w_cb(;?%P@7Wn$aDZfIUFePzT5L=hY?Cj!&dxa$kpQ1<=K6c5RH7@}<7=WDj9W zH^9F>Ut=f+UnqEMM|jqK@x!+ETQJ+IZr?HYZ#OsfikI_a;C7AJ7%*=20gvpI*(ut= zU+7YR*_&6orEbnv;$4EtS%!Cd=jpl2UPmwS+m`g2FY#*s5Kv5yZ!tFbpHF!HUU-HN zWrQDfUO4zLC-_s>c5V;&5f)QjV|RpYnycom4{vi=x*KxuV07x z3qMo`jOEpjY@cH~NUj`!KKZx>rM0$M{vpbg0+)Y{2NL zhhsaR8Jrk8Fs0$1l5Rg|PFrqwr({;KpLeuB`v*P%{%d=lA&-TDqbye5+!XM!?MEtlfam80@tQTunj#+w@X|R9b7`gn;2X?#_09qLK zz83wQ*Ll=OeS!D+yMO(?H+t9KP1!H?8{hV_?DpLMxAf@G2H&UpakrsYwiyUG`I#kh z%U^y)?&oDyeqSemjgsx?4`F}+S8ZUnW(JipJCyLWymkvC9-P>);=^+vFJ=Hjo4A{nEzcaNd8M*uB^ie7D4OF%j-)OA z(il;-MAF4Rf=osd<;iNwR&LH#?PWL2mtofb6e@f;ah*#g^jwNGXVRxi9X)71RqFE# z3m|C7Di$o)?PR}`UCelVWATeAMBr+k{QCCp*}sp!w*aTgzc1_7eDEYgkq#w7blOF% z30Po85oL5Bf&n`8T1Y0*wi!z->1NY?H(5wPaT{_N6mrZd_hC`dIai`|)Je6$203ZP zRf`;GB^G$$IR>A6H{NBz0e{tqqmMrV37LEa+~Cb`G1WAXN(M3WS%1YaI9h20qDG}^ zsUfIQfe$hS;YkxNsU&XAR7ew&7v9vNnrn_IoQZEv=af^9Kt;e+*?HyNj69yzqn|;# zH-QB<0$Qk{hvFrG2b94SQ%m_7bkLLk!$1^eX$D@|T5DCBh9GLIq4uCiCMDw;ZeybA znL(Oah~{Mq5Eo*sY$k`4i6Fv>;+%BW`J#6+0y|@Q!xD<q5!TbPludvQt2K)C9eGtpZwP59!RGrw_~NN0)w6VSkm1RE@@vk(U=0Mbhzjr0T! z?9xr7?=pj~#v6;PCCJ~3oTV@SB8x2Gwk9v6YP(>nigK5uHmQSuPsyc z)D}nDWYtd^^BOa5?>e_;^P5chTwPUDDWF}RMT2K}Z;1@1q6) zFjCDzpF^qbwgzf`TG--B11i^FXIZ^P5TV=I=u=C6vdOQNO`**;)BN_Cv%|l$QTxiD zx85o4O2Cd35FG5mi#IKRj7wJXj#t3Gs1xhAd-&4oMxlnDMCpNBM?*W|9frS{T0<*6voi`d7aKhLzv_k52#;-~r>pCuQ|8 zi0?Uo1#*$P>3J@K)bn0}Fvq=-G4WI9Dj}&R_qh?GFJ1B4&H7+hFZZ=iLt=zszG5h= zGukhAa{3u`2;i&k49+aU+aV8yXh1vSQ7;rwKqiLq3vNa6Q<#I`AQPmyu!$^taE!|=qrT8+6unK8PSuRSuly%0Io5HT-khi%4G;oe6jGKN^;AYv6UggvYk~7T z8O%B;K7$Z5rS9`$F~O)(m$-1C%xn{hLJ5Ir&XA4NQ78cl5F=onGL;dfC^w0ExByHb z6@DaVIotV8CSK25(#YO8FNhjNVwIO7&Ei5jI68e+>!q5U88N@usF=$1ZffOMO>uWW zoi5ZbdD0Uqg=*BH-nD=_>f=TUjsw}N)&U9YYBFI3-*nauQs-09N&)6rK z#H!Lv{`0c`DMf2qXJymq;4O_b^qW&MaGi!?Q=&!9D{F^G07eW$8o2nYJ8KJA+D4VO zQcY}ar`lI{I@NQ&?CJ(bH(5(Q>ZShF>~fhK6V7&)cA?AqGz zuGY0TI0kTc8`$4cb*ffPFL1B-PTBVMw!RqWNYQ6Hgs?2R$+awh`&-ukW&^s>9g2uT zOWo?`v~LOy8h7ieTJYi(!iO@z3wmMO^7fUz7uN8{tUBA@^7g#5WDp72hO((WqZ-hl ztbbeF;^t-p8Uh|Lf!SKW5b-Qm3hkSAe~L|rMp(i^4sv+;lGI{oSia>IaguL~Rrpq^ z$s8&F1~P`*Rf9akAkcUenO5xL{`wQf{hcw5Z3Q9&9~h@{f`Eek##7$~b&lR0GM#}) z7z2CK z()BD(MY&TIb=u8UQ9%EGJZDmi8rtvCfC7kc3_v@Xw@#HUh;5PK^imh6z>Zn;RVJXG=Ta2_q6lWu0w9XPeNyEhm)! z7Mo}eP7NBBRdKxI-R>28d9w4CiN;sljB`I@%k-{yjqi6u%I5b23P4u}1H9A% zpLt*k0E1lk`QYr$aFYiepjvCN+$im`#oNu_j7$8u`1YLHJr71@~2tW?K`icz)A~@y_--o*{4leDUa+ z&)W8=+2adbZtHfdWGgAe0Uy@7yBpZ22e!of{`A$&J{gZJMhHV_449F>mjb;#O%0sy zXp$D8zh6M{xSmbo%l!EIkINn>5!>fmUV2&HlHCG`h14IBP}K-s-(^F`y%f7aAnMJV z1g0L|=^fLB&iNSwGNcZbd0>?}T$O!bm62J!85F+N)O5JjXssM{_!Lk%Ud-)Z{?!?@ zBtmRu7^_{-tT7*Ih~PXu)&hQ9$W_+H5fjF7UlJan_G#Y)PT

    Ti?CjG9W_;Ef!!g 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¥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 OrB|@ut0|5L1OPk9JZd5U literal 0 HcmV?d00001 diff --git a/code/assets/tvmask.png b/code/assets/tvmask.png new file mode 100644 index 0000000000000000000000000000000000000000..51cc39116065482e4d6c5248b8ea031951392725 GIT binary patch literal 13988 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 literal 0 HcmV?d00001 diff --git a/code/assets/tvmask.svg b/code/assets/tvmask.svg new file mode 100644 index 00000000..85e0fb6f --- /dev/null +++ b/code/assets/tvmask.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/code/chart.js b/code/chart.js index ec6351ad..ec26c30e 100644 --- a/code/chart.js +++ b/code/chart.js @@ -1,3 +1,15 @@ +const counterDiv = document.querySelector('projectCounter'); + + +Chart.defaults.font.family = 'Miriam Libre, sans-serif'; +Chart.defaults.font.size = 12; + +const drawCounter = (finishedProjects) => { + + counterDiv.innerHTML += `Finished projects: ${finishedProjects}
    Projects to go: ${19-finishedProjects}` + +} + //DOM-selector for the canvas 👇 const ctx = document.getElementById('chart').getContext('2d') @@ -6,15 +18,15 @@ const drawChart = (finishedProjects) => { const data = { - labels: ['finished','unfinished'], + labels: ['Finished','Unfinished'], datasets: [{ label: 'My First dataset', backgroundColor: [ - 'rgba(255, 99, 132, 0.2)', - 'rgba(54, 162, 235, 0.2)', + '#211D31', + '#FFFFFF', ], - borderColor: 'rgb(255, 99, 132)', + borderWidth: '0', data: [finishedProjects, 19-finishedProjects], }] }; @@ -23,71 +35,18 @@ const drawChart = (finishedProjects) => { type: 'pie', data: data, options: { + plugins: { + + legend: { + display: false + }, + }, responsive: true, - } + + } + }; - - + const myChart = new Chart( ctx, config ); } - - - - - - - - - -//------- I just couldn't figure out how to reference the variable from script.js, -//--------as it was a local variable. I've seen people do functions but I don't want to -//--------mess up my code. So I fetched the info again instead. - - - - - - -// const data = { - -// data: { -// labels: ['Finsihed', 'TBD'], -// datasets: [{ -// label: 'Project counter', -// data: [12, 19, 3, 5, 2, 3], -// backgroundColor: [ -// 'rgba(255, 99, 132, 0.2)', -// 'rgba(54, 162, 235, 0.2)', - -// ], -// borderColor: [ -// 'rgba(255, 99, 132, 1)', -// 'rgba(54, 162, 235, 1)', - -// ], -// borderWidth: 1 -// }] -// }, -// options: { -// scales: { -// y: { -// beginAtZero: true -// } -// } -// }, -// }; - -// let finishedProj = 5 -// let unfinishedProj = 19 - finishedProj - -// const config = { - -// type: 'pie', -// data: data, -// options: { -// responsive: true -// } -// } - -// const myChart = new Chart(ctx, config); \ No newline at end of file diff --git a/code/index.html b/code/index.html index 61529b69..35134fbf 100644 --- a/code/index.html +++ b/code/index.html @@ -9,25 +9,78 @@ + + + + -

    -

    GitHub Tracker

    -
    - + + + +
    +
    + +
    + + +
    +
    +
    -

    Projects:

    + +
    - + + + - - + + + + + + + + + - \ No newline at end of file + + diff --git a/code/script.js b/code/script.js index 2207d738..fedbcc43 100644 --- a/code/script.js +++ b/code/script.js @@ -3,14 +3,9 @@ const myProjects = document.getElementById('projects') const userInfo = document.getElementById('user-info') -const body = document.getElementById('body') -//const piechart = document.getElementById('chart'); +// const body = document.getElementById('body') -// ### What to include - -// - A chart of how many projects you've done so far, compared to how many you will do - const username = 'Dorothea-B' const API_URL_USER = `https://api.github.com/users/${username}` @@ -19,31 +14,35 @@ const API_URL_REPO = `https://api.github.com/users/${username}/repos` //let reponame - +//------------api key(token) is hidden in secret.js file so it doesn't break on git push const options = { method: 'GET', headers: { - Authorization: `token ${API_TOKEN}` // you need to paste your token over here. + Authorization: `token ${API_TOKEN}` } } -//const API_URL_PR = `https://api.github.com/repos/Technigo/${reponame}/pulls` - - -//--------------------------------------USER INFO +//------------------fetching & printing USER INFO fetch(API_URL_USER, options) .then(res => res.json()) .then(data => { console.log('User info:', data) userInfo.innerHTML += - ` -
    ${username}
    ` + ` + +
    ${username}
    +

    Bootcamp tracker

    + ` }) + // + + + +//-------------------------HERE STARTS THE PROJECTS -//---------------------------------HERE STARTS THE PROJECTS fetch(API_URL_REPO, options) .then(res => res.json()) @@ -51,59 +50,50 @@ fetch(API_URL_REPO, options) console.log('All repos:', data) - //-------filter out only technigo projects + //-------filter out only technigo projects by including those starting with "project-" const myTechnigoRepos = data.filter(repo => repo.name.includes('project-')); - // console.log('Filtered:', myTechnigoRepos) + //------function that generates the inner html + //------------------PRINTING EACH REPO WITH DYNAMIC ID - //------function that generates projects html - const printProjects = (data) => { - - //this is invoking(drawing) the chart, using the filtered number of repos as arguments within the chart.js-file - drawChart(data.length) - //for (let i = 0; i < data.length; i++) - myTechnigoRepos.forEach(repo => { + const printProjects = (data) => { + //this is invoking(drawing) the chart, using the filtered number of repos as arguments within the chart.js-file + drawChart(data.length) - myProjects.innerHTML += - `
    -
    ${repo.name}
    + myTechnigoRepos.forEach(repo => { -
    -
    Default branch: ${repo.default_branch}
    -
    Updated: ${new Date(repo.updated_at).toLocaleDateString('en-GB', {year: 'numeric', month: 'long', day: 'numeric'})}
    -
    Latest push:
    -
    Commits:
    -
    Pull requests: Loading...
    - -
    ` - }) + myProjects.innerHTML += + // Started w. making a new div for each project . Also divided into two child divs. + `
    + +
    +
    ${repo.name}
    + + +
    Updated: ${new Date(repo.updated_at).toLocaleDateString('en-GB', {year: 'numeric', month: 'long', day: 'numeric'})}
    +
    + +
    +
    Default branch: ${repo.default_branch}
    +
    Latest push:
    +
    Commits:
    +
    Pull requests: Loading...
    +
    + +
    ` + }) } - //------invoking the print function with only filtered repos - printProjects(myTechnigoRepos) + //------invoking the print projects-function with only filtered repos + printProjects(myTechnigoRepos) - - //------------------PRINTING EACH REPO WITH DYNAMIC ID------------- myTechnigoRepos.forEach(repo => { - - - // body.innerHTML += ` - //
    - //

    ${repo.name}

    - - //
    - // ` - console.log('for each repo name:', repo.name) - - - //-------------FETCHING EACH PROJECT's COMMITS - const API_REPO_COMMITS = `https://api.github.com/repos/${username}/${repo.name}/commits` @@ -117,12 +107,33 @@ fetch(API_URL_REPO, options) //for (let y = 0; y < data.length; y++) //console.log("Num of commits:", data[y].commit) + // const limit = (commitmsg) => { + + // let max_chars = 15; - //-------printing the pull requests + // if(commitmsg.length > max_chars) { + // commitmsg = commitmsg.substr(0, max_chars); + // } + // } + + + //-------printing the number of commits as well as the message of the latest one (the one with index[0]) document.getElementById(`num-commits-${repo.name}`).innerHTML = `Total commits: ${data.length}` - document.getElementById(`latest-${repo.name}`).innerHTML = `Latest push: ${data[0].commit.message}` + //some of the commit messages were so long they messed up my design so I made it clip to 25 characters. + let pushMessage = `${data[0].commit.message}`; + + if(pushMessage.length > 25) {pushMessage = pushMessage.substring(0,25)}; + + + document.getElementById(`latest-${repo.name}`).innerHTML = `Latest push: ${pushMessage}` + + // let latestPush = limit(data[0].commit.message) + }) + + + // body.innerHTML += ` //
    @@ -132,7 +143,7 @@ fetch(API_URL_REPO, options) //
    // ` - }) + //-------------FETCHING EACH PROJECT's PULL REQUESTS @@ -142,32 +153,26 @@ fetch(API_URL_REPO, options) .then(res => res.json()) .then(pulls => { - //console.log(pulls) + console.log('Pull requests', pulls) + + + //--------------Filter to only my pulls and then print to HTML - //--------------Filter to only my pulls - //const myTechnigoPulls = pulls.filter(pull => pull.user.login === repo.owner.login) pulls.forEach(pull => { if(pull.user.login === username ) { - //-------printing the pull requests + //-------printing the pull requests - document.getElementById(`pull-req-${repo.name}`).innerHTML = `Pull requests: ${pull.html_url}` + document.getElementById(`pull-req-${repo.name}`).innerHTML = ` Pull requests` - } - - - } ) - - + } + }) }) - - - }) - + }) }) @@ -180,37 +185,3 @@ fetch(API_URL_REPO, options) - - - - - - - //data.forEach((repo) => {reponame = repo.name}) - // reponame = data[2].name - // const fetchCommits = () => { - - // data.forEach((repo) => { - // reponame = repo.name - // }) - // } - // fetchCommits(data) - - - - - // for (let y = 0; y < data.length; y++) - - // reponame = data[y].name - - // console.log('Reponame:', reponame) - // //Later have to make a loop for this - - - - // data.forEach((repo) => { - // reponame = repo.name - // }) - - // console.log(reponame) - //Later have to make a loop for this \ No newline at end of file diff --git a/code/style.css b/code/style.css index c877dfa9..5d59f015 100644 --- a/code/style.css +++ b/code/style.css @@ -1,88 +1,144 @@ body { - background: #FFECE9; + background: #B4C1DD; font-family: 'Miriam Libre', sans-serif; + color: #13121D; + position: relative; } header { - background: linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, rgb(248, 175, 19) 100%); + /* background: linear-gradient(0deg, rgba(255, 255, 255, 0) 0%, rgb(248, 175, 19) 100%); */ display: flex; align-items: center; flex-direction: column; font-family: 'Urbanist', sans-serif; + position: relative; } h1 { flex: 1; color: antiquewhite; + position: absolute; } h2 { flex: 1; - text-align: center; + text-align: left; font-family: 'Urbanist', sans-serif; font-weight: 500; - color: rgb(157, 82, 172); + font-size: 1.3rem; + margin-top: 0.5rem; } -/* unvisited link */ a:link { color: rgb(201, 113, 55); } - -/* visited link */ a:visited { color: rgb(82, 96, 121); } - -/* mouse over link */ a:hover { color: rgb(224, 53, 139); - cursor: cell; + cursor: url(http://www.rw-designer.com/cursor-extern.php?id=20388); } -/* selected link */ a:active { color: rgb(224, 53, 139); } +.square1 { + height: 240px; + width: 100%; + background-color: #211D31; + position: absolute; + top: 0; + left: 0; +} + + +.username { + margin-top: 3rem; + font-size: 2.5rem; +} + #user-info { flex: 1; - text-align: center; - font-size: 2.5rem; +width: 90%; +font-size: 2rem; font-weight: 700; - color: rgb(138, 37, 121); - } +.projectCounter { + + font-size: 2rem; + top: 5rem; +} .userPicture { - width: 200px; - border-radius: 100px; + width: 330px; + -webkit-mask-image: url(./assets/bubble-3.svg); + mask-image: url(./assets/bubble-3.svg); + margin-top: 1.5rem; +} + +.userPictureBorder { + opacity: 30%; + width: 370px; + background: #211D31; + -webkit-mask-image: url(./assets/bubble-3.svg); + mask-image: url(./assets/bubble-3.svg); + top: 0.3rem; + left: 0.2rem; + position: absolute; } + +/* ------------ Github projects */ + +/* main container */ + #projects { display: flex; flex-direction: column; - /* background-color: cornsilk; */ align-items: center; + margin-top: 2rem; } +/* project cards */ + .project { - min-width: 500px; - max-width: 900px; - margin: 1rem; + box-sizing: border-box; + width: 100%; + margin: 0.4rem; padding: 1rem; border-radius: 3px; background: rgb(255,255,255); - background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(220,220,245,1) 35%, rgba(255,223,206,1) 100%); + /* background: linear-gradient(90deg, rgba(255,255,255,1) 0%, rgba(220,220,245,1) 35%, rgba(255,223,206,1) 100%); */ box-shadow: 10px 10px 2px 1px rgba(48, 48, 57, 0.089); + display: flex; + flex-wrap: wrap; + flex: 1; + gap: 1rem; +} +/* ----------- text containers */ + +.left { + + min-width: 240px; + font-size: 1rem; +} +.right { + + min-width: 240px; + font-size: 0.8rem; } + + .repoName { -font-size: 1.3rem; +font-size: 1.4rem; padding-bottom: 1rem; +font-weight: 700; } .repoUrl { @@ -95,27 +151,112 @@ color: rgb(255, 94, 0); width: 20px; } + + +/* ------------- PROGRESS BUBBLE */ + #chart { - padding: 2rem; - max-width: 600px; - max-height: 600px; + + /* max-width: 500px; */ + background: rgb(255, 255, 255); + /* padding-bottom: 2rem; */ + align-items: flex-start; + justify-content: flex-start; + transform: rotate(-45deg); +} + +.chartmask { + + background: lawngreen; + position: absolute; + margin-left: 50%; + margin-top: 300px; + -webkit-mask-image: url(./assets/bubble-3.svg); + mask-image: url(./assets/bubble-3.svg); + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + width: 170px; + transform: rotate(45deg); +} + + +.computer { + width: 80%; + max-width: 500px; + margin-left: 10%; + margin-right: 10%; + position: relative; + align-self: flex-end; + padding-bottom: 4rem; margin: auto; } +.svg { + /* display: inline-block; */ + width: 100%; + align-self: flex-end; + padding-bottom: 4rem; +} +.gif { + /* width: 100%; */ + -webkit-mask-image: url(./assets/tvmask.svg); + mask-image: url(./assets/tvmask.svg); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100%; + mask-size: 100%; + +} + +.footer { + position: relative; + width: 100%; + margin-top: 4rem; +} + +.square2 { + height: 240px; + width: 120%; + background-color: #211D31; + position:absolute; + bottom: 0; + float: bottom; +} + + +/* +padding-left: 2rem; + padding-top: 2rem; + padding-bottom: 10rem; + padding-right: 2rem; */ + @media (min-width:340px) and (max-width:1038px) { .project { - width: 90%; + justify-content: center; + } + + .left { + width: 100%; + } + +.right { + width: 100%; + + +} } -} + @media (min-width:1039px) and (max-width:1800px) { #projects { flex-direction: row; flex-wrap: wrap; gap: 1rem; + width: 100%; + padding: 0; } From e0742e4c70aabed1ad0ccaf390ccebe95c714a1d Mon Sep 17 00:00:00 2001 From: Dorothea-B Date: Mon, 28 Feb 2022 08:52:01 +0100 Subject: [PATCH 07/13] fixing responsiveness bugs --- code/index.html | 4 +- code/script.js | 16 +++++-- code/style.css | 111 ++++++++++++++++++++++++++++++++++++------------ 3 files changed, 98 insertions(+), 33 deletions(-) diff --git a/code/index.html b/code/index.html index 35134fbf..22be6da4 100644 --- a/code/index.html +++ b/code/index.html @@ -28,7 +28,7 @@
    -
    +
    @@ -40,7 +40,7 @@