{"version":3,"sources":["webpack:///./node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js","webpack:///./src/assets/js/pie-chart.ts","webpack:///./src/components/InfoModal.vue","webpack:///./src/components/InfoModal.vue?ffc8","webpack:///./src/components/InfoModal.vue?e712","webpack:///./src/components/InfoModal.vue?35ae"],"names":["devicePixelRatio","window","screen","deviceXDPI","logicalXDPI","utils","toTextLines","inputs","input","lines","concat","length","pop","unshift","apply","split","Array","isArray","push","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","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","this","_config","_index","_model","_rects","_ctx","_el","prototype","_modelize","display","chartArea","clip","offset","opacity","positioner","rotation","update","label","rects","dataset","data","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","proxy","Proxy","get","p","getProps","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","Object","defaults","family","style","weight","listeners","EXPANDO_KEY","DEFAULT_KEY","configure","override","datalabels","configs","forEach","key","_key","reduce","target","fn","event","dispatchEvent","callback$1","$context","groups","$groups","_dirty","dispatchMoveEvents","previous","enter","leave","handleMoveEvents","expando","_listeners","type","_labels","_hovered","handleClickEvents","handlers","click","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","PieChartColors","drawPieChart","pielabel","piedata","chartDiv","document","getElementById","datas","hoverOffset","plugins","ChartDataLabels","responsive","legend","String","fromCharCode","myChart","Chart","console","log","_vm","_c","_self","_setupProxy","attrs","givenTitle","scopedSlots","_u","staticClass","on","$event","$bvModal","hide","domProps","_s","givenDescription","staticRenderFns","ModalPopupConfirm","Vue","onClicked","__decorate","Prop","default","Component","name","component"],"mappings":"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","file":"js/COVID19Impact~breakDownbyStudentGroup~schoolSpending~teacherWorkforce.1c64bf8a.js","sourcesContent":["/*!\n * chartjs-plugin-datalabels v2.2.0\n * https://chartjs-plugin-datalabels.netlify.app\n * (c) 2017-2022 chartjs-plugin-datalabels contributors\n * Released under the MIT license\n */\nimport { isNullOrUndef, merge, toFont, resolve, toPadding, valueOrDefault, callback, isObject, each } from 'chart.js/helpers';\nimport { defaults as defaults$1, ArcElement, PointElement, BarElement } from 'chart.js';\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 (!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 + (el.width || 0),\n y1: el.y + (el.height || 0),\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 ArcElement) {\n return positioners.arc;\n }\n if (el instanceof PointElement) {\n return positioners.point;\n }\n if (el instanceof 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\nmerge(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 = toFont(resolve([config.font, {}], context, index));\n var color = resolve([config.color, defaults$1.color], context, index);\n\n return {\n align: resolve([config.align, 'center'], context, index),\n anchor: resolve([config.anchor, 'center'], context, index),\n area: context.chart.chartArea,\n backgroundColor: resolve([config.backgroundColor, null], context, index),\n borderColor: resolve([config.borderColor, null], context, index),\n borderRadius: resolve([config.borderRadius, 0], context, index),\n borderWidth: resolve([config.borderWidth, 0], context, index),\n clamp: resolve([config.clamp, false], context, index),\n clip: resolve([config.clip, false], context, index),\n color: color,\n display: display,\n font: font,\n lines: lines,\n offset: resolve([config.offset, 4], context, index),\n opacity: resolve([config.opacity, 1], context, index),\n origin: getScaleOrigin(me._el, context),\n padding: toPadding(resolve([config.padding, 4], context, index)),\n positioner: getPositioner(me._el),\n rotation: resolve([config.rotation, 0], context, index) * (Math.PI / 180),\n size: utils.textSize(me._ctx, lines, font),\n textAlign: resolve([config.textAlign, 'start'], context, index),\n textShadowBlur: resolve([config.textShadowBlur, 0], context, index),\n textShadowColor: resolve([config.textShadowColor, color], context, index),\n textStrokeColor: resolve([config.textStrokeColor, color], context, index),\n textStrokeWidth: 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 = resolve([config.display, true], context, index);\n\n if (display) {\n value = context.dataset.data[index];\n label = valueOrDefault(callback(config.formatter, [value, context]), value);\n lines = 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\nmerge(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, proxy;\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 // Chart.js 3 removed el._model in favor of getProps(), making harder to\n // abstract reading values in positioners. Also, using string arrays to\n // read values (i.e. var {a,b,c} = el.getProps([\"a\",\"b\",\"c\"])) would make\n // positioners inefficient in the normal case (i.e. not the final values)\n // and the code a bit ugly, so let's use a Proxy instead.\n proxy = new Proxy(label._el, {get: (el, p) => el.getProps([p], true)[p]});\n\n geometry = label.geometry();\n center = coordinates(proxy, 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: label._index\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 (isNullOrUndef(value)) {\n return null;\n }\n\n var label = value;\n var keys, klen, k;\n if (isObject(value)) {\n if (!isNullOrUndef(value.label)) {\n label = value.label;\n } else if (!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 = 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(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 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, event) {\n if (!listeners) {\n return;\n }\n\n var context = label.$context;\n var groups = label.$groups;\n var callback$1;\n\n if (!listeners[groups._set]) {\n return;\n }\n\n callback$1 = listeners[groups._set][groups._key];\n if (!callback$1) {\n return;\n }\n\n if (callback(callback$1, [context, event]) === 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, event) {\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, event);\n }\n if (enter) {\n dispatchEvent(chart, listeners.enter, label, event);\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, event);\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, event);\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 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) {\n chart[EXPANDO_KEY]._labels = layout.prepare(chart[EXPANDO_KEY]._datasets);\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\nexport { plugin as default };\n","import Chart, { ChartConfiguration, ChartItem } from \"chart.js/auto\";\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\r\nexport const PieChartColors = [\r\n \"#606aaf\",\r\n \"#CCCCCC\",\r\n \"#BDBFDA\",\r\n \"#9ab185\",\r\n \"#ECD3AC\",\r\n \"#BED0DA\",\r\n \"#BCBFDA\"\r\n];\r\nexport const drawPieChart = (\r\n id: string,\r\n pielabel: string[],\r\n piedata: number[]\r\n) => {\r\n const chartDiv = document.getElementById(id);\r\n\r\n const datas = {\r\n labels: pielabel,\r\n datasets: [\r\n {\r\n label: \"\",\r\n data: piedata,\r\n backgroundColor: PieChartColors,\r\n hoverOffset: 4,\r\n },\r\n ],\r\n };\r\n\r\n const config = {\r\n type: \"pie\",\r\n data: datas,\r\n plugins: [ChartDataLabels],\r\n options: {\r\n responsive: true,\r\n plugins: {\r\n legend: {\r\n display: false,\r\n },\r\n datalabels: {\r\n display: true,\r\n align: 'center',\r\n borderRadius: 3,\r\n color: '#ffffff',\r\n font: {\r\n size: 18,\r\n color: '#ffffff'\r\n },\r\n formatter: function(value: any, context: any) {\r\n if(value>0)\r\n return String.fromCharCode(context.dataIndex + 1 + 64);\r\n else\r\n return \"\";\r\n }\r\n },\r\n }\r\n }\r\n };\r\n\r\n if (chartDiv) {\r\n const myChart = new Chart(\r\n chartDiv as ChartItem,\r\n config as ChartConfiguration\r\n );\r\n console.log('pie chart ', myChart);\r\n \r\n }\r\n};\r\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('b-modal',{attrs:{\"id\":\"informationModal\",\"centered\":\"\",\"title\":_vm.givenTitle,\"hide-header-close\":\"\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('span',{staticClass:\"fas fa-times btn bg-doe-dark-blue-darkest text-white fa-fw\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.$bvModal.hide('informationModal')}}})]},proxy:true}])},[_c('p',{staticClass:\"my-1\",domProps:{\"innerHTML\":_vm._s(_vm.givenDescription)}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\r\n@Component({\r\n name: \"InfoModal\",\r\n})\r\nexport default class ModalPopupConfirm extends Vue {\r\n @Prop({ default: \"\" }) givenTitle!: string;\r\n @Prop({ default: \"\" }) givenDescription!: string;\r\n\r\n onClicked() {\r\n this.$bvModal.hide(\"informationModal\");\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoModal.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoModal.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./InfoModal.vue?vue&type=template&id=bb112358\"\nimport script from \"./InfoModal.vue?vue&type=script&lang=ts\"\nexport * from \"./InfoModal.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}