{
  "version": 3,
  "sources": ["../../node_modules/htmx.org/dist/htmx.min.js", "../../jssrc/copytext.js", "../../jssrc/tables.js", "../../node_modules/alpinejs/dist/module.esm.js", "../../node_modules/@alpinejs/mask/dist/module.esm.js", "../../jssrc/setupAlpine.js", "../../jssrc/setupHtmx.js", "../../jssrc/htmx-toast.js", "../../jssrc/sidebarcards.js", "../../node_modules/@kurkle/color/dist/color.esm.js", "../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../node_modules/chart.js/src/core/core.ticks.js", "../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../node_modules/chart.js/src/core/core.defaults.js", "../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../node_modules/chart.js/src/core/core.animator.js", "../../node_modules/chart.js/src/core/core.animation.js", "../../node_modules/chart.js/src/core/core.animations.js", "../../node_modules/chart.js/src/core/core.datasetController.js", "../../node_modules/chart.js/src/controllers/controller.bar.js", "../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../node_modules/chart.js/src/controllers/controller.line.js", "../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../node_modules/chart.js/src/controllers/controller.pie.js", "../../node_modules/chart.js/src/controllers/controller.radar.js", "../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../node_modules/chart.js/src/core/core.adapters.ts", "../../node_modules/chart.js/src/core/core.interaction.js", "../../node_modules/chart.js/src/core/core.layouts.js", "../../node_modules/chart.js/src/platform/platform.base.js", "../../node_modules/chart.js/src/platform/platform.basic.js", "../../node_modules/chart.js/src/platform/platform.dom.js", "../../node_modules/chart.js/src/platform/index.js", "../../node_modules/chart.js/src/core/core.element.ts", "../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../node_modules/chart.js/src/core/core.scale.js", "../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../node_modules/chart.js/src/core/core.registry.js", "../../node_modules/chart.js/src/core/core.plugins.js", "../../node_modules/chart.js/src/core/core.config.js", "../../node_modules/chart.js/src/core/core.controller.js", "../../node_modules/chart.js/src/elements/element.arc.ts", "../../node_modules/chart.js/src/elements/element.line.js", "../../node_modules/chart.js/src/elements/element.point.ts", "../../node_modules/chart.js/src/elements/element.bar.js", "../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../node_modules/chart.js/src/plugins/plugin.title.js", "../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../node_modules/chart.js/src/scales/scale.category.js", "../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../node_modules/chart.js/src/scales/scale.linear.js", "../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../node_modules/chart.js/src/scales/scale.time.js", "../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../node_modules/chart.js/src/index.ts", "../../node_modules/chart.js/auto/auto.js", "../../jssrc/charts-html-legend.js", "../../jssrc/charts.js", "../../jssrc/charts-dashboard.js", "../../jssrc/charts-charity-overview.js", "../../jssrc/charts-charity-finances.js", "../../jssrc/charts-checks-finances.js", "../../jssrc/main.js"],
  "sourcesContent": ["(function(e,t){if(typeof define===\"function\"&&define.amd){define([],t)}else if(typeof module===\"object\"&&module.exports){module.exports=t()}else{e.htmx=e.htmx||t()}})(typeof self!==\"undefined\"?self:this,function(){return function(){\"use strict\";var Q={onLoad:F,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(e,t){var r=dr(e,t||\"post\");return r.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Br,logAll:V,logNone:j,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:\"innerHTML\",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:\"htmx-indicator\",requestClass:\"htmx-request\",addedClass:\"htmx-added\",settlingClass:\"htmx-settling\",swappingClass:\"htmx-swapping\",allowEval:true,allowScriptTags:true,inlineScriptNonce:\"\",attributesToSettle:[\"class\",\"style\",\"width\",\"height\"],withCredentials:false,timeout:0,wsReconnectDelay:\"full-jitter\",wsBinaryType:\"blob\",disableSelector:\"[hx-disable], [data-hx-disable]\",useTemplateFragments:false,scrollBehavior:\"smooth\",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:[\"get\"],selfRequestsOnly:false,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){var t=new WebSocket(e,[]);t.binaryType=Q.config.wsBinaryType;return t},version:\"1.9.10\"};var r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R};var w=[\"get\",\"post\",\"put\",\"delete\",\"patch\"];var i=w.map(function(e){return\"[hx-\"+e+\"], [data-hx-\"+e+\"]\"}).join(\", \");var S=e(\"head\"),q=e(\"title\"),H=e(\"svg\",true);function e(e,t=false){return new RegExp(`<${e}(\\\\s[^>]*>|>)([\\\\s\\\\S]*?)<\\\\/${e}>`,t?\"gim\":\"im\")}function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)==\"ms\"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)==\"s\"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)==\"m\"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute(\"data-\"+t))}function te(e,t){return ee(e,t)||ee(e,\"data-\"+t)}function u(e){return e.parentElement}function re(){return document}function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}function L(e,t,r){var n=te(t,r);var i=te(t,\"hx-disinherit\");if(e!==t&&i&&(i===\"*\"||i.split(\" \").indexOf(r)>=0)){return\"unset\"}else{return n}}function ne(t,r){var n=null;c(t,function(e){return n=L(t,e,r)});if(n!==\"unset\"){return n}}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function A(e){var t=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return\"\"}}function a(e,t){var r=new DOMParser;var n=r.parseFromString(e,\"text/html\");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=re().createDocumentFragment()}return i}function N(e){return/<body/.test(e)}function l(e){var t=!N(e);var r=A(e);var n=e;if(r===\"head\"){n=n.replace(S,\"\")}if(Q.config.useTemplateFragments&&t){var i=a(\"<body><template>\"+n+\"</template></body>\",0);return i.querySelector(\"template\").content}switch(r){case\"thead\":case\"tbody\":case\"tfoot\":case\"colgroup\":case\"caption\":return a(\"<table>\"+n+\"</table>\",1);case\"col\":return a(\"<table><colgroup>\"+n+\"</colgroup></table>\",2);case\"tr\":return a(\"<table><tbody>\"+n+\"</tbody></table>\",2);case\"td\":case\"th\":return a(\"<table><tbody><tr>\"+n+\"</tr></tbody></table>\",3);case\"script\":case\"style\":return a(\"<div>\"+n+\"</div>\",1);default:return a(n,0)}}function ie(e){if(e){e()}}function I(e,t){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}function k(e){return I(e,\"Function\")}function P(e){return I(e,\"Object\")}function ae(e){var t=\"htmx-internal-data\";var r=e[t];if(!r){r=e[t]={}}return r}function M(e){var t=[];if(e){for(var r=0;r<e.length;r++){t.push(e[r])}}return t}function oe(e,t){if(e){for(var r=0;r<e.length;r++){t(e[r])}}}function X(e){var t=e.getBoundingClientRect();var r=t.top;var n=t.bottom;return r<window.innerHeight&&n>=0}function se(e){if(e.getRootNode&&e.getRootNode()instanceof window.ShadowRoot){return re().body.contains(e.getRootNode().host)}else{return re().body.contains(e)}}function D(e){return e.trim().split(/\\s+/)}function le(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function E(e){try{return JSON.parse(e)}catch(e){b(e);return null}}function U(){var e=\"htmx:localStorageTest\";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function B(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\\/$/.test(t)){t=t.replace(/\\/+$/,\"\")}return t}catch(e){return t}}function t(e){return Tr(re().body,function(){return eval(e)})}function F(t){var e=Q.on(\"htmx:load\",function(e){t(e.detail.elt)});return e}function V(){Q.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function j(){Q.logger=null}function C(e,t){if(t){return e.querySelector(t)}else{return C(re(),e)}}function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(re(),e)}}function _(e,t){e=g(e);if(t){setTimeout(function(){_(e);e=null},t)}else{e.parentElement.removeChild(e)}}function z(e,t,r){e=g(e);if(r){setTimeout(function(){z(e,t);e=null},r)}else{e.classList&&e.classList.add(t)}}function n(e,t,r){e=g(e);if(r){setTimeout(function(){n(e,t);e=null},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute(\"class\")}}}}function $(e,t){e=g(e);e.classList.toggle(t)}function W(e,t){e=g(e);oe(e.parentElement.children,function(e){n(e,t)});z(e,t)}function v(e,t){e=g(e);if(e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&u(e));return null}}function s(e,t){return e.substring(0,t.length)===t}function G(e,t){return e.substring(e.length-t.length)===t}function J(e){var t=e.trim();if(s(t,\"<\")&&G(t,\"/>\")){return t.substring(1,t.length-2)}else{return t}}function Z(e,t){if(t.indexOf(\"closest \")===0){return[v(e,J(t.substr(8)))]}else if(t.indexOf(\"find \")===0){return[C(e,J(t.substr(5)))]}else if(t===\"next\"){return[e.nextElementSibling]}else if(t.indexOf(\"next \")===0){return[K(e,J(t.substr(5)))]}else if(t===\"previous\"){return[e.previousElementSibling]}else if(t.indexOf(\"previous \")===0){return[Y(e,J(t.substr(9)))]}else if(t===\"document\"){return[document]}else if(t===\"window\"){return[window]}else if(t===\"body\"){return[document.body]}else{return re().querySelectorAll(J(t))}}var K=function(e,t){var r=re().querySelectorAll(t);for(var n=0;n<r.length;n++){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_PRECEDING){return i}}};var Y=function(e,t){var r=re().querySelectorAll(t);for(var n=r.length-1;n>=0;n--){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return i}}};function ue(e,t){if(t){return Z(e,t)[0]}else{return Z(re().body,e)[0]}}function g(e){if(I(e,\"String\")){return C(e)}else{return e}}function ve(e,t,r){if(k(t)){return{target:re().body,event:e,listener:t}}else{return{target:g(e),event:t,listener:r}}}function de(t,r,n){jr(function(){var e=ve(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=k(r);return e?r:n}function ge(t,r,n){jr(function(){var e=ve(t,r,n);e.target.removeEventListener(e.event,e.listener)});return k(r)?r:n}var me=re().createElement(\"output\");function pe(e,t){var r=ne(e,t);if(r){if(r===\"this\"){return[xe(e,t)]}else{var n=Z(e,r);if(n.length===0){b('The selector \"'+r+'\" on '+t+\" returned no matches!\");return[me]}else{return n}}}}function xe(e,t){return c(e,function(e){return te(e,t)!=null})}function ye(e){var t=ne(e,\"hx-target\");if(t){if(t===\"this\"){return xe(e,\"hx-target\")}else{return ue(e,t)}}else{var r=ae(e);if(r.boosted){return re().body}else{return e}}}function be(e){var t=Q.config.attributesToSettle;for(var r=0;r<t.length;r++){if(e===t[r]){return true}}return false}function we(t,r){oe(t.attributes,function(e){if(!r.hasAttribute(e.name)&&be(e.name)){t.removeAttribute(e.name)}});oe(r.attributes,function(e){if(be(e.name)){t.setAttribute(e.name,e.value)}})}function Se(e,t){var r=Fr(t);for(var n=0;n<r.length;n++){var i=r[n];try{if(i.isInlineSwap(e)){return true}}catch(e){b(e)}}return e===\"outerHTML\"}function Ee(e,i,a){var t=\"#\"+ee(i,\"id\");var o=\"outerHTML\";if(e===\"true\"){}else if(e.indexOf(\":\")>0){o=e.substr(0,e.indexOf(\":\"));t=e.substr(e.indexOf(\":\")+1,e.length)}else{o=e}var r=re().querySelectorAll(t);if(r){oe(r,function(e){var t;var r=i.cloneNode(true);t=re().createDocumentFragment();t.appendChild(r);if(!Se(o,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!ce(e,\"htmx:oobBeforeSwap\",n))return;e=n.target;if(n[\"shouldSwap\"]){Fe(o,e,e,t,a)}oe(a.elts,function(e){ce(e,\"htmx:oobAfterSwap\",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);fe(re().body,\"htmx:oobErrorNoTarget\",{content:i})}return e}function Ce(e,t,r){var n=ne(e,\"hx-select-oob\");if(n){var i=n.split(\",\");for(var a=0;a<i.length;a++){var o=i[a].split(\":\",2);var s=o[0].trim();if(s.indexOf(\"#\")===0){s=s.substring(1)}var l=o[1]||\"true\";var u=t.querySelector(\"#\"+s);if(u){Ee(l,u,r)}}}oe(f(t,\"[hx-swap-oob], [data-hx-swap-oob]\"),function(e){var t=te(e,\"hx-swap-oob\");if(t!=null){Ee(t,e,r)}})}function Re(e){oe(f(e,\"[hx-preserve], [data-hx-preserve]\"),function(e){var t=te(e,\"id\");var r=re().getElementById(t);if(r!=null){e.parentNode.replaceChild(r,e)}})}function Te(o,e,s){oe(e.querySelectorAll(\"[id]\"),function(e){var t=ee(e,\"id\");if(t&&t.length>0){var r=t.replace(\"'\",\"\\\\'\");var n=e.tagName.replace(\":\",\"\\\\:\");var i=o.querySelector(n+\"[id='\"+r+\"']\");if(i&&i!==o){var a=e.cloneNode();we(e,i);s.tasks.push(function(){we(e,a)})}}})}function Oe(e){return function(){n(e,Q.config.addedClass);zt(e);Nt(e);qe(e);ce(e,\"htmx:load\")}}function qe(e){var t=\"[autofocus]\";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function m(e,t,r,n){Te(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;z(i,Q.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Oe(i))}}}function He(e,t){var r=0;while(r<e.length){t=(t<<5)-t+e.charCodeAt(r++)|0}return t}function Le(e){var t=0;if(e.attributes){for(var r=0;r<e.attributes.length;r++){var n=e.attributes[r];if(n.value){t=He(n.name,t);t=He(n.value,t)}}}return t}function Ae(e){var t=ae(e);if(t.onHandlers){for(var r=0;r<t.onHandlers.length;r++){const n=t.onHandlers[r];e.removeEventListener(n.event,n.listener)}delete t.onHandlers}}function Ne(e){var t=ae(e);if(t.timeout){clearTimeout(t.timeout)}if(t.webSocket){t.webSocket.close()}if(t.sseEventSource){t.sseEventSource.close()}if(t.listenerInfos){oe(t.listenerInfos,function(e){if(e.on){e.on.removeEventListener(e.trigger,e.listener)}})}Ae(e);oe(Object.keys(t),function(e){delete t[e]})}function p(e){ce(e,\"htmx:beforeCleanupElement\");Ne(e);if(e.children){oe(e.children,function(e){p(e)})}}function Ie(t,e,r){if(t.tagName===\"BODY\"){return Ue(t,e,r)}else{var n;var i=t.previousSibling;m(u(t),t,e,r);if(i==null){n=u(t).firstChild}else{n=i.nextSibling}r.elts=r.elts.filter(function(e){return e!=t});while(n&&n!==t){if(n.nodeType===Node.ELEMENT_NODE){r.elts.push(n)}n=n.nextElementSibling}p(t);u(t).removeChild(t)}}function ke(e,t,r){return m(e,e.firstChild,t,r)}function Pe(e,t,r){return m(u(e),e,t,r)}function Me(e,t,r){return m(e,null,t,r)}function Xe(e,t,r){return m(u(e),e.nextSibling,t,r)}function De(e,t,r){p(e);return u(e).removeChild(e)}function Ue(e,t,r){var n=e.firstChild;m(e,n,t,r);if(n){while(n.nextSibling){p(n.nextSibling);e.removeChild(n.nextSibling)}p(n);e.removeChild(n)}}function Be(e,t,r){var n=r||ne(e,\"hx-select\");if(n){var i=re().createDocumentFragment();oe(t.querySelectorAll(n),function(e){i.appendChild(e)});t=i}return t}function Fe(e,t,r,n,i){switch(e){case\"none\":return;case\"outerHTML\":Ie(r,n,i);return;case\"afterbegin\":ke(r,n,i);return;case\"beforebegin\":Pe(r,n,i);return;case\"beforeend\":Me(r,n,i);return;case\"afterend\":Xe(r,n,i);return;case\"delete\":De(r,n,i);return;default:var a=Fr(t);for(var o=0;o<a.length;o++){var s=a[o];try{var l=s.handleSwap(e,r,n,i);if(l){if(typeof l.length!==\"undefined\"){for(var u=0;u<l.length;u++){var f=l[u];if(f.nodeType!==Node.TEXT_NODE&&f.nodeType!==Node.COMMENT_NODE){i.tasks.push(Oe(f))}}}return}}catch(e){b(e)}}if(e===\"innerHTML\"){Ue(r,n,i)}else{Fe(Q.config.defaultSwapStyle,t,r,n,i)}}}function Ve(e){if(e.indexOf(\"<title\")>-1){var t=e.replace(H,\"\");var r=t.match(q);if(r){return r[2]}}}function je(e,t,r,n,i,a){i.title=Ve(n);var o=l(n);if(o){Ce(r,o,i);o=Be(r,o,a);Re(o);return Fe(e,r,t,o,i)}}function _e(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf(\"{\")===0){var i=E(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!P(o)){o={value:o}}ce(r,a,o)}}}else{var s=n.split(\",\");for(var l=0;l<s.length;l++){ce(r,s[l].trim(),[])}}}var ze=/\\s/;var x=/[\\s,]/;var $e=/[_$a-zA-Z]/;var We=/[_$a-zA-Z0-9]/;var Ge=['\"',\"'\",\"/\"];var Je=/[^\\s]/;var Ze=/[{(]/;var Ke=/[})]/;function Ye(e){var t=[];var r=0;while(r<e.length){if($e.exec(e.charAt(r))){var n=r;while(We.exec(e.charAt(r+1))){r++}t.push(e.substr(n,r-n+1))}else if(Ge.indexOf(e.charAt(r))!==-1){var i=e.charAt(r);var n=r;r++;while(r<e.length&&e.charAt(r)!==i){if(e.charAt(r)===\"\\\\\"){r++}r++}t.push(e.substr(n,r-n+1))}else{var a=e.charAt(r);t.push(a)}r++}return t}function Qe(e,t,r){return $e.exec(e.charAt(0))&&e!==\"true\"&&e!==\"false\"&&e!==\"this\"&&e!==r&&t!==\".\"}function et(e,t,r){if(t[0]===\"[\"){t.shift();var n=1;var i=\" return (function(\"+r+\"){ return (\";var a=null;while(t.length>0){var o=t[0];if(o===\"]\"){n--;if(n===0){if(a===null){i=i+\"true\"}t.shift();i+=\")})\";try{var s=Tr(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){fe(re().body,\"htmx:syntax:error\",{error:e,source:i});return null}}}else if(o===\"[\"){n++}if(Qe(o,a,r)){i+=\"((\"+r+\".\"+o+\") ? (\"+r+\".\"+o+\") : (window.\"+o+\"))\"}else{i=i+o}a=t.shift()}}}function y(e,t){var r=\"\";while(e.length>0&&!t.test(e[0])){r+=e.shift()}return r}function tt(e){var t;if(e.length>0&&Ze.test(e[0])){e.shift();t=y(e,Ke).trim();e.shift()}else{t=y(e,x)}return t}var rt=\"input, textarea, select\";function nt(e,t,r){var n=[];var i=Ye(t);do{y(i,Je);var a=i.length;var o=y(i,/[,\\[\\s]/);if(o!==\"\"){if(o===\"every\"){var s={trigger:\"every\"};y(i,Je);s.pollInterval=d(y(i,/[,\\[\\s]/));y(i,Je);var l=et(e,i,\"event\");if(l){s.eventFilter=l}n.push(s)}else if(o.indexOf(\"sse:\")===0){n.push({trigger:\"sse\",sseEvent:o.substr(4)})}else{var u={trigger:o};var l=et(e,i,\"event\");if(l){u.eventFilter=l}while(i.length>0&&i[0]!==\",\"){y(i,Je);var f=i.shift();if(f===\"changed\"){u.changed=true}else if(f===\"once\"){u.once=true}else if(f===\"consume\"){u.consume=true}else if(f===\"delay\"&&i[0]===\":\"){i.shift();u.delay=d(y(i,x))}else if(f===\"from\"&&i[0]===\":\"){i.shift();if(Ze.test(i[0])){var c=tt(i)}else{var c=y(i,x);if(c===\"closest\"||c===\"find\"||c===\"next\"||c===\"previous\"){i.shift();var h=tt(i);if(h.length>0){c+=\" \"+h}}}u.from=c}else if(f===\"target\"&&i[0]===\":\"){i.shift();u.target=tt(i)}else if(f===\"throttle\"&&i[0]===\":\"){i.shift();u.throttle=d(y(i,x))}else if(f===\"queue\"&&i[0]===\":\"){i.shift();u.queue=y(i,x)}else if(f===\"root\"&&i[0]===\":\"){i.shift();u[f]=tt(i)}else if(f===\"threshold\"&&i[0]===\":\"){i.shift();u[f]=y(i,x)}else{fe(e,\"htmx:syntax:error\",{token:i.shift()})}}n.push(u)}}if(i.length===a){fe(e,\"htmx:syntax:error\",{token:i.shift()})}y(i,Je)}while(i[0]===\",\"&&i.shift());if(r){r[t]=n}return n}function it(e){var t=te(e,\"hx-trigger\");var r=[];if(t){var n=Q.config.triggerSpecsCache;r=n&&n[t]||nt(e,t,n)}if(r.length>0){return r}else if(h(e,\"form\")){return[{trigger:\"submit\"}]}else if(h(e,'input[type=\"button\"], input[type=\"submit\"]')){return[{trigger:\"click\"}]}else if(h(e,rt)){return[{trigger:\"change\"}]}else{return[{trigger:\"click\"}]}}function at(e){ae(e).cancelled=true}function ot(e,t,r){var n=ae(e);n.timeout=setTimeout(function(){if(se(e)&&n.cancelled!==true){if(!ct(r,e,Wt(\"hx:poll:trigger\",{triggerSpec:r,target:e}))){t(e)}ot(e,t,r)}},r.pollInterval)}function st(e){return location.hostname===e.hostname&&ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")!==0}function lt(t,r,e){if(t.tagName===\"A\"&&st(t)&&(t.target===\"\"||t.target===\"_self\")||t.tagName===\"FORM\"){r.boosted=true;var n,i;if(t.tagName===\"A\"){n=\"get\";i=ee(t,\"href\")}else{var a=ee(t,\"method\");n=a?a.toLowerCase():\"get\";if(n===\"get\"){}i=ee(t,\"action\")}e.forEach(function(e){ht(t,function(e,t){if(v(e,Q.config.disableSelector)){p(e);return}he(n,i,e,t)},r,e,true)})}}function ut(e,t){if(e.type===\"submit\"||e.type===\"click\"){if(t.tagName===\"FORM\"){return true}if(h(t,'input[type=\"submit\"], button')&&v(t,\"form\")!==null){return true}if(t.tagName===\"A\"&&t.href&&(t.getAttribute(\"href\")===\"#\"||t.getAttribute(\"href\").indexOf(\"#\")!==0)){return true}}return false}function ft(e,t){return ae(e).boosted&&e.tagName===\"A\"&&t.type===\"click\"&&(t.ctrlKey||t.metaKey)}function ct(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==true}catch(e){fe(re().body,\"htmx:eventFilter:error\",{error:e,source:n.source});return true}}return false}function ht(a,o,e,s,l){var u=ae(a);var t;if(s.from){t=Z(a,s.from)}else{t=[a]}if(s.changed){t.forEach(function(e){var t=ae(e);t.lastValue=e.value})}oe(t,function(n){var i=function(e){if(!se(a)){n.removeEventListener(s.trigger,i);return}if(ft(a,e)){return}if(l||ut(e,a)){e.preventDefault()}if(ct(s,a,e)){return}var t=ae(e);t.triggerSpec=s;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(a)<0){t.handledFor.push(a);if(s.consume){e.stopPropagation()}if(s.target&&e.target){if(!h(e.target,s.target)){return}}if(s.once){if(u.triggeredOnce){return}else{u.triggeredOnce=true}}if(s.changed){var r=ae(n);if(r.lastValue===n.value){return}r.lastValue=n.value}if(u.delayed){clearTimeout(u.delayed)}if(u.throttle){return}if(s.throttle>0){if(!u.throttle){o(a,e);u.throttle=setTimeout(function(){u.throttle=null},s.throttle)}}else if(s.delay>0){u.delayed=setTimeout(function(){o(a,e)},s.delay)}else{ce(a,\"htmx:trigger\");o(a,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:s.trigger,listener:i,on:n});n.addEventListener(s.trigger,i)})}var vt=false;var dt=null;function gt(){if(!dt){dt=function(){vt=true};window.addEventListener(\"scroll\",dt);setInterval(function(){if(vt){vt=false;oe(re().querySelectorAll(\"[hx-trigger='revealed'],[data-hx-trigger='revealed']\"),function(e){mt(e)})}},200)}}function mt(t){if(!o(t,\"data-hx-revealed\")&&X(t)){t.setAttribute(\"data-hx-revealed\",\"true\");var e=ae(t);if(e.initHash){ce(t,\"revealed\")}else{t.addEventListener(\"htmx:afterProcessNode\",function(e){ce(t,\"revealed\")},{once:true})}}}function pt(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]===\"connect\"){xt(e,a[1],0)}if(a[0]===\"send\"){bt(e)}}}function xt(s,r,n){if(!se(s)){return}if(r.indexOf(\"/\")==0){var e=location.hostname+(location.port?\":\"+location.port:\"\");if(location.protocol==\"https:\"){r=\"wss://\"+e+r}else if(location.protocol==\"http:\"){r=\"ws://\"+e+r}}var t=Q.createWebSocket(r);t.onerror=function(e){fe(s,\"htmx:wsError\",{error:e,socket:t});yt(s)};t.onclose=function(e){if([1006,1012,1013].indexOf(e.code)>=0){var t=wt(n);setTimeout(function(){xt(s,r,n+1)},t)}};t.onopen=function(e){n=0};ae(s).webSocket=t;t.addEventListener(\"message\",function(e){if(yt(s)){return}var t=e.data;R(s,function(e){t=e.transformResponse(t,null,s)});var r=T(s);var n=l(t);var i=M(n.children);for(var a=0;a<i.length;a++){var o=i[a];Ee(te(o,\"hx-swap-oob\")||\"true\",o,r)}nr(r.tasks)})}function yt(e){if(!se(e)){ae(e).webSocket.close();return true}}function bt(u){var f=c(u,function(e){return ae(e).webSocket!=null});if(f){u.addEventListener(it(u)[0].trigger,function(e){var t=ae(f).webSocket;var r=xr(u,f);var n=dr(u,\"post\");var i=n.errors;var a=n.values;var o=Hr(u);var s=le(a,o);var l=yr(s,u);l[\"HEADERS\"]=r;if(i&&i.length>0){ce(u,\"htmx:validation:halted\",i);return}t.send(JSON.stringify(l));if(ut(e,u)){e.preventDefault()}})}else{fe(u,\"htmx:noWebSocketSourceError\")}}function wt(e){var t=Q.config.wsReconnectDelay;if(typeof t===\"function\"){return t(e)}if(t===\"full-jitter\"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}b('htmx.config.wsReconnectDelay must either be a function or the string \"full-jitter\"')}function St(e,t,r){var n=D(r);for(var i=0;i<n.length;i++){var a=n[i].split(/:(.+)/);if(a[0]===\"connect\"){Et(e,a[1])}if(a[0]===\"swap\"){Ct(e,a[1])}}}function Et(t,e){var r=Q.createEventSource(e);r.onerror=function(e){fe(t,\"htmx:sseError\",{error:e,source:r});Tt(t)};ae(t).sseEventSource=r}function Ct(a,o){var s=c(a,Ot);if(s){var l=ae(s).sseEventSource;var u=function(e){if(Tt(s)){return}if(!se(a)){l.removeEventListener(o,u);return}var t=e.data;R(a,function(e){t=e.transformResponse(t,null,a)});var r=wr(a);var n=ye(a);var i=T(a);je(r.swapStyle,n,a,t,i);nr(i.tasks);ce(a,\"htmx:sseMessage\",e)};ae(a).sseListener=u;l.addEventListener(o,u)}else{fe(a,\"htmx:noSSESourceError\")}}function Rt(e,t,r){var n=c(e,Ot);if(n){var i=ae(n).sseEventSource;var a=function(){if(!Tt(n)){if(se(e)){t(e)}else{i.removeEventListener(r,a)}}};ae(e).sseListener=a;i.addEventListener(r,a)}else{fe(e,\"htmx:noSSESourceError\")}}function Tt(e){if(!se(e)){ae(e).sseEventSource.close();return true}}function Ot(e){return ae(e).sseEventSource!=null}function qt(e,t,r,n){var i=function(){if(!r.loaded){r.loaded=true;t(e)}};if(n>0){setTimeout(i,n)}else{i()}}function Ht(t,i,e){var a=false;oe(w,function(r){if(o(t,\"hx-\"+r)){var n=te(t,\"hx-\"+r);a=true;i.path=n;i.verb=r;e.forEach(function(e){Lt(t,e,i,function(e,t){if(v(e,Q.config.disableSelector)){p(e);return}he(r,n,e,t)})})}});return a}function Lt(n,e,t,r){if(e.sseEvent){Rt(n,r,e.sseEvent)}else if(e.trigger===\"revealed\"){gt();ht(n,r,t,e);mt(n)}else if(e.trigger===\"intersect\"){var i={};if(e.root){i.root=ue(n,e.root)}if(e.threshold){i.threshold=parseFloat(e.threshold)}var a=new IntersectionObserver(function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.isIntersecting){ce(n,\"intersect\");break}}},i);a.observe(n);ht(n,r,t,e)}else if(e.trigger===\"load\"){if(!ct(e,n,Wt(\"load\",{elt:n}))){qt(n,r,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ot(n,r,e)}else{ht(n,r,t,e)}}function At(e){if(Q.config.allowScriptTags&&(e.type===\"text/javascript\"||e.type===\"module\"||e.type===\"\")){var t=re().createElement(\"script\");oe(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}var r=e.parentElement;try{r.insertBefore(t,e)}catch(e){b(e)}finally{if(e.parentElement){e.parentElement.removeChild(e)}}}}function Nt(e){if(h(e,\"script\")){At(e)}oe(f(e,\"script\"),function(e){At(e)})}function It(e){var t=e.attributes;for(var r=0;r<t.length;r++){var n=t[r].name;if(s(n,\"hx-on:\")||s(n,\"data-hx-on:\")||s(n,\"hx-on-\")||s(n,\"data-hx-on-\")){return true}}return false}function kt(e){var t=null;var r=[];if(It(e)){r.push(e)}if(document.evaluate){var n=document.evaluate('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or'+' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]',e);while(t=n.iterateNext())r.push(t)}else{var i=e.getElementsByTagName(\"*\");for(var a=0;a<i.length;a++){if(It(i[a])){r.push(i[a])}}}return r}function Pt(e){if(e.querySelectorAll){var t=\", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]\";var r=e.querySelectorAll(i+t+\", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws],\"+\" [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]\");return r}else{return[]}}function Mt(e){var t=v(e.target,\"button, input[type='submit']\");var r=Dt(e);if(r){r.lastButtonClicked=t}}function Xt(e){var t=Dt(e);if(t){t.lastButtonClicked=null}}function Dt(e){var t=v(e.target,\"button, input[type='submit']\");if(!t){return}var r=g(\"#\"+ee(t,\"form\"))||v(t,\"form\");if(!r){return}return ae(r)}function Ut(e){e.addEventListener(\"click\",Mt);e.addEventListener(\"focusin\",Mt);e.addEventListener(\"focusout\",Xt)}function Bt(e){var t=Ye(e);var r=0;for(var n=0;n<t.length;n++){const i=t[n];if(i===\"{\"){r++}else if(i===\"}\"){r--}}return r}function Ft(t,e,r){var n=ae(t);if(!Array.isArray(n.onHandlers)){n.onHandlers=[]}var i;var a=function(e){return Tr(t,function(){if(!i){i=new Function(\"event\",r)}i.call(t,e)})};t.addEventListener(e,a);n.onHandlers.push({event:e,listener:a})}function Vt(e){var t=te(e,\"hx-on\");if(t){var r={};var n=t.split(\"\\n\");var i=null;var a=0;while(n.length>0){var o=n.shift();var s=o.match(/^\\s*([a-zA-Z:\\-\\.]+:)(.*)/);if(a===0&&s){o.split(\":\");i=s[1].slice(0,-1);r[i]=s[2]}else{r[i]+=o}a+=Bt(o)}for(var l in r){Ft(e,l,r[l])}}}function jt(e){Ae(e);for(var t=0;t<e.attributes.length;t++){var r=e.attributes[t].name;var n=e.attributes[t].value;if(s(r,\"hx-on\")||s(r,\"data-hx-on\")){var i=r.indexOf(\"-on\")+3;var a=r.slice(i,i+1);if(a===\"-\"||a===\":\"){var o=r.slice(i+1);if(s(o,\":\")){o=\"htmx\"+o}else if(s(o,\"-\")){o=\"htmx:\"+o.slice(1)}else if(s(o,\"htmx-\")){o=\"htmx:\"+o.slice(5)}Ft(e,o,n)}}}}function _t(t){if(v(t,Q.config.disableSelector)){p(t);return}var r=ae(t);if(r.initHash!==Le(t)){Ne(t);r.initHash=Le(t);Vt(t);ce(t,\"htmx:beforeProcessNode\");if(t.value){r.lastValue=t.value}var e=it(t);var n=Ht(t,r,e);if(!n){if(ne(t,\"hx-boost\")===\"true\"){lt(t,r,e)}else if(o(t,\"hx-trigger\")){e.forEach(function(e){Lt(t,e,r,function(){})})}}if(t.tagName===\"FORM\"||ee(t,\"type\")===\"submit\"&&o(t,\"form\")){Ut(t)}var i=te(t,\"hx-sse\");if(i){St(t,r,i)}var a=te(t,\"hx-ws\");if(a){pt(t,r,a)}ce(t,\"htmx:afterProcessNode\")}}function zt(e){e=g(e);if(v(e,Q.config.disableSelector)){p(e);return}_t(e);oe(Pt(e),function(e){_t(e)});oe(kt(e),jt)}function $t(e){return e.replace(/([a-z0-9])([A-Z])/g,\"$1-$2\").toLowerCase()}function Wt(e,t){var r;if(window.CustomEvent&&typeof window.CustomEvent===\"function\"){r=new CustomEvent(e,{bubbles:true,cancelable:true,detail:t})}else{r=re().createEvent(\"CustomEvent\");r.initCustomEvent(e,true,true,t)}return r}function fe(e,t,r){ce(e,t,le({error:t},r))}function Gt(e){return e===\"htmx:afterProcessNode\"}function R(e,t){oe(Fr(e),function(e){try{t(e)}catch(e){b(e)}})}function b(e){if(console.error){console.error(e)}else if(console.log){console.log(\"ERROR: \",e)}}function ce(e,t,r){e=g(e);if(r==null){r={}}r[\"elt\"]=e;var n=Wt(t,r);if(Q.logger&&!Gt(t)){Q.logger(e,t,r)}if(r.error){b(r.error);ce(e,\"htmx:error\",{errorInfo:r})}var i=e.dispatchEvent(n);var a=$t(t);if(i&&a!==t){var o=Wt(a,n.detail);i=i&&e.dispatchEvent(o)}R(e,function(e){i=i&&(e.onEvent(t,n)!==false&&!n.defaultPrevented)});return i}var Jt=location.pathname+location.search;function Zt(){var e=re().querySelector(\"[hx-history-elt],[data-hx-history-elt]\");return e||re().body}function Kt(e,t,r,n){if(!U()){return}if(Q.config.historyCacheSize<=0){localStorage.removeItem(\"htmx-history-cache\");return}e=B(e);var i=E(localStorage.getItem(\"htmx-history-cache\"))||[];for(var a=0;a<i.length;a++){if(i[a].url===e){i.splice(a,1);break}}var o={url:e,content:t,title:r,scroll:n};ce(re().body,\"htmx:historyItemCreated\",{item:o,cache:i});i.push(o);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem(\"htmx-history-cache\",JSON.stringify(i));break}catch(e){fe(re().body,\"htmx:historyCacheError\",{cause:e,cache:i});i.shift()}}}function Yt(e){if(!U()){return null}e=B(e);var t=E(localStorage.getItem(\"htmx-history-cache\"))||[];for(var r=0;r<t.length;r++){if(t[r].url===e){return t[r]}}return null}function Qt(e){var t=Q.config.requestClass;var r=e.cloneNode(true);oe(f(r,\".\"+t),function(e){n(e,t)});return r.innerHTML}function er(){var e=Zt();var t=Jt||location.pathname+location.search;var r;try{r=re().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')}catch(e){r=re().querySelector('[hx-history=\"false\"],[data-hx-history=\"false\"]')}if(!r){ce(re().body,\"htmx:beforeHistorySave\",{path:t,historyElt:e});Kt(t,Qt(e),re().title,window.scrollY)}if(Q.config.historyEnabled)history.replaceState({htmx:true},re().title,window.location.href)}function tr(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\\.htmx\\.cache-buster=[^&]*&?/,\"\");if(G(e,\"&\")||G(e,\"?\")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},\"\",e)}Jt=e}function rr(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},\"\",e);Jt=e}function nr(e){oe(e,function(e){e.call()})}function ir(a){var e=new XMLHttpRequest;var o={path:a,xhr:e};ce(re().body,\"htmx:historyCacheMiss\",o);e.open(\"GET\",a,true);e.setRequestHeader(\"HX-Request\",\"true\");e.setRequestHeader(\"HX-History-Restore-Request\",\"true\");e.setRequestHeader(\"HX-Current-URL\",re().location.href);e.onload=function(){if(this.status>=200&&this.status<400){ce(re().body,\"htmx:historyCacheMissLoad\",o);var e=l(this.response);e=e.querySelector(\"[hx-history-elt],[data-hx-history-elt]\")||e;var t=Zt();var r=T(t);var n=Ve(this.response);if(n){var i=C(\"title\");if(i){i.innerHTML=n}else{window.document.title=n}}Ue(t,e,r);nr(r.tasks);Jt=a;ce(re().body,\"htmx:historyRestore\",{path:a,cacheMiss:true,serverResponse:this.response})}else{fe(re().body,\"htmx:historyCacheMissLoadError\",o)}};e.send()}function ar(e){er();e=e||location.pathname+location.search;var t=Yt(e);if(t){var r=l(t.content);var n=Zt();var i=T(n);Ue(n,r,i);nr(i.tasks);document.title=t.title;setTimeout(function(){window.scrollTo(0,t.scroll)},0);Jt=e;ce(re().body,\"htmx:historyRestore\",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{ir(e)}}}function or(e){var t=pe(e,\"hx-indicator\");if(t==null){t=[e]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.classList[\"add\"].call(e.classList,Q.config.requestClass)});return t}function sr(e){var t=pe(e,\"hx-disabled-elt\");if(t==null){t=[]}oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute(\"disabled\",\"\")});return t}function lr(e,t){oe(e,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList[\"remove\"].call(e.classList,Q.config.requestClass)}});oe(t,function(e){var t=ae(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute(\"disabled\")}})}function ur(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(n.isSameNode(t)){return true}}return false}function fr(e){if(e.name===\"\"||e.name==null||e.disabled||v(e,\"fieldset[disabled]\")){return false}if(e.type===\"button\"||e.type===\"submit\"||e.tagName===\"image\"||e.tagName===\"reset\"||e.tagName===\"file\"){return false}if(e.type===\"checkbox\"||e.type===\"radio\"){return e.checked}return true}function cr(e,t,r){if(e!=null&&t!=null){var n=r[e];if(n===undefined){r[e]=t}else if(Array.isArray(n)){if(Array.isArray(t)){r[e]=n.concat(t)}else{n.push(t)}}else{if(Array.isArray(t)){r[e]=[n].concat(t)}else{r[e]=[n,t]}}}}function hr(t,r,n,e,i){if(e==null||ur(t,e)){return}else{t.push(e)}if(fr(e)){var a=ee(e,\"name\");var o=e.value;if(e.multiple&&e.tagName===\"SELECT\"){o=M(e.querySelectorAll(\"option:checked\")).map(function(e){return e.value})}if(e.files){o=M(e.files)}cr(a,o,r);if(i){vr(e,n)}}if(h(e,\"form\")){var s=e.elements;oe(s,function(e){hr(t,r,n,e,i)})}}function vr(e,t){if(e.willValidate){ce(e,\"htmx:validation:validate\");if(!e.checkValidity()){t.push({elt:e,message:e.validationMessage,validity:e.validity});ce(e,\"htmx:validation:failed\",{message:e.validationMessage,validity:e.validity})}}}function dr(e,t){var r=[];var n={};var i={};var a=[];var o=ae(e);if(o.lastButtonClicked&&!se(o.lastButtonClicked)){o.lastButtonClicked=null}var s=h(e,\"form\")&&e.noValidate!==true||te(e,\"hx-validate\")===\"true\";if(o.lastButtonClicked){s=s&&o.lastButtonClicked.formNoValidate!==true}if(t!==\"get\"){hr(r,i,a,v(e,\"form\"),s)}hr(r,n,a,e,s);if(o.lastButtonClicked||e.tagName===\"BUTTON\"||e.tagName===\"INPUT\"&&ee(e,\"type\")===\"submit\"){var l=o.lastButtonClicked||e;var u=ee(l,\"name\");cr(u,l.value,i)}var f=pe(e,\"hx-include\");oe(f,function(e){hr(r,n,a,e,s);if(!h(e,\"form\")){oe(e.querySelectorAll(rt),function(e){hr(r,n,a,e,s)})}});n=le(n,i);return{errors:a,values:n}}function gr(e,t,r){if(e!==\"\"){e+=\"&\"}if(String(r)===\"[object Object]\"){r=JSON.stringify(r)}var n=encodeURIComponent(r);e+=encodeURIComponent(t)+\"=\"+n;return e}function mr(e){var t=\"\";for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t=gr(t,r,e)})}else{t=gr(t,r,n)}}}return t}function pr(e){var t=new FormData;for(var r in e){if(e.hasOwnProperty(r)){var n=e[r];if(Array.isArray(n)){oe(n,function(e){t.append(r,e)})}else{t.append(r,n)}}}return t}function xr(e,t,r){var n={\"HX-Request\":\"true\",\"HX-Trigger\":ee(e,\"id\"),\"HX-Trigger-Name\":ee(e,\"name\"),\"HX-Target\":te(t,\"id\"),\"HX-Current-URL\":re().location.href};Rr(e,\"hx-headers\",false,n);if(r!==undefined){n[\"HX-Prompt\"]=r}if(ae(e).boosted){n[\"HX-Boosted\"]=\"true\"}return n}function yr(t,e){var r=ne(e,\"hx-params\");if(r){if(r===\"none\"){return{}}else if(r===\"*\"){return t}else if(r.indexOf(\"not \")===0){oe(r.substr(4).split(\",\"),function(e){e=e.trim();delete t[e]});return t}else{var n={};oe(r.split(\",\"),function(e){e=e.trim();n[e]=t[e]});return n}}else{return t}}function br(e){return ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")>=0}function wr(e,t){var r=t?t:ne(e,\"hx-swap\");var n={swapStyle:ae(e).boosted?\"innerHTML\":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ae(e).boosted&&!br(e)){n[\"show\"]=\"top\"}if(r){var i=D(r);if(i.length>0){for(var a=0;a<i.length;a++){var o=i[a];if(o.indexOf(\"swap:\")===0){n[\"swapDelay\"]=d(o.substr(5))}else if(o.indexOf(\"settle:\")===0){n[\"settleDelay\"]=d(o.substr(7))}else if(o.indexOf(\"transition:\")===0){n[\"transition\"]=o.substr(11)===\"true\"}else if(o.indexOf(\"ignoreTitle:\")===0){n[\"ignoreTitle\"]=o.substr(12)===\"true\"}else if(o.indexOf(\"scroll:\")===0){var s=o.substr(7);var l=s.split(\":\");var u=l.pop();var f=l.length>0?l.join(\":\"):null;n[\"scroll\"]=u;n[\"scrollTarget\"]=f}else if(o.indexOf(\"show:\")===0){var c=o.substr(5);var l=c.split(\":\");var h=l.pop();var f=l.length>0?l.join(\":\"):null;n[\"show\"]=h;n[\"showTarget\"]=f}else if(o.indexOf(\"focus-scroll:\")===0){var v=o.substr(\"focus-scroll:\".length);n[\"focusScroll\"]=v==\"true\"}else if(a==0){n[\"swapStyle\"]=o}else{b(\"Unknown modifier in hx-swap: \"+o)}}}}return n}function Sr(e){return ne(e,\"hx-encoding\")===\"multipart/form-data\"||h(e,\"form\")&&ee(e,\"enctype\")===\"multipart/form-data\"}function Er(t,r,n){var i=null;R(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(Sr(r)){return pr(n)}else{return mr(n)}}}function T(e){return{tasks:[],elts:[e]}}function Cr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=ue(r,t.scrollTarget)}if(t.scroll===\"top\"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll===\"bottom\"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var a=t.showTarget;if(t.showTarget===\"window\"){a=\"body\"}i=ue(r,a)}if(t.show===\"top\"&&(r||i)){i=i||r;i.scrollIntoView({block:\"start\",behavior:Q.config.scrollBehavior})}if(t.show===\"bottom\"&&(n||i)){i=i||n;i.scrollIntoView({block:\"end\",behavior:Q.config.scrollBehavior})}}}function Rr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=te(e,t);if(i){var a=i.trim();var o=r;if(a===\"unset\"){return null}if(a.indexOf(\"javascript:\")===0){a=a.substr(11);o=true}else if(a.indexOf(\"js:\")===0){a=a.substr(3);o=true}if(a.indexOf(\"{\")!==0){a=\"{\"+a+\"}\"}var s;if(o){s=Tr(e,function(){return Function(\"return (\"+a+\")\")()},{})}else{s=E(a)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return Rr(u(e),t,r,n)}function Tr(e,t,r){if(Q.config.allowEval){return t()}else{fe(e,\"htmx:evalDisallowedError\");return r}}function Or(e,t){return Rr(e,\"hx-vars\",true,t)}function qr(e,t){return Rr(e,\"hx-vals\",false,t)}function Hr(e){return le(Or(e),qr(e))}function Lr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+\"-URI-AutoEncoded\",\"true\")}}}function Ar(t){if(t.responseURL&&typeof URL!==\"undefined\"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(re().body,\"htmx:badResponseUrl\",{url:t.responseURL})}}}function O(e,t){return t.test(e.getAllResponseHeaders())}function Nr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||I(r,\"String\")){return he(e,t,null,null,{targetOverride:g(r),returnPromise:true})}else{return he(e,t,g(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:g(r.target),swapOverride:r.swap,select:r.select,returnPromise:true})}}else{return he(e,t,null,null,{returnPromise:true})}}function Ir(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function kr(e,t,r){var n;var i;if(typeof URL===\"function\"){i=new URL(t,document.location.href);var a=document.location.origin;n=a===i.origin}else{i=t;n=s(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!n){return false}}return ce(e,\"htmx:validateUrl\",le({url:i,sameHost:n},r))}function he(t,r,n,i,a,e){var o=null;var s=null;a=a!=null?a:{};if(a.returnPromise&&typeof Promise!==\"undefined\"){var l=new Promise(function(e,t){o=e;s=t})}if(n==null){n=re().body}var M=a.handler||Mr;var X=a.select||null;if(!se(n)){ie(o);return l}var u=a.targetOverride||ye(n);if(u==null||u==me){fe(n,\"htmx:targetError\",{target:te(n,\"hx-target\")});ie(s);return l}var f=ae(n);var c=f.lastButtonClicked;if(c){var h=ee(c,\"formaction\");if(h!=null){r=h}var v=ee(c,\"formmethod\");if(v!=null){if(v.toLowerCase()!==\"dialog\"){t=v}}}var d=ne(n,\"hx-confirm\");if(e===undefined){var D=function(e){return he(t,r,n,i,a,!!e)};var U={target:u,elt:n,path:r,verb:t,triggeringEvent:i,etc:a,issueRequest:D,question:d};if(ce(n,\"htmx:confirm\",U)===false){ie(o);return l}}var g=n;var m=ne(n,\"hx-sync\");var p=null;var x=false;if(m){var B=m.split(\":\");var F=B[0].trim();if(F===\"this\"){g=xe(n,\"hx-sync\")}else{g=ue(n,F)}m=(B[1]||\"drop\").trim();f=ae(g);if(m===\"drop\"&&f.xhr&&f.abortable!==true){ie(o);return l}else if(m===\"abort\"){if(f.xhr){ie(o);return l}else{x=true}}else if(m===\"replace\"){ce(g,\"htmx:abort\")}else if(m.indexOf(\"queue\")===0){var V=m.split(\" \");p=(V[1]||\"last\").trim()}}if(f.xhr){if(f.abortable){ce(g,\"htmx:abort\")}else{if(p==null){if(i){var y=ae(i);if(y&&y.triggerSpec&&y.triggerSpec.queue){p=y.triggerSpec.queue}}if(p==null){p=\"last\"}}if(f.queuedRequests==null){f.queuedRequests=[]}if(p===\"first\"&&f.queuedRequests.length===0){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(p===\"all\"){f.queuedRequests.push(function(){he(t,r,n,i,a)})}else if(p===\"last\"){f.queuedRequests=[];f.queuedRequests.push(function(){he(t,r,n,i,a)})}ie(o);return l}}var b=new XMLHttpRequest;f.xhr=b;f.abortable=x;var w=function(){f.xhr=null;f.abortable=false;if(f.queuedRequests!=null&&f.queuedRequests.length>0){var e=f.queuedRequests.shift();e()}};var j=ne(n,\"hx-prompt\");if(j){var S=prompt(j);if(S===null||!ce(n,\"htmx:prompt\",{prompt:S,target:u})){ie(o);w();return l}}if(d&&!e){if(!confirm(d)){ie(o);w();return l}}var E=xr(n,u,S);if(t!==\"get\"&&!Sr(n)){E[\"Content-Type\"]=\"application/x-www-form-urlencoded\"}if(a.headers){E=le(E,a.headers)}var _=dr(n,t);var C=_.errors;var R=_.values;if(a.values){R=le(R,a.values)}var z=Hr(n);var $=le(R,z);var T=yr($,n);if(Q.config.getCacheBusterParam&&t===\"get\"){T[\"org.htmx.cache-buster\"]=ee(u,\"id\")||\"true\"}if(r==null||r===\"\"){r=re().location.href}var O=Rr(n,\"hx-request\");var W=ae(n).boosted;var q=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;var H={boosted:W,useUrlParams:q,parameters:T,unfilteredParameters:$,headers:E,target:u,verb:t,errors:C,withCredentials:a.credentials||O.credentials||Q.config.withCredentials,timeout:a.timeout||O.timeout||Q.config.timeout,path:r,triggeringEvent:i};if(!ce(n,\"htmx:configRequest\",H)){ie(o);w();return l}r=H.path;t=H.verb;E=H.headers;T=H.parameters;C=H.errors;q=H.useUrlParams;if(C&&C.length>0){ce(n,\"htmx:validation:halted\",H);ie(o);w();return l}var G=r.split(\"#\");var J=G[0];var L=G[1];var A=r;if(q){A=J;var Z=Object.keys(T).length!==0;if(Z){if(A.indexOf(\"?\")<0){A+=\"?\"}else{A+=\"&\"}A+=mr(T);if(L){A+=\"#\"+L}}}if(!kr(n,A,H)){fe(n,\"htmx:invalidPath\",H);ie(s);return l}b.open(t.toUpperCase(),A,true);b.overrideMimeType(\"text/html\");b.withCredentials=H.withCredentials;b.timeout=H.timeout;if(O.noHeaders){}else{for(var N in E){if(E.hasOwnProperty(N)){var K=E[N];Lr(b,N,K)}}}var I={xhr:b,target:u,requestConfig:H,etc:a,boosted:W,select:X,pathInfo:{requestPath:r,finalRequestPath:A,anchor:L}};b.onload=function(){try{var e=Ir(n);I.pathInfo.responsePath=Ar(b);M(n,I);lr(k,P);ce(n,\"htmx:afterRequest\",I);ce(n,\"htmx:afterOnLoad\",I);if(!se(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(se(r)){t=r}}if(t){ce(t,\"htmx:afterRequest\",I);ce(t,\"htmx:afterOnLoad\",I)}}ie(o);w()}catch(e){fe(n,\"htmx:onLoadError\",le({error:e},I));throw e}};b.onerror=function(){lr(k,P);fe(n,\"htmx:afterRequest\",I);fe(n,\"htmx:sendError\",I);ie(s);w()};b.onabort=function(){lr(k,P);fe(n,\"htmx:afterRequest\",I);fe(n,\"htmx:sendAbort\",I);ie(s);w()};b.ontimeout=function(){lr(k,P);fe(n,\"htmx:afterRequest\",I);fe(n,\"htmx:timeout\",I);ie(s);w()};if(!ce(n,\"htmx:beforeRequest\",I)){ie(o);w();return l}var k=or(n);var P=sr(n);oe([\"loadstart\",\"loadend\",\"progress\",\"abort\"],function(t){oe([b,b.upload],function(e){e.addEventListener(t,function(e){ce(n,\"htmx:xhr:\"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});ce(n,\"htmx:beforeSend\",I);var Y=q?null:Er(b,n,T);b.send(Y);return l}function Pr(e,t){var r=t.xhr;var n=null;var i=null;if(O(r,/HX-Push:/i)){n=r.getResponseHeader(\"HX-Push\");i=\"push\"}else if(O(r,/HX-Push-Url:/i)){n=r.getResponseHeader(\"HX-Push-Url\");i=\"push\"}else if(O(r,/HX-Replace-Url:/i)){n=r.getResponseHeader(\"HX-Replace-Url\");i=\"replace\"}if(n){if(n===\"false\"){return{}}else{return{type:i,path:n}}}var a=t.pathInfo.finalRequestPath;var o=t.pathInfo.responsePath;var s=ne(e,\"hx-push-url\");var l=ne(e,\"hx-replace-url\");var u=ae(e).boosted;var f=null;var c=null;if(s){f=\"push\";c=s}else if(l){f=\"replace\";c=l}else if(u){f=\"push\";c=o||a}if(c){if(c===\"false\"){return{}}if(c===\"true\"){c=o||a}if(t.pathInfo.anchor&&c.indexOf(\"#\")===-1){c=c+\"#\"+t.pathInfo.anchor}return{type:f,path:c}}else{return{}}}function Mr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestConfig;var h=u.select;if(!ce(l,\"htmx:beforeOnLoad\",u))return;if(O(f,/HX-Trigger:/i)){_e(f,\"HX-Trigger\",l)}if(O(f,/HX-Location:/i)){er();var r=f.getResponseHeader(\"HX-Location\");var v;if(r.indexOf(\"{\")===0){v=E(r);r=v[\"path\"];delete v[\"path\"]}Nr(\"GET\",r,v).then(function(){tr(r)});return}var n=O(f,/HX-Refresh:/i)&&\"true\"===f.getResponseHeader(\"HX-Refresh\");if(O(f,/HX-Redirect:/i)){location.href=f.getResponseHeader(\"HX-Redirect\");n&&location.reload();return}if(n){location.reload();return}if(O(f,/HX-Retarget:/i)){if(f.getResponseHeader(\"HX-Retarget\")===\"this\"){u.target=l}else{u.target=ue(l,f.getResponseHeader(\"HX-Retarget\"))}}var d=Pr(l,u);var i=f.status>=200&&f.status<400&&f.status!==204;var g=f.response;var a=f.status>=400;var m=Q.config.ignoreTitle;var o=le({shouldSwap:i,serverResponse:g,isError:a,ignoreTitle:m},u);if(!ce(c,\"htmx:beforeSwap\",o))return;c=o.target;g=o.serverResponse;a=o.isError;m=o.ignoreTitle;u.target=c;u.failed=a;u.successful=!a;if(o.shouldSwap){if(f.status===286){at(l)}R(l,function(e){g=e.transformResponse(g,f,l)});if(d.type){er()}var s=e.swapOverride;if(O(f,/HX-Reswap:/i)){s=f.getResponseHeader(\"HX-Reswap\")}var v=wr(l,s);if(v.hasOwnProperty(\"ignoreTitle\")){m=v.ignoreTitle}c.classList.add(Q.config.swappingClass);var p=null;var x=null;var y=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r;if(h){r=h}if(O(f,/HX-Reselect:/i)){r=f.getResponseHeader(\"HX-Reselect\")}if(d.type){ce(re().body,\"htmx:beforeHistoryUpdate\",le({history:d},u));if(d.type===\"push\"){tr(d.path);ce(re().body,\"htmx:pushedIntoHistory\",{path:d.path})}else{rr(d.path);ce(re().body,\"htmx:replacedInHistory\",{path:d.path})}}var n=T(c);je(v.swapStyle,c,l,g,n,r);if(t.elt&&!se(t.elt)&&ee(t.elt,\"id\")){var i=document.getElementById(ee(t.elt,\"id\"));var a={preventScroll:v.focusScroll!==undefined?!v.focusScroll:!Q.config.defaultFocusScroll};if(i){if(t.start&&i.setSelectionRange){try{i.setSelectionRange(t.start,t.end)}catch(e){}}i.focus(a)}}c.classList.remove(Q.config.swappingClass);oe(n.elts,function(e){if(e.classList){e.classList.add(Q.config.settlingClass)}ce(e,\"htmx:afterSwap\",u)});if(O(f,/HX-Trigger-After-Swap:/i)){var o=l;if(!se(l)){o=re().body}_e(f,\"HX-Trigger-After-Swap\",o)}var s=function(){oe(n.tasks,function(e){e.call()});oe(n.elts,function(e){if(e.classList){e.classList.remove(Q.config.settlingClass)}ce(e,\"htmx:afterSettle\",u)});if(u.pathInfo.anchor){var e=re().getElementById(u.pathInfo.anchor);if(e){e.scrollIntoView({block:\"start\",behavior:\"auto\"})}}if(n.title&&!m){var t=C(\"title\");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}Cr(n.elts,v);if(O(f,/HX-Trigger-After-Settle:/i)){var r=l;if(!se(l)){r=re().body}_e(f,\"HX-Trigger-After-Settle\",r)}ie(p)};if(v.settleDelay>0){setTimeout(s,v.settleDelay)}else{s()}}catch(e){fe(l,\"htmx:swapError\",u);ie(x);throw e}};var b=Q.config.globalViewTransitions;if(v.hasOwnProperty(\"transition\")){b=v.transition}if(b&&ce(l,\"htmx:beforeTransition\",u)&&typeof Promise!==\"undefined\"&&document.startViewTransition){var w=new Promise(function(e,t){p=e;x=t});var S=y;y=function(){document.startViewTransition(function(){S();return w})}}if(v.swapDelay>0){setTimeout(y,v.swapDelay)}else{y()}}if(a){fe(l,\"htmx:responseError\",le({error:\"Response Status Error Code \"+f.status+\" from \"+u.pathInfo.requestPath},u))}}var Xr={};function Dr(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Ur(e,t){if(t.init){t.init(r)}Xr[e]=le(Dr(),t)}function Br(e){delete Xr[e]}function Fr(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=te(e,\"hx-ext\");if(t){oe(t.split(\",\"),function(e){e=e.replace(/ /g,\"\");if(e.slice(0,7)==\"ignore:\"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Xr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return Fr(u(e),r,n)}var Vr=false;re().addEventListener(\"DOMContentLoaded\",function(){Vr=true});function jr(e){if(Vr||re().readyState===\"complete\"){e()}else{re().addEventListener(\"DOMContentLoaded\",e)}}function _r(){if(Q.config.includeIndicatorStyles!==false){re().head.insertAdjacentHTML(\"beforeend\",\"<style>                      .\"+Q.config.indicatorClass+\"{opacity:0}                      .\"+Q.config.requestClass+\" .\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;}                      .\"+Q.config.requestClass+\".\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;}                    </style>\")}}function zr(){var e=re().querySelector('meta[name=\"htmx-config\"]');if(e){return E(e.content)}else{return null}}function $r(){var e=zr();if(e){Q.config=le(Q.config,e)}}jr(function(){$r();_r();var e=re().body;zt(e);var t=re().querySelectorAll(\"[hx-trigger='restored'],[data-hx-trigger='restored']\");e.addEventListener(\"htmx:abort\",function(e){var t=e.target;var r=ae(t);if(r&&r.xhr){r.xhr.abort()}});const r=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){ar();oe(t,function(e){ce(e,\"htmx:restored\",{document:re(),triggerEvent:ce})})}else{if(r){r(e)}}};setTimeout(function(){ce(e,\"htmx:load\",{});e=null},0)});return Q}()});", "export function setupCopyText() {\n    document.querySelectorAll(\".copy-text\").forEach((el) => {\n        if (el.dataset.target) {\n            el.onclick = (ev) => {\n                ev.preventDefault();\n                navigator.clipboard.writeText(el.dataset.target).then(() => {\n                    const toast = document.createElement(\"span\");\n                    toast.classList = ['ml2 pa1 bg-dark-gray white f7 br2 absolute']\n                    toast.innerText = \"Copied!\";\n                    ev.target.after(toast);\n                    setTimeout(() => {\n                        toast.parentNode.removeChild(toast);\n                    }, 2000);\n                });\n            };\n        }\n    });\n}", "const BUTTON_OFFSET = 17;\n\nexport function setupTables() {\n    var table_wrapper = document.querySelector('.search-results-wrapper');\n\n    if (!table_wrapper) {\n        return;\n    }\n\n    // fix the width of the header cells\n    var table = table_wrapper.querySelector('table');\n    var thead = table.querySelector('thead');\n    var tbody = table.querySelector('tbody');\n    var header_cells = thead.querySelectorAll('th');\n    var table_rows = tbody.querySelectorAll('tr');\n    var first_row = table_rows[0].querySelectorAll('td');\n    first_row.forEach(function (cell, i) {\n        var width = window.getComputedStyle(cell).width;\n        header_cells[i].style.width = width;\n    });\n    // make the table fixed\n    table.style.width = `${thead.getBoundingClientRect().width}px`;\n    table.style.tableLayout = 'fixed';\n\n    // make a copy of the table with just thead\n    var table_copy = table.cloneNode(true);\n    table_copy.querySelector('tbody').remove();\n    table_copy.classList.add('fixed-header');\n    table_copy.style.marginBottom = '0';\n\n    // add a wrapper for the copy\n    var table_copy_wrapper = document.createElement('div');\n    table_copy_wrapper.style.backgroundColor = 'white';\n    table_copy_wrapper.style.overflow = 'hidden';\n    table_copy_wrapper.style.width = `${table_wrapper.getBoundingClientRect().width}px`;\n\n    // add the table copy to the wrapper\n    table_copy_wrapper.appendChild(table_copy);\n\n    // insert the copy before the original table\n    table_wrapper.insertBefore(table_copy_wrapper, table_wrapper.querySelector('table'));\n\n    // get the left offset of the original table\n    var table_offset_left = thead.getBoundingClientRect().left;\n    var table_offset_top = thead.getBoundingClientRect().top;\n\n    // fix the new table to the top of the viewport\n    table_copy_wrapper.style.position = 'fixed';\n    table_copy_wrapper.style.top = '0';\n    if (table_offset_top < BUTTON_OFFSET) {\n        table_copy_wrapper.style.opacity = '1';\n    } else {\n        table_copy_wrapper.style.opacity = '0';\n    }\n    // table_copy.style.top = `${table_offset_top}px`;\n    table_copy_wrapper.style.left = `${table_offset_left}px`;\n    table_copy_wrapper.style.zIndex = '2';\n\n    // when the original header scrolls horizontally, scroll the copy\n    table_wrapper.addEventListener('scroll', function () {\n        // table_copy_wrapper.style.left = `${table_offset_left - table_wrapper.scrollLeft}px`;\n        table_copy_wrapper.scrollLeft = table_wrapper.scrollLeft;\n    });\n\n    // when the body scrolls vertically, show or hide the copy\n    window.addEventListener('scroll', function () {\n        var table_offset_top = thead.getBoundingClientRect().top;\n        if (table_offset_top < BUTTON_OFFSET) {\n            table_copy_wrapper.style.opacity = '1';\n        } else {\n            table_copy_wrapper.style.opacity = '0';\n        }\n    });\n\n}", "// packages/alpinejs/src/scheduler.js\nvar flushPending = false;\nvar flushing = false;\nvar queue = [];\nvar lastFlushedIndex = -1;\nfunction scheduler(callback) {\n  queueJob(callback);\n}\nfunction queueJob(job) {\n  if (!queue.includes(job))\n    queue.push(job);\n  queueFlush();\n}\nfunction dequeueJob(job) {\n  let index = queue.indexOf(job);\n  if (index !== -1 && index > lastFlushedIndex)\n    queue.splice(index, 1);\n}\nfunction queueFlush() {\n  if (!flushing && !flushPending) {\n    flushPending = true;\n    queueMicrotask(flushJobs);\n  }\n}\nfunction flushJobs() {\n  flushPending = false;\n  flushing = true;\n  for (let i = 0; i < queue.length; i++) {\n    queue[i]();\n    lastFlushedIndex = i;\n  }\n  queue.length = 0;\n  lastFlushedIndex = -1;\n  flushing = false;\n}\n\n// packages/alpinejs/src/reactivity.js\nvar reactive;\nvar effect;\nvar release;\nvar raw;\nvar shouldSchedule = true;\nfunction disableEffectScheduling(callback) {\n  shouldSchedule = false;\n  callback();\n  shouldSchedule = true;\n}\nfunction setReactivityEngine(engine) {\n  reactive = engine.reactive;\n  release = engine.release;\n  effect = (callback) => engine.effect(callback, { scheduler: (task) => {\n    if (shouldSchedule) {\n      scheduler(task);\n    } else {\n      task();\n    }\n  } });\n  raw = engine.raw;\n}\nfunction overrideEffect(override) {\n  effect = override;\n}\nfunction elementBoundEffect(el) {\n  let cleanup2 = () => {\n  };\n  let wrappedEffect = (callback) => {\n    let effectReference = effect(callback);\n    if (!el._x_effects) {\n      el._x_effects = /* @__PURE__ */ new Set();\n      el._x_runEffects = () => {\n        el._x_effects.forEach((i) => i());\n      };\n    }\n    el._x_effects.add(effectReference);\n    cleanup2 = () => {\n      if (effectReference === void 0)\n        return;\n      el._x_effects.delete(effectReference);\n      release(effectReference);\n    };\n    return effectReference;\n  };\n  return [wrappedEffect, () => {\n    cleanup2();\n  }];\n}\n\n// packages/alpinejs/src/utils/dispatch.js\nfunction dispatch(el, name, detail = {}) {\n  el.dispatchEvent(\n    new CustomEvent(name, {\n      detail,\n      bubbles: true,\n      // Allows events to pass the shadow DOM barrier.\n      composed: true,\n      cancelable: true\n    })\n  );\n}\n\n// packages/alpinejs/src/utils/walk.js\nfunction walk(el, callback) {\n  if (typeof ShadowRoot === \"function\" && el instanceof ShadowRoot) {\n    Array.from(el.children).forEach((el2) => walk(el2, callback));\n    return;\n  }\n  let skip = false;\n  callback(el, () => skip = true);\n  if (skip)\n    return;\n  let node = el.firstElementChild;\n  while (node) {\n    walk(node, callback, false);\n    node = node.nextElementSibling;\n  }\n}\n\n// packages/alpinejs/src/utils/warn.js\nfunction warn(message, ...args) {\n  console.warn(`Alpine Warning: ${message}`, ...args);\n}\n\n// packages/alpinejs/src/lifecycle.js\nvar started = false;\nfunction start() {\n  if (started)\n    warn(\"Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.\");\n  started = true;\n  if (!document.body)\n    warn(\"Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?\");\n  dispatch(document, \"alpine:init\");\n  dispatch(document, \"alpine:initializing\");\n  startObservingMutations();\n  onElAdded((el) => initTree(el, walk));\n  onElRemoved((el) => destroyTree(el));\n  onAttributesAdded((el, attrs) => {\n    directives(el, attrs).forEach((handle) => handle());\n  });\n  let outNestedComponents = (el) => !closestRoot(el.parentElement, true);\n  Array.from(document.querySelectorAll(allSelectors())).filter(outNestedComponents).forEach((el) => {\n    initTree(el);\n  });\n  dispatch(document, \"alpine:initialized\");\n}\nvar rootSelectorCallbacks = [];\nvar initSelectorCallbacks = [];\nfunction rootSelectors() {\n  return rootSelectorCallbacks.map((fn) => fn());\n}\nfunction allSelectors() {\n  return rootSelectorCallbacks.concat(initSelectorCallbacks).map((fn) => fn());\n}\nfunction addRootSelector(selectorCallback) {\n  rootSelectorCallbacks.push(selectorCallback);\n}\nfunction addInitSelector(selectorCallback) {\n  initSelectorCallbacks.push(selectorCallback);\n}\nfunction closestRoot(el, includeInitSelectors = false) {\n  return findClosest(el, (element) => {\n    const selectors = includeInitSelectors ? allSelectors() : rootSelectors();\n    if (selectors.some((selector) => element.matches(selector)))\n      return true;\n  });\n}\nfunction findClosest(el, callback) {\n  if (!el)\n    return;\n  if (callback(el))\n    return el;\n  if (el._x_teleportBack)\n    el = el._x_teleportBack;\n  if (!el.parentElement)\n    return;\n  return findClosest(el.parentElement, callback);\n}\nfunction isRoot(el) {\n  return rootSelectors().some((selector) => el.matches(selector));\n}\nvar initInterceptors = [];\nfunction interceptInit(callback) {\n  initInterceptors.push(callback);\n}\nfunction initTree(el, walker = walk, intercept = () => {\n}) {\n  deferHandlingDirectives(() => {\n    walker(el, (el2, skip) => {\n      intercept(el2, skip);\n      initInterceptors.forEach((i) => i(el2, skip));\n      directives(el2, el2.attributes).forEach((handle) => handle());\n      el2._x_ignore && skip();\n    });\n  });\n}\nfunction destroyTree(root) {\n  walk(root, (el) => {\n    cleanupAttributes(el);\n    cleanupElement(el);\n  });\n}\n\n// packages/alpinejs/src/mutation.js\nvar onAttributeAddeds = [];\nvar onElRemoveds = [];\nvar onElAddeds = [];\nfunction onElAdded(callback) {\n  onElAddeds.push(callback);\n}\nfunction onElRemoved(el, callback) {\n  if (typeof callback === \"function\") {\n    if (!el._x_cleanups)\n      el._x_cleanups = [];\n    el._x_cleanups.push(callback);\n  } else {\n    callback = el;\n    onElRemoveds.push(callback);\n  }\n}\nfunction onAttributesAdded(callback) {\n  onAttributeAddeds.push(callback);\n}\nfunction onAttributeRemoved(el, name, callback) {\n  if (!el._x_attributeCleanups)\n    el._x_attributeCleanups = {};\n  if (!el._x_attributeCleanups[name])\n    el._x_attributeCleanups[name] = [];\n  el._x_attributeCleanups[name].push(callback);\n}\nfunction cleanupAttributes(el, names) {\n  if (!el._x_attributeCleanups)\n    return;\n  Object.entries(el._x_attributeCleanups).forEach(([name, value]) => {\n    if (names === void 0 || names.includes(name)) {\n      value.forEach((i) => i());\n      delete el._x_attributeCleanups[name];\n    }\n  });\n}\nfunction cleanupElement(el) {\n  if (el._x_cleanups) {\n    while (el._x_cleanups.length)\n      el._x_cleanups.pop()();\n  }\n}\nvar observer = new MutationObserver(onMutate);\nvar currentlyObserving = false;\nfunction startObservingMutations() {\n  observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true });\n  currentlyObserving = true;\n}\nfunction stopObservingMutations() {\n  flushObserver();\n  observer.disconnect();\n  currentlyObserving = false;\n}\nvar recordQueue = [];\nvar willProcessRecordQueue = false;\nfunction flushObserver() {\n  recordQueue = recordQueue.concat(observer.takeRecords());\n  if (recordQueue.length && !willProcessRecordQueue) {\n    willProcessRecordQueue = true;\n    queueMicrotask(() => {\n      processRecordQueue();\n      willProcessRecordQueue = false;\n    });\n  }\n}\nfunction processRecordQueue() {\n  onMutate(recordQueue);\n  recordQueue.length = 0;\n}\nfunction mutateDom(callback) {\n  if (!currentlyObserving)\n    return callback();\n  stopObservingMutations();\n  let result = callback();\n  startObservingMutations();\n  return result;\n}\nvar isCollecting = false;\nvar deferredMutations = [];\nfunction deferMutations() {\n  isCollecting = true;\n}\nfunction flushAndStopDeferringMutations() {\n  isCollecting = false;\n  onMutate(deferredMutations);\n  deferredMutations = [];\n}\nfunction onMutate(mutations) {\n  if (isCollecting) {\n    deferredMutations = deferredMutations.concat(mutations);\n    return;\n  }\n  let addedNodes = [];\n  let removedNodes = [];\n  let addedAttributes = /* @__PURE__ */ new Map();\n  let removedAttributes = /* @__PURE__ */ new Map();\n  for (let i = 0; i < mutations.length; i++) {\n    if (mutations[i].target._x_ignoreMutationObserver)\n      continue;\n    if (mutations[i].type === \"childList\") {\n      mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.push(node));\n      mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.push(node));\n    }\n    if (mutations[i].type === \"attributes\") {\n      let el = mutations[i].target;\n      let name = mutations[i].attributeName;\n      let oldValue = mutations[i].oldValue;\n      let add2 = () => {\n        if (!addedAttributes.has(el))\n          addedAttributes.set(el, []);\n        addedAttributes.get(el).push({ name, value: el.getAttribute(name) });\n      };\n      let remove = () => {\n        if (!removedAttributes.has(el))\n          removedAttributes.set(el, []);\n        removedAttributes.get(el).push(name);\n      };\n      if (el.hasAttribute(name) && oldValue === null) {\n        add2();\n      } else if (el.hasAttribute(name)) {\n        remove();\n        add2();\n      } else {\n        remove();\n      }\n    }\n  }\n  removedAttributes.forEach((attrs, el) => {\n    cleanupAttributes(el, attrs);\n  });\n  addedAttributes.forEach((attrs, el) => {\n    onAttributeAddeds.forEach((i) => i(el, attrs));\n  });\n  for (let node of removedNodes) {\n    if (addedNodes.includes(node))\n      continue;\n    onElRemoveds.forEach((i) => i(node));\n    destroyTree(node);\n  }\n  addedNodes.forEach((node) => {\n    node._x_ignoreSelf = true;\n    node._x_ignore = true;\n  });\n  for (let node of addedNodes) {\n    if (removedNodes.includes(node))\n      continue;\n    if (!node.isConnected)\n      continue;\n    delete node._x_ignoreSelf;\n    delete node._x_ignore;\n    onElAddeds.forEach((i) => i(node));\n    node._x_ignore = true;\n    node._x_ignoreSelf = true;\n  }\n  addedNodes.forEach((node) => {\n    delete node._x_ignoreSelf;\n    delete node._x_ignore;\n  });\n  addedNodes = null;\n  removedNodes = null;\n  addedAttributes = null;\n  removedAttributes = null;\n}\n\n// packages/alpinejs/src/scope.js\nfunction scope(node) {\n  return mergeProxies(closestDataStack(node));\n}\nfunction addScopeToNode(node, data2, referenceNode) {\n  node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)];\n  return () => {\n    node._x_dataStack = node._x_dataStack.filter((i) => i !== data2);\n  };\n}\nfunction closestDataStack(node) {\n  if (node._x_dataStack)\n    return node._x_dataStack;\n  if (typeof ShadowRoot === \"function\" && node instanceof ShadowRoot) {\n    return closestDataStack(node.host);\n  }\n  if (!node.parentNode) {\n    return [];\n  }\n  return closestDataStack(node.parentNode);\n}\nfunction mergeProxies(objects) {\n  return new Proxy({ objects }, mergeProxyTrap);\n}\nvar mergeProxyTrap = {\n  ownKeys({ objects }) {\n    return Array.from(\n      new Set(objects.flatMap((i) => Object.keys(i)))\n    );\n  },\n  has({ objects }, name) {\n    if (name == Symbol.unscopables)\n      return false;\n    return objects.some(\n      (obj) => Object.prototype.hasOwnProperty.call(obj, name)\n    );\n  },\n  get({ objects }, name, thisProxy) {\n    if (name == \"toJSON\")\n      return collapseProxies;\n    return Reflect.get(\n      objects.find(\n        (obj) => Object.prototype.hasOwnProperty.call(obj, name)\n      ) || {},\n      name,\n      thisProxy\n    );\n  },\n  set({ objects }, name, value) {\n    return Reflect.set(\n      objects.find(\n        (obj) => Object.prototype.hasOwnProperty.call(obj, name)\n      ) || objects[objects.length - 1],\n      name,\n      value\n    );\n  }\n};\nfunction collapseProxies() {\n  let keys = Reflect.ownKeys(this);\n  return keys.reduce((acc, key) => {\n    acc[key] = Reflect.get(this, key);\n    return acc;\n  }, {});\n}\n\n// packages/alpinejs/src/interceptor.js\nfunction initInterceptors2(data2) {\n  let isObject2 = (val) => typeof val === \"object\" && !Array.isArray(val) && val !== null;\n  let recurse = (obj, basePath = \"\") => {\n    Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {\n      if (enumerable === false || value === void 0)\n        return;\n      let path = basePath === \"\" ? key : `${basePath}.${key}`;\n      if (typeof value === \"object\" && value !== null && value._x_interceptor) {\n        obj[key] = value.initialize(data2, path, key);\n      } else {\n        if (isObject2(value) && value !== obj && !(value instanceof Element)) {\n          recurse(value, path);\n        }\n      }\n    });\n  };\n  return recurse(data2);\n}\nfunction interceptor(callback, mutateObj = () => {\n}) {\n  let obj = {\n    initialValue: void 0,\n    _x_interceptor: true,\n    initialize(data2, path, key) {\n      return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key);\n    }\n  };\n  mutateObj(obj);\n  return (initialValue) => {\n    if (typeof initialValue === \"object\" && initialValue !== null && initialValue._x_interceptor) {\n      let initialize = obj.initialize.bind(obj);\n      obj.initialize = (data2, path, key) => {\n        let innerValue = initialValue.initialize(data2, path, key);\n        obj.initialValue = innerValue;\n        return initialize(data2, path, key);\n      };\n    } else {\n      obj.initialValue = initialValue;\n    }\n    return obj;\n  };\n}\nfunction get(obj, path) {\n  return path.split(\".\").reduce((carry, segment) => carry[segment], obj);\n}\nfunction set(obj, path, value) {\n  if (typeof path === \"string\")\n    path = path.split(\".\");\n  if (path.length === 1)\n    obj[path[0]] = value;\n  else if (path.length === 0)\n    throw error;\n  else {\n    if (obj[path[0]])\n      return set(obj[path[0]], path.slice(1), value);\n    else {\n      obj[path[0]] = {};\n      return set(obj[path[0]], path.slice(1), value);\n    }\n  }\n}\n\n// packages/alpinejs/src/magics.js\nvar magics = {};\nfunction magic(name, callback) {\n  magics[name] = callback;\n}\nfunction injectMagics(obj, el) {\n  Object.entries(magics).forEach(([name, callback]) => {\n    let memoizedUtilities = null;\n    function getUtilities() {\n      if (memoizedUtilities) {\n        return memoizedUtilities;\n      } else {\n        let [utilities, cleanup2] = getElementBoundUtilities(el);\n        memoizedUtilities = { interceptor, ...utilities };\n        onElRemoved(el, cleanup2);\n        return memoizedUtilities;\n      }\n    }\n    Object.defineProperty(obj, `$${name}`, {\n      get() {\n        return callback(el, getUtilities());\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\n\n// packages/alpinejs/src/utils/error.js\nfunction tryCatch(el, expression, callback, ...args) {\n  try {\n    return callback(...args);\n  } catch (e) {\n    handleError(e, el, expression);\n  }\n}\nfunction handleError(error2, el, expression = void 0) {\n  Object.assign(error2, { el, expression });\n  console.warn(`Alpine Expression Error: ${error2.message}\n\n${expression ? 'Expression: \"' + expression + '\"\\n\\n' : \"\"}`, el);\n  setTimeout(() => {\n    throw error2;\n  }, 0);\n}\n\n// packages/alpinejs/src/evaluator.js\nvar shouldAutoEvaluateFunctions = true;\nfunction dontAutoEvaluateFunctions(callback) {\n  let cache = shouldAutoEvaluateFunctions;\n  shouldAutoEvaluateFunctions = false;\n  let result = callback();\n  shouldAutoEvaluateFunctions = cache;\n  return result;\n}\nfunction evaluate(el, expression, extras = {}) {\n  let result;\n  evaluateLater(el, expression)((value) => result = value, extras);\n  return result;\n}\nfunction evaluateLater(...args) {\n  return theEvaluatorFunction(...args);\n}\nvar theEvaluatorFunction = normalEvaluator;\nfunction setEvaluator(newEvaluator) {\n  theEvaluatorFunction = newEvaluator;\n}\nfunction normalEvaluator(el, expression) {\n  let overriddenMagics = {};\n  injectMagics(overriddenMagics, el);\n  let dataStack = [overriddenMagics, ...closestDataStack(el)];\n  let evaluator = typeof expression === \"function\" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el);\n  return tryCatch.bind(null, el, expression, evaluator);\n}\nfunction generateEvaluatorFromFunction(dataStack, func) {\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [] } = {}) => {\n    let result = func.apply(mergeProxies([scope2, ...dataStack]), params);\n    runIfTypeOfFunction(receiver, result);\n  };\n}\nvar evaluatorMemo = {};\nfunction generateFunctionFromString(expression, el) {\n  if (evaluatorMemo[expression]) {\n    return evaluatorMemo[expression];\n  }\n  let AsyncFunction = Object.getPrototypeOf(async function() {\n  }).constructor;\n  let rightSideSafeExpression = /^[\\n\\s]*if.*\\(.*\\)/.test(expression.trim()) || /^(let|const)\\s/.test(expression.trim()) ? `(async()=>{ ${expression} })()` : expression;\n  const safeAsyncFunction = () => {\n    try {\n      let func2 = new AsyncFunction(\n        [\"__self\", \"scope\"],\n        `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`\n      );\n      Object.defineProperty(func2, \"name\", {\n        value: `[Alpine] ${expression}`\n      });\n      return func2;\n    } catch (error2) {\n      handleError(error2, el, expression);\n      return Promise.resolve();\n    }\n  };\n  let func = safeAsyncFunction();\n  evaluatorMemo[expression] = func;\n  return func;\n}\nfunction generateEvaluatorFromString(dataStack, expression, el) {\n  let func = generateFunctionFromString(expression, el);\n  return (receiver = () => {\n  }, { scope: scope2 = {}, params = [] } = {}) => {\n    func.result = void 0;\n    func.finished = false;\n    let completeScope = mergeProxies([scope2, ...dataStack]);\n    if (typeof func === \"function\") {\n      let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression));\n      if (func.finished) {\n        runIfTypeOfFunction(receiver, func.result, completeScope, params, el);\n        func.result = void 0;\n      } else {\n        promise.then((result) => {\n          runIfTypeOfFunction(receiver, result, completeScope, params, el);\n        }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0);\n      }\n    }\n  };\n}\nfunction runIfTypeOfFunction(receiver, value, scope2, params, el) {\n  if (shouldAutoEvaluateFunctions && typeof value === \"function\") {\n    let result = value.apply(scope2, params);\n    if (result instanceof Promise) {\n      result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value));\n    } else {\n      receiver(result);\n    }\n  } else if (typeof value === \"object\" && value instanceof Promise) {\n    value.then((i) => receiver(i));\n  } else {\n    receiver(value);\n  }\n}\n\n// packages/alpinejs/src/directives.js\nvar prefixAsString = \"x-\";\nfunction prefix(subject = \"\") {\n  return prefixAsString + subject;\n}\nfunction setPrefix(newPrefix) {\n  prefixAsString = newPrefix;\n}\nvar directiveHandlers = {};\nfunction directive(name, callback) {\n  directiveHandlers[name] = callback;\n  return {\n    before(directive2) {\n      if (!directiveHandlers[directive2]) {\n        console.warn(\n          \"Cannot find directive `${directive}`. `${name}` will use the default order of execution\"\n        );\n        return;\n      }\n      const pos = directiveOrder.indexOf(directive2);\n      directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf(\"DEFAULT\"), 0, name);\n    }\n  };\n}\nfunction directives(el, attributes, originalAttributeOverride) {\n  attributes = Array.from(attributes);\n  if (el._x_virtualDirectives) {\n    let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value }));\n    let staticAttributes = attributesOnly(vAttributes);\n    vAttributes = vAttributes.map((attribute) => {\n      if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n        return {\n          name: `x-bind:${attribute.name}`,\n          value: `\"${attribute.value}\"`\n        };\n      }\n      return attribute;\n    });\n    attributes = attributes.concat(vAttributes);\n  }\n  let transformedAttributeMap = {};\n  let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority);\n  return directives2.map((directive2) => {\n    return getDirectiveHandler(el, directive2);\n  });\n}\nfunction attributesOnly(attributes) {\n  return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr));\n}\nvar isDeferringHandlers = false;\nvar directiveHandlerStacks = /* @__PURE__ */ new Map();\nvar currentHandlerStackKey = Symbol();\nfunction deferHandlingDirectives(callback) {\n  isDeferringHandlers = true;\n  let key = Symbol();\n  currentHandlerStackKey = key;\n  directiveHandlerStacks.set(key, []);\n  let flushHandlers = () => {\n    while (directiveHandlerStacks.get(key).length)\n      directiveHandlerStacks.get(key).shift()();\n    directiveHandlerStacks.delete(key);\n  };\n  let stopDeferring = () => {\n    isDeferringHandlers = false;\n    flushHandlers();\n  };\n  callback(flushHandlers);\n  stopDeferring();\n}\nfunction getElementBoundUtilities(el) {\n  let cleanups = [];\n  let cleanup2 = (callback) => cleanups.push(callback);\n  let [effect3, cleanupEffect] = elementBoundEffect(el);\n  cleanups.push(cleanupEffect);\n  let utilities = {\n    Alpine: alpine_default,\n    effect: effect3,\n    cleanup: cleanup2,\n    evaluateLater: evaluateLater.bind(evaluateLater, el),\n    evaluate: evaluate.bind(evaluate, el)\n  };\n  let doCleanup = () => cleanups.forEach((i) => i());\n  return [utilities, doCleanup];\n}\nfunction getDirectiveHandler(el, directive2) {\n  let noop = () => {\n  };\n  let handler4 = directiveHandlers[directive2.type] || noop;\n  let [utilities, cleanup2] = getElementBoundUtilities(el);\n  onAttributeRemoved(el, directive2.original, cleanup2);\n  let fullHandler = () => {\n    if (el._x_ignore || el._x_ignoreSelf)\n      return;\n    handler4.inline && handler4.inline(el, directive2, utilities);\n    handler4 = handler4.bind(handler4, el, directive2, utilities);\n    isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler4) : handler4();\n  };\n  fullHandler.runCleanups = cleanup2;\n  return fullHandler;\n}\nvar startingWith = (subject, replacement) => ({ name, value }) => {\n  if (name.startsWith(subject))\n    name = name.replace(subject, replacement);\n  return { name, value };\n};\nvar into = (i) => i;\nfunction toTransformedAttributes(callback = () => {\n}) {\n  return ({ name, value }) => {\n    let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => {\n      return transform(carry);\n    }, { name, value });\n    if (newName !== name)\n      callback(newName, name);\n    return { name: newName, value: newValue };\n  };\n}\nvar attributeTransformers = [];\nfunction mapAttributes(callback) {\n  attributeTransformers.push(callback);\n}\nfunction outNonAlpineAttributes({ name }) {\n  return alpineAttributeRegex().test(name);\n}\nvar alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\\\b`);\nfunction toParsedDirectives(transformedAttributeMap, originalAttributeOverride) {\n  return ({ name, value }) => {\n    let typeMatch = name.match(alpineAttributeRegex());\n    let valueMatch = name.match(/:([a-zA-Z0-9\\-:]+)/);\n    let modifiers = name.match(/\\.[^.\\]]+(?=[^\\]]*$)/g) || [];\n    let original = originalAttributeOverride || transformedAttributeMap[name] || name;\n    return {\n      type: typeMatch ? typeMatch[1] : null,\n      value: valueMatch ? valueMatch[1] : null,\n      modifiers: modifiers.map((i) => i.replace(\".\", \"\")),\n      expression: value,\n      original\n    };\n  };\n}\nvar DEFAULT = \"DEFAULT\";\nvar directiveOrder = [\n  \"ignore\",\n  \"ref\",\n  \"data\",\n  \"id\",\n  \"bind\",\n  \"init\",\n  \"for\",\n  \"model\",\n  \"modelable\",\n  \"transition\",\n  \"show\",\n  \"if\",\n  DEFAULT,\n  \"teleport\"\n];\nfunction byPriority(a, b) {\n  let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type;\n  let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type;\n  return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);\n}\n\n// packages/alpinejs/src/nextTick.js\nvar tickStack = [];\nvar isHolding = false;\nfunction nextTick(callback = () => {\n}) {\n  queueMicrotask(() => {\n    isHolding || setTimeout(() => {\n      releaseNextTicks();\n    });\n  });\n  return new Promise((res) => {\n    tickStack.push(() => {\n      callback();\n      res();\n    });\n  });\n}\nfunction releaseNextTicks() {\n  isHolding = false;\n  while (tickStack.length)\n    tickStack.shift()();\n}\nfunction holdNextTicks() {\n  isHolding = true;\n}\n\n// packages/alpinejs/src/utils/classes.js\nfunction setClasses(el, value) {\n  if (Array.isArray(value)) {\n    return setClassesFromString(el, value.join(\" \"));\n  } else if (typeof value === \"object\" && value !== null) {\n    return setClassesFromObject(el, value);\n  } else if (typeof value === \"function\") {\n    return setClasses(el, value());\n  }\n  return setClassesFromString(el, value);\n}\nfunction setClassesFromString(el, classString) {\n  let split = (classString2) => classString2.split(\" \").filter(Boolean);\n  let missingClasses = (classString2) => classString2.split(\" \").filter((i) => !el.classList.contains(i)).filter(Boolean);\n  let addClassesAndReturnUndo = (classes) => {\n    el.classList.add(...classes);\n    return () => {\n      el.classList.remove(...classes);\n    };\n  };\n  classString = classString === true ? classString = \"\" : classString || \"\";\n  return addClassesAndReturnUndo(missingClasses(classString));\n}\nfunction setClassesFromObject(el, classObject) {\n  let split = (classString) => classString.split(\" \").filter(Boolean);\n  let forAdd = Object.entries(classObject).flatMap(([classString, bool]) => bool ? split(classString) : false).filter(Boolean);\n  let forRemove = Object.entries(classObject).flatMap(([classString, bool]) => !bool ? split(classString) : false).filter(Boolean);\n  let added = [];\n  let removed = [];\n  forRemove.forEach((i) => {\n    if (el.classList.contains(i)) {\n      el.classList.remove(i);\n      removed.push(i);\n    }\n  });\n  forAdd.forEach((i) => {\n    if (!el.classList.contains(i)) {\n      el.classList.add(i);\n      added.push(i);\n    }\n  });\n  return () => {\n    removed.forEach((i) => el.classList.add(i));\n    added.forEach((i) => el.classList.remove(i));\n  };\n}\n\n// packages/alpinejs/src/utils/styles.js\nfunction setStyles(el, value) {\n  if (typeof value === \"object\" && value !== null) {\n    return setStylesFromObject(el, value);\n  }\n  return setStylesFromString(el, value);\n}\nfunction setStylesFromObject(el, value) {\n  let previousStyles = {};\n  Object.entries(value).forEach(([key, value2]) => {\n    previousStyles[key] = el.style[key];\n    if (!key.startsWith(\"--\")) {\n      key = kebabCase(key);\n    }\n    el.style.setProperty(key, value2);\n  });\n  setTimeout(() => {\n    if (el.style.length === 0) {\n      el.removeAttribute(\"style\");\n    }\n  });\n  return () => {\n    setStyles(el, previousStyles);\n  };\n}\nfunction setStylesFromString(el, value) {\n  let cache = el.getAttribute(\"style\", value);\n  el.setAttribute(\"style\", value);\n  return () => {\n    el.setAttribute(\"style\", cache || \"\");\n  };\n}\nfunction kebabCase(subject) {\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\n// packages/alpinejs/src/utils/once.js\nfunction once(callback, fallback = () => {\n}) {\n  let called = false;\n  return function() {\n    if (!called) {\n      called = true;\n      callback.apply(this, arguments);\n    } else {\n      fallback.apply(this, arguments);\n    }\n  };\n}\n\n// packages/alpinejs/src/directives/x-transition.js\ndirective(\"transition\", (el, { value, modifiers, expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"function\")\n    expression = evaluate2(expression);\n  if (expression === false)\n    return;\n  if (!expression || typeof expression === \"boolean\") {\n    registerTransitionsFromHelper(el, modifiers, value);\n  } else {\n    registerTransitionsFromClassString(el, expression, value);\n  }\n});\nfunction registerTransitionsFromClassString(el, classString, stage) {\n  registerTransitionObject(el, setClasses, \"\");\n  let directiveStorageMap = {\n    \"enter\": (classes) => {\n      el._x_transition.enter.during = classes;\n    },\n    \"enter-start\": (classes) => {\n      el._x_transition.enter.start = classes;\n    },\n    \"enter-end\": (classes) => {\n      el._x_transition.enter.end = classes;\n    },\n    \"leave\": (classes) => {\n      el._x_transition.leave.during = classes;\n    },\n    \"leave-start\": (classes) => {\n      el._x_transition.leave.start = classes;\n    },\n    \"leave-end\": (classes) => {\n      el._x_transition.leave.end = classes;\n    }\n  };\n  directiveStorageMap[stage](classString);\n}\nfunction registerTransitionsFromHelper(el, modifiers, stage) {\n  registerTransitionObject(el, setStyles);\n  let doesntSpecify = !modifiers.includes(\"in\") && !modifiers.includes(\"out\") && !stage;\n  let transitioningIn = doesntSpecify || modifiers.includes(\"in\") || [\"enter\"].includes(stage);\n  let transitioningOut = doesntSpecify || modifiers.includes(\"out\") || [\"leave\"].includes(stage);\n  if (modifiers.includes(\"in\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index < modifiers.indexOf(\"out\"));\n  }\n  if (modifiers.includes(\"out\") && !doesntSpecify) {\n    modifiers = modifiers.filter((i, index) => index > modifiers.indexOf(\"out\"));\n  }\n  let wantsAll = !modifiers.includes(\"opacity\") && !modifiers.includes(\"scale\");\n  let wantsOpacity = wantsAll || modifiers.includes(\"opacity\");\n  let wantsScale = wantsAll || modifiers.includes(\"scale\");\n  let opacityValue = wantsOpacity ? 0 : 1;\n  let scaleValue = wantsScale ? modifierValue(modifiers, \"scale\", 95) / 100 : 1;\n  let delay = modifierValue(modifiers, \"delay\", 0) / 1e3;\n  let origin = modifierValue(modifiers, \"origin\", \"center\");\n  let property = \"opacity, transform\";\n  let durationIn = modifierValue(modifiers, \"duration\", 150) / 1e3;\n  let durationOut = modifierValue(modifiers, \"duration\", 75) / 1e3;\n  let easing = `cubic-bezier(0.4, 0.0, 0.2, 1)`;\n  if (transitioningIn) {\n    el._x_transition.enter.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationIn}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.enter.start = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n    el._x_transition.enter.end = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n  }\n  if (transitioningOut) {\n    el._x_transition.leave.during = {\n      transformOrigin: origin,\n      transitionDelay: `${delay}s`,\n      transitionProperty: property,\n      transitionDuration: `${durationOut}s`,\n      transitionTimingFunction: easing\n    };\n    el._x_transition.leave.start = {\n      opacity: 1,\n      transform: `scale(1)`\n    };\n    el._x_transition.leave.end = {\n      opacity: opacityValue,\n      transform: `scale(${scaleValue})`\n    };\n  }\n}\nfunction registerTransitionObject(el, setFunction, defaultValue = {}) {\n  if (!el._x_transition)\n    el._x_transition = {\n      enter: { during: defaultValue, start: defaultValue, end: defaultValue },\n      leave: { during: defaultValue, start: defaultValue, end: defaultValue },\n      in(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.enter.during,\n          start: this.enter.start,\n          end: this.enter.end\n        }, before, after);\n      },\n      out(before = () => {\n      }, after = () => {\n      }) {\n        transition(el, setFunction, {\n          during: this.leave.during,\n          start: this.leave.start,\n          end: this.leave.end\n        }, before, after);\n      }\n    };\n}\nwindow.Element.prototype._x_toggleAndCascadeWithTransitions = function(el, value, show, hide) {\n  const nextTick2 = document.visibilityState === \"visible\" ? requestAnimationFrame : setTimeout;\n  let clickAwayCompatibleShow = () => nextTick2(show);\n  if (value) {\n    if (el._x_transition && (el._x_transition.enter || el._x_transition.leave)) {\n      el._x_transition.enter && (Object.entries(el._x_transition.enter.during).length || Object.entries(el._x_transition.enter.start).length || Object.entries(el._x_transition.enter.end).length) ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    } else {\n      el._x_transition ? el._x_transition.in(show) : clickAwayCompatibleShow();\n    }\n    return;\n  }\n  el._x_hidePromise = el._x_transition ? new Promise((resolve, reject) => {\n    el._x_transition.out(() => {\n    }, () => resolve(hide));\n    el._x_transitioning.beforeCancel(() => reject({ isFromCancelledTransition: true }));\n  }) : Promise.resolve(hide);\n  queueMicrotask(() => {\n    let closest = closestHide(el);\n    if (closest) {\n      if (!closest._x_hideChildren)\n        closest._x_hideChildren = [];\n      closest._x_hideChildren.push(el);\n    } else {\n      nextTick2(() => {\n        let hideAfterChildren = (el2) => {\n          let carry = Promise.all([\n            el2._x_hidePromise,\n            ...(el2._x_hideChildren || []).map(hideAfterChildren)\n          ]).then(([i]) => i());\n          delete el2._x_hidePromise;\n          delete el2._x_hideChildren;\n          return carry;\n        };\n        hideAfterChildren(el).catch((e) => {\n          if (!e.isFromCancelledTransition)\n            throw e;\n        });\n      });\n    }\n  });\n};\nfunction closestHide(el) {\n  let parent = el.parentNode;\n  if (!parent)\n    return;\n  return parent._x_hidePromise ? parent : closestHide(parent);\n}\nfunction transition(el, setFunction, { during, start: start2, end } = {}, before = () => {\n}, after = () => {\n}) {\n  if (el._x_transitioning)\n    el._x_transitioning.cancel();\n  if (Object.keys(during).length === 0 && Object.keys(start2).length === 0 && Object.keys(end).length === 0) {\n    before();\n    after();\n    return;\n  }\n  let undoStart, undoDuring, undoEnd;\n  performTransition(el, {\n    start() {\n      undoStart = setFunction(el, start2);\n    },\n    during() {\n      undoDuring = setFunction(el, during);\n    },\n    before,\n    end() {\n      undoStart();\n      undoEnd = setFunction(el, end);\n    },\n    after,\n    cleanup() {\n      undoDuring();\n      undoEnd();\n    }\n  });\n}\nfunction performTransition(el, stages) {\n  let interrupted, reachedBefore, reachedEnd;\n  let finish = once(() => {\n    mutateDom(() => {\n      interrupted = true;\n      if (!reachedBefore)\n        stages.before();\n      if (!reachedEnd) {\n        stages.end();\n        releaseNextTicks();\n      }\n      stages.after();\n      if (el.isConnected)\n        stages.cleanup();\n      delete el._x_transitioning;\n    });\n  });\n  el._x_transitioning = {\n    beforeCancels: [],\n    beforeCancel(callback) {\n      this.beforeCancels.push(callback);\n    },\n    cancel: once(function() {\n      while (this.beforeCancels.length) {\n        this.beforeCancels.shift()();\n      }\n      ;\n      finish();\n    }),\n    finish\n  };\n  mutateDom(() => {\n    stages.start();\n    stages.during();\n  });\n  holdNextTicks();\n  requestAnimationFrame(() => {\n    if (interrupted)\n      return;\n    let duration = Number(getComputedStyle(el).transitionDuration.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    let delay = Number(getComputedStyle(el).transitionDelay.replace(/,.*/, \"\").replace(\"s\", \"\")) * 1e3;\n    if (duration === 0)\n      duration = Number(getComputedStyle(el).animationDuration.replace(\"s\", \"\")) * 1e3;\n    mutateDom(() => {\n      stages.before();\n    });\n    reachedBefore = true;\n    requestAnimationFrame(() => {\n      if (interrupted)\n        return;\n      mutateDom(() => {\n        stages.end();\n      });\n      releaseNextTicks();\n      setTimeout(el._x_transitioning.finish, duration + delay);\n      reachedEnd = true;\n    });\n  });\n}\nfunction modifierValue(modifiers, key, fallback) {\n  if (modifiers.indexOf(key) === -1)\n    return fallback;\n  const rawValue = modifiers[modifiers.indexOf(key) + 1];\n  if (!rawValue)\n    return fallback;\n  if (key === \"scale\") {\n    if (isNaN(rawValue))\n      return fallback;\n  }\n  if (key === \"duration\" || key === \"delay\") {\n    let match = rawValue.match(/([0-9]+)ms/);\n    if (match)\n      return match[1];\n  }\n  if (key === \"origin\") {\n    if ([\"top\", \"right\", \"left\", \"center\", \"bottom\"].includes(modifiers[modifiers.indexOf(key) + 2])) {\n      return [rawValue, modifiers[modifiers.indexOf(key) + 2]].join(\" \");\n    }\n  }\n  return rawValue;\n}\n\n// packages/alpinejs/src/clone.js\nvar isCloning = false;\nfunction skipDuringClone(callback, fallback = () => {\n}) {\n  return (...args) => isCloning ? fallback(...args) : callback(...args);\n}\nfunction onlyDuringClone(callback) {\n  return (...args) => isCloning && callback(...args);\n}\nfunction cloneNode(from, to) {\n  if (from._x_dataStack) {\n    to._x_dataStack = from._x_dataStack;\n    to.setAttribute(\"data-has-alpine-state\", true);\n  }\n  isCloning = true;\n  dontRegisterReactiveSideEffects(() => {\n    initTree(to, (el, callback) => {\n      callback(el, () => {\n      });\n    });\n  });\n  isCloning = false;\n}\nvar isCloningLegacy = false;\nfunction clone(oldEl, newEl) {\n  if (!newEl._x_dataStack)\n    newEl._x_dataStack = oldEl._x_dataStack;\n  isCloning = true;\n  isCloningLegacy = true;\n  dontRegisterReactiveSideEffects(() => {\n    cloneTree(newEl);\n  });\n  isCloning = false;\n  isCloningLegacy = false;\n}\nfunction cloneTree(el) {\n  let hasRunThroughFirstEl = false;\n  let shallowWalker = (el2, callback) => {\n    walk(el2, (el3, skip) => {\n      if (hasRunThroughFirstEl && isRoot(el3))\n        return skip();\n      hasRunThroughFirstEl = true;\n      callback(el3, skip);\n    });\n  };\n  initTree(el, shallowWalker);\n}\nfunction dontRegisterReactiveSideEffects(callback) {\n  let cache = effect;\n  overrideEffect((callback2, el) => {\n    let storedEffect = cache(callback2);\n    release(storedEffect);\n    return () => {\n    };\n  });\n  callback();\n  overrideEffect(cache);\n}\nfunction shouldSkipRegisteringDataDuringClone(el) {\n  if (!isCloning)\n    return false;\n  if (isCloningLegacy)\n    return true;\n  return el.hasAttribute(\"data-has-alpine-state\");\n}\n\n// packages/alpinejs/src/utils/bind.js\nfunction bind(el, name, value, modifiers = []) {\n  if (!el._x_bindings)\n    el._x_bindings = reactive({});\n  el._x_bindings[name] = value;\n  name = modifiers.includes(\"camel\") ? camelCase(name) : name;\n  switch (name) {\n    case \"value\":\n      bindInputValue(el, value);\n      break;\n    case \"style\":\n      bindStyles(el, value);\n      break;\n    case \"class\":\n      bindClasses(el, value);\n      break;\n    case \"selected\":\n    case \"checked\":\n      bindAttributeAndProperty(el, name, value);\n      break;\n    default:\n      bindAttribute(el, name, value);\n      break;\n  }\n}\nfunction bindInputValue(el, value) {\n  if (el.type === \"radio\") {\n    if (el.attributes.value === void 0) {\n      el.value = value;\n    }\n    if (window.fromModel) {\n      el.checked = checkedAttrLooseCompare(el.value, value);\n    }\n  } else if (el.type === \"checkbox\") {\n    if (Number.isInteger(value)) {\n      el.value = value;\n    } else if (!Array.isArray(value) && typeof value !== \"boolean\" && ![null, void 0].includes(value)) {\n      el.value = String(value);\n    } else {\n      if (Array.isArray(value)) {\n        el.checked = value.some((val) => checkedAttrLooseCompare(val, el.value));\n      } else {\n        el.checked = !!value;\n      }\n    }\n  } else if (el.tagName === \"SELECT\") {\n    updateSelect(el, value);\n  } else {\n    if (el.value === value)\n      return;\n    el.value = value === void 0 ? \"\" : value;\n  }\n}\nfunction bindClasses(el, value) {\n  if (el._x_undoAddedClasses)\n    el._x_undoAddedClasses();\n  el._x_undoAddedClasses = setClasses(el, value);\n}\nfunction bindStyles(el, value) {\n  if (el._x_undoAddedStyles)\n    el._x_undoAddedStyles();\n  el._x_undoAddedStyles = setStyles(el, value);\n}\nfunction bindAttributeAndProperty(el, name, value) {\n  bindAttribute(el, name, value);\n  setPropertyIfChanged(el, name, value);\n}\nfunction bindAttribute(el, name, value) {\n  if ([null, void 0, false].includes(value) && attributeShouldntBePreservedIfFalsy(name)) {\n    el.removeAttribute(name);\n  } else {\n    if (isBooleanAttr(name))\n      value = name;\n    setIfChanged(el, name, value);\n  }\n}\nfunction setIfChanged(el, attrName, value) {\n  if (el.getAttribute(attrName) != value) {\n    el.setAttribute(attrName, value);\n  }\n}\nfunction setPropertyIfChanged(el, propName, value) {\n  if (el[propName] !== value) {\n    el[propName] = value;\n  }\n}\nfunction updateSelect(el, value) {\n  const arrayWrappedValue = [].concat(value).map((value2) => {\n    return value2 + \"\";\n  });\n  Array.from(el.options).forEach((option) => {\n    option.selected = arrayWrappedValue.includes(option.value);\n  });\n}\nfunction camelCase(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction checkedAttrLooseCompare(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction isBooleanAttr(attrName) {\n  const booleanAttributes = [\n    \"disabled\",\n    \"checked\",\n    \"required\",\n    \"readonly\",\n    \"hidden\",\n    \"open\",\n    \"selected\",\n    \"autofocus\",\n    \"itemscope\",\n    \"multiple\",\n    \"novalidate\",\n    \"allowfullscreen\",\n    \"allowpaymentrequest\",\n    \"formnovalidate\",\n    \"autoplay\",\n    \"controls\",\n    \"loop\",\n    \"muted\",\n    \"playsinline\",\n    \"default\",\n    \"ismap\",\n    \"reversed\",\n    \"async\",\n    \"defer\",\n    \"nomodule\"\n  ];\n  return booleanAttributes.includes(attrName);\n}\nfunction attributeShouldntBePreservedIfFalsy(name) {\n  return ![\"aria-pressed\", \"aria-checked\", \"aria-expanded\", \"aria-selected\"].includes(name);\n}\nfunction getBinding(el, name, fallback) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  return getAttributeBinding(el, name, fallback);\n}\nfunction extractProp(el, name, fallback, extract = true) {\n  if (el._x_bindings && el._x_bindings[name] !== void 0)\n    return el._x_bindings[name];\n  if (el._x_inlineBindings && el._x_inlineBindings[name] !== void 0) {\n    let binding = el._x_inlineBindings[name];\n    binding.extract = extract;\n    return dontAutoEvaluateFunctions(() => {\n      return evaluate(el, binding.expression);\n    });\n  }\n  return getAttributeBinding(el, name, fallback);\n}\nfunction getAttributeBinding(el, name, fallback) {\n  let attr = el.getAttribute(name);\n  if (attr === null)\n    return typeof fallback === \"function\" ? fallback() : fallback;\n  if (attr === \"\")\n    return true;\n  if (isBooleanAttr(name)) {\n    return !![name, \"true\"].includes(attr);\n  }\n  return attr;\n}\n\n// packages/alpinejs/src/utils/debounce.js\nfunction debounce(func, wait) {\n  var timeout;\n  return function() {\n    var context = this, args = arguments;\n    var later = function() {\n      timeout = null;\n      func.apply(context, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n}\n\n// packages/alpinejs/src/utils/throttle.js\nfunction throttle(func, limit) {\n  let inThrottle;\n  return function() {\n    let context = this, args = arguments;\n    if (!inThrottle) {\n      func.apply(context, args);\n      inThrottle = true;\n      setTimeout(() => inThrottle = false, limit);\n    }\n  };\n}\n\n// packages/alpinejs/src/entangle.js\nfunction entangle({ get: outerGet, set: outerSet }, { get: innerGet, set: innerSet }) {\n  let firstRun = true;\n  let outerHash, innerHash, outerHashLatest, innerHashLatest;\n  let reference = effect(() => {\n    let outer, inner;\n    if (firstRun) {\n      outer = outerGet();\n      innerSet(JSON.parse(JSON.stringify(outer)));\n      inner = innerGet();\n      firstRun = false;\n    } else {\n      outer = outerGet();\n      inner = innerGet();\n      outerHashLatest = JSON.stringify(outer);\n      innerHashLatest = JSON.stringify(inner);\n      if (outerHashLatest !== outerHash) {\n        inner = innerGet();\n        innerSet(outer);\n        inner = outer;\n      } else {\n        outerSet(JSON.parse(innerHashLatest ?? null));\n        outer = inner;\n      }\n    }\n    outerHash = JSON.stringify(outer);\n    innerHash = JSON.stringify(inner);\n  });\n  return () => {\n    release(reference);\n  };\n}\n\n// packages/alpinejs/src/plugin.js\nfunction plugin(callback) {\n  let callbacks = Array.isArray(callback) ? callback : [callback];\n  callbacks.forEach((i) => i(alpine_default));\n}\n\n// packages/alpinejs/src/store.js\nvar stores = {};\nvar isReactive = false;\nfunction store(name, value) {\n  if (!isReactive) {\n    stores = reactive(stores);\n    isReactive = true;\n  }\n  if (value === void 0) {\n    return stores[name];\n  }\n  stores[name] = value;\n  if (typeof value === \"object\" && value !== null && value.hasOwnProperty(\"init\") && typeof value.init === \"function\") {\n    stores[name].init();\n  }\n  initInterceptors2(stores[name]);\n}\nfunction getStores() {\n  return stores;\n}\n\n// packages/alpinejs/src/binds.js\nvar binds = {};\nfunction bind2(name, bindings) {\n  let getBindings = typeof bindings !== \"function\" ? () => bindings : bindings;\n  if (name instanceof Element) {\n    return applyBindingsObject(name, getBindings());\n  } else {\n    binds[name] = getBindings;\n  }\n  return () => {\n  };\n}\nfunction injectBindingProviders(obj) {\n  Object.entries(binds).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback(...args);\n        };\n      }\n    });\n  });\n  return obj;\n}\nfunction applyBindingsObject(el, obj, original) {\n  let cleanupRunners = [];\n  while (cleanupRunners.length)\n    cleanupRunners.pop()();\n  let attributes = Object.entries(obj).map(([name, value]) => ({ name, value }));\n  let staticAttributes = attributesOnly(attributes);\n  attributes = attributes.map((attribute) => {\n    if (staticAttributes.find((attr) => attr.name === attribute.name)) {\n      return {\n        name: `x-bind:${attribute.name}`,\n        value: `\"${attribute.value}\"`\n      };\n    }\n    return attribute;\n  });\n  directives(el, attributes, original).map((handle) => {\n    cleanupRunners.push(handle.runCleanups);\n    handle();\n  });\n  return () => {\n    while (cleanupRunners.length)\n      cleanupRunners.pop()();\n  };\n}\n\n// packages/alpinejs/src/datas.js\nvar datas = {};\nfunction data(name, callback) {\n  datas[name] = callback;\n}\nfunction injectDataProviders(obj, context) {\n  Object.entries(datas).forEach(([name, callback]) => {\n    Object.defineProperty(obj, name, {\n      get() {\n        return (...args) => {\n          return callback.bind(context)(...args);\n        };\n      },\n      enumerable: false\n    });\n  });\n  return obj;\n}\n\n// packages/alpinejs/src/alpine.js\nvar Alpine = {\n  get reactive() {\n    return reactive;\n  },\n  get release() {\n    return release;\n  },\n  get effect() {\n    return effect;\n  },\n  get raw() {\n    return raw;\n  },\n  version: \"3.13.1\",\n  flushAndStopDeferringMutations,\n  dontAutoEvaluateFunctions,\n  disableEffectScheduling,\n  startObservingMutations,\n  stopObservingMutations,\n  setReactivityEngine,\n  onAttributeRemoved,\n  onAttributesAdded,\n  closestDataStack,\n  skipDuringClone,\n  onlyDuringClone,\n  addRootSelector,\n  addInitSelector,\n  addScopeToNode,\n  deferMutations,\n  mapAttributes,\n  evaluateLater,\n  interceptInit,\n  setEvaluator,\n  mergeProxies,\n  extractProp,\n  findClosest,\n  onElRemoved,\n  closestRoot,\n  destroyTree,\n  interceptor,\n  // INTERNAL: not public API and is subject to change without major release.\n  transition,\n  // INTERNAL\n  setStyles,\n  // INTERNAL\n  mutateDom,\n  directive,\n  entangle,\n  throttle,\n  debounce,\n  evaluate,\n  initTree,\n  nextTick,\n  prefixed: prefix,\n  prefix: setPrefix,\n  plugin,\n  magic,\n  store,\n  start,\n  clone,\n  // INTERNAL\n  cloneNode,\n  // INTERNAL\n  bound: getBinding,\n  $data: scope,\n  walk,\n  data,\n  bind: bind2\n};\nvar alpine_default = Alpine;\n\n// node_modules/@vue/shared/dist/shared.esm-bundler.js\nfunction makeMap(str, expectsLowerCase) {\n  const map = /* @__PURE__ */ Object.create(null);\n  const list = str.split(\",\");\n  for (let i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\nvar specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nvar isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);\nvar EMPTY_OBJ = true ? Object.freeze({}) : {};\nvar EMPTY_ARR = true ? Object.freeze([]) : [];\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hasOwn = (val, key) => hasOwnProperty.call(val, key);\nvar isArray = Array.isArray;\nvar isMap = (val) => toTypeString(val) === \"[object Map]\";\nvar isString = (val) => typeof val === \"string\";\nvar isSymbol = (val) => typeof val === \"symbol\";\nvar isObject = (val) => val !== null && typeof val === \"object\";\nvar objectToString = Object.prototype.toString;\nvar toTypeString = (value) => objectToString.call(value);\nvar toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nvar isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nvar cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nvar capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\nvar toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\nvar hasChanged = (value, oldValue) => value !== oldValue && (value === value || oldValue === oldValue);\n\n// node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js\nvar targetMap = /* @__PURE__ */ new WeakMap();\nvar effectStack = [];\nvar activeEffect;\nvar ITERATE_KEY = Symbol(true ? \"iterate\" : \"\");\nvar MAP_KEY_ITERATE_KEY = Symbol(true ? \"Map key iterate\" : \"\");\nfunction isEffect(fn) {\n  return fn && fn._isEffect === true;\n}\nfunction effect2(fn, options = EMPTY_OBJ) {\n  if (isEffect(fn)) {\n    fn = fn.raw;\n  }\n  const effect3 = createReactiveEffect(fn, options);\n  if (!options.lazy) {\n    effect3();\n  }\n  return effect3;\n}\nfunction stop(effect3) {\n  if (effect3.active) {\n    cleanup(effect3);\n    if (effect3.options.onStop) {\n      effect3.options.onStop();\n    }\n    effect3.active = false;\n  }\n}\nvar uid = 0;\nfunction createReactiveEffect(fn, options) {\n  const effect3 = function reactiveEffect() {\n    if (!effect3.active) {\n      return fn();\n    }\n    if (!effectStack.includes(effect3)) {\n      cleanup(effect3);\n      try {\n        enableTracking();\n        effectStack.push(effect3);\n        activeEffect = effect3;\n        return fn();\n      } finally {\n        effectStack.pop();\n        resetTracking();\n        activeEffect = effectStack[effectStack.length - 1];\n      }\n    }\n  };\n  effect3.id = uid++;\n  effect3.allowRecurse = !!options.allowRecurse;\n  effect3._isEffect = true;\n  effect3.active = true;\n  effect3.raw = fn;\n  effect3.deps = [];\n  effect3.options = options;\n  return effect3;\n}\nfunction cleanup(effect3) {\n  const { deps } = effect3;\n  if (deps.length) {\n    for (let i = 0; i < deps.length; i++) {\n      deps[i].delete(effect3);\n    }\n    deps.length = 0;\n  }\n}\nvar shouldTrack = true;\nvar trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction enableTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = true;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction track(target, type, key) {\n  if (!shouldTrack || activeEffect === void 0) {\n    return;\n  }\n  let depsMap = targetMap.get(target);\n  if (!depsMap) {\n    targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n  }\n  let dep = depsMap.get(key);\n  if (!dep) {\n    depsMap.set(key, dep = /* @__PURE__ */ new Set());\n  }\n  if (!dep.has(activeEffect)) {\n    dep.add(activeEffect);\n    activeEffect.deps.push(dep);\n    if (activeEffect.options.onTrack) {\n      activeEffect.options.onTrack({\n        effect: activeEffect,\n        target,\n        type,\n        key\n      });\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    return;\n  }\n  const effects = /* @__PURE__ */ new Set();\n  const add2 = (effectsToAdd) => {\n    if (effectsToAdd) {\n      effectsToAdd.forEach((effect3) => {\n        if (effect3 !== activeEffect || effect3.allowRecurse) {\n          effects.add(effect3);\n        }\n      });\n    }\n  };\n  if (type === \"clear\") {\n    depsMap.forEach(add2);\n  } else if (key === \"length\" && isArray(target)) {\n    depsMap.forEach((dep, key2) => {\n      if (key2 === \"length\" || key2 >= newValue) {\n        add2(dep);\n      }\n    });\n  } else {\n    if (key !== void 0) {\n      add2(depsMap.get(key));\n    }\n    switch (type) {\n      case \"add\":\n        if (!isArray(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        } else if (isIntegerKey(key)) {\n          add2(depsMap.get(\"length\"));\n        }\n        break;\n      case \"delete\":\n        if (!isArray(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n          if (isMap(target)) {\n            add2(depsMap.get(MAP_KEY_ITERATE_KEY));\n          }\n        }\n        break;\n      case \"set\":\n        if (isMap(target)) {\n          add2(depsMap.get(ITERATE_KEY));\n        }\n        break;\n    }\n  }\n  const run = (effect3) => {\n    if (effect3.options.onTrigger) {\n      effect3.options.onTrigger({\n        effect: effect3,\n        target,\n        key,\n        type,\n        newValue,\n        oldValue,\n        oldTarget\n      });\n    }\n    if (effect3.options.scheduler) {\n      effect3.options.scheduler(effect3);\n    } else {\n      effect3();\n    }\n  };\n  effects.forEach(run);\n}\nvar isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nvar builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(isSymbol));\nvar get2 = /* @__PURE__ */ createGetter();\nvar readonlyGet = /* @__PURE__ */ createGetter(true);\nvar arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n  const instrumentations = {};\n  [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      const arr = toRaw(this);\n      for (let i = 0, l = this.length; i < l; i++) {\n        track(arr, \"get\", i + \"\");\n      }\n      const res = arr[key](...args);\n      if (res === -1 || res === false) {\n        return arr[key](...args.map(toRaw));\n      } else {\n        return res;\n      }\n    };\n  });\n  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n    instrumentations[key] = function(...args) {\n      pauseTracking();\n      const res = toRaw(this)[key].apply(this, args);\n      resetTracking();\n      return res;\n    };\n  });\n  return instrumentations;\n}\nfunction createGetter(isReadonly = false, shallow = false) {\n  return function get3(target, key, receiver) {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly;\n    } else if (key === \"__v_raw\" && receiver === (isReadonly ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n      return target;\n    }\n    const targetIsArray = isArray(target);\n    if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\n      return Reflect.get(arrayInstrumentations, key, receiver);\n    }\n    const res = Reflect.get(target, key, receiver);\n    if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly) {\n      track(target, \"get\", key);\n    }\n    if (shallow) {\n      return res;\n    }\n    if (isRef(res)) {\n      const shouldUnwrap = !targetIsArray || !isIntegerKey(key);\n      return shouldUnwrap ? res.value : res;\n    }\n    if (isObject(res)) {\n      return isReadonly ? readonly(res) : reactive2(res);\n    }\n    return res;\n  };\n}\nvar set2 = /* @__PURE__ */ createSetter();\nfunction createSetter(shallow = false) {\n  return function set3(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (!shallow) {\n      value = toRaw(value);\n      oldValue = toRaw(oldValue);\n      if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n        oldValue.value = value;\n        return true;\n      }\n    }\n    const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n    const result = Reflect.set(target, key, value, receiver);\n    if (target === toRaw(receiver)) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value, oldValue);\n      }\n    }\n    return result;\n  };\n}\nfunction deleteProperty(target, key) {\n  const hadKey = hasOwn(target, key);\n  const oldValue = target[key];\n  const result = Reflect.deleteProperty(target, key);\n  if (result && hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction has(target, key) {\n  const result = Reflect.has(target, key);\n  if (!isSymbol(key) || !builtInSymbols.has(key)) {\n    track(target, \"has\", key);\n  }\n  return result;\n}\nfunction ownKeys(target) {\n  track(target, \"iterate\", isArray(target) ? \"length\" : ITERATE_KEY);\n  return Reflect.ownKeys(target);\n}\nvar mutableHandlers = {\n  get: get2,\n  set: set2,\n  deleteProperty,\n  has,\n  ownKeys\n};\nvar readonlyHandlers = {\n  get: readonlyGet,\n  set(target, key) {\n    if (true) {\n      console.warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\n    }\n    return true;\n  },\n  deleteProperty(target, key) {\n    if (true) {\n      console.warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\n    }\n    return true;\n  }\n};\nvar toReactive = (value) => isObject(value) ? reactive2(value) : value;\nvar toReadonly = (value) => isObject(value) ? readonly(value) : value;\nvar toShallow = (value) => value;\nvar getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\n  target = target[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (key !== rawKey) {\n    !isReadonly && track(rawTarget, \"get\", key);\n  }\n  !isReadonly && track(rawTarget, \"get\", rawKey);\n  const { has: has2 } = getProto(rawTarget);\n  const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n  if (has2.call(rawTarget, key)) {\n    return wrap(target.get(key));\n  } else if (has2.call(rawTarget, rawKey)) {\n    return wrap(target.get(rawKey));\n  } else if (target !== rawTarget) {\n    target.get(key);\n  }\n}\nfunction has$1(key, isReadonly = false) {\n  const target = this[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  const rawTarget = toRaw(target);\n  const rawKey = toRaw(key);\n  if (key !== rawKey) {\n    !isReadonly && track(rawTarget, \"has\", key);\n  }\n  !isReadonly && track(rawTarget, \"has\", rawKey);\n  return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n  target = target[\n    \"__v_raw\"\n    /* RAW */\n  ];\n  !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n  return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const proto = getProto(target);\n  const hadKey = proto.has.call(target, value);\n  if (!hadKey) {\n    target.add(value);\n    trigger(target, \"add\", value, value);\n  }\n  return this;\n}\nfunction set$1(key, value) {\n  value = toRaw(value);\n  const target = toRaw(this);\n  const { has: has2, get: get3 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (true) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get3.call(target, key);\n  target.set(key, value);\n  if (!hadKey) {\n    trigger(target, \"add\", key, value);\n  } else if (hasChanged(value, oldValue)) {\n    trigger(target, \"set\", key, value, oldValue);\n  }\n  return this;\n}\nfunction deleteEntry(key) {\n  const target = toRaw(this);\n  const { has: has2, get: get3 } = getProto(target);\n  let hadKey = has2.call(target, key);\n  if (!hadKey) {\n    key = toRaw(key);\n    hadKey = has2.call(target, key);\n  } else if (true) {\n    checkIdentityKeys(target, has2, key);\n  }\n  const oldValue = get3 ? get3.call(target, key) : void 0;\n  const result = target.delete(key);\n  if (hadKey) {\n    trigger(target, \"delete\", key, void 0, oldValue);\n  }\n  return result;\n}\nfunction clear() {\n  const target = toRaw(this);\n  const hadItems = target.size !== 0;\n  const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n  const result = target.clear();\n  if (hadItems) {\n    trigger(target, \"clear\", void 0, void 0, oldTarget);\n  }\n  return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n  return function forEach(callback, thisArg) {\n    const observed = this;\n    const target = observed[\n      \"__v_raw\"\n      /* RAW */\n    ];\n    const rawTarget = toRaw(target);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n    return target.forEach((value, key) => {\n      return callback.call(thisArg, wrap(value), wrap(key), observed);\n    });\n  };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n  return function(...args) {\n    const target = this[\n      \"__v_raw\"\n      /* RAW */\n    ];\n    const rawTarget = toRaw(target);\n    const targetIsMap = isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n    !isReadonly && track(rawTarget, \"iterate\", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\n    return {\n      // iterator protocol\n      next() {\n        const { value, done } = innerIterator.next();\n        return done ? { value, done } : {\n          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n          done\n        };\n      },\n      // iterable protocol\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    if (true) {\n      const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n      console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\n    }\n    return type === \"delete\" ? false : this;\n  };\n}\nfunction createInstrumentations() {\n  const mutableInstrumentations2 = {\n    get(key) {\n      return get$1(this, key);\n    },\n    get size() {\n      return size(this);\n    },\n    has: has$1,\n    add,\n    set: set$1,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, false)\n  };\n  const shallowInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, false, true);\n    },\n    get size() {\n      return size(this);\n    },\n    has: has$1,\n    add,\n    set: set$1,\n    delete: deleteEntry,\n    clear,\n    forEach: createForEach(false, true)\n  };\n  const readonlyInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has$1.call(this, key, true);\n    },\n    add: createReadonlyMethod(\n      \"add\"\n      /* ADD */\n    ),\n    set: createReadonlyMethod(\n      \"set\"\n      /* SET */\n    ),\n    delete: createReadonlyMethod(\n      \"delete\"\n      /* DELETE */\n    ),\n    clear: createReadonlyMethod(\n      \"clear\"\n      /* CLEAR */\n    ),\n    forEach: createForEach(true, false)\n  };\n  const shallowReadonlyInstrumentations2 = {\n    get(key) {\n      return get$1(this, key, true, true);\n    },\n    get size() {\n      return size(this, true);\n    },\n    has(key) {\n      return has$1.call(this, key, true);\n    },\n    add: createReadonlyMethod(\n      \"add\"\n      /* ADD */\n    ),\n    set: createReadonlyMethod(\n      \"set\"\n      /* SET */\n    ),\n    delete: createReadonlyMethod(\n      \"delete\"\n      /* DELETE */\n    ),\n    clear: createReadonlyMethod(\n      \"clear\"\n      /* CLEAR */\n    ),\n    forEach: createForEach(true, true)\n  };\n  const iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n  iteratorMethods.forEach((method) => {\n    mutableInstrumentations2[method] = createIterableMethod(method, false, false);\n    readonlyInstrumentations2[method] = createIterableMethod(method, true, false);\n    shallowInstrumentations2[method] = createIterableMethod(method, false, true);\n    shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true);\n  });\n  return [\n    mutableInstrumentations2,\n    readonlyInstrumentations2,\n    shallowInstrumentations2,\n    shallowReadonlyInstrumentations2\n  ];\n}\nvar [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n  const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);\n  };\n}\nvar mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nvar readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nfunction checkIdentityKeys(target, has2, key) {\n  const rawKey = toRaw(key);\n  if (rawKey !== key && has2.call(target, rawKey)) {\n    const type = toRawType(target);\n    console.warn(`Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);\n  }\n}\nvar reactiveMap = /* @__PURE__ */ new WeakMap();\nvar shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nvar readonlyMap = /* @__PURE__ */ new WeakMap();\nvar shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getTargetType(value) {\n  return value[\n    \"__v_skip\"\n    /* SKIP */\n  ] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));\n}\nfunction reactive2(target) {\n  if (target && target[\n    \"__v_isReadonly\"\n    /* IS_READONLY */\n  ]) {\n    return target;\n  }\n  return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\n}\nfunction readonly(target) {\n  return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\n}\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\n  if (!isObject(target)) {\n    if (true) {\n      console.warn(`value cannot be made reactive: ${String(target)}`);\n    }\n    return target;\n  }\n  if (target[\n    \"__v_raw\"\n    /* RAW */\n  ] && !(isReadonly && target[\n    \"__v_isReactive\"\n    /* IS_REACTIVE */\n  ])) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const targetType = getTargetType(target);\n  if (targetType === 0) {\n    return target;\n  }\n  const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction toRaw(observed) {\n  return observed && toRaw(observed[\n    \"__v_raw\"\n    /* RAW */\n  ]) || observed;\n}\nfunction isRef(r) {\n  return Boolean(r && r.__v_isRef === true);\n}\n\n// packages/alpinejs/src/magics/$nextTick.js\nmagic(\"nextTick\", () => nextTick);\n\n// packages/alpinejs/src/magics/$dispatch.js\nmagic(\"dispatch\", (el) => dispatch.bind(dispatch, el));\n\n// packages/alpinejs/src/magics/$watch.js\nmagic(\"watch\", (el, { evaluateLater: evaluateLater2, effect: effect3 }) => (key, callback) => {\n  let evaluate2 = evaluateLater2(key);\n  let firstTime = true;\n  let oldValue;\n  let effectReference = effect3(() => evaluate2((value) => {\n    JSON.stringify(value);\n    if (!firstTime) {\n      queueMicrotask(() => {\n        callback(value, oldValue);\n        oldValue = value;\n      });\n    } else {\n      oldValue = value;\n    }\n    firstTime = false;\n  }));\n  el._x_effects.delete(effectReference);\n});\n\n// packages/alpinejs/src/magics/$store.js\nmagic(\"store\", getStores);\n\n// packages/alpinejs/src/magics/$data.js\nmagic(\"data\", (el) => scope(el));\n\n// packages/alpinejs/src/magics/$root.js\nmagic(\"root\", (el) => closestRoot(el));\n\n// packages/alpinejs/src/magics/$refs.js\nmagic(\"refs\", (el) => {\n  if (el._x_refs_proxy)\n    return el._x_refs_proxy;\n  el._x_refs_proxy = mergeProxies(getArrayOfRefObject(el));\n  return el._x_refs_proxy;\n});\nfunction getArrayOfRefObject(el) {\n  let refObjects = [];\n  let currentEl = el;\n  while (currentEl) {\n    if (currentEl._x_refs)\n      refObjects.push(currentEl._x_refs);\n    currentEl = currentEl.parentNode;\n  }\n  return refObjects;\n}\n\n// packages/alpinejs/src/ids.js\nvar globalIdMemo = {};\nfunction findAndIncrementId(name) {\n  if (!globalIdMemo[name])\n    globalIdMemo[name] = 0;\n  return ++globalIdMemo[name];\n}\nfunction closestIdRoot(el, name) {\n  return findClosest(el, (element) => {\n    if (element._x_ids && element._x_ids[name])\n      return true;\n  });\n}\nfunction setIdRoot(el, name) {\n  if (!el._x_ids)\n    el._x_ids = {};\n  if (!el._x_ids[name])\n    el._x_ids[name] = findAndIncrementId(name);\n}\n\n// packages/alpinejs/src/magics/$id.js\nmagic(\"id\", (el) => (name, key = null) => {\n  let root = closestIdRoot(el, name);\n  let id = root ? root._x_ids[name] : findAndIncrementId(name);\n  return key ? `${name}-${id}-${key}` : `${name}-${id}`;\n});\n\n// packages/alpinejs/src/magics/$el.js\nmagic(\"el\", (el) => el);\n\n// packages/alpinejs/src/magics/index.js\nwarnMissingPluginMagic(\"Focus\", \"focus\", \"focus\");\nwarnMissingPluginMagic(\"Persist\", \"persist\", \"persist\");\nfunction warnMissingPluginMagic(name, magicName, slug) {\n  magic(magicName, (el) => warn(`You can't use [$${magicName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/directives/x-modelable.js\ndirective(\"modelable\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2, cleanup: cleanup2 }) => {\n  let func = evaluateLater2(expression);\n  let innerGet = () => {\n    let result;\n    func((i) => result = i);\n    return result;\n  };\n  let evaluateInnerSet = evaluateLater2(`${expression} = __placeholder`);\n  let innerSet = (val) => evaluateInnerSet(() => {\n  }, { scope: { \"__placeholder\": val } });\n  let initialValue = innerGet();\n  innerSet(initialValue);\n  queueMicrotask(() => {\n    if (!el._x_model)\n      return;\n    el._x_removeModelListeners[\"default\"]();\n    let outerGet = el._x_model.get;\n    let outerSet = el._x_model.set;\n    let releaseEntanglement = entangle(\n      {\n        get() {\n          return outerGet();\n        },\n        set(value) {\n          outerSet(value);\n        }\n      },\n      {\n        get() {\n          return innerGet();\n        },\n        set(value) {\n          innerSet(value);\n        }\n      }\n    );\n    cleanup2(releaseEntanglement);\n  });\n});\n\n// packages/alpinejs/src/directives/x-teleport.js\ndirective(\"teleport\", (el, { modifiers, expression }, { cleanup: cleanup2 }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-teleport can only be used on a <template> tag\", el);\n  let target = getTarget(expression);\n  let clone2 = el.content.cloneNode(true).firstElementChild;\n  el._x_teleport = clone2;\n  clone2._x_teleportBack = el;\n  el.setAttribute(\"data-teleport-template\", true);\n  clone2.setAttribute(\"data-teleport-target\", true);\n  if (el._x_forwardEvents) {\n    el._x_forwardEvents.forEach((eventName) => {\n      clone2.addEventListener(eventName, (e) => {\n        e.stopPropagation();\n        el.dispatchEvent(new e.constructor(e.type, e));\n      });\n    });\n  }\n  addScopeToNode(clone2, {}, el);\n  let placeInDom = (clone3, target2, modifiers2) => {\n    if (modifiers2.includes(\"prepend\")) {\n      target2.parentNode.insertBefore(clone3, target2);\n    } else if (modifiers2.includes(\"append\")) {\n      target2.parentNode.insertBefore(clone3, target2.nextSibling);\n    } else {\n      target2.appendChild(clone3);\n    }\n  };\n  mutateDom(() => {\n    placeInDom(clone2, target, modifiers);\n    initTree(clone2);\n    clone2._x_ignore = true;\n  });\n  el._x_teleportPutBack = () => {\n    let target2 = getTarget(expression);\n    mutateDom(() => {\n      placeInDom(el._x_teleport, target2, modifiers);\n    });\n  };\n  cleanup2(() => clone2.remove());\n});\nvar teleportContainerDuringClone = document.createElement(\"div\");\nfunction getTarget(expression) {\n  let target = skipDuringClone(() => {\n    return document.querySelector(expression);\n  }, () => {\n    return teleportContainerDuringClone;\n  })();\n  if (!target)\n    warn(`Cannot find x-teleport element for selector: \"${expression}\"`);\n  return target;\n}\n\n// packages/alpinejs/src/directives/x-ignore.js\nvar handler = () => {\n};\nhandler.inline = (el, { modifiers }, { cleanup: cleanup2 }) => {\n  modifiers.includes(\"self\") ? el._x_ignoreSelf = true : el._x_ignore = true;\n  cleanup2(() => {\n    modifiers.includes(\"self\") ? delete el._x_ignoreSelf : delete el._x_ignore;\n  });\n};\ndirective(\"ignore\", handler);\n\n// packages/alpinejs/src/directives/x-effect.js\ndirective(\"effect\", (el, { expression }, { effect: effect3 }) => effect3(evaluateLater(el, expression)));\n\n// packages/alpinejs/src/utils/on.js\nfunction on(el, event, modifiers, callback) {\n  let listenerTarget = el;\n  let handler4 = (e) => callback(e);\n  let options = {};\n  let wrapHandler = (callback2, wrapper) => (e) => wrapper(callback2, e);\n  if (modifiers.includes(\"dot\"))\n    event = dotSyntax(event);\n  if (modifiers.includes(\"camel\"))\n    event = camelCase2(event);\n  if (modifiers.includes(\"passive\"))\n    options.passive = true;\n  if (modifiers.includes(\"capture\"))\n    options.capture = true;\n  if (modifiers.includes(\"window\"))\n    listenerTarget = window;\n  if (modifiers.includes(\"document\"))\n    listenerTarget = document;\n  if (modifiers.includes(\"debounce\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"debounce\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = debounce(handler4, wait);\n  }\n  if (modifiers.includes(\"throttle\")) {\n    let nextModifier = modifiers[modifiers.indexOf(\"throttle\") + 1] || \"invalid-wait\";\n    let wait = isNumeric(nextModifier.split(\"ms\")[0]) ? Number(nextModifier.split(\"ms\")[0]) : 250;\n    handler4 = throttle(handler4, wait);\n  }\n  if (modifiers.includes(\"prevent\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.preventDefault();\n      next(e);\n    });\n  if (modifiers.includes(\"stop\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.stopPropagation();\n      next(e);\n    });\n  if (modifiers.includes(\"self\"))\n    handler4 = wrapHandler(handler4, (next, e) => {\n      e.target === el && next(e);\n    });\n  if (modifiers.includes(\"away\") || modifiers.includes(\"outside\")) {\n    listenerTarget = document;\n    handler4 = wrapHandler(handler4, (next, e) => {\n      if (el.contains(e.target))\n        return;\n      if (e.target.isConnected === false)\n        return;\n      if (el.offsetWidth < 1 && el.offsetHeight < 1)\n        return;\n      if (el._x_isShown === false)\n        return;\n      next(e);\n    });\n  }\n  if (modifiers.includes(\"once\")) {\n    handler4 = wrapHandler(handler4, (next, e) => {\n      next(e);\n      listenerTarget.removeEventListener(event, handler4, options);\n    });\n  }\n  handler4 = wrapHandler(handler4, (next, e) => {\n    if (isKeyEvent(event)) {\n      if (isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers)) {\n        return;\n      }\n    }\n    next(e);\n  });\n  listenerTarget.addEventListener(event, handler4, options);\n  return () => {\n    listenerTarget.removeEventListener(event, handler4, options);\n  };\n}\nfunction dotSyntax(subject) {\n  return subject.replace(/-/g, \".\");\n}\nfunction camelCase2(subject) {\n  return subject.toLowerCase().replace(/-(\\w)/g, (match, char) => char.toUpperCase());\n}\nfunction isNumeric(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction kebabCase2(subject) {\n  if ([\" \", \"_\"].includes(\n    subject\n  ))\n    return subject;\n  return subject.replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/[_\\s]/, \"-\").toLowerCase();\n}\nfunction isKeyEvent(event) {\n  return [\"keydown\", \"keyup\"].includes(event);\n}\nfunction isListeningForASpecificKeyThatHasntBeenPressed(e, modifiers) {\n  let keyModifiers = modifiers.filter((i) => {\n    return ![\"window\", \"document\", \"prevent\", \"stop\", \"once\", \"capture\"].includes(i);\n  });\n  if (keyModifiers.includes(\"debounce\")) {\n    let debounceIndex = keyModifiers.indexOf(\"debounce\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.includes(\"throttle\")) {\n    let debounceIndex = keyModifiers.indexOf(\"throttle\");\n    keyModifiers.splice(debounceIndex, isNumeric((keyModifiers[debounceIndex + 1] || \"invalid-wait\").split(\"ms\")[0]) ? 2 : 1);\n  }\n  if (keyModifiers.length === 0)\n    return false;\n  if (keyModifiers.length === 1 && keyToModifiers(e.key).includes(keyModifiers[0]))\n    return false;\n  const systemKeyModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\", \"super\"];\n  const selectedSystemKeyModifiers = systemKeyModifiers.filter((modifier) => keyModifiers.includes(modifier));\n  keyModifiers = keyModifiers.filter((i) => !selectedSystemKeyModifiers.includes(i));\n  if (selectedSystemKeyModifiers.length > 0) {\n    const activelyPressedKeyModifiers = selectedSystemKeyModifiers.filter((modifier) => {\n      if (modifier === \"cmd\" || modifier === \"super\")\n        modifier = \"meta\";\n      return e[`${modifier}Key`];\n    });\n    if (activelyPressedKeyModifiers.length === selectedSystemKeyModifiers.length) {\n      if (keyToModifiers(e.key).includes(keyModifiers[0]))\n        return false;\n    }\n  }\n  return true;\n}\nfunction keyToModifiers(key) {\n  if (!key)\n    return [];\n  key = kebabCase2(key);\n  let modifierToKeyMap = {\n    \"ctrl\": \"control\",\n    \"slash\": \"/\",\n    \"space\": \" \",\n    \"spacebar\": \" \",\n    \"cmd\": \"meta\",\n    \"esc\": \"escape\",\n    \"up\": \"arrow-up\",\n    \"down\": \"arrow-down\",\n    \"left\": \"arrow-left\",\n    \"right\": \"arrow-right\",\n    \"period\": \".\",\n    \"equal\": \"=\",\n    \"minus\": \"-\",\n    \"underscore\": \"_\"\n  };\n  modifierToKeyMap[key] = key;\n  return Object.keys(modifierToKeyMap).map((modifier) => {\n    if (modifierToKeyMap[modifier] === key)\n      return modifier;\n  }).filter((modifier) => modifier);\n}\n\n// packages/alpinejs/src/directives/x-model.js\ndirective(\"model\", (el, { modifiers, expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  let scopeTarget = el;\n  if (modifiers.includes(\"parent\")) {\n    scopeTarget = el.parentNode;\n  }\n  let evaluateGet = evaluateLater(scopeTarget, expression);\n  let evaluateSet;\n  if (typeof expression === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression} = __placeholder`);\n  } else if (typeof expression === \"function\" && typeof expression() === \"string\") {\n    evaluateSet = evaluateLater(scopeTarget, `${expression()} = __placeholder`);\n  } else {\n    evaluateSet = () => {\n    };\n  }\n  let getValue = () => {\n    let result;\n    evaluateGet((value) => result = value);\n    return isGetterSetter(result) ? result.get() : result;\n  };\n  let setValue = (value) => {\n    let result;\n    evaluateGet((value2) => result = value2);\n    if (isGetterSetter(result)) {\n      result.set(value);\n    } else {\n      evaluateSet(() => {\n      }, {\n        scope: { \"__placeholder\": value }\n      });\n    }\n  };\n  if (typeof expression === \"string\" && el.type === \"radio\") {\n    mutateDom(() => {\n      if (!el.hasAttribute(\"name\"))\n        el.setAttribute(\"name\", expression);\n    });\n  }\n  var event = el.tagName.toLowerCase() === \"select\" || [\"checkbox\", \"radio\"].includes(el.type) || modifiers.includes(\"lazy\") ? \"change\" : \"input\";\n  let removeListener = isCloning ? () => {\n  } : on(el, event, modifiers, (e) => {\n    setValue(getInputValue(el, modifiers, e, getValue()));\n  });\n  if (modifiers.includes(\"fill\")) {\n    if ([null, \"\"].includes(getValue()) || el.type === \"checkbox\" && Array.isArray(getValue())) {\n      el.dispatchEvent(new Event(event, {}));\n    }\n  }\n  if (!el._x_removeModelListeners)\n    el._x_removeModelListeners = {};\n  el._x_removeModelListeners[\"default\"] = removeListener;\n  cleanup2(() => el._x_removeModelListeners[\"default\"]());\n  if (el.form) {\n    let removeResetListener = on(el.form, \"reset\", [], (e) => {\n      nextTick(() => el._x_model && el._x_model.set(el.value));\n    });\n    cleanup2(() => removeResetListener());\n  }\n  el._x_model = {\n    get() {\n      return getValue();\n    },\n    set(value) {\n      setValue(value);\n    }\n  };\n  el._x_forceModelUpdate = (value) => {\n    if (value === void 0 && typeof expression === \"string\" && expression.match(/\\./))\n      value = \"\";\n    window.fromModel = true;\n    mutateDom(() => bind(el, \"value\", value));\n    delete window.fromModel;\n  };\n  effect3(() => {\n    let value = getValue();\n    if (modifiers.includes(\"unintrusive\") && document.activeElement.isSameNode(el))\n      return;\n    el._x_forceModelUpdate(value);\n  });\n});\nfunction getInputValue(el, modifiers, event, currentValue) {\n  return mutateDom(() => {\n    if (event instanceof CustomEvent && event.detail !== void 0)\n      return event.detail !== null && event.detail !== void 0 ? event.detail : event.target.value;\n    else if (el.type === \"checkbox\") {\n      if (Array.isArray(currentValue)) {\n        let newValue = modifiers.includes(\"number\") ? safeParseNumber(event.target.value) : event.target.value;\n        return event.target.checked ? currentValue.concat([newValue]) : currentValue.filter((el2) => !checkedAttrLooseCompare2(el2, newValue));\n      } else {\n        return event.target.checked;\n      }\n    } else if (el.tagName.toLowerCase() === \"select\" && el.multiple) {\n      return modifiers.includes(\"number\") ? Array.from(event.target.selectedOptions).map((option) => {\n        let rawValue = option.value || option.text;\n        return safeParseNumber(rawValue);\n      }) : Array.from(event.target.selectedOptions).map((option) => {\n        return option.value || option.text;\n      });\n    } else {\n      let rawValue = event.target.value;\n      return modifiers.includes(\"number\") ? safeParseNumber(rawValue) : modifiers.includes(\"trim\") ? rawValue.trim() : rawValue;\n    }\n  });\n}\nfunction safeParseNumber(rawValue) {\n  let number = rawValue ? parseFloat(rawValue) : null;\n  return isNumeric2(number) ? number : rawValue;\n}\nfunction checkedAttrLooseCompare2(valueA, valueB) {\n  return valueA == valueB;\n}\nfunction isNumeric2(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\nfunction isGetterSetter(value) {\n  return value !== null && typeof value === \"object\" && typeof value.get === \"function\" && typeof value.set === \"function\";\n}\n\n// packages/alpinejs/src/directives/x-cloak.js\ndirective(\"cloak\", (el) => queueMicrotask(() => mutateDom(() => el.removeAttribute(prefix(\"cloak\")))));\n\n// packages/alpinejs/src/directives/x-init.js\naddInitSelector(() => `[${prefix(\"init\")}]`);\ndirective(\"init\", skipDuringClone((el, { expression }, { evaluate: evaluate2 }) => {\n  if (typeof expression === \"string\") {\n    return !!expression.trim() && evaluate2(expression, {}, false);\n  }\n  return evaluate2(expression, {}, false);\n}));\n\n// packages/alpinejs/src/directives/x-text.js\ndirective(\"text\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        el.textContent = value;\n      });\n    });\n  });\n});\n\n// packages/alpinejs/src/directives/x-html.js\ndirective(\"html\", (el, { expression }, { effect: effect3, evaluateLater: evaluateLater2 }) => {\n  let evaluate2 = evaluateLater2(expression);\n  effect3(() => {\n    evaluate2((value) => {\n      mutateDom(() => {\n        el.innerHTML = value;\n        el._x_ignoreSelf = true;\n        initTree(el);\n        delete el._x_ignoreSelf;\n      });\n    });\n  });\n});\n\n// packages/alpinejs/src/directives/x-bind.js\nmapAttributes(startingWith(\":\", into(prefix(\"bind:\"))));\nvar handler2 = (el, { value, modifiers, expression, original }, { effect: effect3 }) => {\n  if (!value) {\n    let bindingProviders = {};\n    injectBindingProviders(bindingProviders);\n    let getBindings = evaluateLater(el, expression);\n    getBindings((bindings) => {\n      applyBindingsObject(el, bindings, original);\n    }, { scope: bindingProviders });\n    return;\n  }\n  if (value === \"key\")\n    return storeKeyForXFor(el, expression);\n  if (el._x_inlineBindings && el._x_inlineBindings[value] && el._x_inlineBindings[value].extract) {\n    return;\n  }\n  let evaluate2 = evaluateLater(el, expression);\n  effect3(() => evaluate2((result) => {\n    if (result === void 0 && typeof expression === \"string\" && expression.match(/\\./)) {\n      result = \"\";\n    }\n    mutateDom(() => bind(el, value, result, modifiers));\n  }));\n};\nhandler2.inline = (el, { value, modifiers, expression }) => {\n  if (!value)\n    return;\n  if (!el._x_inlineBindings)\n    el._x_inlineBindings = {};\n  el._x_inlineBindings[value] = { expression, extract: false };\n};\ndirective(\"bind\", handler2);\nfunction storeKeyForXFor(el, expression) {\n  el._x_keyExpression = expression;\n}\n\n// packages/alpinejs/src/directives/x-data.js\naddRootSelector(() => `[${prefix(\"data\")}]`);\ndirective(\"data\", (el, { expression }, { cleanup: cleanup2 }) => {\n  if (shouldSkipRegisteringDataDuringClone(el))\n    return;\n  expression = expression === \"\" ? \"{}\" : expression;\n  let magicContext = {};\n  injectMagics(magicContext, el);\n  let dataProviderContext = {};\n  injectDataProviders(dataProviderContext, magicContext);\n  let data2 = evaluate(el, expression, { scope: dataProviderContext });\n  if (data2 === void 0 || data2 === true)\n    data2 = {};\n  injectMagics(data2, el);\n  let reactiveData = reactive(data2);\n  initInterceptors2(reactiveData);\n  let undo = addScopeToNode(el, reactiveData);\n  reactiveData[\"init\"] && evaluate(el, reactiveData[\"init\"]);\n  cleanup2(() => {\n    reactiveData[\"destroy\"] && evaluate(el, reactiveData[\"destroy\"]);\n    undo();\n  });\n});\n\n// packages/alpinejs/src/directives/x-show.js\ndirective(\"show\", (el, { modifiers, expression }, { effect: effect3 }) => {\n  let evaluate2 = evaluateLater(el, expression);\n  if (!el._x_doHide)\n    el._x_doHide = () => {\n      mutateDom(() => {\n        el.style.setProperty(\"display\", \"none\", modifiers.includes(\"important\") ? \"important\" : void 0);\n      });\n    };\n  if (!el._x_doShow)\n    el._x_doShow = () => {\n      mutateDom(() => {\n        if (el.style.length === 1 && el.style.display === \"none\") {\n          el.removeAttribute(\"style\");\n        } else {\n          el.style.removeProperty(\"display\");\n        }\n      });\n    };\n  let hide = () => {\n    el._x_doHide();\n    el._x_isShown = false;\n  };\n  let show = () => {\n    el._x_doShow();\n    el._x_isShown = true;\n  };\n  let clickAwayCompatibleShow = () => setTimeout(show);\n  let toggle = once(\n    (value) => value ? show() : hide(),\n    (value) => {\n      if (typeof el._x_toggleAndCascadeWithTransitions === \"function\") {\n        el._x_toggleAndCascadeWithTransitions(el, value, show, hide);\n      } else {\n        value ? clickAwayCompatibleShow() : hide();\n      }\n    }\n  );\n  let oldValue;\n  let firstTime = true;\n  effect3(() => evaluate2((value) => {\n    if (!firstTime && value === oldValue)\n      return;\n    if (modifiers.includes(\"immediate\"))\n      value ? clickAwayCompatibleShow() : hide();\n    toggle(value);\n    oldValue = value;\n    firstTime = false;\n  }));\n});\n\n// packages/alpinejs/src/directives/x-for.js\ndirective(\"for\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  let iteratorNames = parseForExpression(expression);\n  let evaluateItems = evaluateLater(el, iteratorNames.items);\n  let evaluateKey = evaluateLater(\n    el,\n    // the x-bind:key expression is stored for our use instead of evaluated.\n    el._x_keyExpression || \"index\"\n  );\n  el._x_prevKeys = [];\n  el._x_lookup = {};\n  effect3(() => loop(el, iteratorNames, evaluateItems, evaluateKey));\n  cleanup2(() => {\n    Object.values(el._x_lookup).forEach((el2) => el2.remove());\n    delete el._x_prevKeys;\n    delete el._x_lookup;\n  });\n});\nfunction loop(el, iteratorNames, evaluateItems, evaluateKey) {\n  let isObject2 = (i) => typeof i === \"object\" && !Array.isArray(i);\n  let templateEl = el;\n  evaluateItems((items) => {\n    if (isNumeric3(items) && items >= 0) {\n      items = Array.from(Array(items).keys(), (i) => i + 1);\n    }\n    if (items === void 0)\n      items = [];\n    let lookup = el._x_lookup;\n    let prevKeys = el._x_prevKeys;\n    let scopes = [];\n    let keys = [];\n    if (isObject2(items)) {\n      items = Object.entries(items).map(([key, value]) => {\n        let scope2 = getIterationScopeVariables(iteratorNames, value, key, items);\n        evaluateKey((value2) => keys.push(value2), { scope: { index: key, ...scope2 } });\n        scopes.push(scope2);\n      });\n    } else {\n      for (let i = 0; i < items.length; i++) {\n        let scope2 = getIterationScopeVariables(iteratorNames, items[i], i, items);\n        evaluateKey((value) => keys.push(value), { scope: { index: i, ...scope2 } });\n        scopes.push(scope2);\n      }\n    }\n    let adds = [];\n    let moves = [];\n    let removes = [];\n    let sames = [];\n    for (let i = 0; i < prevKeys.length; i++) {\n      let key = prevKeys[i];\n      if (keys.indexOf(key) === -1)\n        removes.push(key);\n    }\n    prevKeys = prevKeys.filter((key) => !removes.includes(key));\n    let lastKey = \"template\";\n    for (let i = 0; i < keys.length; i++) {\n      let key = keys[i];\n      let prevIndex = prevKeys.indexOf(key);\n      if (prevIndex === -1) {\n        prevKeys.splice(i, 0, key);\n        adds.push([lastKey, i]);\n      } else if (prevIndex !== i) {\n        let keyInSpot = prevKeys.splice(i, 1)[0];\n        let keyForSpot = prevKeys.splice(prevIndex - 1, 1)[0];\n        prevKeys.splice(i, 0, keyForSpot);\n        prevKeys.splice(prevIndex, 0, keyInSpot);\n        moves.push([keyInSpot, keyForSpot]);\n      } else {\n        sames.push(key);\n      }\n      lastKey = key;\n    }\n    for (let i = 0; i < removes.length; i++) {\n      let key = removes[i];\n      if (!!lookup[key]._x_effects) {\n        lookup[key]._x_effects.forEach(dequeueJob);\n      }\n      lookup[key].remove();\n      lookup[key] = null;\n      delete lookup[key];\n    }\n    for (let i = 0; i < moves.length; i++) {\n      let [keyInSpot, keyForSpot] = moves[i];\n      let elInSpot = lookup[keyInSpot];\n      let elForSpot = lookup[keyForSpot];\n      let marker = document.createElement(\"div\");\n      mutateDom(() => {\n        if (!elForSpot)\n          warn(`x-for \":key\" is undefined or invalid`, templateEl);\n        elForSpot.after(marker);\n        elInSpot.after(elForSpot);\n        elForSpot._x_currentIfEl && elForSpot.after(elForSpot._x_currentIfEl);\n        marker.before(elInSpot);\n        elInSpot._x_currentIfEl && elInSpot.after(elInSpot._x_currentIfEl);\n        marker.remove();\n      });\n      elForSpot._x_refreshXForScope(scopes[keys.indexOf(keyForSpot)]);\n    }\n    for (let i = 0; i < adds.length; i++) {\n      let [lastKey2, index] = adds[i];\n      let lastEl = lastKey2 === \"template\" ? templateEl : lookup[lastKey2];\n      if (lastEl._x_currentIfEl)\n        lastEl = lastEl._x_currentIfEl;\n      let scope2 = scopes[index];\n      let key = keys[index];\n      let clone2 = document.importNode(templateEl.content, true).firstElementChild;\n      let reactiveScope = reactive(scope2);\n      addScopeToNode(clone2, reactiveScope, templateEl);\n      clone2._x_refreshXForScope = (newScope) => {\n        Object.entries(newScope).forEach(([key2, value]) => {\n          reactiveScope[key2] = value;\n        });\n      };\n      mutateDom(() => {\n        lastEl.after(clone2);\n        initTree(clone2);\n      });\n      if (typeof key === \"object\") {\n        warn(\"x-for key cannot be an object, it must be a string or an integer\", templateEl);\n      }\n      lookup[key] = clone2;\n    }\n    for (let i = 0; i < sames.length; i++) {\n      lookup[sames[i]]._x_refreshXForScope(scopes[keys.indexOf(sames[i])]);\n    }\n    templateEl._x_prevKeys = keys;\n  });\n}\nfunction parseForExpression(expression) {\n  let forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\n  let stripParensRE = /^\\s*\\(|\\)\\s*$/g;\n  let forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\n  let inMatch = expression.match(forAliasRE);\n  if (!inMatch)\n    return;\n  let res = {};\n  res.items = inMatch[2].trim();\n  let item = inMatch[1].replace(stripParensRE, \"\").trim();\n  let iteratorMatch = item.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.item = item.replace(forIteratorRE, \"\").trim();\n    res.index = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.collection = iteratorMatch[2].trim();\n    }\n  } else {\n    res.item = item;\n  }\n  return res;\n}\nfunction getIterationScopeVariables(iteratorNames, item, index, items) {\n  let scopeVariables = {};\n  if (/^\\[.*\\]$/.test(iteratorNames.item) && Array.isArray(item)) {\n    let names = iteratorNames.item.replace(\"[\", \"\").replace(\"]\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name, i) => {\n      scopeVariables[name] = item[i];\n    });\n  } else if (/^\\{.*\\}$/.test(iteratorNames.item) && !Array.isArray(item) && typeof item === \"object\") {\n    let names = iteratorNames.item.replace(\"{\", \"\").replace(\"}\", \"\").split(\",\").map((i) => i.trim());\n    names.forEach((name) => {\n      scopeVariables[name] = item[name];\n    });\n  } else {\n    scopeVariables[iteratorNames.item] = item;\n  }\n  if (iteratorNames.index)\n    scopeVariables[iteratorNames.index] = index;\n  if (iteratorNames.collection)\n    scopeVariables[iteratorNames.collection] = items;\n  return scopeVariables;\n}\nfunction isNumeric3(subject) {\n  return !Array.isArray(subject) && !isNaN(subject);\n}\n\n// packages/alpinejs/src/directives/x-ref.js\nfunction handler3() {\n}\nhandler3.inline = (el, { expression }, { cleanup: cleanup2 }) => {\n  let root = closestRoot(el);\n  if (!root._x_refs)\n    root._x_refs = {};\n  root._x_refs[expression] = el;\n  cleanup2(() => delete root._x_refs[expression]);\n};\ndirective(\"ref\", handler3);\n\n// packages/alpinejs/src/directives/x-if.js\ndirective(\"if\", (el, { expression }, { effect: effect3, cleanup: cleanup2 }) => {\n  if (el.tagName.toLowerCase() !== \"template\")\n    warn(\"x-if can only be used on a <template> tag\", el);\n  let evaluate2 = evaluateLater(el, expression);\n  let show = () => {\n    if (el._x_currentIfEl)\n      return el._x_currentIfEl;\n    let clone2 = el.content.cloneNode(true).firstElementChild;\n    addScopeToNode(clone2, {}, el);\n    mutateDom(() => {\n      el.after(clone2);\n      initTree(clone2);\n    });\n    el._x_currentIfEl = clone2;\n    el._x_undoIf = () => {\n      walk(clone2, (node) => {\n        if (!!node._x_effects) {\n          node._x_effects.forEach(dequeueJob);\n        }\n      });\n      clone2.remove();\n      delete el._x_currentIfEl;\n    };\n    return clone2;\n  };\n  let hide = () => {\n    if (!el._x_undoIf)\n      return;\n    el._x_undoIf();\n    delete el._x_undoIf;\n  };\n  effect3(() => evaluate2((value) => {\n    value ? show() : hide();\n  }));\n  cleanup2(() => el._x_undoIf && el._x_undoIf());\n});\n\n// packages/alpinejs/src/directives/x-id.js\ndirective(\"id\", (el, { expression }, { evaluate: evaluate2 }) => {\n  let names = evaluate2(expression);\n  names.forEach((name) => setIdRoot(el, name));\n});\n\n// packages/alpinejs/src/directives/x-on.js\nmapAttributes(startingWith(\"@\", into(prefix(\"on:\"))));\ndirective(\"on\", skipDuringClone((el, { value, modifiers, expression }, { cleanup: cleanup2 }) => {\n  let evaluate2 = expression ? evaluateLater(el, expression) : () => {\n  };\n  if (el.tagName.toLowerCase() === \"template\") {\n    if (!el._x_forwardEvents)\n      el._x_forwardEvents = [];\n    if (!el._x_forwardEvents.includes(value))\n      el._x_forwardEvents.push(value);\n  }\n  let removeListener = on(el, value, modifiers, (e) => {\n    evaluate2(() => {\n    }, { scope: { \"$event\": e }, params: [e] });\n  });\n  cleanup2(() => removeListener());\n}));\n\n// packages/alpinejs/src/directives/index.js\nwarnMissingPluginDirective(\"Collapse\", \"collapse\", \"collapse\");\nwarnMissingPluginDirective(\"Intersect\", \"intersect\", \"intersect\");\nwarnMissingPluginDirective(\"Focus\", \"trap\", \"focus\");\nwarnMissingPluginDirective(\"Mask\", \"mask\", \"mask\");\nfunction warnMissingPluginDirective(name, directiveName, slug) {\n  directive(directiveName, (el) => warn(`You can't use [x-${directiveName}] without first installing the \"${name}\" plugin here: https://alpinejs.dev/plugins/${slug}`, el));\n}\n\n// packages/alpinejs/src/index.js\nalpine_default.setEvaluator(normalEvaluator);\nalpine_default.setReactivityEngine({ reactive: reactive2, effect: effect2, release: stop, raw: toRaw });\nvar src_default = alpine_default;\n\n// packages/alpinejs/builds/module.js\nvar module_default = src_default;\nexport {\n  module_default as default\n};\n", "// packages/mask/src/index.js\nfunction src_default(Alpine) {\n  Alpine.directive(\"mask\", (el, { value, expression }, { effect, evaluateLater }) => {\n    let templateFn = () => expression;\n    let lastInputValue = \"\";\n    queueMicrotask(() => {\n      if ([\"function\", \"dynamic\"].includes(value)) {\n        let evaluator = evaluateLater(expression);\n        effect(() => {\n          templateFn = (input) => {\n            let result;\n            Alpine.dontAutoEvaluateFunctions(() => {\n              evaluator((value2) => {\n                result = typeof value2 === \"function\" ? value2(input) : value2;\n              }, { scope: {\n                // These are \"magics\" we'll make available to the x-mask:function:\n                \"$input\": input,\n                \"$money\": formatMoney.bind({ el })\n              } });\n            });\n            return result;\n          };\n          processInputValue(el, false);\n        });\n      } else {\n        processInputValue(el, false);\n      }\n      if (el._x_model)\n        el._x_model.set(el.value);\n    });\n    el.addEventListener(\"input\", () => processInputValue(el));\n    el.addEventListener(\"blur\", () => processInputValue(el, false));\n    function processInputValue(el2, shouldRestoreCursor = true) {\n      let input = el2.value;\n      let template = templateFn(input);\n      if (!template || template === \"false\")\n        return false;\n      if (lastInputValue.length - el2.value.length === 1) {\n        return lastInputValue = el2.value;\n      }\n      let setInput = () => {\n        lastInputValue = el2.value = formatInput(input, template);\n      };\n      if (shouldRestoreCursor) {\n        restoreCursorPosition(el2, template, () => {\n          setInput();\n        });\n      } else {\n        setInput();\n      }\n    }\n    function formatInput(input, template) {\n      if (input === \"\")\n        return \"\";\n      let strippedDownInput = stripDown(template, input);\n      let rebuiltInput = buildUp(template, strippedDownInput);\n      return rebuiltInput;\n    }\n  }).before(\"model\");\n}\nfunction restoreCursorPosition(el, template, callback) {\n  let cursorPosition = el.selectionStart;\n  let unformattedValue = el.value;\n  callback();\n  let beforeLeftOfCursorBeforeFormatting = unformattedValue.slice(0, cursorPosition);\n  let newPosition = buildUp(\n    template,\n    stripDown(\n      template,\n      beforeLeftOfCursorBeforeFormatting\n    )\n  ).length;\n  el.setSelectionRange(newPosition, newPosition);\n}\nfunction stripDown(template, input) {\n  let inputToBeStripped = input;\n  let output = \"\";\n  let regexes = {\n    \"9\": /[0-9]/,\n    \"a\": /[a-zA-Z]/,\n    \"*\": /[a-zA-Z0-9]/\n  };\n  let wildcardTemplate = \"\";\n  for (let i = 0; i < template.length; i++) {\n    if ([\"9\", \"a\", \"*\"].includes(template[i])) {\n      wildcardTemplate += template[i];\n      continue;\n    }\n    for (let j = 0; j < inputToBeStripped.length; j++) {\n      if (inputToBeStripped[j] === template[i]) {\n        inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);\n        break;\n      }\n    }\n  }\n  for (let i = 0; i < wildcardTemplate.length; i++) {\n    let found = false;\n    for (let j = 0; j < inputToBeStripped.length; j++) {\n      if (regexes[wildcardTemplate[i]].test(inputToBeStripped[j])) {\n        output += inputToBeStripped[j];\n        inputToBeStripped = inputToBeStripped.slice(0, j) + inputToBeStripped.slice(j + 1);\n        found = true;\n        break;\n      }\n    }\n    if (!found)\n      break;\n  }\n  return output;\n}\nfunction buildUp(template, input) {\n  let clean = Array.from(input);\n  let output = \"\";\n  for (let i = 0; i < template.length; i++) {\n    if (![\"9\", \"a\", \"*\"].includes(template[i])) {\n      output += template[i];\n      continue;\n    }\n    if (clean.length === 0)\n      break;\n    output += clean.shift();\n  }\n  return output;\n}\nfunction formatMoney(input, delimiter = \".\", thousands, precision = 2) {\n  if (input === \"-\")\n    return \"-\";\n  if (/^\\D+$/.test(input))\n    return \"9\";\n  if (thousands === null || thousands === void 0) {\n    thousands = delimiter === \",\" ? \".\" : \",\";\n  }\n  let addThousands = (input2, thousands2) => {\n    let output = \"\";\n    let counter = 0;\n    for (let i = input2.length - 1; i >= 0; i--) {\n      if (input2[i] === thousands2)\n        continue;\n      if (counter === 3) {\n        output = input2[i] + thousands2 + output;\n        counter = 0;\n      } else {\n        output = input2[i] + output;\n      }\n      counter++;\n    }\n    return output;\n  };\n  let minus = input.startsWith(\"-\") ? \"-\" : \"\";\n  let strippedInput = input.replaceAll(new RegExp(`[^0-9\\\\${delimiter}]`, \"g\"), \"\");\n  let template = Array.from({ length: strippedInput.split(delimiter)[0].length }).fill(\"9\").join(\"\");\n  template = `${minus}${addThousands(template, thousands)}`;\n  if (precision > 0 && input.includes(delimiter))\n    template += `${delimiter}` + \"9\".repeat(precision);\n  queueMicrotask(() => {\n    if (this.el.value.endsWith(delimiter))\n      return;\n    if (this.el.value[this.el.selectionStart - 1] === delimiter) {\n      this.el.setSelectionRange(this.el.selectionStart - 1, this.el.selectionStart - 1);\n    }\n  });\n  return template;\n}\n\n// packages/mask/builds/module.js\nvar module_default = src_default;\nexport {\n  module_default as default,\n  stripDown\n};\n", "import Alpine from 'alpinejs'\nimport mask from '@alpinejs/mask'\n\nwindow.Alpine = Alpine\n\nAlpine.plugin(mask)\n\ndocument.addEventListener('alpine:init', () => {\n    Alpine.data('filterbox', () => ({\n        selectedBox: 0,\n        showPrevious: true,\n        showNext: true,\n        numberOfBoxes() {\n            return this.$refs.boxes.querySelectorAll(\".filter-box\").length;\n        },\n        selectNextBox() {\n            this.$refs.boxes.scrollBy({\n                top: 0,\n                left: 150,\n                behavior: \"smooth\",\n            });\n        },\n        selectPreviousBox() {\n            this.$refs.boxes.scrollBy({\n                top: 0,\n                left: -150,\n                behavior: \"smooth\",\n            });\n        },\n        init() {\n            this.checkFirstElement = new IntersectionObserver((entries) => {\n                this.showPrevious = (entries[0].intersectionRatio <= 0);\n            }, { threshold: 0, root: this.$refs.boxes, rootMargin: \"0px 0px 0px -200px\" });\n            this.checkLastElement = new IntersectionObserver((entries) => {\n                this.showNext = (entries[0].intersectionRatio <= 0);\n            }, { threshold: 0, root: this.$refs.boxes, rootMargin: \"0px -200px 0px 0px\" });\n            var boxes = this.$refs.boxes.querySelectorAll(\".filter-box\")\n            this.checkFirstElement.observe(boxes[0]);\n            this.checkLastElement.observe(boxes[boxes.length - 1]);\n        },\n    }));\n\n    Alpine.data('checkboxes', () => ({\n        selectAll: false,\n        selectedItems: [],\n        openFields: false,\n\n        selectAllCheckboxes() {\n            this.selectAll = !this.selectAll\n\n            let checkboxes = document.querySelectorAll('input[type=checkbox][name=selected-charity]');\n            let allValues = [];\n\n            [...checkboxes].map((el) => {\n                allValues.push(el.value)\n\n                this.selectedItems = this.selectAll ? allValues : []\n            })\n        }\n    }))\n});\n\n\nAlpine.start()", "import 'htmx.org'\nimport { createToast } from './htmx-toast.js'\n\nwindow.htmx = require('htmx.org');\n\ndocument.body.addEventListener('htmx:beforeSwap', function (event) {\n    if (event.detail.xhr.status === 422) {\n        const targetError = event.detail.requestConfig.elt.attributes.getNamedItem('hx-target-error').value;\n        if (targetError) {\n            event.detail.shouldSwap = true;\n            event.detail.target = htmx.find(targetError);\n        }\n    }\n});\n\ndocument.body.addEventListener('htmx:responseError', function (event) {\n    createToast({\n        title: event.detail.xhr.status + \": \" + event.detail.xhr.statusText,\n        message: \"Problem loading page\",\n        tags: \"error\"\n    })\n});\n\nhtmx.on(\"messages\", (event) => {\n    event.detail.value.forEach((message) => {\n        createToast(message)\n    })\n})\n\n// Remove elements with x-from-template attribute when history is restored\n// https://github.com/alpinejs/alpine/discussions/2924#discussioncomment-3877977\nhtmx.on('htmx:historyRestore', (evt) => {\n    document.querySelectorAll('[x-from-template]').forEach((e) => e.remove())\n})\n", "export function createToast(message) {\n    // Clone the template\n    const element = Array.from(\n        document.querySelector(\"#toast-template\").content.cloneNode(true).childNodes\n    ).filter(node => node.nodeType === 1)[0]\n    const container = document.querySelector(\"#toast-container\")\n\n    // Set the CSS class\n    element.classList.add(message.tags)\n\n    // Set the title\n    if (message.title) {\n        element.querySelector(\"h4\").innerText = message.title\n    } else {\n        element.querySelector(\"h4\").remove()\n    }\n\n    // Set the text\n    element.querySelector(\"p\").innerText = message.message\n\n    // Add the new element to the container\n    container.appendChild(element)\n\n    // Add the close button event listener\n    element.querySelector(\".close-button\").addEventListener(\"click\", () => {\n        element.remove()\n    })\n\n    // Remove the element after 5 seconds\n    setTimeout(() => {\n        element.remove()\n    }, 5000)\n\n}", "\ndocument.querySelectorAll(\".sidebar-card details\").forEach(function (details) {\n    details.classList.add(\"js-animate\");\n    if (details.open) {\n        details.classList.add(\"show\");\n    }\n    details.addEventListener(\"toggle\", (event) => {\n        if (details.open) {\n            details.classList.add(\"show\");\n        } else {\n            details.classList.remove(\"show\");\n        }\n    });\n});", "/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst 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};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || typeof value === 'undefined';\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n", "export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n", "\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type Chart from '../core/core.controller.js';\nimport type {ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  chart.height = Math.floor(chart.height);\n  chart.width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\n\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<string, string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: TimeUnit): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: TimeUnit): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek'): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<string, string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta, chartArea) {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = getDatasetArea(meta, this.chartArea);\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n\n    meta.controller.draw();\n\n    if (useClip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the envent inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, 𝜃) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n", "import {DoughnutController, PolarAreaController} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || (elements && containsColorsDefinitions(elements)))) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of an segment -> need to add another point before this,\n      // from next line below.\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of an segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n", "import {clipArea, unclipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, /** @type {Unit} */ (parser))\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n", "import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n", "const getOrCreateLegendList = (chart, id) => {\n    const legendContainer = document.getElementById(id);\n    let listContainer = legendContainer.querySelector('ul');\n\n    if (!listContainer) {\n        listContainer = document.createElement('ul');\n        listContainer.style.display = 'grid';\n        listContainer.style.gap = '13px';\n        listContainer.style.gridTemplateColumns = '1fr 1fr';\n        listContainer.style.marginLeft = 0;\n        listContainer.style.marginTop = '20px';\n        listContainer.style.padding = 0;\n\n        legendContainer.appendChild(listContainer);\n    }\n\n    return listContainer;\n};\n\nconst htmlLegendPlugin = {\n    id: 'htmlLegend',\n    afterUpdate(chart, args, options) {\n        if (!options.containerID) {\n            return;\n        }\n        const ul = getOrCreateLegendList(chart, options.containerID);\n\n        // Remove old legend items\n        while (ul.firstChild) {\n            ul.firstChild.remove();\n        }\n\n        // Reuse the built-in legendItems generator\n        const items = chart.options.plugins.legend.labels.generateLabels(chart);\n\n        items.forEach(item => {\n            const li = document.createElement('li');\n            li.style.alignItems = 'center';\n            li.style.cursor = 'pointer';\n            li.style.display = 'flex';\n            li.style.flexDirection = 'row';\n            li.style.marginLeft = '0';\n\n            li.onclick = () => {\n                const { type } = chart.config;\n                if (type === 'pie' || type === 'doughnut') {\n                    // Pie and doughnut charts only have a single dataset and visibility is per item\n                    chart.toggleDataVisibility(item.index);\n                } else {\n                    chart.setDatasetVisibility(item.datasetIndex, !chart.isDatasetVisible(item.datasetIndex));\n                }\n                chart.update();\n            };\n\n            // Color box\n            const boxSpan = document.createElement('span');\n            boxSpan.style.background = item.fillStyle;\n            boxSpan.style.borderColor = item.strokeStyle;\n            boxSpan.style.borderWidth = item.lineWidth + 'px';\n            boxSpan.style.borderRadius = \"50%\";\n            boxSpan.style.display = 'inline-block';\n            boxSpan.style.flexShrink = 0;\n            boxSpan.style.height = '20px';\n            boxSpan.style.marginRight = '10px';\n            boxSpan.style.width = '20px';\n\n            // Text\n            const textContainer = document.createElement('p');\n            textContainer.style.color = item.fontColor;\n            textContainer.style.margin = 0;\n            textContainer.style.padding = 0;\n            textContainer.style.textDecoration = item.hidden ? 'line-through' : '';\n\n            const text = document.createTextNode(item.text);\n            textContainer.appendChild(text);\n\n            li.appendChild(boxSpan);\n            li.appendChild(textContainer);\n            ul.appendChild(li);\n        });\n    }\n};\n\n\nexport default htmlLegendPlugin;", "import { Chart } from 'chart.js/auto';\nimport htmlLegendPlugin from './charts-html-legend.js';\n\nChart.defaults.font.size = 14;\nChart.defaults.font.family = '\"Montserrat\", sans-serif';\n\nexport default Chart;\n\nexport const MONEY = new Intl.NumberFormat('en-GB', { style: 'currency', currency: 'GBP', maximumFractionDigits: 0 });\n\nexport function czHorizontalBarChart(ctx, data) {\n    return new Chart(ctx, {\n        type: 'bar',\n        data: {\n            labels: data.map((v) => v.label),\n            datasets: [\n                {\n                    label: 'Charity count',\n                    data: data.map((v) => v.value),\n                    backgroundColor: data.map((v) => v.colour),\n                    borderRadius: 20,\n                    barThickness: 24,\n                }\n            ]\n        },\n        options: {\n            indexAxis: 'y',\n            responsive: true,\n            plugins: {\n                legend: {\n                    display: false,\n                },\n            },\n            scales: {\n                x: {\n                    grid: {\n                        display: false,\n                    },\n                },\n                y: {\n                    grid: {\n                        display: false,\n                    },\n                    ticks: {\n                        padding: 0,\n                        mirror: true,\n                        labelOffset: -24,\n                    },\n                    border: {\n                        display: false,\n                    }\n                }\n            }\n        },\n    });\n}\n\nexport function czVerticalBarChart(ctx, data) {\n    return new Chart(ctx, {\n        type: 'bar',\n        data: {\n            labels: data.map((v) => v.label),\n            datasets: [\n                {\n                    label: 'Charity count',\n                    data: data.map((v) => v.value),\n                    backgroundColor: data.map((v) => v.colour),\n                    borderRadius: 20,\n                    barThickness: 24,\n                }\n            ]\n        },\n        options: {\n            indexAxis: 'x',\n            responsive: true,\n            plugins: {\n                legend: {\n                    display: false,\n                },\n            },\n            scales: {\n                x: {\n                    grid: {\n                        display: false,\n                    },\n                },\n                y: {\n                    grid: {\n                        display: false,\n                    },\n                    border: {\n                        display: false,\n                    }\n                }\n            }\n        },\n    });\n}\n\nexport function czPieChart(ctx, data, legend = null) {\n    return new Chart(ctx, {\n        type: 'doughnut',\n        data: {\n            labels: data.map((v) => v.label),\n            datasets: [\n                {\n                    label: 'Charity count',\n                    data: data.map((v) => v.value),\n                    backgroundColor: data.map((v) => v.colour),\n                }\n            ]\n        },\n        options: {\n            borderWidth: 0,\n            responsive: true,\n            plugins: {\n                htmlLegend: {\n                    // ID of the container to put the legend in\n                    containerID: legend,\n                },\n                legend: {\n                    display: false,\n                },\n            },\n            cutout: '33%',\n        },\n        plugins: [htmlLegendPlugin],\n    });\n}\n\n\nexport function czFundsBarChart(ctx, data) {\n    return new Chart(ctx, {\n        type: 'bar',\n        data: {\n            labels: data.map((v) => v.label),\n            datasets: [\n                {\n                    label: 'Charity count',\n                    data: data.map((v) => v.value),\n                    backgroundColor: data.map((v) => v.colour),\n                }\n            ]\n        },\n        options: {\n            indexAxis: 'x',\n            responsive: true,\n            plugins: {\n                legend: {\n                    display: false,\n                },\n            },\n            scales: {\n                x: {\n                    display: false,\n                    grid: {\n                        display: false,\n                    },\n                },\n                y: {\n                    display: false,\n                    grid: {\n                        display: false,\n                    },\n                    border: {\n                        display: false,\n                    }\n                }\n            }\n        },\n    });\n}\n\nexport function czMiniFinanceChart(ctx, labels, data, label = 'Spending', color = '#F6306C') {\n    return new Chart(ctx, {\n        type: 'line',\n        data: {\n            labels: labels,\n            datasets: [{\n                label: label,\n                data: data,\n                fill: false,\n                lineTension: 0,\n                borderColor: color,\n                pointRadius: 1,\n                hitRadius: 5,\n            }]\n        },\n        options: {\n            plugins: {\n                legend: {\n                    display: false,\n                    position: 'bottom',\n                    align: 'start',\n                    labels: {\n                        boxHeight: 1,\n                    }\n                }\n            },\n            scales: {\n                y: {\n                    beginAtZero: false,\n                    ticks: {\n                        count: 10,\n                        display: false,\n                        padding: 0,\n                    },\n                    grid: {\n                        display: true,\n                    },\n                },\n                x: {\n                    ticks: {\n                        stepSize: 24,\n                        font: {\n                            size: 12\n                        }\n                    },\n                    distribution: 'series',\n                    grid: {\n                        display: false,\n                    }\n                }\n            }\n        }\n    });\n}", "import { default as Chart, MONEY, czPieChart, czHorizontalBarChart, czVerticalBarChart } from './charts.js';\n\nvar MAX_LENGTH = 100;\n\nfunction getIncomeData(max_length = MAX_LENGTH, sort_by = \"size\") {\n    var income_data = CZ_DATA[\"chart_data\"][\"income_expenditure\"];\n    if (income_data.length > max_length) {\n        income_data = income_data.map(a => [a, Math.random()])\n            .sort((a, b) => { return a[1] < b[1] ? -1 : 1; })\n            .slice(0, max_length)\n            .map(a => a[0]);\n    }\n    return income_data;\n}\n\nexport default function createCharts() {\n    if (!CZ_DATA[\"chart_data\"]) { return }\n    var income_data = getIncomeData();\n\n    var ctx_income_expenditure = document.getElementById('income_expenditure_chart');\n    var chart_income_expenditure = new Chart(ctx_income_expenditure, {\n        type: 'bar',\n        data: {\n            labels: income_data.map((v) => v.name),\n            datasets: [{\n                label: 'Income',\n                data: income_data.map((v) => v.latest_income),\n                borderWidth: 0,\n                borderRadius: 20,\n                stack: 1,\n                backgroundColor: '#7777a5',\n                //barThickness: 15,\n            }, {\n                label: 'Spending',\n                data: income_data.map((v) => -v.latest_spending),\n                borderWidth: 0,\n                borderRadius: 20,\n                stack: 1,\n                backgroundColor: '#141c44',\n                //barThickness: 15,\n            }]\n        },\n        options: {\n            responsive: false,\n            maintainAspectRatio: false,\n            plugins: {\n                legend: {\n                    display: false,\n                },\n                tooltip: {\n                    callbacks: {\n                        label: function (context) {\n                            let label = context.dataset.label || '';\n\n                            if (label) {\n                                label += ': ';\n                            }\n                            if (context.parsed.y !== null) {\n                                label += MONEY.format(Math.abs(context.parsed.y));\n                            }\n                            return label;\n                        }\n                    }\n                }\n            },\n            scales: {\n                y: {\n                    stacked: true,\n                    grid: {\n                        display: false,\n                    },\n                    // type: 'logarithmic',\n                    ticks: {\n                        // Include a dollar sign in the ticks\n                        callback: function (value, index, ticks) {\n                            var max_tick = Math.max(...ticks.map((tick) => Math.abs(tick.value)));\n                            var return_value = Math.abs(value);\n                            var suffix = '';\n                            if (max_tick > 1000000000) {\n                                return_value = return_value / 1000000000;\n                                suffix = 'bn';\n                            } else if (max_tick > 1000000) {\n                                return_value = return_value / 1000000;\n                                suffix = 'm';\n                            } else if (max_tick > 1000) {\n                                return_value = return_value / 1000;\n                                suffix = 'k';\n                            }\n                            return MONEY.format(return_value) + suffix;\n                        }\n                    }\n                },\n                x: {\n                    display: false,\n                }\n            }\n        }\n    });\n\n    document.querySelector(\"#income-expenditure-sort\").addEventListener(\"change\", function (e) {\n        if (e.target.value === \"name\") {\n            var data = CZ_DATA[\"chart_data\"][\"income_expenditure\"].map((v) => v);\n            data.sort((a, b) => a.name.localeCompare(b.name))\n            data = data.slice(0, MAX_LENGTH);\n        } else if (e.target.value === \"size\") {\n            var data = CZ_DATA[\"chart_data\"][\"income_expenditure_size\"].map((v) => v);\n            data.sort((a, b) => b.latest_spending - a.latest_spending);\n            data = data.slice(0, MAX_LENGTH);\n        } else {\n            var data = getIncomeData();\n        }\n        chart_income_expenditure.data.datasets[0].data = data.map((v) => v.latest_income);\n        chart_income_expenditure.data.datasets[1].data = data.map((v) => -v.latest_spending);\n        chart_income_expenditure.data.labels = data.map((v) => v.name);\n        chart_income_expenditure.update();\n    });\n    document.querySelector(\"#income-expenditure-sort\").value = \"size\";\n    document.querySelector(\"#income-expenditure-sort\").dispatchEvent(new Event('change', { 'bubbles': true }));\n\n    var ctx_trustees = document.getElementById('trustees_chart');\n    var trustees_legend = document.createElement('div');\n    trustees_legend.id = 'trustees_legend';\n    ctx_trustees.parentNode.insertBefore(trustees_legend, ctx_trustees.nextSibling);\n    var chart_trustees = czPieChart(ctx_trustees, CZ_DATA[\"chart_data\"][\"trustees\"], trustees_legend.id);\n\n    var ctx_volunteers = document.getElementById('volunteers_chart');\n    var volunteers_legend = document.createElement('div');\n    volunteers_legend.id = 'volunteers_legend';\n    ctx_volunteers.parentNode.insertBefore(volunteers_legend, ctx_volunteers.nextSibling);\n    var chart_volunteers = czPieChart(ctx_volunteers, CZ_DATA[\"chart_data\"][\"volunteers\"], volunteers_legend.id);\n\n    var ctx_annual_return_submission_on_time = document.getElementById('annual_return_submission_on_time_chart');\n    var chart_annual_return_submission_on_time = czHorizontalBarChart(\n        ctx_annual_return_submission_on_time,\n        CZ_DATA[\"chart_data\"][\"annual_return_submission_on_time\"]\n    );\n\n    var ctx_imd_decile = document.getElementById('imd_decile_chart');\n    var chart_imd_decile = czVerticalBarChart(\n        ctx_imd_decile,\n        CZ_DATA[\"chart_data\"][\"imd_decile\"]\n    );\n    chart_imd_decile.options.scales.x.title = {\n        display: true,\n        text: 'IMD Decile',\n    }\n    chart_imd_decile.options.scales.y.title = {\n        display: true,\n        text: 'Number of charities',\n    }\n    chart_imd_decile.update();\n\n    var ctx_area_of_operations_in_the_uk = document.getElementById('area_of_operations_in_the_uk_chart');\n    var chart_area_of_operations_in_the_uk = czHorizontalBarChart(\n        ctx_area_of_operations_in_the_uk,\n        CZ_DATA[\"chart_data\"][\"area_of_operations_in_the_uk\"]\n    );\n}", "import { czPieChart, czFundsBarChart } from './charts.js';\n\nfunction createIncomeChart() {\n    var ctx_income_chart = document.getElementById('income-chart');\n    if (!CZ_DATA[\"income_chart\"] || !ctx_income_chart) {\n        return;\n    }\n    return czPieChart(ctx_income_chart, CZ_DATA[\"income_chart\"], legend = false);\n}\n\nfunction createSpendingChart() {\n    var ctx_spending_chart = document.getElementById('spending-chart');\n    if (!CZ_DATA[\"spending_chart\"] || !ctx_spending_chart) {\n        return;\n    }\n    return czPieChart(ctx_spending_chart, CZ_DATA[\"spending_chart\"], legend = false);\n}\n\n\nfunction createFundsChart() {\n    var ctx_funds_chart = document.getElementById('funds-chart');\n    if (!CZ_DATA[\"funds_chart\"] || !ctx_funds_chart) {\n        return;\n    }\n    var funds_chart = czFundsBarChart(ctx_funds_chart, CZ_DATA[\"funds_chart\"], legend = false);\n}\n\nexport default function createCharts() {\n    createIncomeChart();\n    createSpendingChart();\n    createFundsChart();\n}", "import { default as Chart } from './charts.js';\n\nexport default function createCharts() {\n    var ctx = document.getElementById('change-over-time');\n    if (!CZ_DATA[\"financial_history\"] || !ctx) {\n        return;\n    }\n    var finances = CZ_DATA[\"financial_history\"];\n    var prefix = \"\u00A3\";\n\n    return new Chart(ctx, {\n        type: 'line',\n        data: {\n            labels: finances.map((x) => x.fye.slice(0, 4)),\n            datasets: [{\n                label: 'Income',\n                data: finances.map((x) => x.income),\n                fill: false,\n                lineTension: 0,\n                borderColor: '#4A3CE6',\n                pointRadius: 1,\n                hitRadius: 5,\n            }, {\n                label: 'Spending',\n                data: finances.map((x) => x.spending),\n                fill: false,\n                lineTension: 0,\n                borderColor: '#F6306C',\n                pointRadius: 1,\n                hitRadius: 5,\n            }]\n        },\n        options: {\n            plugins: {\n                legend: {\n                    position: 'bottom',\n                    align: 'start',\n                    labels: {\n                        boxHeight: 1,\n                    }\n                }\n            },\n            scales: {\n                y: {\n                    beginAtZero: true,\n                    ticks: {\n                        callback: function (value, index, values) {\n                            if (value > 1000000000) {\n                                return prefix + (value / 1000000000) + \"bn\";\n                            } else if (value > 1000000) {\n                                return prefix + (value / 1000000) + \"m\";\n                            } else if (value > 1000) {\n                                return prefix + (value / 1000) + \"k\";\n                            }\n                            return prefix + value;\n                        },\n                        count: 2,\n                    },\n                    grid: {\n                        display: false,\n                    }\n                },\n                x: {\n                    /*type: 'time',\n                    time: {\n                        unit: 'month',\n                        displayFormats: {\n                            month: 'YYYY',\n                        }\n                    },*/\n                    ticks: {\n                        stepSize: 24,\n                    },\n                    distribution: 'series',\n                    grid: {\n                        display: false,\n                    }\n                }\n            }\n        }\n    });\n}", "import { czMiniFinanceChart } from './charts.js';\n\nexport function createMiniExpenditureChart() {\n    var ctx = document.getElementById('expenditure-change-over-time');\n    if (!CZ_DATA[\"financial_history\"] || !ctx) {\n        return;\n    }\n    var finances = CZ_DATA[\"financial_history\"].slice(-5);\n\n    var color = '#F6306C';\n    if (finances[0].spending < finances[finances.length - 1].spending) {\n        color = '#68C7C3';\n    }\n\n    return czMiniFinanceChart(\n        ctx,\n        finances.map((x) => x.fye.slice(0, 4)),\n        finances.map((x) => x.spending),\n        'Spending',\n        color\n    );\n}\n\nexport function createMiniIncomeChart() {\n    var ctx = document.getElementById('income-change-over-time');\n    if (!CZ_DATA[\"financial_history\"] || !ctx) {\n        return;\n    }\n    var finances = CZ_DATA[\"financial_history\"].slice(-5);\n\n    var color = '#F6306C';\n    if (finances[0].income < finances[finances.length - 1].income) {\n        color = '#68C7C3';\n    }\n\n    return czMiniFinanceChart(\n        ctx,\n        finances.map((x) => x.fye.slice(0, 4)),\n        finances.map((x) => x.income),\n        'Income',\n        color\n    );\n}", "import { setupCopyText } from './copytext.js'\nimport { setupTables } from './tables.js'\nimport './setupAlpine.js'\nimport './setupHtmx.js'\nimport './sidebarcards.js'\nimport { default as createDashboardCharts } from './charts-dashboard.js'\nimport { default as createOverviewCharts } from './charts-charity-overview.js'\nimport { default as createFinanceCharts } from './charts-charity-finances.js'\nimport { createMiniExpenditureChart, createMiniIncomeChart } from './charts-checks-finances.js'\n\n\nfunction main() {\n    setupCopyText();\n    createDashboardCharts();\n    createOverviewCharts();\n    createFinanceCharts();\n    createMiniExpenditureChart();\n    createMiniIncomeChart();\n    setupTables();\n}\n\ndocument.addEventListener(\"htmx:afterSettle\", function (event) {\n    main();\n});\n\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n    main();\n});"],
  "mappings": "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",
  "names": ["require_htmx_min", "__commonJSMin", "e", "t", "r", "n", "i", "a", "o", "s", "l", "u", "f", "c", "h", "v", "M", "X", "d", "D", "U", "g", "m", "p", "x", "B", "F", "V", "y", "b", "w", "j", "S", "E", "_", "C", "R", "z", "$", "T", "O", "W", "q", "H", "G", "J", "L", "A", "Z", "N", "K", "I", "k", "P", "Y", "setupCopyText", "el", "ev", "toast", "setupTables", "table_wrapper", "table", "thead", "tbody", "header_cells", "table_rows", "first_row", "cell", "i", "width", "table_copy", "table_copy_wrapper", "table_offset_left", "table_offset_top", "flushPending", "flushing", "queue", "lastFlushedIndex", "scheduler", "callback", "queueJob", "job", "queueFlush", "dequeueJob", "index", "flushJobs", "i", "reactive", "effect", "release", "raw", "shouldSchedule", "disableEffectScheduling", "setReactivityEngine", "engine", "task", "overrideEffect", "override", "elementBoundEffect", "el", "cleanup2", "effectReference", "dispatch", "name", "detail", "walk", "el2", "skip", "node", "warn", "message", "args", "started", "start", "startObservingMutations", "onElAdded", "initTree", "onElRemoved", "destroyTree", "onAttributesAdded", "attrs", "directives", "handle", "outNestedComponents", "closestRoot", "allSelectors", "rootSelectorCallbacks", "initSelectorCallbacks", "rootSelectors", "fn", "addRootSelector", "selectorCallback", "addInitSelector", "includeInitSelectors", "findClosest", "element", "selector", "isRoot", "initInterceptors", "interceptInit", "walker", "intercept", "deferHandlingDirectives", "root", "cleanupAttributes", "cleanupElement", "onAttributeAddeds", "onElRemoveds", "onElAddeds", "onAttributeRemoved", "names", "value", "observer", "onMutate", "currentlyObserving", "stopObservingMutations", "flushObserver", "recordQueue", "willProcessRecordQueue", "processRecordQueue", "mutateDom", "result", "isCollecting", "deferredMutations", "deferMutations", "flushAndStopDeferringMutations", "mutations", "addedNodes", "removedNodes", "addedAttributes", "removedAttributes", "oldValue", "add2", "remove", "scope", "mergeProxies", "closestDataStack", "addScopeToNode", "data2", "referenceNode", "objects", "mergeProxyTrap", "obj", "thisProxy", "collapseProxies", "acc", "key", "initInterceptors2", "isObject2", "val", "recurse", "basePath", "enumerable", "path", "interceptor", "mutateObj", "get", "set", "initialValue", "initialize", "innerValue", "carry", "segment", "magics", "magic", "injectMagics", "memoizedUtilities", "getUtilities", "utilities", "getElementBoundUtilities", "tryCatch", "expression", "e", "handleError", "error2", "shouldAutoEvaluateFunctions", "dontAutoEvaluateFunctions", "cache", "evaluate", "extras", "evaluateLater", "theEvaluatorFunction", "normalEvaluator", "setEvaluator", "newEvaluator", "overriddenMagics", "dataStack", "evaluator", "generateEvaluatorFromFunction", "generateEvaluatorFromString", "func", "receiver", "scope2", "params", "runIfTypeOfFunction", "evaluatorMemo", "generateFunctionFromString", "AsyncFunction", "rightSideSafeExpression", "func2", "completeScope", "promise", "prefixAsString", "prefix", "subject", "setPrefix", "newPrefix", "directiveHandlers", "directive", "directive2", "pos", "directiveOrder", "attributes", "originalAttributeOverride", "vAttributes", "staticAttributes", "attributesOnly", "attribute", "attr", "transformedAttributeMap", "toTransformedAttributes", "newName", "oldName", "outNonAlpineAttributes", "toParsedDirectives", "byPriority", "getDirectiveHandler", "isDeferringHandlers", "directiveHandlerStacks", "currentHandlerStackKey", "flushHandlers", "stopDeferring", "cleanups", "effect3", "cleanupEffect", "alpine_default", "noop", "handler4", "fullHandler", "startingWith", "replacement", "into", "newValue", "attributeTransformers", "transform", "mapAttributes", "alpineAttributeRegex", "typeMatch", "valueMatch", "modifiers", "original", "DEFAULT", "a", "b", "typeA", "typeB", "tickStack", "isHolding", "nextTick", "releaseNextTicks", "res", "holdNextTicks", "setClasses", "setClassesFromString", "setClassesFromObject", "classString", "split", "classString2", "missingClasses", "addClassesAndReturnUndo", "classes", "classObject", "forAdd", "bool", "forRemove", "added", "removed", "setStyles", "setStylesFromObject", "setStylesFromString", "previousStyles", "value2", "kebabCase", "once", "fallback", "called", "evaluate2", "registerTransitionsFromHelper", "registerTransitionsFromClassString", "stage", "registerTransitionObject", "doesntSpecify", "transitioningIn", "transitioningOut", "wantsAll", "wantsOpacity", "wantsScale", "opacityValue", "scaleValue", "modifierValue", "delay", "origin", "property", "durationIn", "durationOut", "easing", "setFunction", "defaultValue", "before", "after", "transition", "show", "hide", "nextTick2", "clickAwayCompatibleShow", "resolve", "reject", "closest", "closestHide", "hideAfterChildren", "parent", "during", "start2", "end", "undoStart", "undoDuring", "undoEnd", "performTransition", "stages", "interrupted", "reachedBefore", "reachedEnd", "finish", "duration", "rawValue", "match", "isCloning", "skipDuringClone", "onlyDuringClone", "cloneNode", "from", "to", "dontRegisterReactiveSideEffects", "isCloningLegacy", "clone", "oldEl", "newEl", "cloneTree", "hasRunThroughFirstEl", "el3", "callback2", "storedEffect", "shouldSkipRegisteringDataDuringClone", "bind", "camelCase", "bindInputValue", "bindStyles", "bindClasses", "bindAttributeAndProperty", "bindAttribute", "checkedAttrLooseCompare", "updateSelect", "setPropertyIfChanged", "attributeShouldntBePreservedIfFalsy", "isBooleanAttr", "setIfChanged", "attrName", "propName", "arrayWrappedValue", "option", "char", "valueA", "valueB", "getBinding", "getAttributeBinding", "extractProp", "extract", "binding", "debounce", "wait", "timeout", "context", "later", "throttle", "limit", "inThrottle", "entangle", "outerGet", "outerSet", "innerGet", "innerSet", "firstRun", "outerHash", "innerHash", "outerHashLatest", "innerHashLatest", "reference", "outer", "inner", "plugin", "stores", "isReactive", "store", "getStores", "binds", "bind2", "bindings", "getBindings", "applyBindingsObject", "injectBindingProviders", "cleanupRunners", "datas", "data", "injectDataProviders", "Alpine", "makeMap", "str", "expectsLowerCase", "map", "list", "specialBooleanAttrs", "isBooleanAttr2", "EMPTY_OBJ", "EMPTY_ARR", "hasOwnProperty", "hasOwn", "isArray", "isMap", "toTypeString", "isString", "isSymbol", "isObject", "objectToString", "toRawType", "isIntegerKey", "cacheStringFunction", "camelizeRE", "camelize", "_", "c", "hyphenateRE", "hyphenate", "capitalize", "toHandlerKey", "hasChanged", "targetMap", "effectStack", "activeEffect", "ITERATE_KEY", "MAP_KEY_ITERATE_KEY", "isEffect", "effect2", "options", "createReactiveEffect", "stop", "cleanup", "uid", "enableTracking", "resetTracking", "deps", "shouldTrack", "trackStack", "pauseTracking", "last", "track", "target", "type", "depsMap", "dep", "trigger", "oldTarget", "effects", "effectsToAdd", "key2", "run", "isNonTrackableKeys", "builtInSymbols", "get2", "createGetter", "readonlyGet", "arrayInstrumentations", "createArrayInstrumentations", "instrumentations", "arr", "toRaw", "l", "isReadonly", "shallow", "shallowReadonlyMap", "readonlyMap", "shallowReactiveMap", "reactiveMap", "targetIsArray", "isRef", "readonly", "reactive2", "set2", "createSetter", "hadKey", "deleteProperty", "has", "ownKeys", "mutableHandlers", "readonlyHandlers", "toReactive", "toReadonly", "toShallow", "getProto", "v", "get$1", "isShallow", "rawTarget", "rawKey", "has2", "wrap", "has$1", "size", "add", "set$1", "get3", "checkIdentityKeys", "deleteEntry", "clear", "hadItems", "createForEach", "thisArg", "observed", "createIterableMethod", "method", "targetIsMap", "isPair", "isKeyOnly", "innerIterator", "done", "createReadonlyMethod", "createInstrumentations", "mutableInstrumentations2", "shallowInstrumentations2", "readonlyInstrumentations2", "shallowReadonlyInstrumentations2", "mutableInstrumentations", "readonlyInstrumentations", "shallowInstrumentations", "shallowReadonlyInstrumentations", "createInstrumentationGetter", "mutableCollectionHandlers", "readonlyCollectionHandlers", "targetTypeMap", "rawType", "getTargetType", "createReactiveObject", "baseHandlers", "collectionHandlers", "proxyMap", "existingProxy", "targetType", "proxy", "r", "evaluateLater2", "firstTime", "getArrayOfRefObject", "refObjects", "currentEl", "globalIdMemo", "findAndIncrementId", "closestIdRoot", "setIdRoot", "id", "warnMissingPluginMagic", "magicName", "slug", "evaluateInnerSet", "releaseEntanglement", "getTarget", "clone2", "eventName", "placeInDom", "clone3", "target2", "modifiers2", "teleportContainerDuringClone", "handler", "on", "event", "listenerTarget", "wrapHandler", "wrapper", "dotSyntax", "camelCase2", "nextModifier", "isNumeric", "next", "isKeyEvent", "isListeningForASpecificKeyThatHasntBeenPressed", "kebabCase2", "keyModifiers", "debounceIndex", "keyToModifiers", "selectedSystemKeyModifiers", "modifier", "modifierToKeyMap", "scopeTarget", "evaluateGet", "evaluateSet", "getValue", "isGetterSetter", "setValue", "removeListener", "getInputValue", "removeResetListener", "currentValue", "safeParseNumber", "checkedAttrLooseCompare2", "number", "isNumeric2", "handler2", "bindingProviders", "storeKeyForXFor", "magicContext", "dataProviderContext", "reactiveData", "undo", "toggle", "iteratorNames", "parseForExpression", "evaluateItems", "evaluateKey", "loop", "templateEl", "items", "isNumeric3", "lookup", "prevKeys", "scopes", "keys", "getIterationScopeVariables", "adds", "moves", "removes", "sames", "lastKey", "prevIndex", "keyInSpot", "keyForSpot", "elInSpot", "elForSpot", "marker", "lastKey2", "lastEl", "reactiveScope", "newScope", "forIteratorRE", "stripParensRE", "forAliasRE", "inMatch", "item", "iteratorMatch", "scopeVariables", "handler3", "warnMissingPluginDirective", "directiveName", "src_default", "module_default", "src_default", "Alpine", "el", "value", "expression", "effect", "evaluateLater", "templateFn", "lastInputValue", "evaluator", "input", "result", "value2", "formatMoney", "processInputValue", "el2", "shouldRestoreCursor", "template", "setInput", "formatInput", "restoreCursorPosition", "strippedDownInput", "stripDown", "buildUp", "callback", "cursorPosition", "unformattedValue", "beforeLeftOfCursorBeforeFormatting", "newPosition", "inputToBeStripped", "output", "regexes", "wildcardTemplate", "i", "j", "found", "clean", "delimiter", "thousands", "precision", "addThousands", "input2", "thousands2", "counter", "minus", "strippedInput", "module_default", "module_default", "entries", "boxes", "checkboxes", "allValues", "el", "import_htmx", "createToast", "message", "element", "node", "container", "event", "targetError", "createToast", "message", "evt", "e", "details", "event", "round", "v", "lim", "l", "h", "p2b", "n2b", "v", "lim", "round", "b2n", "n2p", "map$1", "hex", "h1", "b", "h2", "eq", "isShort", "hexParse", "str", "len", "ret", "alpha", "a", "f", "hexString", "HUE_RE", "hsl2rgbn", "h", "s", "l", "n", "k", "hsv2rgbn", "hwb2rgbn", "w", "rgb", "i", "hueValue", "r", "g", "d", "max", "rgb2hsl", "min", "calln", "c", "hsl2rgb", "hwb2rgb", "hsv2rgb", "hue", "hueParse", "m", "p2b", "p1", "p2", "rotate", "deg", "hslString", "map", "names$1", "unpack", "unpacked", "keys", "tkeys", "j", "ok", "nk", "names", "nameParse", "RGB_RE", "rgbParse", "rgbString", "to", "from", "interpolate", "rgb1", "rgb2", "t", "modHSL", "ratio", "tmp", "clone", "proto", "fromObject", "input", "functionParse", "Color", "_Color", "type", "obj", "color", "weight", "c1", "c2", "w2", "p", "w1", "val", "noop", "uid", "id", "isNullOrUndef", "value", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNumber", "n", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "_parsed", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "_limitValue", "Math", "_lookupByKey", "lo", "getPixelForValue", "hi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "d", "m", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "options", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "Ticks", "applyScaleDefaults", "display", "offset", "reverse", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "isNullOrUndef", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "point", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "spanGaps", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "animator", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "isFinite", "sign", "convertObjectDataToArray", "data", "adata", "Array", "isStacked", "meta", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "vScale", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iScale", "iAxis", "axis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "datasetElementType", "dataElementType", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "grouped", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "iAxisKey", "vAxisKey", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "skipNull", "val", "isNaN", "indexOf", "_getStackCount", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "stackIndex", "rects", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "animateRotate", "animateScale", "spacing", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "map", "style", "text", "fillStyle", "backgroundColor", "strokeStyle", "borderColor", "fontColor", "lineWidth", "borderWidth", "onClick", "e", "legendItem", "toggleDataVisibility", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "calculateCircumference", "animationOpts", "centerX", "centerY", "arc", "metaData", "formatNumber", "locale", "borderAlign", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "LineController", "showLine", "spanGaps", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "segment", "animated", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "angleLines", "display", "circular", "pointLabels", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "interaction", "registry", "getElement", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "adapters", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "el", "getRange", "lo", "hi", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "_isPointInArea", "inRange", "getNearestRadialItems", "evaluationFunc", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "Interaction", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "defaultRoutes", "tooltipPosition", "hasValue", "final", "ret", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "result", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "borderDash", "dash", "borderDashOffset", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "textAlign", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "findIndex", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "lineDashOffset", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "axisID", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "getSizeForArea", "field", "getDatasetArea", "Chart", "version", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resizeBeforeDraw", "_resize", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "slice", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "useClip", "getElementsAtEventForMode", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "clipArc", "pixelMargin", "angleMargin", "closePath", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "borderRadius", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "borderJoinStyle", "inner", "lineJoin", "ArcElement", "chartX", "chartY", "rAdjust", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "capBezierPoints", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "hitRadius", "PointElement", "hoverRadius", "mouseX", "mouseY", "inXRange", "inYRange", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "hasRadius", "addNormalRectPath", "rect", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "plugin_colors", "forceOverride", "_args", "chartOptions", "colorizer", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "plugin_decimation", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_normalizeAngle", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "clipVertical", "clipY", "lineLoop", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "lineDash", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "plugin_legend", "_element", "afterEvent", "ci", "useBorderRadius", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "plugin_title", "WeakMap", "plugin_subtitle", "positioners", "average", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "lines", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "plugin_tooltip", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "MIN_SPACING", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "logarithmic", "_zero", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "animate", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "displayFormats", "_unit", "_majorUnit", "_offsets", "_normalized", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "Chart", "registerables", "getOrCreateLegendList", "chart", "id", "legendContainer", "listContainer", "htmlLegendPlugin", "args", "options", "ul", "item", "li", "type", "boxSpan", "textContainer", "text", "charts_html_legend_default", "Chart", "charts_default", "MONEY", "czHorizontalBarChart", "ctx", "data", "v", "czVerticalBarChart", "czPieChart", "legend", "charts_html_legend_default", "czFundsBarChart", "czMiniFinanceChart", "labels", "label", "color", "MAX_LENGTH", "getIncomeData", "max_length", "sort_by", "income_data", "a", "b", "createCharts", "ctx_income_expenditure", "chart_income_expenditure", "charts_default", "v", "context", "label", "MONEY", "value", "index", "ticks", "max_tick", "tick", "return_value", "suffix", "e", "data", "ctx_trustees", "trustees_legend", "chart_trustees", "czPieChart", "ctx_volunteers", "volunteers_legend", "chart_volunteers", "ctx_annual_return_submission_on_time", "chart_annual_return_submission_on_time", "czHorizontalBarChart", "ctx_imd_decile", "chart_imd_decile", "czVerticalBarChart", "ctx_area_of_operations_in_the_uk", "chart_area_of_operations_in_the_uk", "createIncomeChart", "ctx_income_chart", "czPieChart", "createSpendingChart", "ctx_spending_chart", "createFundsChart", "ctx_funds_chart", "funds_chart", "czFundsBarChart", "createCharts", "createCharts", "ctx", "finances", "prefix", "charts_default", "x", "value", "index", "values", "createMiniExpenditureChart", "ctx", "finances", "color", "czMiniFinanceChart", "x", "createMiniIncomeChart", "main", "setupCopyText", "createCharts", "createMiniExpenditureChart", "createMiniIncomeChart", "setupTables", "event"]
}
