{"version":3,"sources":["webpack:///./node_modules/chartjs-plugin-zoom/dist/chartjs-plugin-zoom.js"],"names":["module","exports","Chart","Hammer","hasOwnProperty","helpers","zoomNS","Zoom","zoomFunctions","panFunctions","resolveOptions","chart","options","deprecatedOptions","pan","zoom","props","$zoom","_options","merge","node","_node","zoomEnabled","enabled","dragEnabled","drag","addEventListener","_wheelHandler","removeEventListener","_mouseDownHandler","ownerDocument","_mouseUpHandler","_mouseMoveHandler","storeOriginalOptions","originalOptions","_originalOptions","each","scales","scale","id","clone","opt","key","directionEnabled","mode","dir","undefined","indexOf","rangeMaxLimiter","zoomPanOptions","newMax","scaleAxes","rangeMax","isNullOrUndef","rangeMinLimiter","newMin","rangeMin","zoomNumericalScale","center","zoomOptions","range","max","min","newDiff","centerPoint","isHorizontal","x","y","minPercent","getValueForPixel","minDelta","maxDelta","ticks","zoomScale","fn","type","doZoom","percentZoomX","percentZoomY","focalPoint","whichAxes","ca","chartArea","left","right","top","bottom","_whichAxes","zoomMode","update","onZoom","panNumericalScale","delta","panOptions","diff","tickOpts","prevStart","prevEnd","getPixelForValue","valueOf","panScale","defaults","global","plugins","speed","threshold","sensitivity","category","labels","data","minIndex","lastLabelIndex","length","maxIndex","chartCenter","width","height","centerPointer","zoomCumulativeDelta","Math","abs","time","linear","logarithmic","offsetAmt","panSpeed","step","round","panCumulativeDelta","zoomPlugin","afterInit","chartInstance","resetZoom","timeOptions","tickOptions","beforeUpdate","beforeInit","pluginOptions","ctx","canvas","panThreshold","event","_dragZoomStart","_dragZoomEnd","beginPoint","offsetX","target","getBoundingClientRect","startX","clientX","endX","offsetY","startY","clientY","dragDistanceX","dragDistanceY","chartDistanceX","zoomX","chartDistanceY","yEnabled","onZoomComplete","_scrollTimeout","rect","speedPercent","deltaY","clearTimeout","setTimeout","cancelable","preventDefault","currentPinchScaling","mc","Manager","add","Pinch","Pan","handlePinch","e","pointers","p","on","currentDeltaX","currentDeltaY","panning","handlePan","deltaX","panMode","onPan","doPan","onPanComplete","_ghostClickHandler","stopImmediatePropagation","_mc","beforeDatasetsDraw","xAxis","scaleIds","Object","keys","i","getXAxis","yAxis","getYAxis","endPoint","endY","rectWidth","rectHeight","dragOptions","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","destroy","remove","register","factory"],"mappings":"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","file":"vendor.chartjs-plugin-zoom~5fcb8068.b0a5f717878a2304ce4b.chunk.js","sourcesContent":["/*!\n * @license\n * chartjs-plugin-zoom\n * http://chartjs.org/\n * Version: 0.7.4\n *\n * Copyright 2019 Chart.js Contributors\n * Released under the MIT license\n * https://github.com/chartjs/chartjs-plugin-zoom/blob/master/LICENSE.md\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('chart.js'), require('hammerjs')) :\ntypeof define === 'function' && define.amd ? define(['chart.js', 'hammerjs'], factory) :\n(global = global || self, global.ChartZoom = factory(global.Chart, global.Hammer));\n}(this, function (Chart, Hammer) { 'use strict';\n\nChart = Chart && Chart.hasOwnProperty('default') ? Chart['default'] : Chart;\nHammer = Hammer && Hammer.hasOwnProperty('default') ? Hammer['default'] : Hammer;\n\nvar helpers = Chart.helpers;\n\n// Take the zoom namespace of Chart\nvar zoomNS = Chart.Zoom = Chart.Zoom || {};\n\n// Where we store functions to handle different scale types\nvar zoomFunctions = zoomNS.zoomFunctions = zoomNS.zoomFunctions || {};\nvar panFunctions = zoomNS.panFunctions = zoomNS.panFunctions || {};\n\nChart.Zoom.defaults = Chart.defaults.global.plugins.zoom = {\n\tpan: {\n\t\tenabled: false,\n\t\tmode: 'xy',\n\t\tspeed: 20,\n\t\tthreshold: 10\n\t},\n\tzoom: {\n\t\tenabled: false,\n\t\tmode: 'xy',\n\t\tsensitivity: 3,\n\t\tspeed: 0.1\n\t}\n};\n\nfunction resolveOptions(chart, options) {\n\tvar deprecatedOptions = {};\n\tif (typeof chart.options.pan !== 'undefined') {\n\t\tdeprecatedOptions.pan = chart.options.pan;\n\t}\n\tif (typeof chart.options.pan !== 'undefined') {\n\t\tdeprecatedOptions.zoom = chart.options.zoom;\n\t}\n\tvar props = chart.$zoom;\n\toptions = props._options = helpers.merge({}, [options, deprecatedOptions]);\n\n\t// Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n\t// We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n\t// and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n\tvar node = props._node;\n\tvar zoomEnabled = options.zoom && options.zoom.enabled;\n\tvar dragEnabled = options.zoom.drag;\n\tif (zoomEnabled && !dragEnabled) {\n\t\tnode.addEventListener('wheel', props._wheelHandler);\n\t} else {\n\t\tnode.removeEventListener('wheel', props._wheelHandler);\n\t}\n\tif (zoomEnabled && dragEnabled) {\n\t\tnode.addEventListener('mousedown', props._mouseDownHandler);\n\t\tnode.ownerDocument.addEventListener('mouseup', props._mouseUpHandler);\n\t} else {\n\t\tnode.removeEventListener('mousedown', props._mouseDownHandler);\n\t\tnode.removeEventListener('mousemove', props._mouseMoveHandler);\n\t\tnode.ownerDocument.removeEventListener('mouseup', props._mouseUpHandler);\n\t}\n}\n\nfunction storeOriginalOptions(chart) {\n\tvar originalOptions = chart.$zoom._originalOptions;\n\thelpers.each(chart.scales, function(scale) {\n\t\tif (!originalOptions[scale.id]) {\n\t\t\toriginalOptions[scale.id] = helpers.clone(scale.options);\n\t\t}\n\t});\n\thelpers.each(originalOptions, function(opt, key) {\n\t\tif (!chart.scales[key]) {\n\t\t\tdelete originalOptions[key];\n\t\t}\n\t});\n}\n\n/**\n * @param {string} mode can be 'x', 'y' or 'xy'\n * @param {string} dir can be 'x' or 'y'\n */\nfunction directionEnabled(mode, dir) {\n\tif (mode === undefined) {\n\t\treturn true;\n\t} else if (typeof mode === 'string') {\n\t\treturn mode.indexOf(dir) !== -1;\n\t}\n\n\treturn false;\n}\n\nfunction rangeMaxLimiter(zoomPanOptions, newMax) {\n\tif (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMax &&\n\t\t\t!helpers.isNullOrUndef(zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes])) {\n\t\tvar rangeMax = zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes];\n\t\tif (newMax > rangeMax) {\n\t\t\tnewMax = rangeMax;\n\t\t}\n\t}\n\treturn newMax;\n}\n\nfunction rangeMinLimiter(zoomPanOptions, newMin) {\n\tif (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMin &&\n\t\t\t!helpers.isNullOrUndef(zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes])) {\n\t\tvar rangeMin = zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes];\n\t\tif (newMin < rangeMin) {\n\t\t\tnewMin = rangeMin;\n\t\t}\n\t}\n\treturn newMin;\n}\n\nfunction zoomCategoryScale(scale, zoom, center, zoomOptions) {\n\tvar labels = scale.chart.data.labels;\n\tvar minIndex = scale.minIndex;\n\tvar lastLabelIndex = labels.length - 1;\n\tvar maxIndex = scale.maxIndex;\n\tvar sensitivity = zoomOptions.sensitivity;\n\tvar chartCenter = scale.isHorizontal() ? scale.left + (scale.width / 2) : scale.top + (scale.height / 2);\n\tvar centerPointer = scale.isHorizontal() ? center.x : center.y;\n\n\tzoomNS.zoomCumulativeDelta = zoom > 1 ? zoomNS.zoomCumulativeDelta + 1 : zoomNS.zoomCumulativeDelta - 1;\n\n\tif (Math.abs(zoomNS.zoomCumulativeDelta) > sensitivity) {\n\t\tif (zoomNS.zoomCumulativeDelta < 0) {\n\t\t\tif (centerPointer >= chartCenter) {\n\t\t\t\tif (minIndex <= 0) {\n\t\t\t\t\tmaxIndex = Math.min(lastLabelIndex, maxIndex + 1);\n\t\t\t\t} else {\n\t\t\t\t\tminIndex = Math.max(0, minIndex - 1);\n\t\t\t\t}\n\t\t\t} else if (centerPointer < chartCenter) {\n\t\t\t\tif (maxIndex >= lastLabelIndex) {\n\t\t\t\t\tminIndex = Math.max(0, minIndex - 1);\n\t\t\t\t} else {\n\t\t\t\t\tmaxIndex = Math.min(lastLabelIndex, maxIndex + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tzoomNS.zoomCumulativeDelta = 0;\n\t\t} else if (zoomNS.zoomCumulativeDelta > 0) {\n\t\t\tif (centerPointer >= chartCenter) {\n\t\t\t\tminIndex = minIndex < maxIndex ? minIndex = Math.min(maxIndex, minIndex + 1) : minIndex;\n\t\t\t} else if (centerPointer < chartCenter) {\n\t\t\t\tmaxIndex = maxIndex > minIndex ? maxIndex = Math.max(minIndex, maxIndex - 1) : maxIndex;\n\t\t\t}\n\t\t\tzoomNS.zoomCumulativeDelta = 0;\n\t\t}\n\t\tscale.options.ticks.min = rangeMinLimiter(zoomOptions, labels[minIndex]);\n\t\tscale.options.ticks.max = rangeMaxLimiter(zoomOptions, labels[maxIndex]);\n\t}\n}\n\nfunction zoomNumericalScale(scale, zoom, center, zoomOptions) {\n\tvar range = scale.max - scale.min;\n\tvar newDiff = range * (zoom - 1);\n\n\tvar centerPoint = scale.isHorizontal() ? center.x : center.y;\n\tvar minPercent = (scale.getValueForPixel(centerPoint) - scale.min) / range;\n\tvar maxPercent = 1 - minPercent;\n\n\tvar minDelta = newDiff * minPercent;\n\tvar maxDelta = newDiff * maxPercent;\n\n\tscale.options.ticks.min = rangeMinLimiter(zoomOptions, scale.min + minDelta);\n\tscale.options.ticks.max = rangeMaxLimiter(zoomOptions, scale.max - maxDelta);\n}\n\nfunction zoomTimeScale(scale, zoom, center, zoomOptions) {\n\tzoomNumericalScale(scale, zoom, center, zoomOptions);\n\n\tscale.options.time.min = scale.options.ticks.min;\n\tscale.options.time.max = scale.options.ticks.max;\n}\n\nfunction zoomScale(scale, zoom, center, zoomOptions) {\n\tvar fn = zoomFunctions[scale.type];\n\tif (fn) {\n\t\tfn(scale, zoom, center, zoomOptions);\n\t}\n}\n\n/**\n * @param chart The chart instance\n * @param {number} percentZoomX The zoom percentage in the x direction\n * @param {number} percentZoomY The zoom percentage in the y direction\n * @param {{x: number, y: number}} focalPoint The x and y coordinates of zoom focal point. The point which doesn't change while zooming. E.g. the location of the mouse cursor when \"drag: false\"\n * @param {string} whichAxes `xy`, 'x', or 'y'\n */\nfunction doZoom(chart, percentZoomX, percentZoomY, focalPoint, whichAxes) {\n\tvar ca = chart.chartArea;\n\tif (!focalPoint) {\n\t\tfocalPoint = {\n\t\t\tx: (ca.left + ca.right) / 2,\n\t\t\ty: (ca.top + ca.bottom) / 2,\n\t\t};\n\t}\n\n\tvar zoomOptions = chart.$zoom._options.zoom;\n\n\tif (zoomOptions.enabled) {\n\t\tstoreOriginalOptions(chart);\n\t\t// Do the zoom here\n\t\tvar zoomMode = typeof zoomOptions.mode === 'function' ? zoomOptions.mode({chart: chart}) : zoomOptions.mode;\n\n\t\t// Which axe should be modified when figers were used.\n\t\tvar _whichAxes;\n\t\tif (zoomMode === 'xy' && whichAxes !== undefined) {\n\t\t\t// based on fingers positions\n\t\t\t_whichAxes = whichAxes;\n\t\t} else {\n\t\t\t// no effect\n\t\t\t_whichAxes = 'xy';\n\t\t}\n\n\t\thelpers.each(chart.scales, function(scale) {\n\t\t\tif (scale.isHorizontal() && directionEnabled(zoomMode, 'x') && directionEnabled(_whichAxes, 'x')) {\n\t\t\t\tzoomOptions.scaleAxes = 'x';\n\t\t\t\tzoomScale(scale, percentZoomX, focalPoint, zoomOptions);\n\t\t\t} else if (!scale.isHorizontal() && directionEnabled(zoomMode, 'y') && directionEnabled(_whichAxes, 'y')) {\n\t\t\t\t// Do Y zoom\n\t\t\t\tzoomOptions.scaleAxes = 'y';\n\t\t\t\tzoomScale(scale, percentZoomY, focalPoint, zoomOptions);\n\t\t\t}\n\t\t});\n\n\t\tchart.update(0);\n\n\t\tif (typeof zoomOptions.onZoom === 'function') {\n\t\t\tzoomOptions.onZoom({chart: chart});\n\t\t}\n\t}\n}\n\nfunction panCategoryScale(scale, delta, panOptions) {\n\tvar labels = scale.chart.data.labels;\n\tvar lastLabelIndex = labels.length - 1;\n\tvar offsetAmt = Math.max(scale.ticks.length, 1);\n\tvar panSpeed = panOptions.speed;\n\tvar minIndex = scale.minIndex;\n\tvar step = Math.round(scale.width / (offsetAmt * panSpeed));\n\tvar maxIndex;\n\n\tzoomNS.panCumulativeDelta += delta;\n\n\tminIndex = zoomNS.panCumulativeDelta > step ? Math.max(0, minIndex - 1) : zoomNS.panCumulativeDelta < -step ? Math.min(lastLabelIndex - offsetAmt + 1, minIndex + 1) : minIndex;\n\tzoomNS.panCumulativeDelta = minIndex !== scale.minIndex ? 0 : zoomNS.panCumulativeDelta;\n\n\tmaxIndex = Math.min(lastLabelIndex, minIndex + offsetAmt - 1);\n\n\tscale.options.ticks.min = rangeMinLimiter(panOptions, labels[minIndex]);\n\tscale.options.ticks.max = rangeMaxLimiter(panOptions, labels[maxIndex]);\n}\n\nfunction panNumericalScale(scale, delta, panOptions) {\n\tvar tickOpts = scale.options.ticks;\n\tvar prevStart = scale.min;\n\tvar prevEnd = scale.max;\n\tvar newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart) - delta);\n\tvar newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd) - delta);\n\t// The time scale returns date objects so convert to numbers. Can remove at Chart.js v3\n\tnewMin = newMin.valueOf ? newMin.valueOf() : newMin;\n\tnewMax = newMax.valueOf ? newMax.valueOf() : newMax;\n\tvar rangeMin = newMin;\n\tvar rangeMax = newMax;\n\tvar diff;\n\n\tif (panOptions.scaleAxes && panOptions.rangeMin &&\n\t\t\t!helpers.isNullOrUndef(panOptions.rangeMin[panOptions.scaleAxes])) {\n\t\trangeMin = panOptions.rangeMin[panOptions.scaleAxes];\n\t}\n\tif (panOptions.scaleAxes && panOptions.rangeMax &&\n\t\t\t!helpers.isNullOrUndef(panOptions.rangeMax[panOptions.scaleAxes])) {\n\t\trangeMax = panOptions.rangeMax[panOptions.scaleAxes];\n\t}\n\n\tif (newMin >= rangeMin && newMax <= rangeMax) {\n\t\ttickOpts.min = newMin;\n\t\ttickOpts.max = newMax;\n\t} else if (newMin < rangeMin) {\n\t\tdiff = prevStart - rangeMin;\n\t\ttickOpts.min = rangeMin;\n\t\ttickOpts.max = prevEnd - diff;\n\t} else if (newMax > rangeMax) {\n\t\tdiff = rangeMax - prevEnd;\n\t\ttickOpts.max = rangeMax;\n\t\ttickOpts.min = prevStart + diff;\n\t}\n}\n\nfunction panTimeScale(scale, delta, panOptions) {\n\tpanNumericalScale(scale, delta, panOptions);\n\n\tvar options = scale.options;\n\toptions.time.min = options.ticks.min;\n\toptions.time.max = options.ticks.max;\n}\n\nfunction panScale(scale, delta, panOptions) {\n\tvar fn = panFunctions[scale.type];\n\tif (fn) {\n\t\tfn(scale, delta, panOptions);\n\t}\n}\n\nfunction doPan(chartInstance, deltaX, deltaY) {\n\tstoreOriginalOptions(chartInstance);\n\tvar panOptions = chartInstance.$zoom._options.pan;\n\tif (panOptions.enabled) {\n\t\tvar panMode = typeof panOptions.mode === 'function' ? panOptions.mode({chart: chartInstance}) : panOptions.mode;\n\n\t\thelpers.each(chartInstance.scales, function(scale) {\n\t\t\tif (scale.isHorizontal() && directionEnabled(panMode, 'x') && deltaX !== 0) {\n\t\t\t\tpanOptions.scaleAxes = 'x';\n\t\t\t\tpanScale(scale, deltaX, panOptions);\n\t\t\t} else if (!scale.isHorizontal() && directionEnabled(panMode, 'y') && deltaY !== 0) {\n\t\t\t\tpanOptions.scaleAxes = 'y';\n\t\t\t\tpanScale(scale, deltaY, panOptions);\n\t\t\t}\n\t\t});\n\n\t\tchartInstance.update(0);\n\n\t\tif (typeof panOptions.onPan === 'function') {\n\t\t\tpanOptions.onPan({chart: chartInstance});\n\t\t}\n\t}\n}\n\nfunction getXAxis(chartInstance) {\n\tvar scales = chartInstance.scales;\n\tvar scaleIds = Object.keys(scales);\n\tfor (var i = 0; i < scaleIds.length; i++) {\n\t\tvar scale = scales[scaleIds[i]];\n\n\t\tif (scale.isHorizontal()) {\n\t\t\treturn scale;\n\t\t}\n\t}\n}\n\nfunction getYAxis(chartInstance) {\n\tvar scales = chartInstance.scales;\n\tvar scaleIds = Object.keys(scales);\n\tfor (var i = 0; i < scaleIds.length; i++) {\n\t\tvar scale = scales[scaleIds[i]];\n\n\t\tif (!scale.isHorizontal()) {\n\t\t\treturn scale;\n\t\t}\n\t}\n}\n\n// Store these for later\nzoomNS.zoomFunctions.category = zoomCategoryScale;\nzoomNS.zoomFunctions.time = zoomTimeScale;\nzoomNS.zoomFunctions.linear = zoomNumericalScale;\nzoomNS.zoomFunctions.logarithmic = zoomNumericalScale;\nzoomNS.panFunctions.category = panCategoryScale;\nzoomNS.panFunctions.time = panTimeScale;\nzoomNS.panFunctions.linear = panNumericalScale;\nzoomNS.panFunctions.logarithmic = panNumericalScale;\n// Globals for category pan and zoom\nzoomNS.panCumulativeDelta = 0;\nzoomNS.zoomCumulativeDelta = 0;\n\n// Chartjs Zoom Plugin\nvar zoomPlugin = {\n\tid: 'zoom',\n\n\tafterInit: function(chartInstance) {\n\n\t\tchartInstance.resetZoom = function() {\n\t\t\tstoreOriginalOptions(chartInstance);\n\t\t\tvar originalOptions = chartInstance.$zoom._originalOptions;\n\t\t\thelpers.each(chartInstance.scales, function(scale) {\n\n\t\t\t\tvar timeOptions = scale.options.time;\n\t\t\t\tvar tickOptions = scale.options.ticks;\n\n\t\t\t\tif (originalOptions[scale.id]) {\n\n\t\t\t\t\tif (timeOptions) {\n\t\t\t\t\t\ttimeOptions.min = originalOptions[scale.id].time.min;\n\t\t\t\t\t\ttimeOptions.max = originalOptions[scale.id].time.max;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tickOptions) {\n\t\t\t\t\t\ttickOptions.min = originalOptions[scale.id].ticks.min;\n\t\t\t\t\t\ttickOptions.max = originalOptions[scale.id].ticks.max;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tif (timeOptions) {\n\t\t\t\t\t\tdelete timeOptions.min;\n\t\t\t\t\t\tdelete timeOptions.max;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tickOptions) {\n\t\t\t\t\t\tdelete tickOptions.min;\n\t\t\t\t\t\tdelete tickOptions.max;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t});\n\n\t\t\tchartInstance.update();\n\t\t};\n\n\t},\n\n\tbeforeUpdate: function(chart, options) {\n\t\tresolveOptions(chart, options);\n\t},\n\n\tbeforeInit: function(chartInstance, pluginOptions) {\n\t\tchartInstance.$zoom = {\n\t\t\t_originalOptions: {}\n\t\t};\n\t\tvar node = chartInstance.$zoom._node = chartInstance.chart.ctx.canvas;\n\t\tresolveOptions(chartInstance, pluginOptions);\n\n\t\tvar options = chartInstance.$zoom._options;\n\t\tvar panThreshold = options.pan && options.pan.threshold;\n\n\t\tchartInstance.$zoom._mouseDownHandler = function(event) {\n\t\t\tnode.addEventListener('mousemove', chartInstance.$zoom._mouseMoveHandler);\n\t\t\tchartInstance.$zoom._dragZoomStart = event;\n\t\t};\n\n\t\tchartInstance.$zoom._mouseMoveHandler = function(event) {\n\t\t\tif (chartInstance.$zoom._dragZoomStart) {\n\t\t\t\tchartInstance.$zoom._dragZoomEnd = event;\n\t\t\t\tchartInstance.update(0);\n\t\t\t}\n\t\t};\n\n\t\tchartInstance.$zoom._mouseUpHandler = function(event) {\n\t\t\tif (!chartInstance.$zoom._dragZoomStart) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.removeEventListener('mousemove', chartInstance.$zoom._mouseMoveHandler);\n\n\t\t\tvar beginPoint = chartInstance.$zoom._dragZoomStart;\n\n\t\t\tvar offsetX = beginPoint.target.getBoundingClientRect().left;\n\t\t\tvar startX = Math.min(beginPoint.clientX, event.clientX) - offsetX;\n\t\t\tvar endX = Math.max(beginPoint.clientX, event.clientX) - offsetX;\n\n\t\t\tvar offsetY = beginPoint.target.getBoundingClientRect().top;\n\t\t\tvar startY = Math.min(beginPoint.clientY, event.clientY) - offsetY;\n\t\t\tvar endY = Math.max(beginPoint.clientY, event.clientY) - offsetY;\n\n\t\t\tvar dragDistanceX = endX - startX;\n\t\t\tvar dragDistanceY = endY - startY;\n\n\t\t\t// Remove drag start and end before chart update to stop drawing selected area\n\t\t\tchartInstance.$zoom._dragZoomStart = null;\n\t\t\tchartInstance.$zoom._dragZoomEnd = null;\n\n\t\t\tif (dragDistanceX <= 0 && dragDistanceY <= 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar chartArea = chartInstance.chartArea;\n\n\t\t\tvar zoomOptions = chartInstance.$zoom._options.zoom;\n\t\t\tvar chartDistanceX = chartArea.right - chartArea.left;\n\t\t\tvar xEnabled = directionEnabled(zoomOptions.mode, 'x');\n\t\t\tvar zoomX = xEnabled && dragDistanceX ? 1 + ((chartDistanceX - dragDistanceX) / chartDistanceX) : 1;\n\n\t\t\tvar chartDistanceY = chartArea.bottom - chartArea.top;\n\t\t\tvar yEnabled = directionEnabled(zoomOptions.mode, 'y');\n\t\t\tvar zoomY = yEnabled && dragDistanceY ? 1 + ((chartDistanceY - dragDistanceY) / chartDistanceY) : 1;\n\n\t\t\tdoZoom(chartInstance, zoomX, zoomY, {\n\t\t\t\tx: (startX - chartArea.left) / (1 - dragDistanceX / chartDistanceX) + chartArea.left,\n\t\t\t\ty: (startY - chartArea.top) / (1 - dragDistanceY / chartDistanceY) + chartArea.top\n\t\t\t});\n\n\t\t\tif (typeof zoomOptions.onZoomComplete === 'function') {\n\t\t\t\tzoomOptions.onZoomComplete({chart: chartInstance});\n\t\t\t}\n\t\t};\n\n\t\tvar _scrollTimeout = null;\n\t\tchartInstance.$zoom._wheelHandler = function(event) {\n\t\t\tvar rect = event.target.getBoundingClientRect();\n\t\t\tvar offsetX = event.clientX - rect.left;\n\t\t\tvar offsetY = event.clientY - rect.top;\n\n\t\t\tvar center = {\n\t\t\t\tx: offsetX,\n\t\t\t\ty: offsetY\n\t\t\t};\n\n\t\t\tvar zoomOptions = chartInstance.$zoom._options.zoom;\n\t\t\tvar speedPercent = zoomOptions.speed;\n\n\t\t\tif (event.deltaY >= 0) {\n\t\t\t\tspeedPercent = -speedPercent;\n\t\t\t}\n\t\t\tdoZoom(chartInstance, 1 + speedPercent, 1 + speedPercent, center);\n\n\t\t\tclearTimeout(_scrollTimeout);\n\t\t\t_scrollTimeout = setTimeout(function() {\n\t\t\t\tif (typeof zoomOptions.onZoomComplete === 'function') {\n\t\t\t\t\tzoomOptions.onZoomComplete({chart: chartInstance});\n\t\t\t\t}\n\t\t\t}, 250);\n\n\t\t\t// Prevent the event from triggering the default behavior (eg. Content scrolling).\n\t\t\tif (event.cancelable) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\tif (Hammer) {\n\t\t\tvar mc = new Hammer.Manager(node);\n\t\t\tmc.add(new Hammer.Pinch());\n\t\t\tmc.add(new Hammer.Pan({\n\t\t\t\tthreshold: panThreshold\n\t\t\t}));\n\n\t\t\t// Hammer reports the total scaling. We need the incremental amount\n\t\t\tvar currentPinchScaling;\n\t\t\tvar handlePinch = function(e) {\n\t\t\t\tvar diff = 1 / (currentPinchScaling) * e.scale;\n\t\t\t\tvar rect = e.target.getBoundingClientRect();\n\t\t\t\tvar offsetX = e.center.x - rect.left;\n\t\t\t\tvar offsetY = e.center.y - rect.top;\n\t\t\t\tvar center = {\n\t\t\t\t\tx: offsetX,\n\t\t\t\t\ty: offsetY\n\t\t\t\t};\n\n\t\t\t\t// fingers position difference\n\t\t\t\tvar x = Math.abs(e.pointers[0].clientX - e.pointers[1].clientX);\n\t\t\t\tvar y = Math.abs(e.pointers[0].clientY - e.pointers[1].clientY);\n\n\t\t\t\t// diagonal fingers will change both (xy) axes\n\t\t\t\tvar p = x / y;\n\t\t\t\tvar xy;\n\t\t\t\tif (p > 0.3 && p < 1.7) {\n\t\t\t\t\txy = 'xy';\n\t\t\t\t} else if (x > y) {\n\t\t\t\t\txy = 'x'; // x axis\n\t\t\t\t} else {\n\t\t\t\t\txy = 'y'; // y axis\n\t\t\t\t}\n\n\t\t\t\tdoZoom(chartInstance, diff, diff, center, xy);\n\n\t\t\t\tvar zoomOptions = chartInstance.$zoom._options.zoom;\n\t\t\t\tif (typeof zoomOptions.onZoomComplete === 'function') {\n\t\t\t\t\tzoomOptions.onZoomComplete({chart: chartInstance});\n\t\t\t\t}\n\n\t\t\t\t// Keep track of overall scale\n\t\t\t\tcurrentPinchScaling = e.scale;\n\t\t\t};\n\n\t\t\tmc.on('pinchstart', function() {\n\t\t\t\tcurrentPinchScaling = 1; // reset tracker\n\t\t\t});\n\t\t\tmc.on('pinch', handlePinch);\n\t\t\tmc.on('pinchend', function(e) {\n\t\t\t\thandlePinch(e);\n\t\t\t\tcurrentPinchScaling = null; // reset\n\t\t\t\tzoomNS.zoomCumulativeDelta = 0;\n\t\t\t});\n\n\t\t\tvar currentDeltaX = null;\n\t\t\tvar currentDeltaY = null;\n\t\t\tvar panning = false;\n\t\t\tvar handlePan = function(e) {\n\t\t\t\tif (currentDeltaX !== null && currentDeltaY !== null) {\n\t\t\t\t\tpanning = true;\n\t\t\t\t\tvar deltaX = e.deltaX - currentDeltaX;\n\t\t\t\t\tvar deltaY = e.deltaY - currentDeltaY;\n\t\t\t\t\tcurrentDeltaX = e.deltaX;\n\t\t\t\t\tcurrentDeltaY = e.deltaY;\n\t\t\t\t\tdoPan(chartInstance, deltaX, deltaY);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmc.on('panstart', function(e) {\n\t\t\t\tcurrentDeltaX = 0;\n\t\t\t\tcurrentDeltaY = 0;\n\t\t\t\thandlePan(e);\n\t\t\t});\n\t\t\tmc.on('panmove', handlePan);\n\t\t\tmc.on('panend', function() {\n\t\t\t\tcurrentDeltaX = null;\n\t\t\t\tcurrentDeltaY = null;\n\t\t\t\tzoomNS.panCumulativeDelta = 0;\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tpanning = false;\n\t\t\t\t}, 500);\n\n\t\t\t\tvar panOptions = chartInstance.$zoom._options.pan;\n\t\t\t\tif (typeof panOptions.onPanComplete === 'function') {\n\t\t\t\t\tpanOptions.onPanComplete({chart: chartInstance});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tchartInstance.$zoom._ghostClickHandler = function(e) {\n\t\t\t\tif (panning && e.cancelable) {\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t};\n\t\t\tnode.addEventListener('click', chartInstance.$zoom._ghostClickHandler);\n\n\t\t\tchartInstance._mc = mc;\n\t\t}\n\t},\n\n\tbeforeDatasetsDraw: function(chartInstance) {\n\t\tvar ctx = chartInstance.chart.ctx;\n\n\t\tif (chartInstance.$zoom._dragZoomEnd) {\n\t\t\tvar xAxis = getXAxis(chartInstance);\n\t\t\tvar yAxis = getYAxis(chartInstance);\n\t\t\tvar beginPoint = chartInstance.$zoom._dragZoomStart;\n\t\t\tvar endPoint = chartInstance.$zoom._dragZoomEnd;\n\n\t\t\tvar startX = xAxis.left;\n\t\t\tvar endX = xAxis.right;\n\t\t\tvar startY = yAxis.top;\n\t\t\tvar endY = yAxis.bottom;\n\n\t\t\tif (directionEnabled(chartInstance.$zoom._options.zoom.mode, 'x')) {\n\t\t\t\tvar offsetX = beginPoint.target.getBoundingClientRect().left;\n\t\t\t\tstartX = Math.min(beginPoint.clientX, endPoint.clientX) - offsetX;\n\t\t\t\tendX = Math.max(beginPoint.clientX, endPoint.clientX) - offsetX;\n\t\t\t}\n\n\t\t\tif (directionEnabled(chartInstance.$zoom._options.zoom.mode, 'y')) {\n\t\t\t\tvar offsetY = beginPoint.target.getBoundingClientRect().top;\n\t\t\t\tstartY = Math.min(beginPoint.clientY, endPoint.clientY) - offsetY;\n\t\t\t\tendY = Math.max(beginPoint.clientY, endPoint.clientY) - offsetY;\n\t\t\t}\n\n\t\t\tvar rectWidth = endX - startX;\n\t\t\tvar rectHeight = endY - startY;\n\t\t\tvar dragOptions = chartInstance.$zoom._options.zoom.drag;\n\n\t\t\tctx.save();\n\t\t\tctx.beginPath();\n\t\t\tctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)';\n\t\t\tctx.fillRect(startX, startY, rectWidth, rectHeight);\n\n\t\t\tif (dragOptions.borderWidth > 0) {\n\t\t\t\tctx.lineWidth = dragOptions.borderWidth;\n\t\t\t\tctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)';\n\t\t\t\tctx.strokeRect(startX, startY, rectWidth, rectHeight);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t},\n\n\tdestroy: function(chartInstance) {\n\t\tif (!chartInstance.$zoom) {\n\t\t\treturn;\n\t\t}\n\t\tvar props = chartInstance.$zoom;\n\t\tvar node = props._node;\n\n\t\tnode.removeEventListener('mousedown', props._mouseDownHandler);\n\t\tnode.removeEventListener('mousemove', props._mouseMoveHandler);\n\t\tnode.ownerDocument.removeEventListener('mouseup', props._mouseUpHandler);\n\t\tnode.removeEventListener('wheel', props._wheelHandler);\n\t\tnode.removeEventListener('click', props._ghostClickHandler);\n\n\t\tdelete chartInstance.$zoom;\n\n\t\tvar mc = chartInstance._mc;\n\t\tif (mc) {\n\t\t\tmc.remove('pinchstart');\n\t\t\tmc.remove('pinch');\n\t\t\tmc.remove('pinchend');\n\t\t\tmc.remove('panstart');\n\t\t\tmc.remove('pan');\n\t\t\tmc.remove('panend');\n\t\t\tmc.destroy();\n\t\t}\n\t}\n};\n\nChart.plugins.register(zoomPlugin);\n\nreturn zoomPlugin;\n\n}));\n"],"sourceRoot":""}