{"version":3,"sources":[""],"sourcesContent":["/**\n * @license Highcharts JS v11.2.0 (2023-10-30)\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function (factory) {\n if (typeof module === 'object' && module.exports) {\n factory['default'] = factory;\n module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n define('highcharts/modules/series-label', ['highcharts'], function (Highcharts) {\n factory(Highcharts);\n factory.Highcharts = Highcharts;\n return factory;\n });\n } else {\n factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);\n }\n}(function (Highcharts) {\n 'use strict';\n var _modules = Highcharts ? Highcharts._modules : {};\n function _registerModule(obj, path, args, fn) {\n if (!obj.hasOwnProperty(path)) {\n obj[path] = fn.apply(null, args);\n\n if (typeof CustomEvent === 'function') {\n window.dispatchEvent(new CustomEvent(\n 'HighchartsModuleLoaded',\n { detail: { path: path, module: obj[path] } }\n ));\n }\n }\n }\n _registerModule(_modules, 'Extensions/SeriesLabel/SeriesLabelDefaults.js', [], function () {\n /* *\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n /**\n * Series labels are placed as close to the series as possible in a\n * natural way, seeking to avoid other series. The goal of this\n * feature is to make the chart more easily readable, like if a\n * human designer placed the labels in the optimal position.\n *\n * The series labels currently work with series types having a\n * `graph` or an `area`.\n *\n * @sample highcharts/series-label/line-chart\n * Line chart\n * @sample highcharts/demo/streamgraph\n * Stream graph\n * @sample highcharts/series-label/stock-chart\n * Stock chart\n *\n * @declare Highcharts.SeriesLabelOptionsObject\n * @since 6.0.0\n * @product highcharts highstock gantt\n * @requires modules/series-label\n * @optionparent plotOptions.series.label\n */\n const SeriesLabelDefaults = {\n /**\n * Enable the series label per series.\n */\n enabled: true,\n /**\n * Allow labels to be placed distant to the graph if necessary,\n * and draw a connector line to the graph. Setting this option\n * to true may decrease the performance significantly, since the\n * algorithm with systematically search for open spaces in the\n * whole plot area. Visually, it may also result in a more\n * cluttered chart, though more of the series will be labeled.\n */\n connectorAllowed: false,\n /**\n * If the label is closer than this to a neighbour graph, draw a\n * connector.\n */\n connectorNeighbourDistance: 24,\n /**\n * A format string for the label, with support for a subset of\n * HTML. Variables are enclosed by curly brackets. Available\n * variables are `name`, `options.xxx`, `color` and other\n * members from the `series` object. Use this option also to set\n * a static text for the label.\n *\n * @type string\n * @since 8.1.0\n */\n format: void 0,\n /**\n * Callback function to format each of the series' labels. The\n * `this` keyword refers to the series object. By default the\n * `formatter` is undefined and the `series.name` is rendered.\n *\n * @type {Highcharts.FormatterCallbackFunction}\n * @since 8.1.0\n */\n formatter: void 0,\n /**\n * For area-like series, allow the font size to vary so that\n * small areas get a smaller font size. The default applies this\n * effect to area-like series but not line-like series.\n *\n * @type {number|null}\n */\n minFontSize: null,\n /**\n * For area-like series, allow the font size to vary so that\n * small areas get a smaller font size. The default applies this\n * effect to area-like series but not line-like series.\n *\n * @type {number|null}\n */\n maxFontSize: null,\n /**\n * Draw the label on the area of an area series. By default it\n * is drawn on the area. Set it to `false` to draw it next to\n * the graph instead.\n *\n * @type {boolean|null}\n */\n onArea: null,\n /**\n * Styles for the series label. The color defaults to the series\n * color, or a contrast color if `onArea`.\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n fontSize: '0.8em',\n /** @internal */\n fontWeight: 'bold'\n },\n /**\n * Whether to use HTML to render the series label.\n */\n useHTML: false,\n /**\n * An array of boxes to avoid when laying out the labels. Each\n * item has a `left`, `right`, `top` and `bottom` property.\n *\n * @type {Array}\n */\n boxesToAvoid: []\n };\n /* *\n *\n * Default Export\n *\n * */\n\n return SeriesLabelDefaults;\n });\n _registerModule(_modules, 'Extensions/SeriesLabel/SeriesLabelUtilities.js', [], function () {\n /* *\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Counter-clockwise, part of the fast line intersection logic.\n *\n * @private\n * @function ccw\n */\n function ccw(x1, y1, x2, y2, x3, y3) {\n const cw = ((y3 - y1) * (x2 - x1)) - ((y2 - y1) * (x3 - x1));\n return cw > 0 ? true : !(cw < 0);\n }\n /**\n * Detect if two lines intersect.\n *\n * @private\n * @function intersectLine\n */\n function intersectLine(x1, y1, x2, y2, x3, y3, x4, y4) {\n return ccw(x1, y1, x3, y3, x4, y4) !== ccw(x2, y2, x3, y3, x4, y4) &&\n ccw(x1, y1, x2, y2, x3, y3) !== ccw(x1, y1, x2, y2, x4, y4);\n }\n /**\n * Detect if a box intersects with a line.\n *\n * @private\n * @function boxIntersectLine\n */\n function boxIntersectLine(x, y, w, h, x1, y1, x2, y2) {\n return (intersectLine(x, y, x + w, y, x1, y1, x2, y2) || // top of label\n intersectLine(x + w, y, x + w, y + h, x1, y1, x2, y2) || // right\n intersectLine(x, y + h, x + w, y + h, x1, y1, x2, y2) || // bottom\n intersectLine(x, y, x, y + h, x1, y1, x2, y2) // left of label\n );\n }\n /**\n * @private\n */\n function intersectRect(r1, r2) {\n return !(r2.left > r1.right ||\n r2.right < r1.left ||\n r2.top > r1.bottom ||\n r2.bottom < r1.top);\n }\n /* *\n *\n * Default Export\n *\n * */\n const SeriesLabelUtilities = {\n boxIntersectLine,\n intersectRect\n };\n\n return SeriesLabelUtilities;\n });\n _registerModule(_modules, 'Extensions/SeriesLabel/SeriesLabel.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Templating.js'], _modules['Core/Defaults.js'], _modules['Extensions/SeriesLabel/SeriesLabelDefaults.js'], _modules['Extensions/SeriesLabel/SeriesLabelUtilities.js'], _modules['Core/Utilities.js']], function (A, Chart, T, D, SeriesLabelDefaults, SLU, U) {\n /* *\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n /*\n * Highcharts module to place labels next to a series in a natural position.\n *\n * TODO:\n * - add column support (box collision detection, boxesToAvoid logic)\n * - add more options (connector, format, formatter)\n *\n * https://jsfiddle.net/highcharts/L2u9rpwr/\n * https://jsfiddle.net/highcharts/y5A37/\n * https://jsfiddle.net/highcharts/264Nm/\n * https://jsfiddle.net/highcharts/y5A37/\n */\n const { animObject } = A;\n const { format } = T;\n const { setOptions } = D;\n const { boxIntersectLine, intersectRect } = SLU;\n const { addEvent, extend, fireEvent, isNumber, pick, syncTimeout } = U;\n /* *\n *\n * Constants\n *\n * */\n const composedMembers = [];\n const labelDistance = 3;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Check whether a proposed label position is clear of other elements.\n * @private\n */\n function checkClearPoint(series, x, y, bBox, checkDistance) {\n const chart = series.chart, seriesLabelOptions = series.options.label || {}, onArea = pick(seriesLabelOptions.onArea, !!series.area), findDistanceToOthers = (onArea || seriesLabelOptions.connectorAllowed), leastDistance = 16, boxesToAvoid = chart.boxesToAvoid;\n let distToOthersSquared = Number.MAX_VALUE, // distance to other graphs\n distToPointSquared = Number.MAX_VALUE, dist, connectorPoint, withinRange, xDist, yDist, i, j;\n /**\n * Get the weight in order to determine the ideal position. Larger distance\n * to other series gives more weight. Smaller distance to the actual point\n * (connector points only) gives more weight.\n * @private\n */\n function getWeight(distToOthersSquared, distToPointSquared) {\n return distToOthersSquared - distToPointSquared;\n }\n // First check for collision with existing labels\n for (i = 0; boxesToAvoid && i < boxesToAvoid.length; i += 1) {\n if (intersectRect(boxesToAvoid[i], {\n left: x,\n right: x + bBox.width,\n top: y,\n bottom: y + bBox.height\n })) {\n return false;\n }\n }\n // For each position, check if the lines around the label intersect with any\n // of the graphs.\n for (i = 0; i < chart.series.length; i += 1) {\n const serie = chart.series[i], points = serie.interpolatedPoints && [...serie.interpolatedPoints];\n if (serie.visible && points) {\n // Avoid the sides of the plot area\n const stepY = chart.plotHeight / 10;\n for (let chartY = chart.plotTop; chartY <= chart.plotTop + chart.plotHeight; chartY += stepY) {\n points.unshift({\n chartX: chart.plotLeft,\n chartY\n });\n points.push({\n chartX: chart.plotLeft + chart.plotWidth,\n chartY\n });\n }\n for (j = 1; j < points.length; j += 1) {\n if (\n // To avoid processing, only check intersection if the X\n // values are close to the box.\n points[j].chartX >= x - leastDistance &&\n points[j - 1].chartX <= x + bBox.width +\n leastDistance\n /* @todo condition above is not the same as below\n (\n points[j].chartX >=\n (x - leastDistance)\n ) && (\n points[j - 1].chartX <=\n (x + bBox.width + leastDistance)\n ) */\n ) {\n // If any of the box sides intersect with the line, return.\n if (boxIntersectLine(x, y, bBox.width, bBox.height, points[j - 1].chartX, points[j - 1].chartY, points[j].chartX, points[j].chartY)) {\n return false;\n }\n // But if it is too far away (a padded box doesn't\n // intersect), also return.\n if (series === serie && !withinRange && checkDistance) {\n withinRange = boxIntersectLine(x - leastDistance, y - leastDistance, bBox.width + 2 * leastDistance, bBox.height + 2 * leastDistance, points[j - 1].chartX, points[j - 1].chartY, points[j].chartX, points[j].chartY);\n }\n }\n // Find the squared distance from the center of the label. On\n // area series, avoid its own graph.\n if ((findDistanceToOthers || withinRange) &&\n (series !== serie || onArea)) {\n xDist = x + bBox.width / 2 - points[j].chartX;\n yDist = y + bBox.height / 2 - points[j].chartY;\n distToOthersSquared = Math.min(distToOthersSquared, xDist * xDist + yDist * yDist);\n }\n }\n // Do we need a connector?\n if (!onArea &&\n findDistanceToOthers &&\n series === serie &&\n ((checkDistance && !withinRange) ||\n distToOthersSquared < Math.pow(seriesLabelOptions.connectorNeighbourDistance || 1, 2))) {\n for (j = 1; j < points.length; j += 1) {\n dist = Math.min((Math.pow(x + bBox.width / 2 - points[j].chartX, 2) +\n Math.pow(y + bBox.height / 2 - points[j].chartY, 2)), (Math.pow(x - points[j].chartX, 2) +\n Math.pow(y - points[j].chartY, 2)), (Math.pow(x + bBox.width - points[j].chartX, 2) +\n Math.pow(y - points[j].chartY, 2)), (Math.pow(x + bBox.width - points[j].chartX, 2) +\n Math.pow(y + bBox.height - points[j].chartY, 2)), (Math.pow(x - points[j].chartX, 2) +\n Math.pow(y + bBox.height - points[j].chartY, 2)));\n if (dist < distToPointSquared) {\n distToPointSquared = dist;\n connectorPoint = points[j];\n }\n }\n withinRange = true;\n }\n }\n }\n return !checkDistance || withinRange ? {\n x,\n y,\n weight: getWeight(distToOthersSquared, connectorPoint ? distToPointSquared : 0),\n connectorPoint\n } : false;\n }\n /**\n * @private\n */\n function compose(ChartClass, SVGRendererClass) {\n if (U.pushUnique(composedMembers, ChartClass)) {\n // Leave both events, we handle animation differently (#9815)\n addEvent(Chart, 'load', onChartRedraw);\n addEvent(Chart, 'redraw', onChartRedraw);\n }\n if (U.pushUnique(composedMembers, SVGRendererClass)) {\n SVGRendererClass.prototype.symbols.connector = symbolConnector;\n }\n if (U.pushUnique(composedMembers, setOptions)) {\n setOptions({ plotOptions: { series: { label: SeriesLabelDefaults } } });\n }\n }\n /**\n * The main initialize method that runs on chart level after initialization and\n * redraw. It runs in a timeout to prevent locking, and loops over all series,\n * taking all series and labels into account when placing the labels.\n *\n * @private\n * @function Highcharts.Chart#drawSeriesLabels\n */\n function drawSeriesLabels(chart) {\n // console.time('drawSeriesLabels');\n chart.boxesToAvoid = [];\n const labelSeries = chart.labelSeries || [], boxesToAvoid = chart.boxesToAvoid;\n // Avoid data labels\n chart.series.forEach((s) => (s.points || []).forEach((p) => (p.dataLabels || []).forEach((label) => {\n const { width, height } = label.getBBox(), left = (label.translateX || 0) + (s.xAxis ? s.xAxis.pos : s.chart.plotLeft), top = (label.translateY || 0) + (s.yAxis ? s.yAxis.pos : s.chart.plotTop);\n boxesToAvoid.push({\n left,\n top,\n right: left + width,\n bottom: top + height\n });\n })));\n // Build the interpolated points\n labelSeries.forEach(function (series) {\n const seriesLabelOptions = series.options.label || {};\n series.interpolatedPoints = getPointsOnGraph(series);\n boxesToAvoid.push(...(seriesLabelOptions.boxesToAvoid || []));\n });\n chart.series.forEach(function (series) {\n const labelOptions = series.options.label;\n if (!labelOptions || (!series.xAxis && !series.yAxis)) {\n return;\n }\n const colorClass = ('highcharts-color-' + pick(series.colorIndex, 'none')), isNew = !series.labelBySeries, minFontSize = labelOptions.minFontSize, maxFontSize = labelOptions.maxFontSize, inverted = chart.inverted, paneLeft = (inverted ? series.yAxis.pos : series.xAxis.pos), paneTop = (inverted ? series.xAxis.pos : series.yAxis.pos), paneWidth = chart.inverted ? series.yAxis.len : series.xAxis.len, paneHeight = chart.inverted ? series.xAxis.len : series.yAxis.len, points = series.interpolatedPoints, onArea = pick(labelOptions.onArea, !!series.area), results = [], xData = series.xData || [];\n let bBox, x, y, clearPoint, i, best, label = series.labelBySeries, dataExtremes, areaMin, areaMax;\n // Stay within the area data bounds (#10038)\n if (onArea && !inverted) {\n dataExtremes = [\n series.xAxis.toPixels(xData[0]),\n series.xAxis.toPixels(xData[xData.length - 1])\n ];\n areaMin = Math.min.apply(Math, dataExtremes);\n areaMax = Math.max.apply(Math, dataExtremes);\n }\n /**\n * @private\n */\n function insidePane(x, y, bBox) {\n const leftBound = Math.max(paneLeft, pick(areaMin, -Infinity)), rightBound = Math.min(paneLeft + paneWidth, pick(areaMax, Infinity));\n return (x > leftBound &&\n x <= rightBound - bBox.width &&\n y >= paneTop &&\n y <= paneTop + paneHeight - bBox.height);\n }\n /**\n * @private\n */\n function destroyLabel() {\n if (label) {\n series.labelBySeries = label.destroy();\n }\n }\n if (series.visible && !series.boosted && points) {\n if (!label) {\n let labelText = series.name;\n if (typeof labelOptions.format === 'string') {\n labelText = format(labelOptions.format, series, chart);\n }\n else if (labelOptions.formatter) {\n labelText = labelOptions.formatter.call(series);\n }\n series.labelBySeries = label = chart.renderer\n .label(labelText, 0, 0, 'connector', 0, 0, labelOptions.useHTML)\n .addClass('highcharts-series-label ' +\n 'highcharts-series-label-' + series.index + ' ' +\n (series.options.className || '') + ' ' +\n colorClass);\n if (!chart.renderer.styledMode) {\n const color = typeof series.color === 'string' ?\n series.color : \"#666666\" /* Palette.neutralColor60 */;\n label.css(extend({\n color: onArea ?\n chart.renderer.getContrast(color) :\n color\n }, labelOptions.style || {}));\n label.attr({\n opacity: chart.renderer.forExport ? 1 : 0,\n stroke: series.color,\n 'stroke-width': 1\n });\n }\n // Adapt label sizes to the sum of the data\n if (minFontSize && maxFontSize) {\n label.css({\n fontSize: labelFontSize(series, minFontSize, maxFontSize)\n });\n }\n label\n .attr({\n padding: 0,\n zIndex: 3\n })\n .add();\n }\n bBox = label.getBBox();\n bBox.width = Math.round(bBox.width);\n // Ideal positions are centered above or below a point on right side\n // of chart\n for (i = points.length - 1; i > 0; i -= 1) {\n if (onArea) {\n // Centered\n x = points[i].chartX - bBox.width / 2;\n y = (points[i].chartCenterY || 0) - bBox.height / 2;\n if (insidePane(x, y, bBox)) {\n best = checkClearPoint(series, x, y, bBox);\n }\n if (best) {\n results.push(best);\n }\n }\n else {\n // Right - up\n x = points[i].chartX + labelDistance;\n y = points[i].chartY - bBox.height - labelDistance;\n if (insidePane(x, y, bBox)) {\n best = checkClearPoint(series, x, y, bBox, true);\n }\n if (best) {\n results.push(best);\n }\n // Right - down\n x = points[i].chartX + labelDistance;\n y = points[i].chartY + labelDistance;\n if (insidePane(x, y, bBox)) {\n best = checkClearPoint(series, x, y, bBox, true);\n }\n if (best) {\n results.push(best);\n }\n // Left - down\n x = points[i].chartX - bBox.width - labelDistance;\n y = points[i].chartY + labelDistance;\n if (insidePane(x, y, bBox)) {\n best = checkClearPoint(series, x, y, bBox, true);\n }\n if (best) {\n results.push(best);\n }\n // Left - up\n x = points[i].chartX - bBox.width - labelDistance;\n y = points[i].chartY - bBox.height - labelDistance;\n if (insidePane(x, y, bBox)) {\n best = checkClearPoint(series, x, y, bBox, true);\n }\n if (best) {\n results.push(best);\n }\n }\n }\n // Brute force, try all positions on the chart in a 16x16 grid\n if (labelOptions.connectorAllowed && !results.length && !onArea) {\n for (x = paneLeft + paneWidth - bBox.width; x >= paneLeft; x -= 16) {\n for (y = paneTop; y < paneTop + paneHeight - bBox.height; y += 16) {\n clearPoint = checkClearPoint(series, x, y, bBox, true);\n if (clearPoint) {\n results.push(clearPoint);\n }\n }\n }\n }\n if (results.length) {\n results.sort((a, b) => b.weight - a.weight);\n best = results[0];\n (chart.boxesToAvoid || []).push({\n left: best.x,\n right: best.x + bBox.width,\n top: best.y,\n bottom: best.y + bBox.height\n });\n // Move it if needed\n const dist = Math.sqrt(Math.pow(Math.abs(best.x - (label.x || 0)), 2) +\n Math.pow(Math.abs(best.y - (label.y || 0)), 2));\n if (dist && series.labelBySeries) {\n // Move fast and fade in - pure animation movement is\n // distractive...\n let attr = {\n opacity: chart.renderer.forExport ? 1 : 0,\n x: best.x,\n y: best.y\n }, anim = {\n opacity: 1\n };\n // ... unless we're just moving a short distance\n if (dist <= 10) {\n anim = {\n x: attr.x,\n y: attr.y\n };\n attr = {};\n }\n // Default initial animation to a fraction of the series\n // animation (#9396)\n let animationOptions;\n if (isNew) {\n animationOptions = animObject(series.options.animation);\n animationOptions.duration *= 0.2;\n }\n series.labelBySeries\n .attr(extend(attr, {\n anchorX: best.connectorPoint &&\n (best.connectorPoint.plotX || 0) + paneLeft,\n anchorY: best.connectorPoint &&\n (best.connectorPoint.plotY || 0) + paneTop\n }))\n .animate(anim, animationOptions);\n // Record closest point to stick to for sync redraw\n series.options.kdNow = true;\n series.buildKDTree();\n const closest = series.searchPoint({\n chartX: best.x,\n chartY: best.y\n }, true);\n if (closest) {\n label.closest = [\n closest,\n best.x - (closest.plotX || 0),\n best.y - (closest.plotY || 0)\n ];\n }\n }\n }\n else {\n destroyLabel();\n }\n }\n else {\n destroyLabel();\n }\n });\n fireEvent(chart, 'afterDrawSeriesLabels');\n // console.timeEnd('drawSeriesLabels');\n }\n /**\n * Points to avoid. In addition to actual data points, the label should avoid\n * interpolated positions.\n *\n * @private\n * @function Highcharts.Series#getPointsOnGraph\n */\n function getPointsOnGraph(series) {\n if (!series.xAxis && !series.yAxis) {\n return;\n }\n const distance = 16, points = series.points, interpolated = [], graph = series.graph || series.area, node = graph && graph.element, inverted = series.chart.inverted, xAxis = series.xAxis, yAxis = series.yAxis, paneLeft = inverted ? yAxis.pos : xAxis.pos, paneTop = inverted ? xAxis.pos : yAxis.pos, seriesLabelOptions = series.options.label || {}, onArea = pick(seriesLabelOptions.onArea, !!series.area), translatedThreshold = yAxis.getThreshold(series.options.threshold), grid = {};\n let i, deltaX, deltaY, delta, len, n, j;\n /**\n * Push the point to the interpolated points, but only if that position in\n * the grid has not been occupied. As a performance optimization, we divide\n * the plot area into a grid and only add one point per series (#9815).\n * @private\n */\n function pushDiscrete(point) {\n const cellSize = 8, key = Math.round((point.plotX || 0) / cellSize) + ',' +\n Math.round((point.plotY || 0) / cellSize);\n if (!grid[key]) {\n grid[key] = 1;\n interpolated.push(point);\n }\n }\n // For splines, get the point at length (possible caveat: peaks are not\n // correctly detected)\n if (series.getPointSpline &&\n node &&\n node.getPointAtLength &&\n !onArea &&\n // Not performing well on complex series, node.getPointAtLength is too\n // heavy (#9815)\n points.length < (series.chart.plotSizeX || 0) / distance) {\n // If it is animating towards a path definition, use that briefly, and\n // reset\n const d = graph.toD && graph.attr('d');\n if (graph.toD) {\n graph.attr({ d: graph.toD });\n }\n len = node.getTotalLength();\n for (i = 0; i < len; i += distance) {\n const domPoint = node.getPointAtLength(i);\n pushDiscrete({\n chartX: paneLeft + domPoint.x,\n chartY: paneTop + domPoint.y,\n plotX: domPoint.x,\n plotY: domPoint.y\n });\n }\n if (d) {\n graph.attr({ d });\n }\n // Last point\n const point = points[points.length - 1];\n pushDiscrete({\n chartX: paneLeft + (point.plotX || 0),\n chartY: paneTop + (point.plotY || 0)\n });\n // Interpolate\n }\n else {\n len = points.length;\n let last;\n for (i = 0; i < len; i += 1) {\n const point = points[i], { plotX, plotY, plotHigh } = point;\n if (isNumber(plotX) && isNumber(plotY)) {\n const ctlPoint = {\n plotX,\n plotY,\n // Absolute coordinates so we can compare different panes\n chartX: paneLeft + plotX,\n chartY: paneTop + plotY\n };\n if (onArea) {\n // Vertically centered inside area\n if (plotHigh) {\n ctlPoint.plotY = plotHigh;\n ctlPoint.chartY = paneTop + plotHigh;\n }\n ctlPoint.chartCenterY = paneTop + ((plotHigh ? plotHigh : plotY) +\n pick(point.yBottom, translatedThreshold)) / 2;\n }\n // Add interpolated points\n if (last) {\n deltaX = Math.abs(ctlPoint.chartX - last.chartX);\n deltaY = Math.abs(ctlPoint.chartY - last.chartY);\n delta = Math.max(deltaX, deltaY);\n if (delta > distance) {\n n = Math.ceil(delta / distance);\n for (j = 1; j < n; j += 1) {\n pushDiscrete({\n chartX: last.chartX +\n (ctlPoint.chartX - last.chartX) * (j / n),\n chartY: last.chartY +\n (ctlPoint.chartY - last.chartY) * (j / n),\n chartCenterY: (last.chartCenterY || 0) +\n ((ctlPoint.chartCenterY || 0) -\n (last.chartCenterY || 0)) * (j / n),\n plotX: (last.plotX || 0) +\n (plotX - (last.plotX || 0)) * (j / n),\n plotY: (last.plotY || 0) +\n (plotY - (last.plotY || 0)) * (j / n)\n });\n }\n }\n }\n // Add the real point in order to find positive and negative\n // peaks\n pushDiscrete(ctlPoint);\n last = ctlPoint;\n }\n }\n }\n // Get the bounding box so we can do a quick check first if the bounding\n // boxes overlap.\n /*\n interpolated.bBox = node.getBBox();\n interpolated.bBox.x += paneLeft;\n interpolated.bBox.y += paneTop;\n */\n return interpolated;\n }\n /**\n * Overridable function to return series-specific font sizes for the labels. By\n * default it returns bigger font sizes for series with the greater sum of y\n * values.\n * @private\n */\n function labelFontSize(series, minFontSize, maxFontSize) {\n return minFontSize + (((series.sum || 0) / (series.chart.labelSeriesMaxSum || 0)) *\n (maxFontSize - minFontSize)) + 'px';\n }\n /**\n * Prepare drawing series labels.\n * @private\n */\n function onChartRedraw(e) {\n if (this.renderer) {\n const chart = this;\n let delay = animObject(chart.renderer.globalAnimation).duration;\n chart.labelSeries = [];\n chart.labelSeriesMaxSum = 0;\n if (chart.seriesLabelTimer) {\n U.clearTimeout(chart.seriesLabelTimer);\n }\n // Which series should have labels\n chart.series.forEach(function (series) {\n const seriesLabelOptions = series.options.label || {}, label = series.labelBySeries, closest = label && label.closest;\n if (seriesLabelOptions.enabled &&\n series.visible &&\n (series.graph || series.area) &&\n !series.boosted &&\n chart.labelSeries) {\n chart.labelSeries.push(series);\n if (seriesLabelOptions.minFontSize &&\n seriesLabelOptions.maxFontSize &&\n series.yData) {\n series.sum = series.yData.reduce((pv, cv) => (pv || 0) + (cv || 0), 0);\n chart.labelSeriesMaxSum = Math.max(chart.labelSeriesMaxSum || 0, series.sum || 0);\n }\n // The labels are processing heavy, wait until the animation is\n // done\n if (e.type === 'load') {\n delay = Math.max(delay, animObject(series.options.animation).duration);\n }\n // Keep the position updated to the axis while redrawing\n if (closest) {\n if (typeof closest[0].plotX !== 'undefined') {\n label.animate({\n x: closest[0].plotX + closest[1],\n y: closest[0].plotY + closest[2]\n });\n }\n else {\n label.attr({ opacity: 0 });\n }\n }\n }\n });\n chart.seriesLabelTimer = syncTimeout(function () {\n if (chart.series && chart.labelSeries) { // #7931, chart destroyed\n drawSeriesLabels(chart);\n }\n }, chart.renderer.forExport || !delay ? 0 : delay);\n }\n }\n /**\n * General symbol definition for labels with connector.\n * @private\n */\n function symbolConnector(x, y, w, h, options) {\n const anchorX = options && options.anchorX, anchorY = options && options.anchorY;\n let path, yOffset, lateral = w / 2;\n if (isNumber(anchorX) && isNumber(anchorY)) {\n path = [['M', anchorX, anchorY]];\n // Prefer 45 deg connectors\n yOffset = y - anchorY;\n if (yOffset < 0) {\n yOffset = -h - yOffset;\n }\n if (yOffset < w) {\n lateral = anchorX < x + (w / 2) ? yOffset : w - yOffset;\n }\n // Anchor below label\n if (anchorY > y + h) {\n path.push(['L', x + lateral, y + h]);\n // Anchor above label\n }\n else if (anchorY < y) {\n path.push(['L', x + lateral, y]);\n // Anchor left of label\n }\n else if (anchorX < x) {\n path.push(['L', x, y + h / 2]);\n // Anchor right of label\n }\n else if (anchorX > x + w) {\n path.push(['L', x + w, y + h / 2]);\n }\n }\n return path || [];\n }\n /* *\n *\n * Default Export\n *\n * */\n const SeriesLabel = {\n compose\n };\n /* *\n *\n * API Declarations\n *\n * */\n /**\n * Containing the position of a box that should be avoided by labels.\n *\n * @interface Highcharts.LabelIntersectBoxObject\n */ /**\n * @name Highcharts.LabelIntersectBoxObject#bottom\n * @type {number}\n */ /**\n * @name Highcharts.LabelIntersectBoxObject#left\n * @type {number}\n */ /**\n * @name Highcharts.LabelIntersectBoxObject#right\n * @type {number}\n */ /**\n * @name Highcharts.LabelIntersectBoxObject#top\n * @type {number}\n */\n (''); // keeps doclets above in JS file\n\n return SeriesLabel;\n });\n _registerModule(_modules, 'masters/modules/series-label.src.js', [_modules['Core/Globals.js'], _modules['Extensions/SeriesLabel/SeriesLabel.js']], function (Highcharts, SeriesLabel) {\n\n const G = Highcharts;\n SeriesLabel.compose(G.Chart, G.SVGRenderer);\n\n });\n}));"],"names":["factory","module","exports","define","amd","Highcharts","undefined","_modules","_registerModule","obj","path","args","fn","hasOwnProperty","apply","CustomEvent","window","dispatchEvent","detail","enabled","connectorAllowed","connectorNeighbourDistance","format","formatter","minFontSize","maxFontSize","onArea","style","fontSize","fontWeight","useHTML","boxesToAvoid","ccw","x1","y1","x2","y2","x3","y3","cw","intersectLine","x4","y4","boxIntersectLine","x","y","w","h","intersectRect","r1","r2","left","right","top","bottom","A","Chart","T","D","SeriesLabelDefaults","SLU","U","animObject","setOptions","addEvent","extend","fireEvent","isNumber","pick","syncTimeout","composedMembers","checkClearPoint","series","bBox","checkDistance","chart","seriesLabelOptions","options","label","area","findDistanceToOthers","distToOthersSquared","Number","MAX_VALUE","distToPointSquared","dist","connectorPoint","withinRange","xDist","yDist","i","j","length","width","height","serie","points","interpolatedPoints","visible","stepY","plotHeight","chartY","plotTop","unshift","chartX","plotLeft","push","plotWidth","Math","min","pow","weight","onChartRedraw","e","renderer","delay","globalAnimation","duration","labelSeries","labelSeriesMaxSum","seriesLabelTimer","clearTimeout","forEach","labelBySeries","closest","graph","boosted","yData","sum","reduce","pv","cv","max","type","animation","plotX","animate","plotY","attr","opacity","drawSeriesLabels","s","p","dataLabels","getBBox","translateX","xAxis","pos","translateY","yAxis","getPointsOnGraph","delta","len","n","interpolated","node","element","inverted","paneLeft","paneTop","translatedThreshold","getThreshold","threshold","grid","pushDiscrete","point","key","round","getPointSpline","getPointAtLength","plotSizeX","d","toD","getTotalLength","domPoint","last","plotHigh","ctlPoint","chartCenterY","yBottom","abs","ceil","labelOptions","colorClass","colorIndex","isNew","paneWidth","paneHeight","results","xData","clearPoint","best","dataExtremes","areaMin","areaMax","insidePane","leftBound","Infinity","rightBound","destroyLabel","destroy","toPixels","labelText","name","call","addClass","index","className","styledMode","color","css","getContrast","forExport","stroke","padding","zIndex","add","sort","a","b","sqrt","animationOptions","anim","anchorX","anchorY","kdNow","buildKDTree","searchPoint","symbolConnector","yOffset","lateral","compose","ChartClass","SVGRendererClass","pushUnique","prototype","symbols","connector","plotOptions","SeriesLabel","G","SVGRenderer"],"mappings":"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"}