{"version":3,"sources":["webpack:///./node_modules/chart.js/src/helpers/helpers.options.js","webpack:///./node_modules/chart.js/src/elements/element.point.js","webpack:///./node_modules/chart.js/src/helpers/index.js","webpack:///./node_modules/chart.js/src/helpers/helpers.canvas.js","webpack:///./node_modules/chart.js/src/helpers/helpers.core.js","webpack:///./node_modules/chart.js/src/elements/element.line.js","webpack:///./node_modules/chart.js/src/elements/element.arc.js","webpack:///./node_modules/chart.js/src/helpers/helpers.easing.js","webpack:///./node_modules/chart.js/src/elements/index.js","webpack:///./node_modules/chart.js/src/elements/element.rectangle.js"],"names":["helpers","module","exports","toLineHeight","value","size","matches","match","toPadding","t","r","b","l","isObject","top","right","bottom","left","height","width","resolve","inputs","context","index","i","ilen","length","undefined","isArray","defaults","Element","defaultColor","global","xRange","mouseX","vm","this","_view","Math","abs","x","radius","hitRadius","yRange","mouseY","y","_set","elements","point","pointStyle","backgroundColor","borderColor","borderWidth","hoverRadius","hoverBorderWidth","extend","inRange","pow","inLabelRange","inXRange","inYRange","getCenterPoint","getArea","PI","tooltipPosition","padding","draw","chartArea","model","_model","ctx","_chart","color","errMargin","ratio","skip","strokeStyle","lineWidth","valueOrDefault","fillStyle","round","alpha","rgbString","canvas","drawPoint","easing","options","clear","chart","clearRect","roundedRect","rx","min","ry","moveTo","lineTo","quadraticCurveTo","rect","style","type","edgeLength","xOffset","yOffset","toString","drawImage","isNaN","beginPath","arc","closePath","fill","sqrt","SQRT2","fillRect","strokeRect","offset","leftX","topY","sideSize","cos","sin","stroke","clipArea","area","save","clip","unclipArea","restore","previous","target","flip","steppedLine","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","drawRoundedRectangle","apply","arguments","noop","uid","id","isNullOrUndef","Array","Object","prototype","call","defaultValue","valueAtIndexOrDefault","callback","fn","args","thisArg","each","loopable","reverse","len","keys","arrayEquals","a0","a1","v0","v1","clone","source","map","klen","k","_merger","key","tval","sval","merge","_mergerIf","mergeIf","hasOwnProperty","sources","merger","setFn","inherits","extensions","me","ChartElement","constructor","Surrogate","__super__","callCallback","indexOf","array","item","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","globalDefaults","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","current","currentVM","spanGaps","points","_children","slice","globalOptionLineElements","lastDrawnIndex","_loop","push","lineCap","setLineDash","lineDashOffset","lineJoin","previousItem","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","distance","startAngle","endAngle","betweenAngles","withinRadius","innerRadius","outerRadius","halfAngle","halfRadius","centreAngle","rangeFromCentre","sA","eA","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","s","p","a","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","easingEffects","Arc","Line","Point","Rectangle","isVertical","bar","getBarBounds","x1","x2","y1","y2","halfWidth","base","max","halfHeight","rectangle","borderSkipped","signX","signY","horizontal","barSize","halfStroke","borderLeft","borderRight","borderTop","borderBottom","corners","borders","startCorner","cornerAt","corner","bounds"],"mappings":"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","file":"js/chunk-vendors~320ef163.381fae71.js","sourcesContent":["'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\nmodule.exports = {\n\t/**\n\t * Converts the given line height `value` in pixels for a specific font `size`.\n\t * @param {Number|String} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n\t * @param {Number} size - The font size (in pixels) used to resolve relative `value`.\n\t * @returns {Number} The effective line height in pixels (size * 1.2 if value is invalid).\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n\t * @since 2.7.0\n\t */\n\ttoLineHeight: function(value, size) {\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\t\tif (!matches || matches[1] === 'normal') {\n\t\t\treturn size * 1.2;\n\t\t}\n\n\t\tvalue = +matches[2];\n\n\t\tswitch (matches[3]) {\n\t\tcase 'px':\n\t\t\treturn value;\n\t\tcase '%':\n\t\t\tvalue /= 100;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\treturn size * value;\n\t},\n\n\t/**\n\t * Converts the given value into a padding object with pre-computed width/height.\n\t * @param {Number|Object} value - If a number, set the value to all TRBL component,\n\t * else, if and object, use defined properties and sets undefined ones to 0.\n\t * @returns {Object} The padding values (top, right, bottom, left, width, height)\n\t * @since 2.7.0\n\t */\n\ttoPadding: function(value) {\n\t\tvar t, r, b, l;\n\n\t\tif (helpers.isObject(value)) {\n\t\t\tt = +value.top || 0;\n\t\t\tr = +value.right || 0;\n\t\t\tb = +value.bottom || 0;\n\t\t\tl = +value.left || 0;\n\t\t} else {\n\t\t\tt = r = b = l = +value || 0;\n\t\t}\n\n\t\treturn {\n\t\t\ttop: t,\n\t\t\tright: r,\n\t\t\tbottom: b,\n\t\t\tleft: l,\n\t\t\theight: t + b,\n\t\t\twidth: l + r\n\t\t};\n\t},\n\n\t/**\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\n\t * @param {Array[]} inputs - An array of values, falling back to the last value.\n\t * @param {Object} [context] - If defined and the current value is a function, the value\n\t * is called with `context` as first argument and the result becomes the new input.\n\t * @param {Number} [index] - If defined and the current value is an array, the value\n\t * at `index` become the new input.\n\t * @since 2.7.0\n\t */\n\tresolve: function(inputs, context, index) {\n\t\tvar i, ilen, value;\n\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\n\t\t\tvalue = inputs[i];\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (context !== undefined && typeof value === 'function') {\n\t\t\t\tvalue = value(context);\n\t\t\t}\n\t\t\tif (index !== undefined && helpers.isArray(value)) {\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}\n};\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\nvar defaultColor = defaults.global.defaultColor;\n\ndefaults._set('global', {\n\telements: {\n\t\tpoint: {\n\t\t\tradius: 3,\n\t\t\tpointStyle: 'circle',\n\t\t\tbackgroundColor: defaultColor,\n\t\t\tborderColor: defaultColor,\n\t\t\tborderWidth: 1,\n\t\t\t// Hover\n\t\t\thitRadius: 1,\n\t\t\thoverRadius: 4,\n\t\t\thoverBorderWidth: 1\n\t\t}\n\t}\n});\n\nfunction xRange(mouseX) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\n}\n\nfunction yRange(mouseY) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\n}\n\nmodule.exports = Element.extend({\n\tinRange: function(mouseX, mouseY) {\n\t\tvar vm = this._view;\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n\t},\n\n\tinLabelRange: xRange,\n\tinXRange: xRange,\n\tinYRange: yRange,\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y,\n\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t};\n\t},\n\n\tdraw: function(chartArea) {\n\t\tvar vm = this._view;\n\t\tvar model = this._model;\n\t\tvar ctx = this._chart.ctx;\n\t\tvar pointStyle = vm.pointStyle;\n\t\tvar radius = vm.radius;\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\t\tvar color = helpers.color;\n\t\tvar errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)\n\t\tvar ratio = 0;\n\n\t\tif (vm.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\tctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, defaults.global.elements.point.borderWidth);\n\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\n\t\t// Cliping for Points.\n\t\t// going out from inner charArea?\n\t\tif ((chartArea !== undefined) && ((model.x < chartArea.left) || (chartArea.right * errMargin < model.x) || (model.y < chartArea.top) || (chartArea.bottom * errMargin < model.y))) {\n\t\t\t// Point fade out\n\t\t\tif (model.x < chartArea.left) {\n\t\t\t\tratio = (x - model.x) / (chartArea.left - model.x);\n\t\t\t} else if (chartArea.right * errMargin < model.x) {\n\t\t\t\tratio = (model.x - x) / (model.x - chartArea.right);\n\t\t\t} else if (model.y < chartArea.top) {\n\t\t\t\tratio = (y - model.y) / (chartArea.top - model.y);\n\t\t\t} else if (chartArea.bottom * errMargin < model.y) {\n\t\t\t\tratio = (model.y - y) / (model.y - chartArea.bottom);\n\t\t\t}\n\t\t\tratio = Math.round(ratio * 100) / 100;\n\t\t\tctx.strokeStyle = color(ctx.strokeStyle).alpha(ratio).rgbString();\n\t\t\tctx.fillStyle = color(ctx.fillStyle).alpha(ratio).rgbString();\n\t\t}\n\n\t\thelpers.canvas.drawPoint(ctx, pointStyle, radius, x, y);\n\t}\n});\n","'use strict';\n\nmodule.exports = require('./helpers.core');\nmodule.exports.easing = require('./helpers.easing');\nmodule.exports.canvas = require('./helpers.canvas');\nmodule.exports.options = require('./helpers.options');\n","'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * @namespace Chart.helpers.canvas\n */\nvar exports = module.exports = {\n\t/**\n\t * Clears the entire canvas associated to the given `chart`.\n\t * @param {Chart} chart - The chart for which to clear the canvas.\n\t */\n\tclear: function(chart) {\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t},\n\n\t/**\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n\t * given size (width, height) and the same `radius` for all corners.\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n\t * @param {Number} x - The x axis of the coordinate for the rectangle starting point.\n\t * @param {Number} y - The y axis of the coordinate for the rectangle starting point.\n\t * @param {Number} width - The rectangle's width.\n\t * @param {Number} height - The rectangle's height.\n\t * @param {Number} radius - The rounded amount (in pixels) for the four corners.\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n\t */\n\troundedRect: function(ctx, x, y, width, height, radius) {\n\t\tif (radius) {\n\t\t\tvar rx = Math.min(radius, width / 2);\n\t\t\tvar ry = Math.min(radius, height / 2);\n\n\t\t\tctx.moveTo(x + rx, y);\n\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry);\n\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height);\n\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry);\n\t\t\tctx.lineTo(x, y + ry);\n\t\t\tctx.quadraticCurveTo(x, y, x + rx, y);\n\t\t} else {\n\t\t\tctx.rect(x, y, width, height);\n\t\t}\n\t},\n\n\tdrawPoint: function(ctx, style, radius, x, y) {\n\t\tvar type, edgeLength, xOffset, yOffset, height, size;\n\n\t\tif (style && typeof style === 'object') {\n\t\t\ttype = style.toString();\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\tctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (style) {\n\t\t// Default includes circle\n\t\tdefault:\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, y, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'triangle':\n\t\t\tctx.beginPath();\n\t\t\tedgeLength = 3 * radius / Math.sqrt(3);\n\t\t\theight = edgeLength * Math.sqrt(3) / 2;\n\t\t\tctx.moveTo(x - edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x + edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x, y - 2 * height / 3);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.fillRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tctx.strokeRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tbreak;\n\t\tcase 'rectRounded':\n\t\t\tvar offset = radius / Math.SQRT2;\n\t\t\tvar leftX = x - offset;\n\t\t\tvar topY = y - offset;\n\t\t\tvar sideSize = Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tthis.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius / 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rectRot':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - size, y);\n\t\t\tctx.lineTo(x, y + size);\n\t\t\tctx.lineTo(x + size, y);\n\t\t\tctx.lineTo(x, y - size);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'cross':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'crossRot':\n\t\t\tctx.beginPath();\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'star':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'dash':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\t}\n\n\t\tctx.stroke();\n\t},\n\n\tclipArea: function(ctx, area) {\n\t\tctx.save();\n\t\tctx.beginPath();\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n\t\tctx.clip();\n\t},\n\n\tunclipArea: function(ctx) {\n\t\tctx.restore();\n\t},\n\n\tlineTo: function(ctx, previous, target, flip) {\n\t\tif (target.steppedLine) {\n\t\t\tif ((target.steppedLine === 'after' && !flip) || (target.steppedLine !== 'after' && flip)) {\n\t\t\t\tctx.lineTo(previous.x, target.y);\n\t\t\t} else {\n\t\t\t\tctx.lineTo(target.x, previous.y);\n\t\t\t}\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!target.tension) {\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tctx.bezierCurveTo(\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\n\t\t\ttarget.x,\n\t\t\ttarget.y);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n * @namespace Chart.helpers.clear\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.clear = exports.clear;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n * @namespace Chart.helpers.drawRoundedRectangle\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.drawRoundedRectangle = function(ctx) {\n\tctx.beginPath();\n\texports.roundedRect.apply(exports, arguments);\n\tctx.closePath();\n};\n","'use strict';\n\n/**\n * @namespace Chart.helpers\n */\nvar helpers = {\n\t/**\n\t * An empty function that can be used, for example, for optional callback.\n\t */\n\tnoop: function() {},\n\n\t/**\n\t * Returns a unique id, sequentially generated from a global variable.\n\t * @returns {Number}\n\t * @function\n\t */\n\tuid: (function() {\n\t\tvar id = 0;\n\t\treturn function() {\n\t\t\treturn id++;\n\t\t};\n\t}()),\n\n\t/**\n\t * Returns true if `value` is neither null nor undefined, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisNullOrUndef: function(value) {\n\t\treturn value === null || typeof value === 'undefined';\n\t},\n\n\t/**\n\t * Returns true if `value` is an array, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @function\n\t */\n\tisArray: Array.isArray ? Array.isArray : function(value) {\n\t\treturn Object.prototype.toString.call(value) === '[object Array]';\n\t},\n\n\t/**\n\t * Returns true if `value` is an object (excluding null), else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisObject: function(value) {\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\n\t},\n\n\t/**\n\t * Returns `value` if defined, else returns `defaultValue`.\n\t * @param {*} value - The value to return if defined.\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\n\t * @returns {*}\n\t */\n\tvalueOrDefault: function(value, defaultValue) {\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\n\t},\n\n\t/**\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n\t * @param {Array} value - The array to lookup for value at `index`.\n\t * @param {Number} index - The index in `value` to lookup for value.\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n\t * @returns {*}\n\t */\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n\t},\n\n\t/**\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n\t * @param {Function} fn - The function to call.\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @returns {*}\n\t */\n\tcallback: function(fn, args, thisArg) {\n\t\tif (fn && typeof fn.call === 'function') {\n\t\t\treturn fn.apply(thisArg, args);\n\t\t}\n\t},\n\n\t/**\n\t * Note(SB) for performance sake, this method should only be used when loopable type\n\t * is unknown or in none intensive code (not called often and small loopable). Else\n\t * it's preferable to use a regular for() loop and save extra function calls.\n\t * @param {Object|Array} loopable - The object or array to be iterated.\n\t * @param {Function} fn - The function to call for each item.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @param {Boolean} [reverse] - If true, iterates backward on the loopable.\n\t */\n\teach: function(loopable, fn, thisArg, reverse) {\n\t\tvar i, len, keys;\n\t\tif (helpers.isArray(loopable)) {\n\t\t\tlen = loopable.length;\n\t\t\tif (reverse) {\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (helpers.isObject(loopable)) {\n\t\t\tkeys = Object.keys(loopable);\n\t\t\tlen = keys.length;\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n\t * @see http://stackoverflow.com/a/14853974\n\t * @param {Array} a0 - The array to compare\n\t * @param {Array} a1 - The array to compare\n\t * @returns {Boolean}\n\t */\n\tarrayEquals: function(a0, a1) {\n\t\tvar i, ilen, v0, v1;\n\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\n\t\t\tv0 = a0[i];\n\t\t\tv1 = a1[i];\n\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (v0 !== v1) {\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\n\t * @param {*} source - The value to clone.\n\t * @returns {*}\n\t */\n\tclone: function(source) {\n\t\tif (helpers.isArray(source)) {\n\t\t\treturn source.map(helpers.clone);\n\t\t}\n\n\t\tif (helpers.isObject(source)) {\n\t\t\tvar target = {};\n\t\t\tvar keys = Object.keys(source);\n\t\t\tvar klen = keys.length;\n\t\t\tvar k = 0;\n\n\t\t\tfor (; k < klen; ++k) {\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\n\t\t\t}\n\n\t\t\treturn target;\n\t\t}\n\n\t\treturn source;\n\t},\n\n\t/**\n\t * The default merger when Chart.helpers.merge is called without merger option.\n\t * Note(SB): this method is also used by configMerge and scaleMerge as fallback.\n\t * @private\n\t */\n\t_merger: function(key, target, source, options) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.merge(tval, sval, options);\n\t\t} else {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Merges source[key] in target[key] only if target[key] is undefined.\n\t * @private\n\t */\n\t_mergerIf: function(key, target, source) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.mergeIf(tval, sval);\n\t\t} else if (!target.hasOwnProperty(key)) {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @param {Object} [options] - Merging options:\n\t * @param {Function} [options.merger] - The merge method (key, target, source, options)\n\t * @returns {Object} The `target` object.\n\t */\n\tmerge: function(target, source, options) {\n\t\tvar sources = helpers.isArray(source) ? source : [source];\n\t\tvar ilen = sources.length;\n\t\tvar merge, i, keys, klen, k;\n\n\t\tif (!helpers.isObject(target)) {\n\t\t\treturn target;\n\t\t}\n\n\t\toptions = options || {};\n\t\tmerge = options.merger || helpers._merger;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!helpers.isObject(source)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys = Object.keys(source);\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\n\t\t\t\tmerge(keys[k], target, source, options);\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @returns {Object} The `target` object.\n\t */\n\tmergeIf: function(target, source) {\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\n\t},\n\n\t/**\n\t * Applies the contents of two or more objects together into the first object.\n\t * @param {Object} target - The target object in which all objects are merged into.\n\t * @param {Object} arg1 - Object containing additional properties to merge in target.\n\t * @param {Object} argN - Additional objects containing properties to merge in target.\n\t * @returns {Object} The `target` object.\n\t */\n\textend: function(target) {\n\t\tvar setFn = function(value, key) {\n\t\t\ttarget[key] = value;\n\t\t};\n\t\tfor (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n\t\t\thelpers.each(arguments[i], setFn);\n\t\t}\n\t\treturn target;\n\t},\n\n\t/**\n\t * Basic javascript inheritance based on the model created in Backbone.js\n\t */\n\tinherits: function(extensions) {\n\t\tvar me = this;\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n\t\t\treturn me.apply(this, arguments);\n\t\t};\n\n\t\tvar Surrogate = function() {\n\t\t\tthis.constructor = ChartElement;\n\t\t};\n\n\t\tSurrogate.prototype = me.prototype;\n\t\tChartElement.prototype = new Surrogate();\n\t\tChartElement.extend = helpers.inherits;\n\n\t\tif (extensions) {\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t}\n\n\t\tChartElement.__super__ = me.prototype;\n\t\treturn ChartElement;\n\t}\n};\n\nmodule.exports = helpers;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.callback instead.\n * @function Chart.helpers.callCallback\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nhelpers.callCallback = helpers.callback;\n\n/**\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n * @function Chart.helpers.indexOf\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.indexOf = function(array, item, fromIndex) {\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\n};\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n * @function Chart.helpers.getValueOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueOrDefault = helpers.valueOrDefault;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n * @function Chart.helpers.getValueAtIndexOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\nvar globalDefaults = defaults.global;\n\ndefaults._set('global', {\n\telements: {\n\t\tline: {\n\t\t\ttension: 0.4,\n\t\t\tbackgroundColor: globalDefaults.defaultColor,\n\t\t\tborderWidth: 3,\n\t\t\tborderColor: globalDefaults.defaultColor,\n\t\t\tborderCapStyle: 'butt',\n\t\t\tborderDash: [],\n\t\t\tborderDashOffset: 0.0,\n\t\t\tborderJoinStyle: 'miter',\n\t\t\tcapBezierPoints: true,\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar vm = me._view;\n\t\tvar ctx = me._chart.ctx;\n\t\tvar spanGaps = vm.spanGaps;\n\t\tvar points = me._children.slice(); // clone array\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\tvar lastDrawnIndex = -1;\n\t\tvar index, current, previous, currentVM;\n\n\t\t// If we are looping, adding the first point again\n\t\tif (me._loop && points.length) {\n\t\t\tpoints.push(points[0]);\n\t\t}\n\n\t\tctx.save();\n\n\t\t// Stroke Line Options\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t// IE 9 and 10 do not support line dash\n\t\tif (ctx.setLineDash) {\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t}\n\n\t\tctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\tctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t// Stroke Line\n\t\tctx.beginPath();\n\t\tlastDrawnIndex = -1;\n\n\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\tcurrent = points[index];\n\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\tcurrentVM = current._view;\n\n\t\t\t// First point moves to it's starting position no matter what\n\t\t\tif (index === 0) {\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\thelpers.canvas.lineTo(ctx, previous._view, current._view);\n\t\t\t\t\t}\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\t\tctx.restore();\n\t}\n});\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\nvar helpers = require('../helpers/index');\n\ndefaults._set('global', {\n\telements: {\n\t\tarc: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: '#fff',\n\t\t\tborderWidth: 2\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tinLabelRange: function(mouseX) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n\t\t}\n\t\treturn false;\n\t},\n\n\tinRange: function(chartX, chartY) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(vm, {x: chartX, y: chartY});\n\t\t\tvar\tangle = pointRelativePosition.angle;\n\t\t\tvar distance = pointRelativePosition.distance;\n\n\t\t\t// Sanitise angle range\n\t\t\tvar startAngle = vm.startAngle;\n\t\t\tvar endAngle = vm.endAngle;\n\t\t\twhile (endAngle < startAngle) {\n\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle > endAngle) {\n\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle < startAngle) {\n\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t}\n\n\t\t\t// Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t}\n\t\treturn false;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n\t\treturn {\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n\t\treturn {\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t};\n\t},\n\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar sA = vm.startAngle;\n\t\tvar eA = vm.endAngle;\n\n\t\tctx.beginPath();\n\n\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\n\t\tctx.closePath();\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = vm.borderWidth;\n\n\t\tctx.fillStyle = vm.backgroundColor;\n\n\t\tctx.fill();\n\t\tctx.lineJoin = 'bevel';\n\n\t\tif (vm.borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t}\n});\n","'use strict';\n\nvar helpers = require('./helpers.core');\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easingEffects\n * @see http://www.robertpenner.com/easing/\n */\nvar effects = {\n\tlinear: function(t) {\n\t\treturn t;\n\t},\n\n\teaseInQuad: function(t) {\n\t\treturn t * t;\n\t},\n\n\teaseOutQuad: function(t) {\n\t\treturn -t * (t - 2);\n\t},\n\n\teaseInOutQuad: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t;\n\t\t}\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\n\t},\n\n\teaseInCubic: function(t) {\n\t\treturn t * t * t;\n\t},\n\n\teaseOutCubic: function(t) {\n\t\treturn (t = t - 1) * t * t + 1;\n\t},\n\n\teaseInOutCubic: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\n\t},\n\n\teaseInQuart: function(t) {\n\t\treturn t * t * t * t;\n\t},\n\n\teaseOutQuart: function(t) {\n\t\treturn -((t = t - 1) * t * t * t - 1);\n\t},\n\n\teaseInOutQuart: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t;\n\t\t}\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\n\t},\n\n\teaseInQuint: function(t) {\n\t\treturn t * t * t * t * t;\n\t},\n\n\teaseOutQuint: function(t) {\n\t\treturn (t = t - 1) * t * t * t * t + 1;\n\t},\n\n\teaseInOutQuint: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n\t},\n\n\teaseInSine: function(t) {\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\n\t},\n\n\teaseOutSine: function(t) {\n\t\treturn Math.sin(t * (Math.PI / 2));\n\t},\n\n\teaseInOutSine: function(t) {\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n\t},\n\n\teaseInExpo: function(t) {\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\n\t},\n\n\teaseOutExpo: function(t) {\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\n\t},\n\n\teaseInOutExpo: function(t) {\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\n\t\t}\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\n\t},\n\n\teaseInCirc: function(t) {\n\t\tif (t >= 1) {\n\t\t\treturn t;\n\t\t}\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\n\t},\n\n\teaseOutCirc: function(t) {\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\n\t},\n\n\teaseInOutCirc: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\n\t\t}\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t},\n\n\teaseInElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t},\n\n\teaseOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n\t},\n\n\teaseInOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif ((t /= 0.5) === 2) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.45;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\tif (t < 1) {\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t}\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t},\n\teaseInBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn t * t * ((s + 1) * t - s);\n\t},\n\n\teaseOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\n\t},\n\n\teaseInOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t},\n\n\teaseInBounce: function(t) {\n\t\treturn 1 - effects.easeOutBounce(1 - t);\n\t},\n\n\teaseOutBounce: function(t) {\n\t\tif (t < (1 / 2.75)) {\n\t\t\treturn 7.5625 * t * t;\n\t\t}\n\t\tif (t < (2 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\n\t\t}\n\t\tif (t < (2.5 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\n\t\t}\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\n\t},\n\n\teaseInOutBounce: function(t) {\n\t\tif (t < 0.5) {\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\n\t\t}\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n\t}\n};\n\nmodule.exports = {\n\teffects: effects\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n * @function Chart.helpers.easingEffects\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.easingEffects = effects;\n","'use strict';\n\nmodule.exports = {};\nmodule.exports.Arc = require('./element.arc');\nmodule.exports.Line = require('./element.line');\nmodule.exports.Point = require('./element.point');\nmodule.exports.Rectangle = require('./element.rectangle');\n","'use strict';\n\nvar defaults = require('../core/core.defaults');\nvar Element = require('../core/core.element');\n\ndefaults._set('global', {\n\telements: {\n\t\trectangle: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: defaults.global.defaultColor,\n\t\t\tborderSkipped: 'bottom',\n\t\t\tborderWidth: 0\n\t\t}\n\t}\n});\n\nfunction isVertical(bar) {\n\treturn bar._view.width !== undefined;\n}\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param bar {Chart.Element.Rectangle} the bar\n * @return {Bounds} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar) {\n\tvar vm = bar._view;\n\tvar x1, x2, y1, y2;\n\n\tif (isVertical(bar)) {\n\t\t// vertical\n\t\tvar halfWidth = vm.width / 2;\n\t\tx1 = vm.x - halfWidth;\n\t\tx2 = vm.x + halfWidth;\n\t\ty1 = Math.min(vm.y, vm.base);\n\t\ty2 = Math.max(vm.y, vm.base);\n\t} else {\n\t\t// horizontal bar\n\t\tvar halfHeight = vm.height / 2;\n\t\tx1 = Math.min(vm.x, vm.base);\n\t\tx2 = Math.max(vm.x, vm.base);\n\t\ty1 = vm.y - halfHeight;\n\t\ty2 = vm.y + halfHeight;\n\t}\n\n\treturn {\n\t\tleft: x1,\n\t\ttop: y1,\n\t\tright: x2,\n\t\tbottom: y2\n\t};\n}\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar left, right, top, bottom, signX, signY, borderSkipped;\n\t\tvar borderWidth = vm.borderWidth;\n\n\t\tif (!vm.horizontal) {\n\t\t\t// bar\n\t\t\tleft = vm.x - vm.width / 2;\n\t\t\tright = vm.x + vm.width / 2;\n\t\t\ttop = vm.y;\n\t\t\tbottom = vm.base;\n\t\t\tsignX = 1;\n\t\t\tsignY = bottom > top ? 1 : -1;\n\t\t\tborderSkipped = vm.borderSkipped || 'bottom';\n\t\t} else {\n\t\t\t// horizontal bar\n\t\t\tleft = vm.base;\n\t\t\tright = vm.x;\n\t\t\ttop = vm.y - vm.height / 2;\n\t\t\tbottom = vm.y + vm.height / 2;\n\t\t\tsignX = right > left ? 1 : -1;\n\t\t\tsignY = 1;\n\t\t\tborderSkipped = vm.borderSkipped || 'left';\n\t\t}\n\n\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\tif (borderWidth) {\n\t\t\t// borderWidth shold be less than bar width and bar height.\n\t\t\tvar barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));\n\t\t\tborderWidth = borderWidth > barSize ? barSize : borderWidth;\n\t\t\tvar halfStroke = borderWidth / 2;\n\t\t\t// Adjust borderWidth when bar top position is near vm.base(zero).\n\t\t\tvar borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0);\n\t\t\tvar borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);\n\t\t\tvar borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);\n\t\t\tvar borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);\n\t\t\t// not become a vertical line?\n\t\t\tif (borderLeft !== borderRight) {\n\t\t\t\ttop = borderTop;\n\t\t\t\tbottom = borderBottom;\n\t\t\t}\n\t\t\t// not become a horizontal line?\n\t\t\tif (borderTop !== borderBottom) {\n\t\t\t\tleft = borderLeft;\n\t\t\t\tright = borderRight;\n\t\t\t}\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = borderWidth;\n\n\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t// | 1 2 |\n\t\t// | 0 3 |\n\t\tvar corners = [\n\t\t\t[left, bottom],\n\t\t\t[left, top],\n\t\t\t[right, top],\n\t\t\t[right, bottom]\n\t\t];\n\n\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\tvar startCorner = borders.indexOf(borderSkipped, 0);\n\t\tif (startCorner === -1) {\n\t\t\tstartCorner = 0;\n\t\t}\n\n\t\tfunction cornerAt(index) {\n\t\t\treturn corners[(startCorner + index) % 4];\n\t\t}\n\n\t\t// Draw rectangle from 'startCorner'\n\t\tvar corner = cornerAt(0);\n\t\tctx.moveTo(corner[0], corner[1]);\n\n\t\tfor (var i = 1; i < 4; i++) {\n\t\t\tcorner = cornerAt(i);\n\t\t\tctx.lineTo(corner[0], corner[1]);\n\t\t}\n\n\t\tctx.fill();\n\t\tif (borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\theight: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.base - vm.y;\n\t},\n\n\tinRange: function(mouseX, mouseY) {\n\t\tvar inRange = false;\n\n\t\tif (this._view) {\n\t\t\tvar bounds = getBarBounds(this);\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinLabelRange: function(mouseX, mouseY) {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar inRange = false;\n\t\tvar bounds = getBarBounds(me);\n\n\t\tif (isVertical(me)) {\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right;\n\t\t} else {\n\t\t\tinRange = mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinXRange: function(mouseX) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseX >= bounds.left && mouseX <= bounds.right;\n\t},\n\n\tinYRange: function(mouseY) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar x, y;\n\t\tif (isVertical(this)) {\n\t\t\tx = vm.x;\n\t\t\ty = (vm.y + vm.base) / 2;\n\t\t} else {\n\t\t\tx = (vm.x + vm.base) / 2;\n\t\t\ty = vm.y;\n\t\t}\n\n\t\treturn {x: x, y: y};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.width * Math.abs(vm.y - vm.base);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t}\n});\n"],"sourceRoot":""}