{"version":3,"sources":["webpack:///./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.js"],"names":["global","factory","module","exports","this","helpers","chart_js","devicePixelRatio","window","screen","deviceXDPI","logicalXDPI","utils","toTextLines","inputs","input","lines","concat","length","pop","unshift","apply","split","Array","isArray","push","isNullOrUndef","textSize","ctx","font","i","items","ilen","prev","width","string","Math","max","measureText","height","lineHeight","bound","min","value","arrayDiff","a0","a1","j","v","slice","updates","indexOf","splice","rasterize","round","orient","point","origin","x0","x","y0","y","dx","dy","ln","sqrt","aligned","vx","vy","align","PI","cos","sin","R_INSIDE","R_LEFT","R_RIGHT","R_BOTTOM","R_TOP","region","rect","res","left","right","top","bottom","clipped","segment","area","r","x1","y1","r0","r1","compute$1","range","config","anchor","clamp","positioners","arc","el","angle","startAngle","endAngle","innerRadius","outerRadius","rx","options","radius","ry","bar","sx","sy","horizontal","base","abs","fallback","boundingRects","model","borderWidth","padding","th","size","tw","tx","ty","frame","w","h","text","getScaleOrigin","context","scale","chart","getDatasetMeta","datasetIndex","vScale","undefined","xCenter","yCenter","pixel","getBasePixel","getPositioner","ArcElement","PointElement","BarElement","drawRoundedRect","HALF_PI","moveTo","closePath","drawFrame","bgColor","backgroundColor","borderColor","beginPath","borderRadius","fillStyle","fill","strokeStyle","lineWidth","lineJoin","stroke","textGeometry","drawTextLine","cfg","shadow","shadowBlur","stroked","strokeText","filled","fillText","drawText","textAlign","color","strokeColor","textStrokeColor","strokeWidth","textStrokeWidth","textBaseline","textShadowBlur","shadowColor","textShadowColor","Label","index","me","_config","_index","_model","_rects","_ctx","_el","merge","prototype","_modelize","display","toFont","resolve","defaults","chartArea","clip","offset","opacity","toPadding","positioner","rotation","update","label","rects","dataset","data","valueOrDefault","callback","formatter","geometry","visible","draw","center","save","globalAlpha","translate","rotate","restore","MIN_INTEGER","Number","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","rotated","cx","cy","projected","points","axis","pt","dp","toAxis","p0","p1","HitBox","_rotation","_rect","coordinates","vs","collide","labels","collider","s0","s1","$layout","_visible","_box","intersects","compute","state","h0","_hidable","h1","contains","margin","other","pr0","pr1","_points","axes","layout","prepare","datasets","jlen","_set","_idx","sort","a","b","sa","sb","dirty","lookup","keys","klen","k","isObject","Object","family","style","weight","listeners","EXPANDO_KEY","DEFAULT_KEY","configure","override","datalabels","configs","forEach","key","_key","reduce","target","each","fn","event","dispatchEvent","$context","groups","$groups","_dirty","dispatchMoveEvents","previous","enter","leave","handleMoveEvents","expando","_listeners","type","_labels","_hovered","handleClickEvents","handlers","click","plugin","id","beforeInit","_actives","beforeUpdate","_listened","_datasets","afterDatasetUpdate","args","isDatasetVisible","elements","meta","getDataVisibility","skip","active","dataIndex","merger","source","afterUpdate","afterDatasetsDraw","beforeEvent","afterEvent","actives","getActiveElements","element","render"],"mappings":"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","file":"js/chunk-vendors~b2ed013a.bf137edf.js","sourcesContent":["/*!\n * chartjs-plugin-datalabels v2.0.0-beta.1\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2021 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('chart.js/helpers'), require('chart.js')) :\ntypeof define === 'function' && define.amd ? define(['chart.js/helpers', 'chart.js'], factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.ChartDataLabels = factory(global.Chart.helpers, global.Chart));\n}(this, (function (helpers, chart_js) { 'use strict';\n\nvar devicePixelRatio = (function() {\n if (typeof window !== 'undefined') {\n if (window.devicePixelRatio) {\n return window.devicePixelRatio;\n }\n\n // devicePixelRatio is undefined on IE10\n // https://stackoverflow.com/a/20204180/8837887\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/85\n var screen = window.screen;\n if (screen) {\n return (screen.deviceXDPI || 1) / (screen.logicalXDPI || 1);\n }\n }\n\n return 1;\n}());\n\nvar utils = {\n // @todo move this in Chart.helpers.toTextLines\n toTextLines: function(inputs) {\n var lines = [];\n var input;\n\n inputs = [].concat(inputs);\n while (inputs.length) {\n input = inputs.pop();\n if (typeof input === 'string') {\n lines.unshift.apply(lines, input.split('\\n'));\n } else if (Array.isArray(input)) {\n inputs.push.apply(inputs, input);\n } else if (!helpers.isNullOrUndef(inputs)) {\n lines.unshift('' + input);\n }\n }\n\n return lines;\n },\n\n // @todo move this in Chart.helpers.canvas.textSize\n // @todo cache calls of measureText if font doesn't change?!\n textSize: function(ctx, lines, font) {\n var items = [].concat(lines);\n var ilen = items.length;\n var prev = ctx.font;\n var width = 0;\n var i;\n\n ctx.font = font.string;\n\n for (i = 0; i < ilen; ++i) {\n width = Math.max(ctx.measureText(items[i]).width, width);\n }\n\n ctx.font = prev;\n\n return {\n height: ilen * font.lineHeight,\n width: width\n };\n },\n\n /**\n * Returns value bounded by min and max. This is equivalent to max(min, min(value, max)).\n * @todo move this method in Chart.helpers.bound\n * https://doc.qt.io/qt-5/qtglobal.html#qBound\n */\n bound: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Returns an array of pair [value, state] where state is:\n * * -1: value is only in a0 (removed)\n * * 1: value is only in a1 (added)\n */\n arrayDiff: function(a0, a1) {\n var prev = a0.slice();\n var updates = [];\n var i, j, ilen, v;\n\n for (i = 0, ilen = a1.length; i < ilen; ++i) {\n v = a1[i];\n j = prev.indexOf(v);\n\n if (j === -1) {\n updates.push([v, 1]);\n } else {\n prev.splice(j, 1);\n }\n }\n\n for (i = 0, ilen = prev.length; i < ilen; ++i) {\n updates.push([prev[i], -1]);\n }\n\n return updates;\n },\n\n /**\n * https://github.com/chartjs/chartjs-plugin-datalabels/issues/70\n */\n rasterize: function(v) {\n return Math.round(v * devicePixelRatio) / devicePixelRatio;\n }\n};\n\nfunction orient(point, origin) {\n var x0 = origin.x;\n var y0 = origin.y;\n\n if (x0 === null) {\n return {x: 0, y: -1};\n }\n if (y0 === null) {\n return {x: 1, y: 0};\n }\n\n var dx = point.x - x0;\n var dy = point.y - y0;\n var ln = Math.sqrt(dx * dx + dy * dy);\n\n return {\n x: ln ? dx / ln : 0,\n y: ln ? dy / ln : -1\n };\n}\n\nfunction aligned(x, y, vx, vy, align) {\n switch (align) {\n case 'center':\n vx = vy = 0;\n break;\n case 'bottom':\n vx = 0;\n vy = 1;\n break;\n case 'right':\n vx = 1;\n vy = 0;\n break;\n case 'left':\n vx = -1;\n vy = 0;\n break;\n case 'top':\n vx = 0;\n vy = -1;\n break;\n case 'start':\n vx = -vx;\n vy = -vy;\n break;\n case 'end':\n // keep natural orientation\n break;\n default:\n // clockwise rotation (in degree)\n align *= (Math.PI / 180);\n vx = Math.cos(align);\n vy = Math.sin(align);\n break;\n }\n\n return {\n x: x,\n y: y,\n vx: vx,\n vy: vy\n };\n}\n\n// Line clipping (Cohen–Sutherland algorithm)\n// https://en.wikipedia.org/wiki/Cohen–Sutherland_algorithm\n\nvar R_INSIDE = 0;\nvar R_LEFT = 1;\nvar R_RIGHT = 2;\nvar R_BOTTOM = 4;\nvar R_TOP = 8;\n\nfunction region(x, y, rect) {\n var res = R_INSIDE;\n\n if (x < rect.left) {\n res |= R_LEFT;\n } else if (x > rect.right) {\n res |= R_RIGHT;\n }\n if (y < rect.top) {\n res |= R_TOP;\n } else if (y > rect.bottom) {\n res |= R_BOTTOM;\n }\n\n return res;\n}\n\nfunction clipped(segment, area) {\n var x0 = segment.x0;\n var y0 = segment.y0;\n var x1 = segment.x1;\n var y1 = segment.y1;\n var r0 = region(x0, y0, area);\n var r1 = region(x1, y1, area);\n var r, x, y;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (!(r0 | r1) || (r0 & r1)) {\n // both points inside or on the same side: no clipping\n break;\n }\n\n // at least one point is outside\n r = r0 || r1;\n\n if (r & R_TOP) {\n x = x0 + (x1 - x0) * (area.top - y0) / (y1 - y0);\n y = area.top;\n } else if (r & R_BOTTOM) {\n x = x0 + (x1 - x0) * (area.bottom - y0) / (y1 - y0);\n y = area.bottom;\n } else if (r & R_RIGHT) {\n y = y0 + (y1 - y0) * (area.right - x0) / (x1 - x0);\n x = area.right;\n } else if (r & R_LEFT) {\n y = y0 + (y1 - y0) * (area.left - x0) / (x1 - x0);\n x = area.left;\n }\n\n if (r === r0) {\n x0 = x;\n y0 = y;\n r0 = region(x0, y0, area);\n } else {\n x1 = x;\n y1 = y;\n r1 = region(x1, y1, area);\n }\n }\n\n return {\n x0: x0,\n x1: x1,\n y0: y0,\n y1: y1\n };\n}\n\nfunction compute$1(range, config) {\n var anchor = config.anchor;\n var segment = range;\n var x, y;\n\n if (config.clamp) {\n segment = clipped(segment, config.area);\n }\n\n if (anchor === 'start') {\n x = segment.x0;\n y = segment.y0;\n } else if (anchor === 'end') {\n x = segment.x1;\n y = segment.y1;\n } else {\n x = (segment.x0 + segment.x1) / 2;\n y = (segment.y0 + segment.y1) / 2;\n }\n\n return aligned(x, y, range.vx, range.vy, config.align);\n}\n\nvar positioners = {\n arc: function(el, config) {\n var angle = (el.startAngle + el.endAngle) / 2;\n var vx = Math.cos(angle);\n var vy = Math.sin(angle);\n var r0 = el.innerRadius;\n var r1 = el.outerRadius;\n\n return compute$1({\n x0: el.x + vx * r0,\n y0: el.y + vy * r0,\n x1: el.x + vx * r1,\n y1: el.y + vy * r1,\n vx: vx,\n vy: vy\n }, config);\n },\n\n point: function(el, config) {\n var v = orient(el, config.origin);\n var rx = v.x * el.options.radius;\n var ry = v.y * el.options.radius;\n\n return compute$1({\n x0: el.x - rx,\n y0: el.y - ry,\n x1: el.x + rx,\n y1: el.y + ry,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n bar: function(el, config) {\n var v = orient(el, config.origin);\n var x = el.x;\n var y = el.y;\n var sx = 0;\n var sy = 0;\n\n if (el.horizontal) {\n x = Math.min(el.x, el.base);\n sx = Math.abs(el.base - el.x);\n } else {\n y = Math.min(el.y, el.base);\n sy = Math.abs(el.base - el.y);\n }\n\n return compute$1({\n x0: x,\n y0: y + sy,\n x1: x + sx,\n y1: y,\n vx: v.x,\n vy: v.y\n }, config);\n },\n\n fallback: function(el, config) {\n var v = orient(el, config.origin);\n\n return compute$1({\n x0: el.x,\n y0: el.y,\n x1: el.x,\n y1: el.y,\n vx: v.x,\n vy: v.y\n }, config);\n }\n};\n\nvar rasterize = utils.rasterize;\n\nfunction boundingRects(model) {\n var borderWidth = model.borderWidth || 0;\n var padding = model.padding;\n var th = model.size.height;\n var tw = model.size.width;\n var tx = -tw / 2;\n var ty = -th / 2;\n\n return {\n frame: {\n x: tx - padding.left - borderWidth,\n y: ty - padding.top - borderWidth,\n w: tw + padding.width + borderWidth * 2,\n h: th + padding.height + borderWidth * 2\n },\n text: {\n x: tx,\n y: ty,\n w: tw,\n h: th\n }\n };\n}\n\nfunction getScaleOrigin(el, context) {\n var scale = context.chart.getDatasetMeta(context.datasetIndex).vScale;\n\n if (!scale) {\n return null;\n }\n\n if (scale.xCenter !== undefined && scale.yCenter !== undefined) {\n return {x: scale.xCenter, y: scale.yCenter};\n }\n\n var pixel = scale.getBasePixel();\n return el.horizontal ?\n {x: pixel, y: null} :\n {x: null, y: pixel};\n}\n\nfunction getPositioner(el) {\n if (el instanceof chart_js.ArcElement) {\n return positioners.arc;\n }\n if (el instanceof chart_js.PointElement) {\n return positioners.point;\n }\n if (el instanceof chart_js.BarElement) {\n return positioners.bar;\n }\n return positioners.fallback;\n}\n\nfunction drawRoundedRect(ctx, x, y, w, h, radius) {\n var HALF_PI = Math.PI / 2;\n\n if (radius) {\n var r = Math.min(radius, h / 2, w / 2);\n var left = x + r;\n var top = y + r;\n var right = x + w - r;\n var bottom = y + h - r;\n\n ctx.moveTo(x, top);\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -Math.PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, Math.PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, Math.PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -Math.PI, 0);\n ctx.arc(left, bottom, r, 0, Math.PI);\n } else {\n ctx.arc(left, top, r, -Math.PI, Math.PI);\n }\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, w, h);\n }\n}\n\nfunction drawFrame(ctx, rect, model) {\n var bgColor = model.backgroundColor;\n var borderColor = model.borderColor;\n var borderWidth = model.borderWidth;\n\n if (!bgColor && (!borderColor || !borderWidth)) {\n return;\n }\n\n ctx.beginPath();\n\n drawRoundedRect(\n ctx,\n rasterize(rect.x) + borderWidth / 2,\n rasterize(rect.y) + borderWidth / 2,\n rasterize(rect.w) - borderWidth,\n rasterize(rect.h) - borderWidth,\n model.borderRadius);\n\n ctx.closePath();\n\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fill();\n }\n\n if (borderColor && borderWidth) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = 'miter';\n ctx.stroke();\n }\n}\n\nfunction textGeometry(rect, align, font) {\n var h = font.lineHeight;\n var w = rect.w;\n var x = rect.x;\n var y = rect.y + h / 2;\n\n if (align === 'center') {\n x += w / 2;\n } else if (align === 'end' || align === 'right') {\n x += w;\n }\n\n return {\n h: h,\n w: w,\n x: x,\n y: y\n };\n}\n\nfunction drawTextLine(ctx, text, cfg) {\n var shadow = ctx.shadowBlur;\n var stroked = cfg.stroked;\n var x = rasterize(cfg.x);\n var y = rasterize(cfg.y);\n var w = rasterize(cfg.w);\n\n if (stroked) {\n ctx.strokeText(text, x, y, w);\n }\n\n if (cfg.filled) {\n if (shadow && stroked) {\n // Prevent drawing shadow on both the text stroke and fill, so\n // if the text is stroked, remove the shadow for the text fill.\n ctx.shadowBlur = 0;\n }\n\n ctx.fillText(text, x, y, w);\n\n if (shadow && stroked) {\n ctx.shadowBlur = shadow;\n }\n }\n}\n\nfunction drawText(ctx, lines, rect, model) {\n var align = model.textAlign;\n var color = model.color;\n var filled = !!color;\n var font = model.font;\n var ilen = lines.length;\n var strokeColor = model.textStrokeColor;\n var strokeWidth = model.textStrokeWidth;\n var stroked = strokeColor && strokeWidth;\n var i;\n\n if (!ilen || (!filled && !stroked)) {\n return;\n }\n\n // Adjust coordinates based on text alignment and line height\n rect = textGeometry(rect, align, font);\n\n ctx.font = font.string;\n ctx.textAlign = align;\n ctx.textBaseline = 'middle';\n ctx.shadowBlur = model.textShadowBlur;\n ctx.shadowColor = model.textShadowColor;\n\n if (filled) {\n ctx.fillStyle = color;\n }\n if (stroked) {\n ctx.lineJoin = 'round';\n ctx.lineWidth = strokeWidth;\n ctx.strokeStyle = strokeColor;\n }\n\n for (i = 0, ilen = lines.length; i < ilen; ++i) {\n drawTextLine(ctx, lines[i], {\n stroked: stroked,\n filled: filled,\n w: rect.w,\n x: rect.x,\n y: rect.y + rect.h * i\n });\n }\n}\n\nvar Label = function(config, ctx, el, index) {\n var me = this;\n\n me._config = config;\n me._index = index;\n me._model = null;\n me._rects = null;\n me._ctx = ctx;\n me._el = el;\n};\n\nhelpers.merge(Label.prototype, {\n /**\n * @private\n */\n _modelize: function(display, lines, config, context) {\n var me = this;\n var index = me._index;\n var font = helpers.toFont(helpers.resolve([config.font, {}], context, index));\n var color = helpers.resolve([config.color, chart_js.defaults.color], context, index);\n\n return {\n align: helpers.resolve([config.align, 'center'], context, index),\n anchor: helpers.resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: helpers.resolve([config.backgroundColor, null], context, index),\n borderColor: helpers.resolve([config.borderColor, null], context, index),\n borderRadius: helpers.resolve([config.borderRadius, 0], context, index),\n borderWidth: helpers.resolve([config.borderWidth, 0], context, index),\n clamp: helpers.resolve([config.clamp, false], context, index),\n clip: helpers.resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: helpers.resolve([config.offset, 0], context, index),\n opacity: helpers.resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: helpers.toPadding(helpers.resolve([config.padding, 0], context, index)),\n positioner: getPositioner(me._el),\n rotation: helpers.resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: helpers.resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: helpers.resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: helpers.resolve([config.textShadowColor, color], context, index),\n textStrokeColor: helpers.resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: helpers.resolve([config.textStrokeWidth, 0], context, index)\n };\n },\n\n update: function(context) {\n var me = this;\n var model = null;\n var rects = null;\n var index = me._index;\n var config = me._config;\n var value, label, lines;\n\n // We first resolve the display option (separately) to avoid computing\n // other options in case the label is hidden (i.e. display: false).\n var display = helpers.resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = helpers.valueOrDefault(helpers.callback(config.formatter, [value, context]), value);\n lines = helpers.isNullOrUndef(label) ? [] : utils.toTextLines(label);\n\n if (lines.length) {\n model = me._modelize(display, lines, config, context);\n rects = boundingRects(model);\n }\n }\n\n me._model = model;\n me._rects = rects;\n },\n\n geometry: function() {\n return this._rects ? this._rects.frame : {};\n },\n\n rotation: function() {\n return this._model ? this._model.rotation : 0;\n },\n\n visible: function() {\n return this._model && this._model.opacity;\n },\n\n model: function() {\n return this._model;\n },\n\n draw: function(chart, center) {\n var me = this;\n var ctx = chart.ctx;\n var model = me._model;\n var rects = me._rects;\n var area;\n\n if (!this.visible()) {\n return;\n }\n\n ctx.save();\n\n if (model.clip) {\n area = model.area;\n ctx.beginPath();\n ctx.rect(\n area.left,\n area.top,\n area.right - area.left,\n area.bottom - area.top);\n ctx.clip();\n }\n\n ctx.globalAlpha = utils.bound(0, model.opacity, 1);\n ctx.translate(rasterize(center.x), rasterize(center.y));\n ctx.rotate(model.rotation);\n\n drawFrame(ctx, rects.frame, model);\n drawText(ctx, model.lines, rects.text, model);\n\n ctx.restore();\n }\n});\n\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; // eslint-disable-line es/no-number-minsafeinteger\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; // eslint-disable-line es/no-number-maxsafeinteger\n\nfunction rotated(point, center, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n var cx = center.x;\n var cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nfunction projected(points, axis) {\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var origin = axis.origin;\n var i, pt, vx, vy, dp;\n\n for (i = 0; i < points.length; ++i) {\n pt = points[i];\n vx = pt.x - origin.x;\n vy = pt.y - origin.y;\n dp = axis.vx * vx + axis.vy * vy;\n min = Math.min(min, dp);\n max = Math.max(max, dp);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nfunction toAxis(p0, p1) {\n var vx = p1.x - p0.x;\n var vy = p1.y - p0.y;\n var ln = Math.sqrt(vx * vx + vy * vy);\n\n return {\n vx: (p1.x - p0.x) / ln,\n vy: (p1.y - p0.y) / ln,\n origin: p0,\n ln: ln\n };\n}\n\nvar HitBox = function() {\n this._rotation = 0;\n this._rect = {\n x: 0,\n y: 0,\n w: 0,\n h: 0\n };\n};\n\nhelpers.merge(HitBox.prototype, {\n center: function() {\n var r = this._rect;\n return {\n x: r.x + r.w / 2,\n y: r.y + r.h / 2\n };\n },\n\n update: function(center, rect, rotation) {\n this._rotation = rotation;\n this._rect = {\n x: rect.x + center.x,\n y: rect.y + center.y,\n w: rect.w,\n h: rect.h\n };\n },\n\n contains: function(point) {\n var me = this;\n var margin = 1;\n var rect = me._rect;\n\n point = rotated(point, me.center(), -me._rotation);\n\n return !(point.x < rect.x - margin\n || point.y < rect.y - margin\n || point.x > rect.x + rect.w + margin * 2\n || point.y > rect.y + rect.h + margin * 2);\n },\n\n // Separating Axis Theorem\n // https://gamedevelopment.tutsplus.com/tutorials/collision-detection-using-the-separating-axis-theorem--gamedev-169\n intersects: function(other) {\n var r0 = this._points();\n var r1 = other._points();\n var axes = [\n toAxis(r0[0], r0[1]),\n toAxis(r0[0], r0[3])\n ];\n var i, pr0, pr1;\n\n if (this._rotation !== other._rotation) {\n // Only separate with r1 axis if the rotation is different,\n // else it's enough to separate r0 and r1 with r0 axis only!\n axes.push(\n toAxis(r1[0], r1[1]),\n toAxis(r1[0], r1[3])\n );\n }\n\n for (i = 0; i < axes.length; ++i) {\n pr0 = projected(r0, axes[i]);\n pr1 = projected(r1, axes[i]);\n\n if (pr0.max < pr1.min || pr1.max < pr0.min) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n */\n _points: function() {\n var me = this;\n var rect = me._rect;\n var angle = me._rotation;\n var center = me.center();\n\n return [\n rotated({x: rect.x, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y}, center, angle),\n rotated({x: rect.x + rect.w, y: rect.y + rect.h}, center, angle),\n rotated({x: rect.x, y: rect.y + rect.h}, center, angle)\n ];\n }\n});\n\nfunction coordinates(el, model, geometry) {\n var point = model.positioner(el, model);\n var vx = point.vx;\n var vy = point.vy;\n\n if (!vx && !vy) {\n // if aligned center, we don't want to offset the center point\n return {x: point.x, y: point.y};\n }\n\n var w = geometry.w;\n var h = geometry.h;\n\n // take in account the label rotation\n var rotation = model.rotation;\n var dx = Math.abs(w / 2 * Math.cos(rotation)) + Math.abs(h / 2 * Math.sin(rotation));\n var dy = Math.abs(w / 2 * Math.sin(rotation)) + Math.abs(h / 2 * Math.cos(rotation));\n\n // scale the unit vector (vx, vy) to get at least dx or dy equal to\n // w or h respectively (else we would calculate the distance to the\n // ellipse inscribed in the bounding rect)\n var vs = 1 / Math.max(Math.abs(vx), Math.abs(vy));\n dx *= vx * vs;\n dy *= vy * vs;\n\n // finally, include the explicit offset\n dx += model.offset * vx;\n dy += model.offset * vy;\n\n return {\n x: point.x + dx,\n y: point.y + dy\n };\n}\n\nfunction collide(labels, collider) {\n var i, j, s0, s1;\n\n // IMPORTANT Iterate in the reverse order since items at the end of the\n // list have an higher weight/priority and thus should be less impacted\n // by the overlapping strategy.\n\n for (i = labels.length - 1; i >= 0; --i) {\n s0 = labels[i].$layout;\n\n for (j = i - 1; j >= 0 && s0._visible; --j) {\n s1 = labels[j].$layout;\n\n if (s1._visible && s0._box.intersects(s1._box)) {\n collider(s0, s1);\n }\n }\n }\n\n return labels;\n}\n\nfunction compute(labels) {\n var i, ilen, label, state, geometry, center;\n\n // Initialize labels for overlap detection\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n }\n }\n\n // Auto hide overlapping labels\n return collide(labels, function(s0, s1) {\n var h0 = s0._hidable;\n var h1 = s1._hidable;\n\n if ((h0 && h1) || h1) {\n s1._visible = false;\n } else if (h0) {\n s0._visible = false;\n }\n });\n}\n\nvar layout = {\n prepare: function(datasets) {\n var labels = [];\n var i, j, ilen, jlen, label;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n for (j = 0, jlen = datasets[i].length; j < jlen; ++j) {\n label = datasets[i][j];\n labels.push(label);\n label.$layout = {\n _box: new HitBox(),\n _hidable: false,\n _visible: true,\n _set: i,\n _idx: j\n };\n }\n }\n\n // TODO New `z` option: labels with a higher z-index are drawn\n // of top of the ones with a lower index. Lowest z-index labels\n // are also discarded first when hiding overlapping labels.\n labels.sort(function(a, b) {\n var sa = a.$layout;\n var sb = b.$layout;\n\n return sa._idx === sb._idx\n ? sb._set - sa._set\n : sb._idx - sa._idx;\n });\n\n this.update(labels);\n\n return labels;\n },\n\n update: function(labels) {\n var dirty = false;\n var i, ilen, label, model, state;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n model = label.model();\n state = label.$layout;\n state._hidable = model && model.display === 'auto';\n state._visible = label.visible();\n dirty |= state._hidable;\n }\n\n if (dirty) {\n compute(labels);\n }\n },\n\n lookup: function(labels, point) {\n var i, state;\n\n // IMPORTANT Iterate in the reverse order since items at the end of\n // the list have an higher z-index, thus should be picked first.\n\n for (i = labels.length - 1; i >= 0; --i) {\n state = labels[i].$layout;\n\n if (state && state._visible && state._box.contains(point)) {\n return labels[i];\n }\n }\n\n return null;\n },\n\n draw: function(chart, labels) {\n var i, ilen, label, state, geometry, center;\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n state = label.$layout;\n\n if (state._visible) {\n geometry = label.geometry();\n center = coordinates(label._el, label.model(), geometry);\n state._box.update(center, geometry, label.rotation());\n label.draw(chart, center);\n }\n }\n }\n};\n\nvar formatter = function(value) {\n if (helpers.isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (helpers.isObject(value)) {\n if (!helpers.isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!helpers.isNullOrUndef(value.r)) {\n label = value.r;\n } else {\n label = '';\n keys = Object.keys(value);\n for (k = 0, klen = keys.length; k < klen; ++k) {\n label += (k !== 0 ? ', ' : '') + keys[k] + ': ' + value[keys[k]];\n }\n }\n }\n\n return '' + label;\n};\n\n/**\n * IMPORTANT: make sure to also update tests and TypeScript definition\n * files (`/test/specs/defaults.spec.js` and `/types/options.d.ts`)\n */\n\nvar defaults = {\n align: 'center',\n anchor: 'center',\n backgroundColor: null,\n borderColor: null,\n borderRadius: 0,\n borderWidth: 0,\n clamp: false,\n clip: false,\n color: undefined,\n display: true,\n font: {\n family: undefined,\n lineHeight: 1.2,\n size: undefined,\n style: undefined,\n weight: null\n },\n formatter: formatter,\n labels: undefined,\n listeners: {},\n offset: 4,\n opacity: 1,\n padding: {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4\n },\n rotation: 0,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n textShadowBlur: 0,\n textShadowColor: undefined\n};\n\n/**\n * @see https://github.com/chartjs/Chart.js/issues/4176\n */\n\nvar EXPANDO_KEY = '$datalabels';\nvar DEFAULT_KEY = '$default';\n\nfunction configure(dataset, options) {\n var override = dataset.datalabels;\n var listeners = {};\n var configs = [];\n var labels, keys;\n\n if (override === false) {\n return null;\n }\n if (override === true) {\n override = {};\n }\n\n options = helpers.merge({}, [options, override]);\n labels = options.labels || {};\n keys = Object.keys(labels);\n delete options.labels;\n\n if (keys.length) {\n keys.forEach(function(key) {\n if (labels[key]) {\n configs.push(helpers.merge({}, [\n options,\n labels[key],\n {_key: key}\n ]));\n }\n });\n } else {\n // Default label if no \"named\" label defined.\n configs.push(options);\n }\n\n // listeners: {: {: }}\n listeners = configs.reduce(function(target, config) {\n helpers.each(config.listeners || {}, function(fn, event) {\n target[event] = target[event] || {};\n target[event][config._key || DEFAULT_KEY] = fn;\n });\n\n delete config.listeners;\n return target;\n }, {});\n\n return {\n labels: configs,\n listeners: listeners\n };\n}\n\nfunction dispatchEvent(chart, listeners, label) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback = listeners[groups._set][groups._key];\n if (!callback) {\n return;\n }\n\n if (helpers.callback(callback, [context]) === true) {\n // Users are allowed to tweak the given context by injecting values that can be\n // used in scriptable options to display labels differently based on the current\n // event (e.g. highlight an hovered label). That's why we update the label with\n // the output context and schedule a new chart render by setting it dirty.\n chart[EXPANDO_KEY]._dirty = true;\n label.update(context);\n }\n}\n\nfunction dispatchMoveEvents(chart, listeners, previous, label) {\n var enter, leave;\n\n if (!previous && !label) {\n return;\n }\n\n if (!previous) {\n enter = true;\n } else if (!label) {\n leave = true;\n } else if (previous !== label) {\n leave = enter = true;\n }\n\n if (leave) {\n dispatchEvent(chart, listeners.leave, previous);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label);\n }\n}\n\nfunction handleMoveEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var listeners = expando._listeners;\n var previous, label;\n\n if (!listeners.enter && !listeners.leave) {\n return;\n }\n\n if (event.type === 'mousemove') {\n label = layout.lookup(expando._labels, event);\n } else if (event.type !== 'mouseout') {\n return;\n }\n\n previous = expando._hovered;\n expando._hovered = label;\n dispatchMoveEvents(chart, listeners, previous, label);\n}\n\nfunction handleClickEvents(chart, event) {\n var expando = chart[EXPANDO_KEY];\n var handlers = expando._listeners.click;\n var label = handlers && layout.lookup(expando._labels, event);\n if (label) {\n dispatchEvent(chart, handlers, label);\n }\n}\n\nvar plugin = {\n id: 'datalabels',\n\n defaults: defaults,\n\n beforeInit: function(chart) {\n chart[EXPANDO_KEY] = {\n _actives: []\n };\n },\n\n beforeUpdate: function(chart) {\n var expando = chart[EXPANDO_KEY];\n expando._listened = false;\n expando._listeners = {}; // {: {: {: }}}\n expando._datasets = []; // per dataset labels: [Label[]]\n expando._labels = []; // layouted labels: Label[]\n },\n\n afterDatasetUpdate: function(chart, args, options) {\n var datasetIndex = args.index;\n var expando = chart[EXPANDO_KEY];\n var labels = expando._datasets[datasetIndex] = [];\n var visible = chart.isDatasetVisible(datasetIndex);\n var dataset = chart.data.datasets[datasetIndex];\n var config = configure(dataset, options);\n var elements = args.meta.data || [];\n var ctx = chart.ctx;\n var i, j, ilen, jlen, cfg, key, el, label;\n\n ctx.save();\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n el = elements[i];\n el[EXPANDO_KEY] = [];\n\n if (visible && el && chart.getDataVisibility(i) && !el.skip) {\n for (j = 0, jlen = config.labels.length; j < jlen; ++j) {\n cfg = config.labels[j];\n key = cfg._key;\n\n label = new Label(cfg, ctx, el, i);\n label.$groups = {\n _set: datasetIndex,\n _key: key || DEFAULT_KEY\n };\n label.$context = {\n active: false,\n chart: chart,\n dataIndex: i,\n dataset: dataset,\n datasetIndex: datasetIndex\n };\n\n label.update(label.$context);\n el[EXPANDO_KEY].push(label);\n labels.push(label);\n }\n }\n }\n\n ctx.restore();\n\n // Store listeners at the chart level and per event type to optimize\n // cases where no listeners are registered for a specific event.\n helpers.merge(expando._listeners, config.listeners, {\n merger: function(event, target, source) {\n target[event] = target[event] || {};\n target[event][args.index] = source[event];\n expando._listened = true;\n }\n });\n },\n\n afterUpdate: function(chart, options) {\n chart[EXPANDO_KEY]._labels = layout.prepare(\n chart[EXPANDO_KEY]._datasets,\n options);\n },\n\n // Draw labels on top of all dataset elements\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/29\n // https://github.com/chartjs/chartjs-plugin-datalabels/issues/32\n afterDatasetsDraw: function(chart) {\n layout.draw(chart, chart[EXPANDO_KEY]._labels);\n },\n\n beforeEvent: function(chart, args) {\n // If there is no listener registered for this chart, `listened` will be false,\n // meaning we can immediately ignore the incoming event and avoid useless extra\n // computation for users who don't implement label interactions.\n if (chart[EXPANDO_KEY]._listened) {\n var event = args.event;\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n handleMoveEvents(chart, event);\n break;\n case 'click':\n handleClickEvents(chart, event);\n break;\n }\n }\n },\n\n afterEvent: function(chart) {\n var expando = chart[EXPANDO_KEY];\n var previous = expando._actives;\n var actives = expando._actives = chart.getActiveElements();\n var updates = utils.arrayDiff(previous, actives);\n var i, ilen, j, jlen, update, label, labels;\n\n for (i = 0, ilen = updates.length; i < ilen; ++i) {\n update = updates[i];\n if (update[1]) {\n labels = update[0].element[EXPANDO_KEY] || [];\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n label = labels[j];\n label.$context.active = (update[1] === 1);\n label.update(label.$context);\n }\n }\n }\n\n if (expando._dirty || updates.length) {\n layout.update(expando._labels);\n chart.render();\n }\n\n delete expando._dirty;\n }\n};\n\nreturn plugin;\n\n})));\n"],"sourceRoot":""}