@thewhitehaven04/chartjs-plugin-zoom 2.2.15 → 2.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * @thewhitehaven04/chartjs-plugin-zoom v2.2.12
3
- * https://www.chartjs.org/chartjs-plugin-zoom/2.2.12/
2
+ * @thewhitehaven04/chartjs-plugin-zoom v2.2.18
3
+ * https://www.chartjs.org/chartjs-plugin-zoom/2.2.18/
4
4
  * (c) 2016-2026 chartjs-plugin-zoom Contributors
5
5
  * Released under the MIT License
6
6
  */
@@ -1043,7 +1043,7 @@ function hammerOptionsChanged(oldOptions, newOptions) {
1043
1043
  return false;
1044
1044
  }
1045
1045
 
1046
- var version = "2.2.12";
1046
+ var version = "2.2.18";
1047
1047
 
1048
1048
  const defaults = {
1049
1049
  pan: {
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * @thewhitehaven04/chartjs-plugin-zoom v2.2.12
3
- * https://www.chartjs.org/chartjs-plugin-zoom/2.2.12/
2
+ * @thewhitehaven04/chartjs-plugin-zoom v2.2.18
3
+ * https://www.chartjs.org/chartjs-plugin-zoom/2.2.18/
4
4
  * (c) 2016-2026 chartjs-plugin-zoom Contributors
5
5
  * Released under the MIT License
6
6
  */
@@ -1046,7 +1046,7 @@ function hammerOptionsChanged(oldOptions, newOptions) {
1046
1046
  return false;
1047
1047
  }
1048
1048
 
1049
- var version = "2.2.12";
1049
+ var version = "2.2.18";
1050
1050
 
1051
1051
  const defaults = {
1052
1052
  pan: {
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * @thewhitehaven04/chartjs-plugin-zoom v2.2.12
3
- * https://www.chartjs.org/chartjs-plugin-zoom/2.2.12/
2
+ * @thewhitehaven04/chartjs-plugin-zoom v2.2.18
3
+ * https://www.chartjs.org/chartjs-plugin-zoom/2.2.18/
4
4
  * (c) 2016-2026 chartjs-plugin-zoom Contributors
5
5
  * Released under the MIT License
6
6
  */
7
- !function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("chart.js"),require("hammerjs"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","hammerjs","chart.js/helpers"],n):(t="undefined"!=typeof globalThis?globalThis:t||self).ChartZoom=n(t.Chart,t.Hammer,t.Chart.helpers)}(this,(function(t,n,e){"use strict";const o=t=>`${t}Key`,i=t=>t?.enabled&&t.modifierKey?t.modifierKey:void 0,a=(t,n)=>t&&n[o(t)],r=(t,n)=>t&&!n[o(t)];function s(t,n,e){return void 0===t||("string"==typeof t?-1!==t.indexOf(n):"function"==typeof t&&-1!==t({chart:e}).indexOf(n))}function c(t,n){return"function"==typeof t&&(t=t({chart:n})),"string"==typeof t?{x:-1!==t.indexOf("x"),y:-1!==t.indexOf("y")}:{x:!1,y:!1}}function l(t,n,e){const{mode:o="xy",scaleMode:i,overScaleMode:a}=t||{},r=function({x:t,y:n},e){const o=e.scales,i=Object.keys(o);for(let e=0;e<i.length;e++){const a=o[i[e]];if(n>=a.top&&n<=a.bottom&&t>=a.left&&t<=a.right)return a}return null}(n,e),s=c(o,e),l=c(i,e);return((t,n,e,o)=>{if(!n)return;const i=c(n,t);for(const t of["x","y"])i[t]&&(e[t]=o[t],o[t]=!1)})(e,a,l,s),r&&l[r.axis]?[r]:((t,n)=>{const e=[];for(const o of Object.values(t.scales))n[o.axis]&&e.push(o);return e||Object.values(t.scales)})(e,s)}const m=new WeakMap;function u(t){let n=m.get(t);return n||(n={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},options:{},targets:{},panDelta:{},dragging:!1,panning:!1},m.set(t,n)),n}const d=t=>void 0===t||isNaN(t);function f(t,n,o,i){const a=o&&e.isNumber(t)&&e.isNumber(n)?Math.max(0,Math.min(1,(t-n)/o)):0;return{min:i*a,max:i*(1-a)}}function p(t,n){const e=t.isHorizontal()?n.x:n.y;return t.getValueForPixel(e)}function h(t,n,e){const o=t.max-t.min,i=o*(n-1);return f(p(t,e),t.min,o,i)}function g(t,n,o,i,a){let r=o[i];if("original"===r){const o=t.originalScaleLimits[n.id][i];if(e.isNumber(o.options))return o.options;if(!e.isNullOrUndef(o.options)){const t=n.parse(o.options);if(e.isNumber(t))return t}r=o.scale}return e.valueOrDefault(r,a)}function x(t,{min:n,max:o},i,a=!1,r=!1){const s=u(t.chart),{options:c}=t,l=function(t,n){return n?.[t.id]||n?.[t.axis]||{}}(t,i),{minRange:m=0}=l,d=g(s,t,l,"min",-1/0),f=g(s,t,l,"max",1/0);if(r&&(n<d||o>f))return!0;const p=t.max-t.min,h=a?Math.max(o-n,m):p;if(a&&h===m&&p<=m)return!0;const x=function(t,{min:n,max:o,minLimit:i,maxLimit:a},r,s){const c=(t-o+n)/2;n-=c,o+=c;const l={min:"original",max:"original"},m=g(r,s,l,"min",-1/0),u=g(r,s,l,"max",1/0),d=t/1e6;return e.almostEquals(n,m,d)&&(n=m),e.almostEquals(o,u,d)&&(o=u),n<i?(n=i,o=Math.min(i+t,a)):o>a&&(o=a,n=Math.max(a-t,i)),{min:n,max:o}}(h,{min:n,max:o,minLimit:d,maxLimit:f},s,t);return c.min=x.min,c.max=x.max,s.updatedScaleLimits[t.id]=x,t.parse(x.min)!==t.min||t.parse(x.max)!==t.max}const y=t=>0===t||isNaN(t)?0:t<0?Math.min(Math.round(t),-1):Math.max(Math.round(t),1);const b={millisecond:0,second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function v(t,n,e,o=!1){const{min:i,max:a}=t;let r=0;if((t=>"time"===t.type)(t)){const n=t.options.time?.round;r=n?b[n]:0}const s=t.getValueForPixel(t.getPixelForValue(i+r)-n),c=t.getValueForPixel(t.getPixelForValue(a+r)-n);return!(!d(s)&&!d(c))||x(t,{min:s,max:c},e,o,!0)}function w(t,n,e){return v(t,n,e,!0)}const M={category:function(t,n,e,o){const i=h(t,n,e);return t.min===t.max&&n<1&&function(t){const n=t.getLabels().length-1;t.min>0&&(t.min-=1),t.max<n&&(t.max+=1)}(t),x(t,{min:t.min+y(i.min),max:t.max-y(i.max)},o,!0)},default:function(t,n,e,o){const i=h(t,n,e);return x(t,{min:t.min+i.min,max:t.max-i.max},o,!0)},logarithmic:function(t,n,e,o){const i=function(t,n,e){const o=p(t,e);if(void 0===o)return{min:t.min,max:t.max};const i=Math.log10(t.min),a=Math.log10(t.max),r=a-i,s=f(Math.log10(o),i,r,r*(n-1));return{min:Math.pow(10,i+s.min),max:Math.pow(10,a-s.max)}}(t,n,e);return x(t,i,o,!0)}},z={default:function(t,n,e,o){return x(t,function(t,n,e){const o=t.getValueForPixel(n)??t.min,i=t.getValueForPixel(e)??t.max;return{min:Math.min(o,i),max:Math.max(o,i)}}(t,n,e),o,!0)}},S={category:function(t,n,e){const o=t.getLabels().length-1;let{min:i,max:a}=t;const r=Math.max(a-i,1),s=Math.round(function(t){return t.isHorizontal()?t.width:t.height}(t)/Math.max(r,10)),c=Math.round(Math.abs(n/s));let l;return n<-s?(a=Math.min(a+c,o),i=1===r?a:a-r,l=a===o):n>s&&(i=Math.max(0,i-c),a=1===r?i:i+r,l=0===i),x(t,{min:i,max:a},e)||Boolean(l)},default:v,logarithmic:w,timeseries:w};function P(t,n,e){const{id:o,options:{min:i,max:a}}=t;if(!n[o]||!e[o])return!0;const r=e[o];return r.min!==i||r.max!==a}function j(t,n){for(const e of Object.keys(t))n[e]||delete t[e]}function O(t,n){const{scales:e}=t,{originalScaleLimits:o,updatedScaleLimits:i}=n;for(const t of Object.values(e))P(t,o,i)&&(o[t.id]={min:{scale:t.min,options:t.options.min},max:{scale:t.max,options:t.options.max}});return j(o,e),j(i,e),o}function k(t,n,e,o){const i=M[t.type]||M.default;i?.(t,n,e,o)}function C(t,n,e,o){const i=z[t.type]||z.default;i?.(t,n,e,o)}function Z(t){const n=t.chartArea;return{x:(n.left+n.right)/2,y:(n.top+n.bottom)/2}}function D(t,n,e="none",o="api"){const{x:i=1,y:a=1,focalPoint:r=Z(t)}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{limits:c={},zoom:m}}=s;O(t,s);const d=1!==i,f=1!==a,p=l(m,r,t);for(const t of p)t.isHorizontal()&&d?k(t,i,r,c):!t.isHorizontal()&&f&&k(t,a,r,c);t.update(e),m?.onZoom?.({chart:t,trigger:o,amount:{x:i,y:a,focalPoint:r}})}function R(t,n,e,o="none",i="api"){const a=u(t),{options:{limits:r={},zoom:c={}}}=a,{mode:l="xy"}=c;O(t,a);const m=s(l,"x",t),d=s(l,"y",t);for(const o of Object.values(t.scales))o.isHorizontal()&&m?C(o,n.x,e.x,r):!o.isHorizontal()&&d&&C(o,n.y,e.y,r);t.update(o),c.onZoom?.({chart:t,trigger:i})}function L(t,n){const o=t.originalScaleLimits[n];if(!o)return;const{min:i,max:a}=o;return e.isNumber(a.options)&&e.isNumber(i.options)?a.options-i.options:e.isNumber(a.scale)&&e.isNumber(i.scale)?a.scale-i.scale:void 0}function N(t,n,o,i){const{panDelta:a}=i,r=a[t.id]||0;e.sign(r)===e.sign(n)&&(n+=r);const s=S[t.type]||S.default;s?.(t,n,o)?a[t.id]=0:a[t.id]=n}function E(t,n,e,o="none",i="other"){const{x:a=0,y:r=0}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{pan:c,limits:l={}}}=s,{onPan:m}=c||{};O(t,s);const d=0!==a,f=0!==r,p=e||Object.values(t.scales);for(const t of p)t.isHorizontal()&&d?N(t,a,l,s):!t.isHorizontal()&&f&&N(t,r,l,s);t.update(o),m?.({chart:t,trigger:i,delta:{x:a,y:r}})}function F(t){const n=u(t);O(t,n);const e={};for(const o of Object.keys(t.scales)){const{min:t,max:i}=n.originalScaleLimits[o]||{min:{},max:{}};e[o]={min:t.scale,max:i.scale}}return e}function A(t){return t.panning||t.dragging}const H=(t,n,e)=>Math.min(e,Math.max(n,t));function T(t,n){const{handlers:e,targets:o}=u(t),i=e[n],a=o[n];i&&a&&(a.removeEventListener(n,i),delete e[n])}function Y(t,n,e,o){const{handlers:i,options:a,targets:r}=u(t);if(i[e]&&r[e]===n)return;T(t,e);const s=i[e]=n=>o(t,n,a);r[e]=n;const c="wheel"!==e&&void 0;n.addEventListener(e,s,{passive:c})}function B(t,n){const e=u(t);e.dragStart&&(e.dragging=!0,e.dragEnd=n,t.draw())}function q(t,n){const e=u(t);e.dragStart&&"Escape"===n.key&&(T(t,"keydown"),e.dragging=!1,e.dragStart=e.dragEnd=void 0,t.draw())}function V(t,n){if(t.target!==n.canvas){const e=n.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}return e.getRelativePosition(t,n)}function X(t,n,e){const{onZoomStart:o,onZoomRejected:i}=e;if(o){const e=V(n,t);if(!1===o?.({chart:t,event:n,point:e}))return i?.({chart:t,event:n}),!1}}function K(t,n){if(t.legend){const o=e.getRelativePosition(n,t);if(e._isPointInArea(o,t.legend))return}const o=u(t),{pan:s,zoom:c={}}=o.options;if(0!==n.button||a(i(s),n)||r(i(c.drag),n))return c.onZoomRejected?.({chart:t,event:n});!1!==X(t,n,c)&&(o.dragStart=n,Y(t,t.canvas.ownerDocument,"mousemove",B),Y(t,window.document,"keydown",q))}function W(t,n,e,{min:o,max:i,prop:a}){t[o]=H(Math.min(e.begin[a],e.end[a]),n[o],n[i]),t[i]=H(Math.max(e.begin[a],e.end[a]),n[o],n[i])}function I(t,n,e){const o={begin:V(n.dragStart,t),end:V(n.dragEnd,t)};if(e){!function({begin:t,end:n},e){let o=n.x-t.x,i=n.y-t.y;const a=Math.abs(o/i);a>e?o=Math.sign(o)*Math.abs(i*e):a<e&&(i=Math.sign(i)*Math.abs(o/e)),n.x=t.x+o,n.y=t.y+i}(o,t.chartArea.width/t.chartArea.height)}return o}function U(t,n,e,o){const i=s(n,"x",t),a=s(n,"y",t),{top:r,left:c,right:l,bottom:m,width:u,height:d}=t.chartArea,f={top:r,left:c,right:l,bottom:m},p=I(t,e,o&&i&&a);i&&W(f,t.chartArea,p,{min:"left",max:"right",prop:"x"}),a&&W(f,t.chartArea,p,{min:"top",max:"bottom",prop:"y"});const h=f.right-f.left,g=f.bottom-f.top;return{...f,width:h,height:g,zoomX:i&&h?1+(u-h)/u:1,zoomY:a&&g?1+(d-g)/d:1}}function $(t,n){const e=u(t);if(!e.dragStart)return;T(t,"mousemove");const{mode:o,onZoomComplete:i,drag:a}=e.options.zoom??{},{threshold:r=0,maintainAspectRatio:c}=a??{},l=U(t,o,{dragStart:e.dragStart,dragEnd:n},c),m=s(o,"x",t)?l.width:0,d=s(o,"y",t)?l.height:0,f=Math.sqrt(m*m+d*d);if(e.dragStart=e.dragEnd=void 0,f<=r)return e.dragging=!1,void t.draw();R(t,{x:l.left,y:l.top},{x:l.right,y:l.bottom},"zoom","drag"),e.dragging=!1,e.filterNextClick=!0,i?.({chart:t})}function _(t,n){const{handlers:{onZoomComplete:e},options:{zoom:o={}}}=u(t);if(!function(t,n,e){if(r(i(e.wheel),n))e.onZoomRejected?.({chart:t,event:n});else if(!1!==X(t,n,e)&&(n.cancelable&&n.preventDefault(),void 0!==n.deltaY))return!0}(t,n,o))return;const a=n.target?.getBoundingClientRect(),s=o?.wheel?.speed??.1,c=n.deltaY>=0?2-1/(1-s):1+s;D(t,{x:c,y:c,focalPoint:{x:n.clientX-a.left,y:n.clientY-a.top}},"zoom","wheel"),e?.(n)}function G(t,n,e,o){e&&(u(t).handlers[n]=function(t,n){let e;return function(){return clearTimeout(e),e=setTimeout(t,n),n}}((()=>e?.({chart:t})),o))}function J(t,n){return function(e,o){const{pan:s,zoom:c={}}=n.options;if(!s||!s.enabled)return!1;const l=o&&o.srcEvent;return!l||(!(!n.panning&&"mouse"===o.pointerType&&(r(i(s),l)||a(i(c.drag),l)))||(s.onPanRejected?.({chart:t,event:o}),!1))}}function Q(t,n,e){if(n.scale){const{center:o,pointers:i}=e,a=1/n.scale*e.scale,r=e.target.getBoundingClientRect(),c=function(t,n){const e=Math.abs(t.clientX-n.clientX),o=Math.abs(t.clientY-n.clientY),i=e/o;let a,r;return i>.3&&i<1.7?a=r=!0:e>o?a=!0:r=!0,{x:a,y:r}}(i[0],i[1]),l=n.options.zoom?.mode;D(t,{x:c.x&&s(l,"x",t)?a:1,y:c.y&&s(l,"y",t)?a:1,focalPoint:{x:o.x-r.left,y:o.y-r.top}},"zoom","pinch"),n.scale=e.scale}}function tt(t,n,e){const o=n.delta;o&&(n.panning=!0,E(t,{x:e.deltaX-o.x,y:e.deltaY-o.y},n.panScales&&n.panScales.map((n=>t.scales[n])).filter(Boolean)),n.delta={x:e.deltaX,y:e.deltaY})}const nt=new WeakMap;function et(t,o){const i=u(t),a=t.canvas,{pan:r,zoom:s}=o,c=new n.Manager(a);s?.pinch?.enabled&&(c.add(new n.Pinch),c.on("pinchstart",(n=>function(t,n,o){if(n.options.zoom?.pinch?.enabled){const i=e.getRelativePosition(o.srcEvent,t);!1===n.options.zoom?.onZoomStart?.({chart:t,event:o.srcEvent,point:i})?(n.scale=null,n.options.zoom?.onZoomRejected?.({chart:t,event:o.srcEvent})):n.scale=1}}(t,i,n))),c.on("pinch",(n=>Q(t,i,n))),c.on("pinchend",(n=>function(t,n,e){n.scale&&(Q(t,n,e),n.scale=null,n.options.zoom?.onZoomComplete?.({chart:t}))}(t,i,n)))),r&&r.enabled&&(c.add(new n.Pan({threshold:r.threshold,enable:J(t,i)})),c.on("panstart",(n=>function(t,n,e){const{enabled:o,onPanStart:i,onPanRejected:a}=n.options.pan??{};if(!o)return;const r=e.target.getBoundingClientRect(),s={x:e.center.x-r.left,y:e.center.y-r.top};if(!1===i?.({chart:t,event:e,point:s}))return a?.({chart:t,event:e});n.panScales=l(n.options.pan,s,t).map((t=>t.id)),n.delta={x:0,y:0},tt(t,n,e)}(t,i,n))),c.on("panmove",(n=>tt(t,i,n))),c.on("panend",(()=>function(t,n){n.delta=null,n.panning&&(n.panning=!1,n.filterNextClick=!0,n.options.pan?.onPanComplete?.({chart:t}))}(t,i)))),nt.set(t,c)}function ot(t){const n=nt.get(t);n&&(n.remove("pinchstart"),n.remove("pinch"),n.remove("pinchend"),n.remove("panstart"),n.remove("pan"),n.remove("panend"),n.destroy(),nt.delete(t))}function it(t,n,e){const o=e.zoom?.drag,{dragStart:i,dragEnd:a}=u(t);if(o?.drawTime!==n||!i||!a)return;const{left:r,top:s,width:c,height:l}=U(t,e.zoom?.mode,{dragStart:i,dragEnd:a},o.maintainAspectRatio),m=t.ctx;m.save(),m.beginPath(),m.fillStyle=o.backgroundColor||"rgba(225,225,225,0.3)",m.fillRect(r,s,c,l),o.borderWidth&&(m.lineWidth=o.borderWidth,m.strokeStyle=o.borderColor||"rgba(225,225,225)",m.strokeRect(r,s,c,l)),m.restore()}const at=t=>{t.pan=(n,e,o)=>E(t,n,e,o,"api"),t.zoom=(n,e)=>D(t,n,e),t.zoomRect=(n,e,o)=>R(t,n,e,o),t.zoomScale=(n,e,o)=>function(t,n,e,o="none",i="api"){const a=u(t);O(t,a),x(t.scales[n],e,void 0,!0),t.update(o),a.options.zoom?.onZoom?.({chart:t,trigger:i})}(t,n,e,o),t.resetZoom=n=>function(t,n="default"){const e=u(t),o=O(t,e);for(const n of Object.values(t.scales)){const t=n.options;o[n.id]?(t.min=o[n.id].min.options,t.max=o[n.id].max.options):(delete t.min,delete t.max),delete e.updatedScaleLimits[n.id]}t.update(n),e.options.zoom?.onZoomComplete?.({chart:t})}(t,n),t.getZoomLevel=()=>function(t){const n=u(t);let e=1,o=1;for(const i of Object.values(t.scales)){const t=L(n,i.id);if(t){const n=Math.round(t/(i.max-i.min)*100)/100;e=Math.min(e,n),o=Math.max(o,n)}}return e<1?e:o}(t),t.getInitialScaleBounds=()=>F(t),t.getZoomedScaleBounds=()=>function(t){const n=u(t),e={};for(const o of Object.keys(t.scales))e[o]=n.updatedScaleLimits[o];return e}(t),t.isZoomedOrPanned=()=>function(t){const n=F(t);for(const e of Object.keys(t.scales)){const{min:o,max:i}=n[e];if(void 0!==o&&t.scales[e].min!==o)return!0;if(void 0!==i&&t.scales[e].max!==i)return!0}return!1}(t),t.isZoomingOrPanning=()=>function(t){const n=u(t);return!(!A(n)&&!n.filterNextClick)}(t)};var rt={id:"zoom",version:"2.2.12",defaults:{pan:{enabled:!1,mode:"xy",threshold:10,modifierKey:null},zoom:{wheel:{enabled:!1,speed:.1,modifierKey:null},drag:{enabled:!1,drawTime:"beforeDatasetsDraw",modifierKey:null},pinch:{enabled:!1},mode:"xy"}},start(t,e,o){u(t).options=o,Object.prototype.hasOwnProperty.call(o.zoom,"enabled")&&console.warn("The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`."),(Object.prototype.hasOwnProperty.call(o.zoom,"overScaleMode")||Object.prototype.hasOwnProperty.call(o.pan,"overScaleMode"))&&console.warn("The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired)."),n&&et(t,o),at(t)},beforeEvent(t,{event:n}){const e=u(t);return!A(e)&&("click"!==n.type&&"mouseup"!==n.type||!e.filterNextClick?void 0:(e.filterNextClick=!1,!1))},beforeUpdate(t,n,e){const o=u(t),i=o.options;o.options=e,function(t,n){const{pan:e,zoom:o}=t,{pan:i,zoom:a}=n;return o?.pinch?.enabled!==a?.pinch?.enabled||e?.enabled!==i?.enabled||e?.threshold!==i?.threshold}(i,e)&&(ot(t),et(t,e)),function(t,n){const e=t.canvas,{wheel:o,drag:i,onZoomComplete:a}=n.zoom??{};o?.enabled?(Y(t,e,"wheel",_),G(t,"onZoomComplete",a,250)):T(t,"wheel"),i?.enabled?(Y(t,e,"mousedown",K),Y(t,e.ownerDocument,"mouseup",$)):(T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"keydown"))}(t,e)},beforeDatasetsDraw(t,n,e){it(t,"beforeDatasetsDraw",e)},afterDatasetsDraw(t,n,e){it(t,"afterDatasetsDraw",e)},beforeDraw(t,n,e){it(t,"beforeDraw",e)},afterDraw(t,n,e){it(t,"afterDraw",e)},stop(t){!function(t){T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"wheel"),T(t,"click"),T(t,"keydown")}(t),n&&ot(t),function(t){m.delete(t)}(t)},panFunctions:S,zoomFunctions:M,zoomRectFunctions:z};return t.Chart.register(rt),rt}));
7
+ !function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("chart.js"),require("hammerjs"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","hammerjs","chart.js/helpers"],n):(t="undefined"!=typeof globalThis?globalThis:t||self).ChartZoom=n(t.Chart,t.Hammer,t.Chart.helpers)}(this,(function(t,n,e){"use strict";const o=t=>`${t}Key`,i=t=>t?.enabled&&t.modifierKey?t.modifierKey:void 0,a=(t,n)=>t&&n[o(t)],r=(t,n)=>t&&!n[o(t)];function s(t,n,e){return void 0===t||("string"==typeof t?-1!==t.indexOf(n):"function"==typeof t&&-1!==t({chart:e}).indexOf(n))}function c(t,n){return"function"==typeof t&&(t=t({chart:n})),"string"==typeof t?{x:-1!==t.indexOf("x"),y:-1!==t.indexOf("y")}:{x:!1,y:!1}}function l(t,n,e){const{mode:o="xy",scaleMode:i,overScaleMode:a}=t||{},r=function({x:t,y:n},e){const o=e.scales,i=Object.keys(o);for(let e=0;e<i.length;e++){const a=o[i[e]];if(n>=a.top&&n<=a.bottom&&t>=a.left&&t<=a.right)return a}return null}(n,e),s=c(o,e),l=c(i,e);return((t,n,e,o)=>{if(!n)return;const i=c(n,t);for(const t of["x","y"])i[t]&&(e[t]=o[t],o[t]=!1)})(e,a,l,s),r&&l[r.axis]?[r]:((t,n)=>{const e=[];for(const o of Object.values(t.scales))n[o.axis]&&e.push(o);return e||Object.values(t.scales)})(e,s)}const m=new WeakMap;function u(t){let n=m.get(t);return n||(n={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},options:{},targets:{},panDelta:{},dragging:!1,panning:!1},m.set(t,n)),n}const d=t=>void 0===t||isNaN(t);function f(t,n,o,i){const a=o&&e.isNumber(t)&&e.isNumber(n)?Math.max(0,Math.min(1,(t-n)/o)):0;return{min:i*a,max:i*(1-a)}}function p(t,n){const e=t.isHorizontal()?n.x:n.y;return t.getValueForPixel(e)}function h(t,n,e){const o=t.max-t.min,i=o*(n-1);return f(p(t,e),t.min,o,i)}function g(t,n,o,i,a){let r=o[i];if("original"===r){const o=t.originalScaleLimits[n.id][i];if(e.isNumber(o.options))return o.options;if(!e.isNullOrUndef(o.options)){const t=n.parse(o.options);if(e.isNumber(t))return t}r=o.scale}return e.valueOrDefault(r,a)}function x(t,{min:n,max:o},i,a=!1,r=!1){const s=u(t.chart),{options:c}=t,l=function(t,n){return n?.[t.id]||n?.[t.axis]||{}}(t,i),{minRange:m=0}=l,d=g(s,t,l,"min",-1/0),f=g(s,t,l,"max",1/0);if(r&&(n<d||o>f))return!0;const p=t.max-t.min,h=a?Math.max(o-n,m):p;if(a&&h===m&&p<=m)return!0;const x=function(t,{min:n,max:o,minLimit:i,maxLimit:a},r,s){const c=(t-o+n)/2;n-=c,o+=c;const l={min:"original",max:"original"},m=g(r,s,l,"min",-1/0),u=g(r,s,l,"max",1/0),d=t/1e6;return e.almostEquals(n,m,d)&&(n=m),e.almostEquals(o,u,d)&&(o=u),n<i?(n=i,o=Math.min(i+t,a)):o>a&&(o=a,n=Math.max(a-t,i)),{min:n,max:o}}(h,{min:n,max:o,minLimit:d,maxLimit:f},s,t);return c.min=x.min,c.max=x.max,s.updatedScaleLimits[t.id]=x,t.parse(x.min)!==t.min||t.parse(x.max)!==t.max}const y=t=>0===t||isNaN(t)?0:t<0?Math.min(Math.round(t),-1):Math.max(Math.round(t),1);const b={millisecond:0,second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function v(t,n,e,o=!1){const{min:i,max:a}=t;let r=0;if((t=>"time"===t.type)(t)){const n=t.options.time?.round;r=n?b[n]:0}const s=t.getValueForPixel(t.getPixelForValue(i+r)-n),c=t.getValueForPixel(t.getPixelForValue(a+r)-n);return!(!d(s)&&!d(c))||x(t,{min:s,max:c},e,o,!0)}function w(t,n,e){return v(t,n,e,!0)}const M={category:function(t,n,e,o){const i=h(t,n,e);return t.min===t.max&&n<1&&function(t){const n=t.getLabels().length-1;t.min>0&&(t.min-=1),t.max<n&&(t.max+=1)}(t),x(t,{min:t.min+y(i.min),max:t.max-y(i.max)},o,!0)},default:function(t,n,e,o){const i=h(t,n,e);return x(t,{min:t.min+i.min,max:t.max-i.max},o,!0)},logarithmic:function(t,n,e,o){const i=function(t,n,e){const o=p(t,e);if(void 0===o)return{min:t.min,max:t.max};const i=Math.log10(t.min),a=Math.log10(t.max),r=a-i,s=f(Math.log10(o),i,r,r*(n-1));return{min:Math.pow(10,i+s.min),max:Math.pow(10,a-s.max)}}(t,n,e);return x(t,i,o,!0)}},z={default:function(t,n,e,o){return x(t,function(t,n,e){const o=t.getValueForPixel(n)??t.min,i=t.getValueForPixel(e)??t.max;return{min:Math.min(o,i),max:Math.max(o,i)}}(t,n,e),o,!0)}},S={category:function(t,n,e){const o=t.getLabels().length-1;let{min:i,max:a}=t;const r=Math.max(a-i,1),s=Math.round(function(t){return t.isHorizontal()?t.width:t.height}(t)/Math.max(r,10)),c=Math.round(Math.abs(n/s));let l;return n<-s?(a=Math.min(a+c,o),i=1===r?a:a-r,l=a===o):n>s&&(i=Math.max(0,i-c),a=1===r?i:i+r,l=0===i),x(t,{min:i,max:a},e)||Boolean(l)},default:v,logarithmic:w,timeseries:w};function P(t,n,e){const{id:o,options:{min:i,max:a}}=t;if(!n[o]||!e[o])return!0;const r=e[o];return r.min!==i||r.max!==a}function j(t,n){for(const e of Object.keys(t))n[e]||delete t[e]}function O(t,n){const{scales:e}=t,{originalScaleLimits:o,updatedScaleLimits:i}=n;for(const t of Object.values(e))P(t,o,i)&&(o[t.id]={min:{scale:t.min,options:t.options.min},max:{scale:t.max,options:t.options.max}});return j(o,e),j(i,e),o}function k(t,n,e,o){const i=M[t.type]||M.default;i?.(t,n,e,o)}function C(t,n,e,o){const i=z[t.type]||z.default;i?.(t,n,e,o)}function Z(t){const n=t.chartArea;return{x:(n.left+n.right)/2,y:(n.top+n.bottom)/2}}function D(t,n,e="none",o="api"){const{x:i=1,y:a=1,focalPoint:r=Z(t)}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{limits:c={},zoom:m}}=s;O(t,s);const d=1!==i,f=1!==a,p=l(m,r,t);for(const t of p)t.isHorizontal()&&d?k(t,i,r,c):!t.isHorizontal()&&f&&k(t,a,r,c);t.update(e),m?.onZoom?.({chart:t,trigger:o,amount:{x:i,y:a,focalPoint:r}})}function R(t,n,e,o="none",i="api"){const a=u(t),{options:{limits:r={},zoom:c={}}}=a,{mode:l="xy"}=c;O(t,a);const m=s(l,"x",t),d=s(l,"y",t);for(const o of Object.values(t.scales))o.isHorizontal()&&m?C(o,n.x,e.x,r):!o.isHorizontal()&&d&&C(o,n.y,e.y,r);t.update(o),c.onZoom?.({chart:t,trigger:i})}function L(t,n){const o=t.originalScaleLimits[n];if(!o)return;const{min:i,max:a}=o;return e.isNumber(a.options)&&e.isNumber(i.options)?a.options-i.options:e.isNumber(a.scale)&&e.isNumber(i.scale)?a.scale-i.scale:void 0}function N(t,n,o,i){const{panDelta:a}=i,r=a[t.id]||0;e.sign(r)===e.sign(n)&&(n+=r);const s=S[t.type]||S.default;s?.(t,n,o)?a[t.id]=0:a[t.id]=n}function E(t,n,e,o="none",i="other"){const{x:a=0,y:r=0}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{pan:c,limits:l={}}}=s,{onPan:m}=c||{};O(t,s);const d=0!==a,f=0!==r,p=e||Object.values(t.scales);for(const t of p)t.isHorizontal()&&d?N(t,a,l,s):!t.isHorizontal()&&f&&N(t,r,l,s);t.update(o),m?.({chart:t,trigger:i,delta:{x:a,y:r}})}function F(t){const n=u(t);O(t,n);const e={};for(const o of Object.keys(t.scales)){const{min:t,max:i}=n.originalScaleLimits[o]||{min:{},max:{}};e[o]={min:t.scale,max:i.scale}}return e}function A(t){return t.panning||t.dragging}const H=(t,n,e)=>Math.min(e,Math.max(n,t));function T(t,n){const{handlers:e,targets:o}=u(t),i=e[n],a=o[n];i&&a&&(a.removeEventListener(n,i),delete e[n])}function Y(t,n,e,o){const{handlers:i,options:a,targets:r}=u(t);if(i[e]&&r[e]===n)return;T(t,e);const s=i[e]=n=>o(t,n,a);r[e]=n;const c="wheel"!==e&&void 0;n.addEventListener(e,s,{passive:c})}function B(t,n){const e=u(t);e.dragStart&&(e.dragging=!0,e.dragEnd=n,t.draw())}function q(t,n){const e=u(t);e.dragStart&&"Escape"===n.key&&(T(t,"keydown"),e.dragging=!1,e.dragStart=e.dragEnd=void 0,t.draw())}function V(t,n){if(t.target!==n.canvas){const e=n.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}return e.getRelativePosition(t,n)}function X(t,n,e){const{onZoomStart:o,onZoomRejected:i}=e;if(o){const e=V(n,t);if(!1===o?.({chart:t,event:n,point:e}))return i?.({chart:t,event:n}),!1}}function K(t,n){if(t.legend){const o=e.getRelativePosition(n,t);if(e._isPointInArea(o,t.legend))return}const o=u(t),{pan:s,zoom:c={}}=o.options;if(0!==n.button||a(i(s),n)||r(i(c.drag),n))return c.onZoomRejected?.({chart:t,event:n});!1!==X(t,n,c)&&(o.dragStart=n,Y(t,t.canvas.ownerDocument,"mousemove",B),Y(t,window.document,"keydown",q))}function W(t,n,e,{min:o,max:i,prop:a}){t[o]=H(Math.min(e.begin[a],e.end[a]),n[o],n[i]),t[i]=H(Math.max(e.begin[a],e.end[a]),n[o],n[i])}function I(t,n,e){const o={begin:V(n.dragStart,t),end:V(n.dragEnd,t)};if(e){!function({begin:t,end:n},e){let o=n.x-t.x,i=n.y-t.y;const a=Math.abs(o/i);a>e?o=Math.sign(o)*Math.abs(i*e):a<e&&(i=Math.sign(i)*Math.abs(o/e)),n.x=t.x+o,n.y=t.y+i}(o,t.chartArea.width/t.chartArea.height)}return o}function U(t,n,e,o){const i=s(n,"x",t),a=s(n,"y",t),{top:r,left:c,right:l,bottom:m,width:u,height:d}=t.chartArea,f={top:r,left:c,right:l,bottom:m},p=I(t,e,o&&i&&a);i&&W(f,t.chartArea,p,{min:"left",max:"right",prop:"x"}),a&&W(f,t.chartArea,p,{min:"top",max:"bottom",prop:"y"});const h=f.right-f.left,g=f.bottom-f.top;return{...f,width:h,height:g,zoomX:i&&h?1+(u-h)/u:1,zoomY:a&&g?1+(d-g)/d:1}}function $(t,n){const e=u(t);if(!e.dragStart)return;T(t,"mousemove");const{mode:o,onZoomComplete:i,drag:a}=e.options.zoom??{},{threshold:r=0,maintainAspectRatio:c}=a??{},l=U(t,o,{dragStart:e.dragStart,dragEnd:n},c),m=s(o,"x",t)?l.width:0,d=s(o,"y",t)?l.height:0,f=Math.sqrt(m*m+d*d);if(e.dragStart=e.dragEnd=void 0,f<=r)return e.dragging=!1,void t.draw();R(t,{x:l.left,y:l.top},{x:l.right,y:l.bottom},"zoom","drag"),e.dragging=!1,e.filterNextClick=!0,i?.({chart:t})}function _(t,n){const{handlers:{onZoomComplete:e},options:{zoom:o={}}}=u(t);if(!function(t,n,e){if(r(i(e.wheel),n))e.onZoomRejected?.({chart:t,event:n});else if(!1!==X(t,n,e)&&(n.cancelable&&n.preventDefault(),void 0!==n.deltaY))return!0}(t,n,o))return;const a=n.target?.getBoundingClientRect(),s=o?.wheel?.speed??.1,c=n.deltaY>=0?2-1/(1-s):1+s;D(t,{x:c,y:c,focalPoint:{x:n.clientX-a.left,y:n.clientY-a.top}},"zoom","wheel"),e?.(n)}function G(t,n,e,o){e&&(u(t).handlers[n]=function(t,n){let e;return function(){return clearTimeout(e),e=setTimeout(t,n),n}}((()=>e?.({chart:t})),o))}function J(t,n){return function(e,o){const{pan:s,zoom:c={}}=n.options;if(!s||!s.enabled)return!1;const l=o&&o.srcEvent;return!l||(!(!n.panning&&"mouse"===o.pointerType&&(r(i(s),l)||a(i(c.drag),l)))||(s.onPanRejected?.({chart:t,event:o}),!1))}}function Q(t,n,e){if(n.scale){const{center:o,pointers:i}=e,a=1/n.scale*e.scale,r=e.target.getBoundingClientRect(),c=function(t,n){const e=Math.abs(t.clientX-n.clientX),o=Math.abs(t.clientY-n.clientY),i=e/o;let a,r;return i>.3&&i<1.7?a=r=!0:e>o?a=!0:r=!0,{x:a,y:r}}(i[0],i[1]),l=n.options.zoom?.mode;D(t,{x:c.x&&s(l,"x",t)?a:1,y:c.y&&s(l,"y",t)?a:1,focalPoint:{x:o.x-r.left,y:o.y-r.top}},"zoom","pinch"),n.scale=e.scale}}function tt(t,n,e){const o=n.delta;o&&(n.panning=!0,E(t,{x:e.deltaX-o.x,y:e.deltaY-o.y},n.panScales&&n.panScales.map((n=>t.scales[n])).filter(Boolean)),n.delta={x:e.deltaX,y:e.deltaY})}const nt=new WeakMap;function et(t,o){const i=u(t),a=t.canvas,{pan:r,zoom:s}=o,c=new n.Manager(a);s?.pinch?.enabled&&(c.add(new n.Pinch),c.on("pinchstart",(n=>function(t,n,o){if(n.options.zoom?.pinch?.enabled){const i=e.getRelativePosition(o.srcEvent,t);!1===n.options.zoom?.onZoomStart?.({chart:t,event:o.srcEvent,point:i})?(n.scale=null,n.options.zoom?.onZoomRejected?.({chart:t,event:o.srcEvent})):n.scale=1}}(t,i,n))),c.on("pinch",(n=>Q(t,i,n))),c.on("pinchend",(n=>function(t,n,e){n.scale&&(Q(t,n,e),n.scale=null,n.options.zoom?.onZoomComplete?.({chart:t}))}(t,i,n)))),r&&r.enabled&&(c.add(new n.Pan({threshold:r.threshold,enable:J(t,i)})),c.on("panstart",(n=>function(t,n,e){const{enabled:o,onPanStart:i,onPanRejected:a}=n.options.pan??{};if(!o)return;const r=e.target.getBoundingClientRect(),s={x:e.center.x-r.left,y:e.center.y-r.top};if(!1===i?.({chart:t,event:e,point:s}))return a?.({chart:t,event:e});n.panScales=l(n.options.pan,s,t).map((t=>t.id)),n.delta={x:0,y:0},tt(t,n,e)}(t,i,n))),c.on("panmove",(n=>tt(t,i,n))),c.on("panend",(()=>function(t,n){n.delta=null,n.panning&&(n.panning=!1,n.filterNextClick=!0,n.options.pan?.onPanComplete?.({chart:t}))}(t,i)))),nt.set(t,c)}function ot(t){const n=nt.get(t);n&&(n.remove("pinchstart"),n.remove("pinch"),n.remove("pinchend"),n.remove("panstart"),n.remove("pan"),n.remove("panend"),n.destroy(),nt.delete(t))}function it(t,n,e){const o=e.zoom?.drag,{dragStart:i,dragEnd:a}=u(t);if(o?.drawTime!==n||!i||!a)return;const{left:r,top:s,width:c,height:l}=U(t,e.zoom?.mode,{dragStart:i,dragEnd:a},o.maintainAspectRatio),m=t.ctx;m.save(),m.beginPath(),m.fillStyle=o.backgroundColor||"rgba(225,225,225,0.3)",m.fillRect(r,s,c,l),o.borderWidth&&(m.lineWidth=o.borderWidth,m.strokeStyle=o.borderColor||"rgba(225,225,225)",m.strokeRect(r,s,c,l)),m.restore()}const at=t=>{t.pan=(n,e,o)=>E(t,n,e,o,"api"),t.zoom=(n,e)=>D(t,n,e),t.zoomRect=(n,e,o)=>R(t,n,e,o),t.zoomScale=(n,e,o)=>function(t,n,e,o="none",i="api"){const a=u(t);O(t,a),x(t.scales[n],e,void 0,!0),t.update(o),a.options.zoom?.onZoom?.({chart:t,trigger:i})}(t,n,e,o),t.resetZoom=n=>function(t,n="default"){const e=u(t),o=O(t,e);for(const n of Object.values(t.scales)){const t=n.options;o[n.id]?(t.min=o[n.id].min.options,t.max=o[n.id].max.options):(delete t.min,delete t.max),delete e.updatedScaleLimits[n.id]}t.update(n),e.options.zoom?.onZoomComplete?.({chart:t})}(t,n),t.getZoomLevel=()=>function(t){const n=u(t);let e=1,o=1;for(const i of Object.values(t.scales)){const t=L(n,i.id);if(t){const n=Math.round(t/(i.max-i.min)*100)/100;e=Math.min(e,n),o=Math.max(o,n)}}return e<1?e:o}(t),t.getInitialScaleBounds=()=>F(t),t.getZoomedScaleBounds=()=>function(t){const n=u(t),e={};for(const o of Object.keys(t.scales))e[o]=n.updatedScaleLimits[o];return e}(t),t.isZoomedOrPanned=()=>function(t){const n=F(t);for(const e of Object.keys(t.scales)){const{min:o,max:i}=n[e];if(void 0!==o&&t.scales[e].min!==o)return!0;if(void 0!==i&&t.scales[e].max!==i)return!0}return!1}(t),t.isZoomingOrPanning=()=>function(t){const n=u(t);return!(!A(n)&&!n.filterNextClick)}(t)};var rt={id:"zoom",version:"2.2.18",defaults:{pan:{enabled:!1,mode:"xy",threshold:10,modifierKey:null},zoom:{wheel:{enabled:!1,speed:.1,modifierKey:null},drag:{enabled:!1,drawTime:"beforeDatasetsDraw",modifierKey:null},pinch:{enabled:!1},mode:"xy"}},start(t,e,o){u(t).options=o,Object.prototype.hasOwnProperty.call(o.zoom,"enabled")&&console.warn("The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`."),(Object.prototype.hasOwnProperty.call(o.zoom,"overScaleMode")||Object.prototype.hasOwnProperty.call(o.pan,"overScaleMode"))&&console.warn("The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired)."),n&&et(t,o),at(t)},beforeEvent(t,{event:n}){const e=u(t);return!A(e)&&("click"!==n.type&&"mouseup"!==n.type||!e.filterNextClick?void 0:(e.filterNextClick=!1,!1))},beforeUpdate(t,n,e){const o=u(t),i=o.options;o.options=e,function(t,n){const{pan:e,zoom:o}=t,{pan:i,zoom:a}=n;return o?.pinch?.enabled!==a?.pinch?.enabled||e?.enabled!==i?.enabled||e?.threshold!==i?.threshold}(i,e)&&(ot(t),et(t,e)),function(t,n){const e=t.canvas,{wheel:o,drag:i,onZoomComplete:a}=n.zoom??{};o?.enabled?(Y(t,e,"wheel",_),G(t,"onZoomComplete",a,250)):T(t,"wheel"),i?.enabled?(Y(t,e,"mousedown",K),Y(t,e.ownerDocument,"mouseup",$)):(T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"keydown"))}(t,e)},beforeDatasetsDraw(t,n,e){it(t,"beforeDatasetsDraw",e)},afterDatasetsDraw(t,n,e){it(t,"afterDatasetsDraw",e)},beforeDraw(t,n,e){it(t,"beforeDraw",e)},afterDraw(t,n,e){it(t,"afterDraw",e)},stop(t){!function(t){T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"wheel"),T(t,"click"),T(t,"keydown")}(t),n&&ot(t),function(t){m.delete(t)}(t)},panFunctions:S,zoomFunctions:M,zoomRectFunctions:z};return t.Chart.register(rt),rt}));
8
8
  //# sourceMappingURL=chartjs-plugin-zoom.min.js.map
package/package.json CHANGED
@@ -1,31 +1,22 @@
1
1
  {
2
2
  "name": "@thewhitehaven04/chartjs-plugin-zoom",
3
- "version": "2.2.15",
3
+ "version": "2.2.18",
4
4
  "description": "A fork of the ChartJS Zoom plugin that enables zoom and pan functionality in Chart.js charts",
5
5
  "homepage": "https://www.chartjs.org/chartjs-plugin-zoom/",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/thewhitehaven04/chartjs-plugin-zoom.git"
8
+ "url": "git+https://github.com/thewhitehaven04/chartjs-plugin-zoom.git"
9
9
  },
10
10
  "license": "MIT",
11
11
  "type": "module",
12
- "jsdelivr": "./dist/@thewhitehaven04/chartjs-plugin-zoom.min.js",
13
- "unpkg": "./dist/@thewhitehaven04/chartjs-plugin-zoom.min.js",
14
- "main": "./dist/@thewhitehaven04/chartjs-plugin-zoom.js",
15
- "module": "./dist/@thewhitehaven04/chartjs-plugin-zoom.esm.js",
12
+ "jsdelivr": "dist/chartjs-plugin-zoom.min.js",
13
+ "unpkg": "dist/chartjs-plugin-zoom.min.js",
14
+ "main": "dist/chartjs-plugin-zoom.js",
15
+ "module": "dist/chartjs-plugin-zoom.esm.js",
16
16
  "types": "types/index.d.ts",
17
- "exports": {
18
- ".": {
19
- "types": "./dist/src/index.d.ts",
20
- "import": "./dist/@thewhitehaven04/chartjs-plugin-zoom-esm.js",
21
- "require": "./dist/@thewhitehaven04/chartjs-plugin-zoom.js"
22
- }
23
- },
24
17
  "files": [
25
- "dist/**/*.js",
26
- "dist/src/index.d.ts",
27
- "dist/src/types.d.ts",
28
- "dist/**/*.map"
18
+ "dist/*.js",
19
+ "types/*.d.ts"
29
20
  ],
30
21
  "scripts": {
31
22
  "autobuild": "rollup -c -w",
@@ -1 +0,0 @@
1
- {"version":3,"file":"chartjs-plugin-zoom.esm.js","sources":["../../src/utils.ts","../../src/state.ts","../../src/scale.types.ts","../../src/core.ts","../../src/handlers.ts","../../src/hammer.ts","../../src/defaults.ts","../../src/plugin.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chartjs-plugin-zoom.js","sources":["../../src/utils.ts","../../src/state.ts","../../src/scale.types.ts","../../src/core.ts","../../src/handlers.ts","../../src/hammer.ts","../../src/defaults.ts","../../src/plugin.ts","../../src/index.umd.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n","import { Chart } from 'chart.js'\nimport Zoom from './plugin'\n\nChart.register(Zoom)\n\nexport default Zoom\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop","Chart","register","Zoom"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chartjs-plugin-zoom.min.js","sources":["../../src/utils.ts","../../src/state.ts","../../src/scale.types.ts","../../src/core.ts","../../src/handlers.ts","../../src/hammer.ts","../../src/plugin.ts","../../src/defaults.ts","../../src/index.umd.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import { Chart } from 'chart.js'\nimport Zoom from './plugin'\n\nChart.register(Zoom)\n\nexport default Zoom\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","getEnabledScalesByPoint","options","point","scaleMode","overScaleMode","scale","scales","scaleIds","Object","keys","i","length","top","bottom","left","right","getScaleUnderPoint","scaleEnabled","overScaleEnabled","axis","convertOverScaleMode","enabledScales","scaleItem","values","push","getEnabledScales","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","getLimit","scaleLimits","prop","fallback","limit","original","id","isNullOrUndef","parsed","parse","valueOrDefault","updateRange","limits","pan","scaleOpts","getScaleLimits","minRange","minLimit","Infinity","maxLimit","scaleRange","offset","origLimits","origMin","origMax","epsilon","almostEquals","fixRange","integerChange","v","round","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","delta","canZoom","prevStart","prevEnd","type","isTimeScale","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","maxIndex","getLabels","existCategoryFromMaxZoom","default","logarithmic","centerValue","logMin","log10","logMax","logRange","pow","logarithmicZoomRange","zoomRectFunctions","from","to","pixel0","pixel1","v0","v1","linearRange","panFunctions","lastLabelIndex","stepDelta","width","height","scaleLength","stepSize","abs","applied","Boolean","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","fn","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","getOriginalRange","scaleId","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","isZoomingOrPanningState","clamp","removeHandler","handler","target","removeEventListener","addHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyMinMaxProps","rect","points","begin","end","getRelativePoints","pointEvents","maintainAspectRatio","aspectRatio","ratio","applyAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","onZoomComplete","threshold","distanceX","distanceY","distance","sqrt","filterNextClick","wheel","cancelable","preventDefault","deltaY","wheelPreconditions","speed","percentage","addDebouncedHandler","name","delay","timeout","clearTimeout","setTimeout","debounce","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","handlePinch","e","pointers","zoomPercent","pinch","pinchX","pinchY","p","pinchAxes","handlePan","deltaX","panScales","map","filter","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","startPinch","endPinch","Pan","enable","onPanStart","startPan","onPanComplete","endPan","stopHammer","remove","destroy","delete","caller","dragOptions","drawTime","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","zoomScale","resetZoom","scaleOptions","getZoomLevel","origRange","level","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanning","Zoom","version","defaults","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","hammerOptionsChanged","wheelOptions","addListeners","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop","removeListeners","removeState","Chart","register"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsC,KAAK,UAAU,EAAE,KAAK,KAAK,EAA2B,MAAM,YAAY,CAAA;AAErH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,KAAK,EAAgB,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA8D5C,wBAAgB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAE,UAAmB,EAAE,OAAO,GAAE,WAAmB,QAwBnH;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,KAAK,EACT,UAAU,GAAE,UAAmB,EAC/B,OAAO,GAAE,WAAmB,QAuB7B;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,EACjB,UAAU,GAAE,UAAmB,EAC/B,OAAO,GAAE,WAAmB,QAS7B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,GAAE,UAAsB,QAkBzE;AAiBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,UAaxC;AAmBD,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAExC,wBAAgB,GAAG,CACjB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,aAAa,CAAC,EAAE,KAAK,EAAE,EACvB,UAAU,GAAE,UAAmB,EAC/B,OAAO,GAAE,UAAoB,QA2B9B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK;;;GAUjD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK;;;GAQhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,WAe5C;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,WAEnD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,WAK9C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAElD,eAAO,MAAM,QAAQ,EAAE,iBAuBtB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hammer.d.ts","sourceRoot":"","sources":["../../src/hammer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAkIlD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,QA0BnE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,QAYtC;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,WAehG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/handlers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAoB,MAAM,UAAU,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAe,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAqC3E,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,QAOxD;AAoCD,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAwB/D;AAiDD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,WAAW,EAAE;IAAE,SAAS,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,EAC3D,mBAAmB,EAAE,OAAO,GAAG,SAAS;;;;;;;;;EA2BzC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,QA4BtD;AA0BD,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAAE,QAyBrF;AAaD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,QAsBpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,QAO3C"}
@@ -1,31 +0,0 @@
1
- import plugin from './plugin';
2
- import type { ZoomPluginOptions } from './options';
3
- import type { ScaleRange } from './state';
4
- import type { DistributiveArray, PanAmount, ZoomAmount } from './types.js';
5
- import type { ChartType, ChartTypeRegistry, Point, Scale, UpdateMode } from 'chart.js';
6
- declare module 'chart.js' {
7
- interface PluginOptionsByType<TType extends ChartType> {
8
- zoom: ZoomPluginOptions;
9
- }
10
- enum UpdateModeEnum {
11
- zoom = "zoom"
12
- }
13
- interface Chart<TType extends ChartType = keyof ChartTypeRegistry, TData = DistributiveArray<ChartTypeRegistry[TType]['defaultDataPoint']>, TLabel = unknown> {
14
- pan(pan: PanAmount, scales?: Scale[], mode?: UpdateMode): void;
15
- zoom(zoom: ZoomAmount, mode?: UpdateMode): void;
16
- zoomRect(p0: Point, p1: Point, mode?: UpdateMode): void;
17
- zoomScale(id: string, range: ScaleRange, mode?: UpdateMode): void;
18
- resetZoom(mode?: UpdateMode): void;
19
- getZoomLevel(): number;
20
- getInitialScaleBounds(): Record<string, {
21
- min?: number;
22
- max?: number;
23
- }>;
24
- getZoomedScaleBounds(): Record<string, Partial<ScaleRange>>;
25
- isZoomedOrPanned(): boolean;
26
- isZoomingOrPanning(): boolean;
27
- }
28
- }
29
- export default plugin;
30
- export { pan, zoom, zoomRect, zoomScale, resetZoom } from './core';
31
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAEtF,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,mBAAmB,CAAC,KAAK,SAAS,SAAS;QACnD,IAAI,EAAE,iBAAiB,CAAA;KACxB;IAGD,KAAK,cAAc;QACjB,IAAI,SAAS;KACd;IAED,UAAU,KAAK,CACb,KAAK,SAAS,SAAS,GAAG,MAAM,iBAAiB,EACjD,KAAK,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC,EACvE,MAAM,GAAG,OAAO;QAEhB,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;QAC9D,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;QAC/C,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;QACvD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;QACjE,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;QAClC,YAAY,IAAI,MAAM,CAAA;QACtB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACvE,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;QAC3D,gBAAgB,IAAI,OAAO,CAAA;QAC3B,kBAAkB,IAAI,OAAO,CAAA;KAC9B;CACF;AAED,eAAe,MAAM,CAAA;AACrB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.umd.d.ts","sourceRoot":"","sources":["../../src/index.umd.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,UAAU,CAAA;AAI3B,eAAe,IAAI,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;;;;;iBAmDnC,KAAK,SAAS,OAAO,WAAW,iBAAiB;uBA0BrD,KAAK;eACQ,UAAU;gBAAU,OAAO;oBAAc,IAAI;qBAAe,OAAO;QACtF,OAAO,GAAG,IAAI;wBAeG,KAAK,SAAS,OAAO,WAAW,iBAAiB;8BAc3C,KAAK,SAAS,OAAO,WAAW,iBAAiB;6BAIlD,KAAK,SAAS,OAAO,WAAW,iBAAiB;sBAIxD,KAAK,SAAS,OAAO,WAAW,iBAAiB;qBAIlD,KAAK,SAAS,OAAO,WAAW,iBAAiB;gBAItD,KAAK;;;;;AAhFnB,wBA4FC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scale.types.d.ts","sourceRoot":"","sources":["../../src/scale.types.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAc,MAAM,SAAS,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAuB,MAAM,UAAU,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,WAAW,CAAA;AAE1D,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAA;AACvG,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAA;AACxG,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAA;AAMxF,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,UAAU,CAQZ;AAyGD,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EACxB,MAAM,CAAC,EAAE,YAAY,EACrB,IAAI,UAAQ,EACZ,GAAG,UAAQ,GACV,OAAO,CA+BT;AAsGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAItD,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAE9D,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAKpD,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scale.types.test.d.ts","sourceRoot":"","sources":["../../src/scale.types.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Point } from 'chart.js';
2
- export type ZoomAmount = number | (Partial<Point> & {
3
- focalPoint?: Point;
4
- });
5
- export type PanAmount = number | Partial<Point>;
6
- export type ScaleRange = {
7
- min: number;
8
- max: number;
9
- };
10
- export type DistributiveArray<T> = [T] extends [unknown] ? Array<T> : never;
11
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAErC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAC3E,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AACrD,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAIjF,eAAO,MAAM,cAAc,UAAW,WAAW,GAAG,UAAU,KAAG,WAAW,GAAG,SACb,CAAA;AAClE,eAAO,MAAM,UAAU,QAAS,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,GAAG,YAAY,wBACzE,CAAA;AAC7B,eAAO,MAAM,aAAa,QAAS,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,GAAG,YAAY,wBAC3E,CAAA;AAE9B,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAUpG;AAaD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,4BAOjE;AA+CD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAe5G"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/utils.test.ts"],"names":[],"mappings":""}