@dpuse/dpuse-tool-highcharts-visualiser 0.0.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +329 -0
- package/dist/AnimationUtilities-Bby2idBR.js +1176 -0
- package/dist/AnimationUtilities-Bby2idBR.js.map +1 -0
- package/dist/BorderRadius-2zMZW_aK.js +1445 -0
- package/dist/BorderRadius-2zMZW_aK.js.map +1 -0
- package/dist/SVGElement-BmvC_qu3.js +394 -0
- package/dist/SVGElement-BmvC_qu3.js.map +1 -0
- package/dist/SeriesRegistry-0cj0ZJqn.js +374 -0
- package/dist/SeriesRegistry-0cj0ZJqn.js.map +1 -0
- package/dist/TextPath-DK4Jkzd7.js +133 -0
- package/dist/TextPath-DK4Jkzd7.js.map +1 -0
- package/dist/dependency-wheel.src-BHmwx9rW.js +194 -0
- package/dist/dependency-wheel.src-BHmwx9rW.js.map +1 -0
- package/dist/dpuse-tool-highcharts-visualiser.es.js +10154 -0
- package/dist/dpuse-tool-highcharts-visualiser.es.js.map +1 -0
- package/dist/highchartsMoreCustom-CcpfmVny.js +1110 -0
- package/dist/highchartsMoreCustom-CcpfmVny.js.map +1 -0
- package/dist/pattern-fill.src-BPmr3DQg.js +169 -0
- package/dist/pattern-fill.src-BPmr3DQg.js.map +1 -0
- package/dist/sankey.src-DocCurOx.js +524 -0
- package/dist/sankey.src-DocCurOx.js.map +1 -0
- package/dist/streamgraph.src-Bn6PY8Fd.js +19 -0
- package/dist/streamgraph.src-Bn6PY8Fd.js.map +1 -0
- package/dist/types/eslint.config.d.ts +3 -0
- package/dist/types/src/highchartsMoreCustom.d.ts +2 -0
- package/dist/types/src/index.d.ts +18 -0
- package/dist/types/tests/highchartsMoreCustom.test.d.ts +1 -0
- package/dist/types/tests/importIndex.test.d.ts +1 -0
- package/dist/types/vite.config.d.ts +2 -0
- package/dist/types/vitest.config.d.ts +2 -0
- package/package.json +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highchartsMoreCustom-CcpfmVny.js","names":["areaProto","SeriesRegistry","AreaRangePoint","H","columnProto","SeriesRegistry","AreaRangeSeries","AreaRangePoint","noop","SeriesRegistry","AreaRangeSeries","columnProto","SeriesRegistry","H","ColumnSeries","SeriesRegistry","noop","D","CU","D","H","composed","defaultOptions","A","D","H","composed","H","ColumnSeries","SeriesRegistry","WaterfallAxis"],"sources":["../node_modules/highcharts/es-modules/Series/AreaRange/AreaRangePoint.js","../node_modules/highcharts/es-modules/Series/AreaRange/AreaRangeSeries.js","../node_modules/highcharts/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js","../node_modules/highcharts/es-modules/Series/ColumnRange/ColumnRangePoint.js","../node_modules/highcharts/es-modules/Series/ColumnRange/ColumnRangeSeries.js","../node_modules/highcharts/es-modules/Extensions/Pane/PaneComposition.js","../node_modules/highcharts/es-modules/Extensions/Pane/PaneDefaults.js","../node_modules/highcharts/es-modules/Extensions/Pane/Pane.js","../node_modules/highcharts/es-modules/Core/Axis/RadialAxisDefaults.js","../node_modules/highcharts/es-modules/Core/Axis/RadialAxis.js","../node_modules/highcharts/es-modules/Series/PolarComposition.js","../node_modules/highcharts/es-modules/Core/Axis/WaterfallAxis.js","../node_modules/highcharts/es-modules/Series/Waterfall/WaterfallPoint.js","../node_modules/highcharts/es-modules/Series/Waterfall/WaterfallSeriesDefaults.js","../node_modules/highcharts/es-modules/Series/Waterfall/WaterfallSeries.js","../src/highchartsMoreCustom.ts"],"sourcesContent":["/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { area: { prototype: { pointClass: AreaPoint, pointClass: { prototype: areaProto } } } } = SeriesRegistry.seriesTypes;\nimport { defined, isNumber } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\n/** @internal */\nclass AreaRangePoint extends AreaPoint {\n /* *\n *\n * Functions\n *\n * */\n /**\n * @internal\n */\n setState() {\n const prevState = this.state, series = this.series, isPolar = series.chart.polar;\n if (!defined(this.plotHigh)) {\n // Boost doesn't calculate plotHigh\n this.plotHigh = series.yAxis.toPixels(this.high, true);\n }\n if (!defined(this.plotLow)) {\n // Boost doesn't calculate plotLow\n this.plotLow = this.plotY = series.yAxis.toPixels(this.low, true);\n }\n series.lowerStateMarkerGraphic = series.stateMarkerGraphic;\n series.stateMarkerGraphic = series.upperStateMarkerGraphic;\n // Change state also for the top marker\n this.graphic = this.graphics && this.graphics[1];\n this.plotY = this.plotHigh;\n if (isPolar && isNumber(this.plotHighX)) {\n this.plotX = this.plotHighX;\n }\n // Top state:\n areaProto.setState.apply(this, arguments);\n this.state = prevState;\n // Now restore defaults\n this.plotY = this.plotLow;\n this.graphic = this.graphics && this.graphics[0];\n if (isPolar && isNumber(this.plotLowX)) {\n this.plotX = this.plotLowX;\n }\n series.upperStateMarkerGraphic = series.stateMarkerGraphic;\n series.stateMarkerGraphic = series.lowerStateMarkerGraphic;\n // Lower marker is stored at stateMarkerGraphic\n // to avoid reference duplication (#7021)\n series.lowerStateMarkerGraphic = void 0;\n const originalSettings = series.modifyMarkerSettings();\n // Bottom state\n areaProto.setState.apply(this, arguments);\n // Restore previous state\n series.restoreMarkerSettings(originalSettings);\n }\n haloPath() {\n const isPolar = this.series.chart.polar;\n let path = [];\n // Bottom halo\n this.plotY = this.plotLow;\n if (isPolar && isNumber(this.plotLowX)) {\n this.plotX = this.plotLowX;\n }\n if (this.isInside) {\n path = areaProto.haloPath.apply(this, arguments);\n }\n // Top halo\n this.plotY = this.plotHigh;\n if (isPolar && isNumber(this.plotHighX)) {\n this.plotX = this.plotHighX;\n }\n if (this.isTopInside) {\n path = path.concat(areaProto.haloPath.apply(this, arguments));\n }\n return path;\n }\n isValid() {\n return isNumber(this.low) && isNumber(this.high);\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default AreaRangePoint;\n/* *\n *\n * API Options\n *\n * */\n/**\n * Range series only. The high or maximum value for each data point.\n *\n * @name Highcharts.Point#high\n * @type {number|undefined}\n */\n/**\n * Range series only. The low or minimum value for each data point.\n *\n * @name Highcharts.Point#low\n * @type {number|undefined}\n */\n''; // Keeps doclets above in JS file.\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport AreaRangePoint from './AreaRangePoint.js';\nimport H from '../../Core/Globals.js';\nconst { noop } = H;\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { area: AreaSeries, area: { prototype: areaProto }, column: { prototype: columnProto } } = SeriesRegistry.seriesTypes;\nimport { addEvent, defined, extend, isArray, isNumber, merge, pick } from '../../Shared/Utilities.js';\n/* *\n *\n * Constants\n *\n * */\n/**\n * The area range series is a cartesian series with higher and lower values for\n * each point along an X axis, where the area between the values is shaded.\n *\n * @sample {highcharts} highcharts/demo/arearange/\n * Area range chart\n * @sample {highstock} stock/demo/arearange/\n * Area range chart\n *\n * @extends plotOptions.area\n * @product highcharts highstock\n * @excluding stack, stacking\n * @requires highcharts-more\n * @optionparent plotOptions.arearange\n *\n * @internal\n */\nconst areaRangeSeriesOptions = {\n /**\n * @see [fillColor](#plotOptions.arearange.fillColor)\n * @see [fillOpacity](#plotOptions.arearange.fillOpacity)\n *\n * @apioption plotOptions.arearange.color\n */\n /**\n * @default low\n * @apioption plotOptions.arearange.colorKey\n */\n /**\n * @see [color](#plotOptions.arearange.color)\n * @see [fillOpacity](#plotOptions.arearange.fillOpacity)\n *\n * @apioption plotOptions.arearange.fillColor\n */\n /**\n * @see [color](#plotOptions.arearange.color)\n * @see [fillColor](#plotOptions.arearange.fillColor)\n *\n * @default {highcharts} 0.75\n * @default {highstock} 0.75\n * @apioption plotOptions.arearange.fillOpacity\n */\n /**\n * Whether to apply a drop shadow to the graph line. Since 2.3 the\n * shadow can be an object configuration containing `color`, `offsetX`,\n * `offsetY`, `opacity` and `width`.\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @product highcharts\n * @apioption plotOptions.arearange.shadow\n */\n /**\n * Pixel width of the arearange graph line.\n *\n * @since 2.3.0\n *\n * @internal\n */\n lineWidth: 1,\n /**\n * @type {number|null}\n */\n threshold: null,\n tooltip: {\n pointFormat: '<span style=\"color:{series.color}\">\\u25CF</span> ' +\n '{series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'\n },\n /**\n * Whether the whole area or just the line should respond to mouseover\n * tooltips and other mouse or touch events.\n *\n * @since 2.3.0\n *\n * @internal\n */\n trackByArea: true,\n /**\n * Extended data labels for range series types. Range series data\n * labels use no `x` and `y` options. Instead, they have `xLow`,\n * `xHigh`, `yLow` and `yHigh` options to allow the higher and lower\n * data label sets individually.\n *\n * @declare Highcharts.SeriesAreaRangeDataLabelsOptionsObject\n * @exclude x, y\n * @since 2.3.0\n * @product highcharts highstock\n *\n * @internal\n */\n dataLabels: {\n align: void 0,\n verticalAlign: void 0,\n /**\n * X offset of the lower data labels relative to the point value.\n *\n * @sample highcharts/plotoptions/arearange-datalabels/\n * Data labels on range series\n * @sample highcharts/plotoptions/arearange-datalabels/\n * Data labels on range series\n */\n xLow: 0,\n /**\n * X offset of the higher data labels relative to the point value.\n *\n * @sample highcharts/plotoptions/arearange-datalabels/\n * Data labels on range series\n */\n xHigh: 0,\n /**\n * Y offset of the lower data labels relative to the point value.\n *\n * @sample highcharts/plotoptions/arearange-datalabels/\n * Data labels on range series\n */\n yLow: 0,\n /**\n * Y offset of the higher data labels relative to the point value.\n *\n * @sample highcharts/plotoptions/arearange-datalabels/\n * Data labels on range series\n */\n yHigh: 0\n }\n};\n/* *\n *\n * Class\n *\n * */\n/**\n * The AreaRange series type.\n *\n * @internal\n * @class\n * @name Highcharts.seriesTypes.arearange\n *\n * @augments Highcharts.Series\n */\nclass AreaRangeSeries extends AreaSeries {\n /* *\n *\n * Functions\n *\n * */\n toYData(point) {\n return [point.low, point.high];\n }\n /**\n * Translate a point's plotHigh from the internal angle and radius measures\n * to true plotHigh coordinates. This is an addition of the toXY method\n * found in Polar.js, because it runs too early for arearange to be\n * considered (#3419).\n * @internal\n */\n highToXY(point) {\n // Find the polar plotX and plotY\n const chart = this.chart, xy = this.xAxis.postTranslate(point.rectPlotX || 0, this.yAxis.len - (point.plotHigh || 0));\n point.plotHighX = xy.x - chart.plotLeft;\n point.plotHigh = xy.y - chart.plotTop;\n point.plotLowX = point.plotX;\n }\n /**\n * Extend the line series' getSegmentPath method by applying the segment\n * path to both lower and higher values of the range.\n * @internal\n */\n getGraphPath(points) {\n const highPoints = [], highAreaPoints = [], getGraphPath = areaProto.getGraphPath, options = this.options, polar = this.chart.polar, connectEnds = polar && options.connectEnds !== false, connectNulls = options.connectNulls;\n let i, point, pointShim, step = options.step;\n points = points || this.points;\n // Create the top line and the top part of the area fill. The area fill\n // compensates for null points by drawing down to the lower graph,\n // moving across the null gap and starting again at the lower graph.\n i = points.length;\n while (i--) {\n point = points[i];\n // Support for polar\n const highAreaPoint = polar ? {\n plotX: point.rectPlotX,\n plotY: point.yBottom,\n doCurve: false // #5186, gaps in areasplinerange fill\n } : {\n plotX: point.plotX,\n plotY: point.plotY,\n doCurve: false // #5186, gaps in areasplinerange fill\n };\n if (!point.isNull &&\n !connectEnds &&\n !connectNulls &&\n (!points[i + 1] || points[i + 1].isNull)) {\n highAreaPoints.push(highAreaPoint);\n }\n pointShim = {\n polarPlotY: point.polarPlotY,\n rectPlotX: point.rectPlotX,\n yBottom: point.yBottom,\n // `plotHighX` is for polar charts\n plotX: pick(point.plotHighX, point.plotX),\n plotY: point.plotHigh,\n isNull: point.isNull\n };\n highAreaPoints.push(pointShim);\n highPoints.push(pointShim);\n if (!point.isNull &&\n !connectEnds &&\n !connectNulls &&\n (!points[i - 1] || points[i - 1].isNull)) {\n highAreaPoints.push(highAreaPoint);\n }\n }\n // Get the paths\n const lowerPath = getGraphPath.call(this, points);\n if (step) {\n if (step === true) {\n step = 'left';\n }\n options.step = {\n left: 'right',\n center: 'center',\n right: 'left'\n }[step]; // Swap for reading in getGraphPath\n }\n const higherPath = getGraphPath.call(this, highPoints);\n const higherAreaPath = getGraphPath.call(this, highAreaPoints);\n options.step = step;\n // Create a line on both top and bottom of the range\n const linePath = [].concat(lowerPath, higherPath);\n // For the area path, we need to change the 'move' statement into\n // 'lineTo'\n if (!this.chart.polar &&\n higherAreaPath[0] &&\n higherAreaPath[0][0] === 'M') {\n // This probably doesn't work for spline\n higherAreaPath[0] = [\n 'L',\n higherAreaPath[0][1],\n higherAreaPath[0][2]\n ];\n }\n this.graphPath = linePath;\n this.areaPath = lowerPath.concat(higherAreaPath);\n // Prepare for sideways animation\n linePath.isArea = true;\n linePath.xMap = lowerPath.xMap;\n this.areaPath.xMap = lowerPath.xMap;\n return linePath;\n }\n /**\n * Extend the basic drawDataLabels method by running it for both lower and\n * higher values.\n * @internal\n */\n drawDataLabels() {\n const data = this.points, length = data.length, originalDataLabels = [], dataLabelOptions = this.options.dataLabels, inverted = this.chart.inverted;\n let i, point, up, upperDataLabelOptions, lowerDataLabelOptions;\n if (dataLabelOptions) {\n // Split into upper and lower options. If data labels is an array,\n // the first element is the upper label, the second is the lower.\n //\n // TODO: We want to change this and allow multiple labels for both\n // upper and lower values in the future - introducing some options\n // for which point value to use as Y for the dataLabel, so that this\n // could be handled in Series.drawDataLabels. This would also\n // improve performance since we now have to loop over all the points\n // multiple times to work around the data label logic.\n if (isArray(dataLabelOptions)) {\n upperDataLabelOptions = dataLabelOptions[0] || {\n enabled: false\n };\n lowerDataLabelOptions = dataLabelOptions[1] || {\n enabled: false\n };\n }\n else {\n // Make copies\n upperDataLabelOptions = extend({}, dataLabelOptions);\n upperDataLabelOptions.x = dataLabelOptions.xHigh;\n upperDataLabelOptions.y = dataLabelOptions.yHigh;\n lowerDataLabelOptions = extend({}, dataLabelOptions);\n lowerDataLabelOptions.x = dataLabelOptions.xLow;\n lowerDataLabelOptions.y = dataLabelOptions.yLow;\n }\n // Draw upper labels\n if (upperDataLabelOptions.enabled || this.hasDataLabels?.()) {\n // Set preliminary values for plotY and dataLabel\n // and draw the upper labels\n i = length;\n while (i--) {\n point = data[i];\n if (point) {\n const { plotHigh = 0, plotLow = 0 } = point;\n up = upperDataLabelOptions.inside ?\n plotHigh < plotLow :\n plotHigh > plotLow;\n point.y = point.high;\n point._plotY = point.plotY;\n point.plotY = plotHigh;\n // Store original data labels and set preliminary label\n // objects to be picked up in the uber method\n originalDataLabels[i] = point.dataLabel;\n point.dataLabel = point.dataLabelUpper;\n // Set the default offset\n point.below = up;\n if (inverted) {\n if (!upperDataLabelOptions.align) {\n upperDataLabelOptions.align = up ?\n 'right' : 'left';\n }\n }\n else {\n if (!upperDataLabelOptions.verticalAlign) {\n upperDataLabelOptions.verticalAlign = up ?\n 'top' :\n 'bottom';\n }\n }\n }\n }\n this.options.dataLabels = upperDataLabelOptions;\n if (areaProto.drawDataLabels) {\n // #1209:\n areaProto.drawDataLabels.apply(this, arguments);\n }\n // Reset state after the upper labels were created. Move\n // it to point.dataLabelUpper and reassign the originals.\n // We do this here to support not drawing a lower label.\n i = length;\n while (i--) {\n point = data[i];\n if (point) {\n point.dataLabelUpper = point.dataLabel;\n point.dataLabel = originalDataLabels[i];\n delete point.dataLabels;\n point.y = point.low;\n point.plotY = point._plotY;\n }\n }\n }\n // Draw lower labels\n if (lowerDataLabelOptions.enabled || this.hasDataLabels?.()) {\n i = length;\n while (i--) {\n point = data[i];\n if (point) {\n const { plotHigh = 0, plotLow = 0 } = point;\n up = lowerDataLabelOptions.inside ?\n plotHigh < plotLow :\n plotHigh > plotLow;\n // Set the default offset\n point.below = !up;\n if (inverted) {\n if (!lowerDataLabelOptions.align) {\n lowerDataLabelOptions.align = up ?\n 'left' : 'right';\n }\n }\n else {\n if (!lowerDataLabelOptions.verticalAlign) {\n lowerDataLabelOptions.verticalAlign = up ?\n 'bottom' :\n 'top';\n }\n }\n }\n }\n this.options.dataLabels = lowerDataLabelOptions;\n if (areaProto.drawDataLabels) {\n areaProto.drawDataLabels.apply(this, arguments);\n }\n }\n // Merge upper and lower into point.dataLabels for later destroying\n if (upperDataLabelOptions.enabled) {\n i = length;\n while (i--) {\n point = data[i];\n if (point) {\n point.dataLabels = [\n point.dataLabelUpper,\n point.dataLabel\n ].filter(function (label) {\n return !!label;\n });\n }\n }\n }\n // Reset options\n this.options.dataLabels = dataLabelOptions;\n }\n }\n alignDataLabel() {\n columnProto.alignDataLabel.apply(this, arguments);\n }\n modifyMarkerSettings() {\n const series = this, originalMarkerSettings = {\n marker: series.options.marker,\n symbol: series.symbol\n };\n if (series.options.lowMarker) {\n const { options: { marker, lowMarker } } = series;\n series.options.marker = merge(marker, lowMarker);\n if (lowMarker.symbol) {\n series.symbol = lowMarker.symbol;\n }\n }\n return originalMarkerSettings;\n }\n restoreMarkerSettings(originalSettings) {\n const series = this;\n series.options.marker = originalSettings.marker;\n series.symbol = originalSettings.symbol;\n }\n drawPoints() {\n const series = this, pointLength = series.points.length;\n let i, point;\n const originalSettings = series.modifyMarkerSettings();\n // Draw bottom points\n areaProto.drawPoints.apply(series, arguments);\n // Restore previous state\n series.restoreMarkerSettings(originalSettings);\n // Prepare drawing top points\n i = 0;\n while (i < pointLength) {\n point = series.points[i];\n point.graphics = point.graphics || [];\n // Save original props to be overridden by temporary props for top\n // points\n point.origProps = {\n plotY: point.plotY,\n plotX: point.plotX,\n isInside: point.isInside,\n negative: point.negative,\n zone: point.zone,\n y: point.y\n };\n if (point.graphic || point.graphics[0]) {\n point.graphics[0] = point.graphic;\n }\n point.graphic = point.graphics[1];\n point.plotY = point.plotHigh;\n if (defined(point.plotHighX)) {\n point.plotX = point.plotHighX;\n }\n point.y = pick(point.high, point.origProps.y); // #15523\n point.negative = point.y < (series.options.threshold || 0);\n if (series.zones.length) {\n point.zone = point.getZone();\n }\n if (!series.chart.polar) {\n point.isInside = point.isTopInside = (typeof point.plotY !== 'undefined' &&\n point.plotY >= 0 &&\n point.plotY <= series.yAxis.len && // #3519\n point.plotX >= 0 &&\n point.plotX <= series.xAxis.len);\n }\n i++;\n }\n // Draw top points\n areaProto.drawPoints.apply(series, arguments);\n // Reset top points preliminary modifications\n i = 0;\n while (i < pointLength) {\n point = series.points[i];\n point.graphics = point.graphics || [];\n if (point.graphic || point.graphics[1]) {\n point.graphics[1] = point.graphic;\n }\n point.graphic = point.graphics[0];\n if (point.origProps) {\n extend(point, point.origProps);\n delete point.origProps;\n }\n i++;\n }\n }\n hasMarkerChanged(options, oldOptions) {\n const lowMarker = options.lowMarker, oldMarker = oldOptions.lowMarker || {};\n return (lowMarker && (lowMarker.enabled === false ||\n oldMarker.symbol !== lowMarker.symbol || // #10870, #15946\n oldMarker.height !== lowMarker.height || // #16274\n oldMarker.width !== lowMarker.width // #16274\n )) || super.hasMarkerChanged(options, oldOptions);\n }\n}\n/**\n *\n * Static Properties\n *\n */\nAreaRangeSeries.defaultOptions = merge(AreaSeries.defaultOptions, areaRangeSeriesOptions);\naddEvent(AreaRangeSeries, 'afterTranslate', function () {\n // Set plotLow and plotHigh\n // Rules out lollipop, but lollipop should not inherit range series in the\n // first place\n if (this.pointArrayMap.join(',') === 'low,high') {\n this.points.forEach((point) => {\n const high = point.high, plotY = point.plotY;\n if (point.isNull) {\n point.plotY = void 0;\n }\n else {\n point.plotLow = plotY;\n // Calculate plotHigh value based on each yAxis scale (#15752)\n point.plotHigh = isNumber(high) ? this.yAxis.translate(this.dataModify ?\n this.dataModify.modifyValue(high) : high, false, true, void 0, true) : void 0;\n if (this.dataModify) {\n point.yBottom = point.plotHigh;\n }\n }\n });\n }\n}, { order: 0 });\naddEvent(AreaRangeSeries, 'afterTranslate', function () {\n this.points.forEach((point) => {\n // Postprocessing after the PolarComposition's afterTranslate\n if (this.chart.polar) {\n this.highToXY(point);\n point.plotLow = point.plotY;\n point.tooltipPos = [\n ((point.plotHighX || 0) + (point.plotLowX || 0)) / 2,\n ((point.plotHigh || 0) + (point.plotLow || 0)) / 2\n ];\n // Put the tooltip in the middle of the range\n }\n else {\n const tooltipPos = point.pos(false, void 0, point.plotLow), posHigh = point.pos(false, void 0, point.plotHigh);\n if (tooltipPos && posHigh) {\n tooltipPos[0] = (tooltipPos[0] + posHigh[0]) / 2;\n tooltipPos[1] = (tooltipPos[1] + posHigh[1]) / 2;\n }\n point.tooltipPos = tooltipPos;\n }\n });\n}, { order: 3 });\nextend(AreaRangeSeries.prototype, {\n deferTranslatePolar: true,\n pointArrayMap: ['low', 'high'],\n pointClass: AreaRangePoint,\n pointValKey: 'low',\n setStackedPoints: noop\n});\nSeriesRegistry.registerSeriesType('arearange', AreaRangeSeries);\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default AreaRangeSeries;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport AreaRangeSeries from '../AreaRange/AreaRangeSeries.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { spline: { prototype: splineProto } } = SeriesRegistry.seriesTypes;\nimport { extend, merge } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\n/**\n * The areasplinerange series type.\n *\n * @internal\n * @class\n * @name Highcharts.seriesTypes.areasplinerange\n *\n * @augments Highcharts.Series\n */\nclass AreaSplineRangeSeries extends AreaRangeSeries {\n}\n/* *\n *\n * Static Properties\n *\n * */\nAreaSplineRangeSeries.defaultOptions = merge(AreaRangeSeries.defaultOptions);\nextend(AreaSplineRangeSeries.prototype, {\n getPointSpline: splineProto.getPointSpline\n});\nSeriesRegistry.registerSeriesType('areasplinerange', AreaSplineRangeSeries);\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default AreaSplineRangeSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * The area spline range is a cartesian series type with higher and\n * lower Y values along an X axis. The area inside the range is colored, and\n * the graph outlining the area is a smoothed spline.\n *\n * @sample {highstock|highstock} stock/demo/areasplinerange/\n * Area spline range\n *\n * @extends plotOptions.arearange\n * @since 2.3.0\n * @excluding step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @requires highcharts-more\n * @apioption plotOptions.areasplinerange\n */\n/**\n * @see [fillColor](#plotOptions.areasplinerange.fillColor)\n * @see [fillOpacity](#plotOptions.areasplinerange.fillOpacity)\n *\n * @apioption plotOptions.areasplinerange.color\n */\n/**\n * @see [color](#plotOptions.areasplinerange.color)\n * @see [fillOpacity](#plotOptions.areasplinerange.fillOpacity)\n *\n * @apioption plotOptions.areasplinerange.fillColor\n */\n/**\n * @see [color](#plotOptions.areasplinerange.color)\n * @see [fillColor](#plotOptions.areasplinerange.fillColor)\n *\n * @default 0.75\n * @apioption plotOptions.areasplinerange.fillOpacity\n */\n/**\n * A `areasplinerange` series. If the [type](#series.areasplinerange.type)\n * option is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.areasplinerange\n * @excluding dataParser, dataURL, stack, step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @requires highcharts-more\n * @apioption series.areasplinerange\n */\n/**\n * @see [fillColor](#series.areasplinerange.fillColor)\n * @see [fillOpacity](#series.areasplinerange.fillOpacity)\n *\n * @apioption series.areasplinerange.color\n */\n/**\n * An array of data points for the series. For the `areasplinerange`\n * series type, points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n * to `x,low,high`. If the first value is a string, it is applied as the name\n * of the point, and the `x` value is inferred. The `x` value can also be\n * omitted, in which case the inner arrays should be of length 2\\. Then the\n * `x` value is automatically calculated, either starting at 0 and\n * incremented by 1, or from `pointStart` and `pointInterval` given in the\n * series options.\n * ```js\n * data: [\n * [0, 0, 5],\n * [1, 9, 1],\n * [2, 5, 2]\n * ]\n * ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.areasplinerange.turboThreshold), this option is\n * not available.\n * ```js\n * data: [{\n * x: 1,\n * low: 5,\n * high: 0,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * low: 4,\n * high: 1,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @basic\n * @type {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends series.arearange.data\n * @product highcharts highstock\n * @apioption series.areasplinerange.data\n */\n/**\n * @see [color](#series.areasplinerange.color)\n * @see [fillOpacity](#series.areasplinerange.fillOpacity)\n *\n * @apioption series.areasplinerange.fillColor\n */\n/**\n * @see [color](#series.areasplinerange.color)\n * @see [fillColor](#series.areasplinerange.fillColor)\n *\n * @default 0.75\n * @apioption series.areasplinerange.fillOpacity\n */\n''; // Adds doclets above to transpiled file\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { seriesTypes: { column: { prototype: { pointClass: { prototype: columnProto } } }, arearange: { prototype: { pointClass: AreaRangePoint } } } } = SeriesRegistry;\nimport { extend, isNumber } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\nclass ColumnRangePoint extends AreaRangePoint {\n /* *\n *\n * Functions\n *\n * */\n isValid() {\n return isNumber(this.low);\n }\n}\nextend(ColumnRangePoint.prototype, {\n setState: columnProto.setState\n});\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnRangePoint;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport ColumnRangePoint from './ColumnRangePoint.js';\nimport H from '../../Core/Globals.js';\nconst { noop } = H;\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { seriesTypes: { arearange: AreaRangeSeries, column: ColumnSeries, column: { prototype: columnProto } } } = SeriesRegistry;\nimport { addEvent, clamp, extend, isNumber, merge, pick } from '../../Shared/Utilities.js';\n/* *\n *\n * Constants\n *\n * */\n/**\n * The column range is a cartesian series type with higher and lower\n * Y values along an X axis. To display horizontal bars, set\n * [chart.inverted](#chart.inverted) to `true`.\n *\n * @sample {highcharts|highstock} highcharts/demo/columnrange/\n * Inverted column range\n *\n * @extends plotOptions.column\n * @since 2.3.0\n * @excluding negativeColor, stacking, softThreshold, threshold\n * @product highcharts highstock\n * @requires highcharts-more\n * @optionparent plotOptions.columnrange\n */\nconst columnRangeOptions = {\n borderRadius: {\n where: 'all'\n },\n /**\n * Extended data labels for range series types. Range series data labels\n * have no `x` and `y` options. Instead, they have `xLow`, `xHigh`,\n * `yLow` and `yHigh` options to allow the higher and lower data label\n * sets individually.\n *\n * @declare Highcharts.SeriesAreaRangeDataLabelsOptionsObject\n * @extends plotOptions.arearange.dataLabels\n * @since 2.3.0\n * @product highcharts highstock\n * @apioption plotOptions.columnrange.dataLabels\n */\n pointRange: null,\n legendSymbol: 'rectangle',\n /** @ignore-option */\n marker: null,\n states: {\n hover: {\n /** @ignore-option */\n halo: false\n }\n }\n};\n/* *\n *\n * Class\n *\n * */\n/**\n * The ColumnRangeSeries class\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.columnrange\n *\n * @augments Highcharts.Series\n */\nclass ColumnRangeSeries extends AreaRangeSeries {\n /* *\n *\n * Functions\n *\n * */\n setOptions() {\n // #14359 Prevent side-effect from stacking.\n merge(true, arguments[0], { stacking: void 0 });\n return AreaRangeSeries.prototype.setOptions.apply(this, arguments);\n }\n // Overrides from modules that may be loaded after this module\n // @todo move to compositions\n translate() {\n return columnProto.translate.apply(this);\n }\n // Public crispCol(): BBoxObject {\n // return columnProto.crispCol.apply(this, arguments as any);\n // }\n // public drawPoints(): void {\n // return columnProto.drawPoints.apply(this, arguments as any);\n // }\n // public drawTracker(): void {\n // return columnProto.drawTracker.apply(this, arguments as any);\n // }\n // public getColumnMetrics(): ColumnMetricsObject {\n // return columnProto.getColumnMetrics.apply(this, arguments as any);\n // }\n pointAttribs() {\n return columnProto.pointAttribs.apply(this, arguments);\n }\n // Public adjustForMissingColumns(): number {\n // return columnProto.adjustForMissingColumns.apply(this, arguments);\n // }\n // public animate(): void {\n // return columnProto.animate.apply(this, arguments as any);\n // }\n translate3dPoints() {\n return columnProto.translate3dPoints.apply(this, arguments);\n }\n translate3dShapes() {\n return columnProto.translate3dShapes.apply(this, arguments);\n }\n afterColumnTranslate() {\n /**\n * Translate data points from raw values x and y to plotX and plotY\n * @private\n */\n const yAxis = this.yAxis, xAxis = this.xAxis, startAngleRad = xAxis.startAngleRad, chart = this.chart, isRadial = this.xAxis.isRadial, safeDistance = Math.max(chart.chartWidth, chart.chartHeight) + 999;\n let height, heightDifference, start, y;\n // eslint-disable-next-line valid-jsdoc\n /**\n * Don't draw too far outside plot area (#6835)\n * @private\n */\n function safeBounds(pixelPos) {\n return clamp(pixelPos, -safeDistance, safeDistance);\n }\n // Set plotLow and plotHigh\n this.points.forEach((point) => {\n const shapeArgs = point.shapeArgs || {}, minPointLength = this.options.minPointLength, plotY = point.plotY, plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);\n if (isNumber(plotHigh) && isNumber(plotY)) {\n point.plotHigh = safeBounds(plotHigh);\n point.plotLow = safeBounds(plotY);\n // Adjust shape\n y = point.plotHigh;\n height = pick(point.rectPlotY, point.plotY) - point.plotHigh;\n // Adjust for minPointLength\n if (Math.abs(height) < minPointLength) {\n heightDifference = (minPointLength - height);\n height += heightDifference;\n y -= heightDifference / 2;\n // Adjust for negative ranges or reversed Y axis (#1457)\n }\n else if (height < 0) {\n height *= -1;\n y -= height;\n }\n if (isRadial && this.polar) {\n start = point.barX + startAngleRad;\n point.shapeType = 'arc';\n point.shapeArgs = this.polar.arc(y + height, y, start, start + (point.pointWidth || 0));\n }\n else {\n shapeArgs.height = height;\n shapeArgs.y = y;\n const { x = 0, width = 0 } = shapeArgs;\n // #17912, aligning column range points\n // merge if shapeArgs contains more properties e.g. for 3d\n point.shapeArgs = merge(point.shapeArgs, this.crispCol(x, y, width, height));\n point.tooltipPos = chart.inverted ?\n [\n yAxis.len + yAxis.pos - chart.plotLeft - y -\n height / 2,\n xAxis.len + xAxis.pos - chart.plotTop - x -\n width / 2,\n height\n ] : [\n xAxis.left - chart.plotLeft + x + width / 2,\n yAxis.pos - chart.plotTop + y + height / 2,\n height\n ]; // Don't inherit from column tooltip position - #3372\n }\n }\n });\n }\n}\n/* *\n *\n * Static Properties\n *\n * */\nColumnRangeSeries.defaultOptions = merge(ColumnSeries.defaultOptions, AreaRangeSeries.defaultOptions, columnRangeOptions);\naddEvent(ColumnRangeSeries, 'afterColumnTranslate', function () {\n ColumnRangeSeries.prototype.afterColumnTranslate.apply(this);\n}, { order: 5 });\nextend(ColumnRangeSeries.prototype, {\n directTouch: true,\n pointClass: ColumnRangePoint,\n trackerGroups: ['group', 'dataLabelsGroup'],\n adjustForMissingColumns: columnProto.adjustForMissingColumns,\n animate: columnProto.animate,\n crispCol: columnProto.crispCol,\n drawGraph: noop,\n drawPoints: columnProto.drawPoints,\n getSymbol: noop,\n drawTracker: columnProto.drawTracker,\n getColumnMetrics: columnProto.getColumnMetrics\n});\nSeriesRegistry.registerSeriesType('columnrange', ColumnRangeSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnRangeSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `columnrange` series. If the [type](#series.columnrange.type)\n * option is not specified, it is inherited from\n * [chart.type](#chart.type).\n *\n * @extends series,plotOptions.columnrange\n * @excluding dataParser, dataURL, stack, stacking\n * @product highcharts highstock\n * @requires highcharts-more\n * @apioption series.columnrange\n */\n/**\n * An array of data points for the series. For the `columnrange` series\n * type, points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n * to `x,low,high`. If the first value is a string, it is applied as the name\n * of the point, and the `x` value is inferred. The `x` value can also be\n * omitted, in which case the inner arrays should be of length 2\\. Then the\n * `x` value is automatically calculated, either starting at 0 and\n * incremented by 1, or from `pointStart` and `pointInterval` given in the\n * series options.\n * ```js\n * data: [\n * [0, 4, 2],\n * [1, 2, 1],\n * [2, 9, 10]\n * ]\n * ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.columnrange.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * low: 0,\n * high: 4,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * low: 5,\n * high: 3,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @basic\n * @type {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends series.arearange.data\n * @excluding marker\n * @product highcharts highstock\n * @apioption series.columnrange.data\n */\n/**\n * @extends series.columnrange.dataLabels\n * @product highcharts highstock\n * @apioption series.columnrange.data.dataLabels\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.columnrange.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.columnrange.states.select\n */\n''; // Adds doclets above into transpiled\n","/* *\n *\n * Imports\n *\n * */\nimport { addEvent, correctFloat, defined, pick } from '../../Shared/Utilities.js';\n/* *\n *\n * Functions\n *\n * */\n/** @internal */\nfunction chartGetHoverPane(eventArgs) {\n const chart = this;\n let hoverPane;\n if (eventArgs) {\n chart.pane.forEach((pane) => {\n const x = eventArgs.chartX - chart.plotLeft, y = eventArgs.chartY - chart.plotTop;\n if (isInsidePane(x, y, pane.center)) {\n hoverPane = pane;\n }\n });\n }\n return hoverPane;\n}\n/** @internal */\nfunction compose(ChartClass, PointerClass) {\n const chartProto = ChartClass.prototype;\n if (!chartProto.getHoverPane) {\n chartProto.collectionsWithUpdate.push('pane');\n chartProto.getHoverPane = chartGetHoverPane;\n addEvent(ChartClass, 'afterIsInsidePlot', onChartAfterIsInsiderPlot);\n addEvent(PointerClass, 'afterGetHoverData', onPointerAfterGetHoverData);\n addEvent(PointerClass, 'beforeGetHoverData', onPointerBeforeGetHoverData);\n }\n}\n/**\n * Check whether element is inside or outside pane.\n * @internal\n * @param {number} x\n * Element's x coordinate\n * @param {number} y\n * Element's y coordinate\n * @param {Array<number>} center\n * Pane's center (x, y) and diameter\n * @param {number} startAngle\n * Pane's normalized start angle in radians (<-PI, PI>)\n * @param {number} endAngle\n * Pane's normalized end angle in radians (<-PI, PI>)\n */\nfunction isInsidePane(x, y, center, startAngle, endAngle) {\n let insideSlice = true;\n const cx = center[0], cy = center[1], twoPi = 2 * Math.PI;\n const distance = Math.sqrt(Math.pow(x - cx, 2) + Math.pow(y - cy, 2));\n if (defined(startAngle) && defined(endAngle)) {\n // Round angle to N-decimals to avoid numeric errors\n let angle = Math.atan2(correctFloat(y - cy, 8), correctFloat(x - cx, 8));\n // Normalize angle to [0, 2π)\n angle = (angle + twoPi) % (twoPi);\n startAngle = (startAngle + twoPi) % (twoPi);\n endAngle = (endAngle + twoPi) % (twoPi);\n // Ignore full circle panes:\n if (Math.abs(endAngle - startAngle) > 1e-6) {\n // If the normalized start angle is greater than the end angle,\n // it means the arc wraps around 0°. In this case, we check\n // if the angle falls into either [startAngle, 2π) or [0, endAngle].\n if (startAngle > endAngle) {\n insideSlice = (angle >= startAngle ||\n angle <= endAngle);\n }\n else {\n // In this case, we simply check if angle is within the\n // [startAngle, endAngle] range\n insideSlice = angle >= startAngle &&\n angle <= endAngle;\n }\n }\n }\n else {\n // If no start/end angles are defined, treat it as a full circle\n insideSlice = true;\n }\n // Round up radius because x and y values are rounded\n return distance <= Math.ceil(center[2] / 2) && insideSlice;\n}\n/**\n * Check if (x, y) position is within pane for polar.\n * @internal\n */\nfunction onChartAfterIsInsiderPlot(e) {\n const chart = this;\n if (chart.polar) {\n if (e.options.inverted) {\n [e.x, e.y] = [e.y, e.x];\n }\n e.isInsidePlot = chart.pane.some((pane) => isInsidePane(e.x, e.y, pane.center, pane.axis && pane.axis.normalizedStartAngleRad, pane.axis && pane.axis.normalizedEndAngleRad));\n }\n}\n/**\n * @internal\n */\nfunction onPointerAfterGetHoverData(eventArgs) {\n const chart = this.chart;\n if (eventArgs.hoverPoint &&\n eventArgs.hoverPoint.plotX &&\n eventArgs.hoverPoint.plotY &&\n chart.hoverPane &&\n !isInsidePane(eventArgs.hoverPoint.plotX, eventArgs.hoverPoint.plotY, chart.hoverPane.center)) {\n eventArgs.hoverPoint = void 0;\n }\n}\n/** @internal */\nfunction onPointerBeforeGetHoverData(eventArgs) {\n const chart = this.chart;\n if (chart.polar) {\n // Find pane we are currently hovering over.\n chart.hoverPane = chart.getHoverPane(eventArgs);\n // Edit filter method to handle polar\n eventArgs.filter = function (s) {\n return (s.visible &&\n !(!eventArgs.shared && s.directTouch) && // #3821\n pick(s.options.enableMouseTracking, true) &&\n (!chart.hoverPane || s.xAxis.pane === chart.hoverPane));\n };\n }\n else {\n chart.hoverPane = void 0;\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nconst PaneComposition = {\n compose\n};\n/** @internal */\nexport default PaneComposition;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport D from '../../Core/Defaults.js';\nconst { defaultOptions } = D;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A background item or an array of such for the pane. When used in\n * `Highcharts.setOptions` for theming, the background must be a single item.\n *\n * @sample highcharts/pane/background\n * Pane background options\n * @sample {highcharts} highcharts/series-solidgauge/pane-borderradius\n * Solid gauge with background settings\n *\n * @type {*|Array<*>}\n * @requires highcharts-more\n * @optionparent pane.background\n */\nconst background = {\n /**\n * An additional class name to apply to the pane background.\n *\n * @sample {highcharts} highcharts/css/pane/\n * Panes styled by CSS\n * @sample {highstock} highcharts/css/pane/\n * Panes styled by CSS\n * @sample {highmaps} highcharts/css/pane/\n * Panes styled by CSS\n *\n * @type {string}\n * @since 5.0.0\n * @requires highcharts-more\n * @apioption pane.background.className\n */\n /**\n * The shape of the pane background. When `solid`, the background\n * is circular. When `arc`, the background extends only from the min\n * to the max of the value axis.\n *\n * @type {Highcharts.PaneBackgroundShapeValue}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n */\n shape: 'arc',\n /**\n * The specific border radius of the pane background when the shape is\n * `arc`. Can be a number (pixels) or a percentage string. Defaults to the\n * value of `pane.borderRadius`.\n *\n * @since 11.4.2\n * @sample highcharts/series-solidgauge/pane-borderradius Circular gauge\n * and pane with equal border radius\n * @product highcharts\n * @type {number|string}\n * @requires highcharts-more\n */\n borderRadius: void 0,\n /**\n * The pixel border width of the pane background.\n *\n * @sample highcharts/pane/background\n * Pane background options\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n */\n borderWidth: 0,\n /**\n * The pane background border color.\n *\n * @sample highcharts/pane/background\n * Pane background options\n * @type {Highcharts.ColorType}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n */\n borderColor: 'var(--highcharts-neutral-color-20)',\n /**\n * The background color or gradient for the pane.\n *\n * @sample highcharts/pane/background\n * Pane background options\n * @type {Highcharts.ColorType}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n */\n backgroundColor: 'var(--highcharts-neutral-color-3)',\n /** @ignore-option */\n from: -Number.MAX_VALUE, // Corrected to axis min\n /**\n * The inner radius of the pane background. Can be either numeric\n * (pixels) or a percentage string. Defaults to match the `pane.innerSize`.\n *\n * @type {number|string}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @apioption pane.background.innerRadius\n */\n /** @ignore-option */\n to: Number.MAX_VALUE, // Corrected to axis max\n /**\n * The outer radius of the circular pane background. Can be either\n * numeric (pixels) or a percentage string.\n *\n * @type {number|string}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n */\n outerRadius: '100%'\n};\n/**\n * The pane serves as a container for axes and backgrounds for circular\n * gauges and polar charts.\n *\n * When used in `Highcharts.setOptions` for theming, the pane must be a single\n * object, otherwise arrays are supported.\n *\n * @type {*|Array<*>}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @optionparent pane\n */\nconst pane = {\n /**\n * The end angle of the polar X axis or gauge value axis, given in\n * degrees where 0 is north. Defaults to [startAngle](#pane.startAngle)\n * + 360 for polar charts, `startAngle` + 240 for gauges.\n *\n * @sample {highcharts} highcharts/pane/size\n * Responsive pane size and center\n * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n * VU-meter with custom start and end angle\n *\n * @type {number}\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @apioption pane.endAngle\n */\n /**\n * The border radius of the elements of the pane. This affects the pane\n * background, plot bands and solid gauges, unless they have specific\n * border radius settings.\n *\n * @sample highcharts/pane/borderradius\n * Border radius\n * @type {number|string}\n * @since 13.0.0\n * @product highcharts\n */\n borderRadius: 3,\n /**\n * The center of a polar chart or angular gauge, given as an array of [x, y]\n * positions. Positions can be given as integers that transform to pixels,\n * or as percentages of the plot area size.\n *\n * By default, the center is calculated to fit the plot area, depending on\n * the `startAngle` and `endAngle`, `margin`, background shape, axis labels,\n * and gauge data labels.\n *\n * @sample {highcharts} highcharts/pane/size\n * Responsive pane size and center\n * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n * Two gauges with different center\n *\n * @type {Array<string|number>}\n * @default [\"50%\", undefined]\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @apioption pane.center\n */\n /**\n * The inner size of the pane, either as a number defining pixels, or a\n * percentage defining a percentage of the pane's size. Defaults to 0 on\n * polar charts, 80% on gauges.\n *\n * @sample {highcharts} highcharts/pane/size-percent\n * Gauge with pane sizing\n * @sample {highcharts} highcharts/series-polar/column-inverted-inner\n * The inner size set to 20%\n *\n * @type {number|string}\n * @product highcharts\n * @requires highcharts-more\n * @apioption pane.innerSize\n */\n /**\n * The size of the pane, either as a number defining pixels, or a percentage\n * defining a percentage of the available plot area (the smallest of the\n * plot height or plot width).\n *\n * By default, the size is calculated to fit the plot area, depending on the\n * `startAngle` and `endAngle`, `margin`, background shape, axis labels,\n * and gauge data labels.\n *\n * @sample {highcharts} highcharts/pane/size-percent\n * Gauge with pane sizing\n * @sample {highcharts} highcharts/pane/size\n * Responsive pane size and center\n * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n * Smaller size\n *\n * @type {number|string}\n * @default undefined\n * @product highcharts\n * @apioption pane.size\n */\n /**\n * The start angle of the polar X axis or gauge axis, given in degrees\n * where 0 is north. Defaults to 0 for polar charts, -135 for gauges.\n *\n * @sample {highcharts} highcharts/pane/size\n * Responsive pane size and center\n * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n * VU-meter with custom start and end angle\n *\n * @since 2.3.0\n * @product highcharts\n * @type {number}\n * @requires highcharts-more\n * @apioption pane.startAngle\n */\n /**\n * The thickness of the pane in terms of pixels. This applies to the pane\n * background, plot bands and solid gauges. Use this for a fixed width pane\n * across different sizes, where `size` and `innerSize` are not practical.\n *\n * @sample {highcharts} highcharts/pane/thickness\n * Pane thickness\n *\n * @since 13.0.0\n * @product highcharts\n * @type {number}\n * @requires highcharts-more\n * @apioption pane.thickness\n */\n /**\n * The margin between the pane and the plot area when auto-fitting the pane.\n * This does not apply when an explicit `pane.size` is set. An array sets\n * individual margins for the sides in the order [top, right, bottom, left].\n *\n * By default, the margin is approximated to make room for the radial axis\n * labels of a gauge chart.\n *\n * @type {number|Array<number>}\n * @since 13.0.0\n * @sample {highcharts} highcharts/pane/margin\n */\n margin: void 0\n};\ndefaultOptions.pane = pane;\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nconst PaneDefaults = {\n pane,\n background\n};\n/** @internal */\nexport default PaneDefaults;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport CU from '../../Series/CenteredUtilities.js';\nimport PaneComposition from './PaneComposition.js';\nimport PaneDefaults from './PaneDefaults.js';\nimport { defined, extend, getAlignFactor, isNumber, merge, relativeLength, splat } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\n/**\n * The Pane object allows options that are common to a set of X and Y axes.\n *\n * In the future, this can be extended to basic Highcharts and Highcharts Stock.\n *\n * @internal\n * @class\n * @name Highcharts.Pane\n * @param {Highcharts.PaneOptions} options\n * @param {Highcharts.Chart} chart\n */\nclass Pane {\n /* *\n *\n * Constructor\n *\n * */\n constructor(options, chart) {\n this.coll = 'pane'; // Member of chart.pane\n this.init(options, chart);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Initialize the Pane object\n *\n * @internal\n * @function Highcharts.Pane#init\n *\n * @param {Highcharts.PaneOptions} options\n *\n * @param {Highcharts.Chart} chart\n */\n init(options, chart) {\n this.chart = chart;\n this.background = [];\n chart.pane.push(this);\n this.setOptions(options);\n }\n /**\n * Check if the chart has a series of a specific type\n * @internal\n */\n hasSeriesType(type) {\n return Boolean(this.chart.options?.chart?.type === type ||\n this.chart.options?.series?.some((s) => s.type === type));\n }\n /**\n * Set options override. Angular charts have a default background (#3318)\n * and an inner size.\n *\n * @internal\n */\n setOptions(options) {\n this.options = merge(PaneDefaults.pane, this.chart.angular ? {\n // Add a single background element with default properties\n background: {},\n // An inner size for plot bands and axis layout\n innerSize: '85%'\n } : {}, options);\n }\n /**\n * Render the pane with its backgrounds.\n *\n * @internal\n * @function Highcharts.Pane#render\n */\n render() {\n const options = this.options, renderer = this.chart.renderer;\n if (!this.group) {\n this.group = renderer.g('pane-group')\n .attr({ zIndex: options.zIndex || 0 })\n .add();\n }\n this.updateCenter();\n let backgroundOption = this.options.background;\n // Render the backgrounds\n if (backgroundOption) {\n backgroundOption = splat(backgroundOption);\n const len = Math.max(backgroundOption.length, this.background.length || 0);\n for (let i = 0; i < len; i++) {\n // #6641 - if axis exists, chart is circular and apply\n // background\n if (backgroundOption[i] && this.axis) {\n this.renderBackground(merge(PaneDefaults.background, \n // Defaults inherited from the `pane` option\n {\n borderRadius: this.options.borderRadius\n }, backgroundOption[i]), i);\n }\n else if (this.background[i]) {\n this.background[i] = this.background[i].destroy();\n this.background.splice(i, 1);\n }\n }\n }\n }\n /**\n * Render an individual pane background.\n *\n * @internal\n * @function Highcharts.Pane#renderBackground\n *\n * @param {Highcharts.PaneBackgroundOptions} backgroundOptions\n * Background options\n *\n * @param {number} i\n * The index of the background in this.backgrounds\n */\n renderBackground(backgroundOptions, i) {\n const attribs = {\n 'class': 'highcharts-pane ' + (backgroundOptions.className || '')\n };\n let method = 'animate';\n if (!this.chart.styledMode) {\n extend(attribs, {\n 'fill': backgroundOptions.backgroundColor,\n 'stroke': backgroundOptions.borderColor,\n 'stroke-width': backgroundOptions.borderWidth\n });\n }\n if (!this.background[i]) {\n this.background[i] = this.chart.renderer\n .path()\n .add(this.group);\n method = 'attr';\n }\n this.background[i][method]({\n 'd': this.axis.getPlotBandPath(backgroundOptions.from, backgroundOptions.to, backgroundOptions)\n }).attr(attribs);\n }\n /**\n * Gets the center for the pane and its axis.\n *\n * @internal\n * @function Highcharts.Pane#updateCenter\n */\n updateCenter() {\n const { axis, chart, options } = this, { plotHeight, plotWidth } = chart, centerY = options.center?.[1], m = options.margin, labels = this.axis?.options.labels, thickness = options.thickness, marginLoose = Array.isArray(m) ?\n m :\n [m, m, m, m], margin = [];\n let size = options.size, sizeFromAngle, appliedCenterMargin = 0, axisLabelMargin = 0;\n // Get the required margin in order to display the data label in or\n // below the center\n const dataLabelMargin = Math.min(chart.series\n .reduce((max, s) => {\n if (!s.is('gauge') || s.yAxis?.pane !== this) {\n return max;\n }\n const dl = splat(s.options.dataLabels)[0];\n let dlMargin = 0;\n if (dl && dl.enabled !== false) {\n // 30 is an approximation of the default data label\n // height. It is not yet rendered.\n dlMargin = (1 - getAlignFactor(dl.verticalAlign)) * 30 +\n (dl.y || 0);\n }\n return Math.max(max, dlMargin);\n }, 0), plotHeight * 0.3);\n // Get the required margin to make room for the radial axis labels.\n if (labels?.enabled) {\n const fontSize = String(labels.style?.fontSize || ''), \n // Approximate the line height because we don't have the\n // actual label to measure\n lineHeightGuess = (/px$/.test(fontSize) ?\n parseFloat(fontSize) :\n /em$/.test(fontSize) ?\n parseFloat(fontSize) * 12 :\n 12) * 1.2, // 1.2 is a line height approximation\n m = Math.max(labels.distance || 0, 0) + lineHeightGuess / 2;\n axisLabelMargin = m;\n }\n marginLoose.forEach((m, i) => {\n margin[i] = m ?? Math.max(axisLabelMargin || 0);\n });\n // Handle auto-positioning when size and center are undefined\n if (axis &&\n (size === void 0 || centerY === void 0)) {\n const { endAngleRad, startAngleRad } = axis, deg2rad = Math.PI * 2 / 360, crossingBottom = (startAngleRad < Math.PI / 2 && endAngleRad > Math.PI / 2) ||\n // Circle background should fill out the plot area\n splat(options.background).some((b) => b?.shape === 'circle'), maxAngle = crossingBottom ? Math.PI : Math.max(Math.abs(startAngleRad + Math.PI / 2), Math.abs(endAngleRad + Math.PI / 2)), sin = Math.sin(maxAngle - Math.PI / 2), \n // The size doesn't increase further to angles below this\n // minimum. For linear gauges, this means that the pivot is kept\n // visible.\n minimumAngle = 90, sizeRatio = 0.5 + 0.5 * Math.max(sin, Math.sin(deg2rad * (minimumAngle - 90)));\n sizeFromAngle = (plotHeight - margin[0] - margin[2]) /\n sizeRatio;\n if (size === void 0) {\n size = Math.max(Math.min(sizeFromAngle, plotWidth - margin[1] - margin[3]), 1);\n // Make sure there is space for the data label (centerMargin)\n const overflow = size + margin[0] + margin[2] +\n 2 * (dataLabelMargin - plotHeight);\n if (overflow > 0) {\n appliedCenterMargin = overflow;\n size = Math.max(1, size - appliedCenterMargin);\n }\n }\n }\n // Run the standard centering\n this.center = (axis ||\n {}).center = CU.getCenter.call(this);\n // Apply the auto-positioning\n if (isNumber(size) && size >= 0) {\n this.center[2] = size;\n if (isNumber(thickness)) {\n this.center[3] = this.center[2] - thickness * 2;\n }\n else {\n this.center[3] = Math.min(size, relativeLength(options.innerSize || 0, size));\n }\n }\n if (!defined(centerY)) {\n if (options.size) {\n this.center[1] = plotHeight / 2;\n }\n else if (isNumber(sizeFromAngle)) {\n this.center[1] = (sizeFromAngle +\n this.center[2] -\n appliedCenterMargin) / 4 + margin[0];\n }\n }\n }\n /**\n * Destroy the pane item\n *\n * @ignore\n * @internal\n * @function Highcharts.Pane#destroy\n * /\n destroy: function () {\n erase(this.chart.pane, this);\n this.background.forEach(function (background) {\n background.destroy();\n });\n this.background.length = 0;\n this.group = this.group.destroy();\n },\n */\n /**\n * Update the pane item with new options\n *\n * @internal\n * @function Highcharts.Pane#update\n * @param {Highcharts.PaneOptions} options\n * New pane options\n * @param {boolean} [redraw]\n */\n update(options, redraw) {\n merge(true, this.options, options);\n this.setOptions(this.options);\n this.render();\n this.chart.axes.forEach(function (axis) {\n if (axis.pane === this) {\n axis.pane = null;\n axis.update({}, redraw);\n }\n }, this);\n }\n}\n/* *\n *\n * Static Properties\n *\n * */\nPane.compose = PaneComposition.compose;\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default Pane;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * @typedef {\"arc\"|\"circle\"|\"solid\"} Highcharts.PaneBackgroundShapeValue\n */\n''; // Keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Extension for radial axes\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\n/**\n * Circular axis around the perimeter of a polar chart.\n * @internal\n */\nconst defaultCircularOptions = {\n gridLineWidth: 1, // Spokes\n labels: {\n align: void 0, // Auto\n x: 0,\n y: void 0 // Auto\n },\n maxPadding: 0,\n minPadding: 0,\n showLastLabel: false,\n tickLength: 0\n};\n/**\n * The default options extend defaultYAxisOptions.\n * @internal\n */\nconst defaultRadialGaugeOptions = {\n gridLineWidth: 0,\n labels: {\n align: 'center',\n distance: 15,\n x: 0,\n y: void 0 // Auto\n },\n minorGridLineWidth: 0,\n minorTickLength: 5,\n minorTickPosition: 'inside',\n minorTicksPerMajor: 10,\n minorTickWidth: 1,\n tickLength: void 0,\n tickWidth: 2,\n tickPixelInterval: 100,\n tickPosition: 'inside',\n title: {\n rotation: 0,\n text: ''\n },\n zIndex: 2 // Behind dials, points in the series group\n};\n/**\n * Radial axis, like a spoke in a polar chart.\n * @internal\n */\nconst defaultRadialOptions = {\n /**\n * In a polar chart, this is the angle of the Y axis in degrees, where\n * 0 is up and 90 is right. The angle determines the position of the\n * axis line and the labels, though the coordinate system is unaffected.\n * Since v8.0.0 this option is also applicable for X axis (inverted\n * polar).\n *\n * @sample {highcharts} highcharts/xaxis/angle/\n * Custom X axis' angle on inverted polar chart\n * @sample {highcharts} highcharts/yaxis/angle/\n * Dual axis polar chart\n *\n * @type {number}\n * @default 0\n * @since 4.2.7\n * @product highcharts\n * @apioption xAxis.angle\n */\n /**\n * In a gauge chart, this option determines the inner radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n * By default, the inner radius is controlled by the [thickness](\n * #yAxis.plotBands.thickness) option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.innerRadius\n */\n /**\n * In a gauge chart, this option determines the outer radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 100%\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.outerRadius\n */\n /**\n * In a gauge chart, this option sets the width of the plot band\n * stretching along the perimeter. It can be given as a percentage\n * string, like `\"10%\"`, or as a pixel number, like `10`. The default\n * value 10 is the same as the default [tickLength](#yAxis.tickLength),\n * thus making the plot band act as a background for the tick markers.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 10\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.thickness\n */\n /**\n * Polar charts only. Whether the grid lines should draw as a polygon\n * with straight lines between categories, or as circles. Can be either\n * `circle` or `polygon`. Since v8.0.0 this option is also applicable\n * for X axis (inverted polar).\n *\n * @sample {highcharts} highcharts/demo/polar-spider/\n * Polygon grid lines\n * @sample {highcharts} highcharts/xaxis/gridlineinterpolation/\n * Circle and polygon on inverted polar\n * @sample {highcharts} highcharts/yaxis/gridlineinterpolation/\n * Circle and polygon\n *\n * @type {string}\n * @product highcharts\n * @validvalue [\"circle\", \"polygon\"]\n * @apioption xAxis.gridLineInterpolation\n */\n gridLineInterpolation: 'circle',\n gridLineWidth: 1,\n labels: {\n align: 'right',\n padding: 5,\n x: -3,\n y: -2\n },\n showLastLabel: false,\n title: {\n x: 4,\n text: null,\n rotation: 90\n }\n};\n/* *\n *\n * Default Export\n *\n * */\nconst RadialAxisDefaults = {\n /** @internal */\n circular: defaultCircularOptions,\n radial: defaultRadialOptions,\n /** @internal */\n radialGauge: defaultRadialGaugeOptions\n};\nexport default RadialAxisDefaults;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport RadialAxisDefaults from './RadialAxisDefaults.js';\nimport { optionsToObject } from '../../Extensions/BorderRadius.js';\nimport D from '../Defaults.js';\nconst { defaultOptions } = D;\nimport H from '../Globals.js';\nconst { composed, noop } = H;\nimport { addEvent, correctFloat, defined, extend, fireEvent, isNumber, isObject, merge, pick, pushUnique, relativeLength, splat, wrap } from '../../Shared/Utilities.js';\n/* *\n *\n * Composition\n *\n * */\n/** @internal */\nvar RadialAxis;\n(function (RadialAxis) {\n /* *\n *\n * Declarations\n *\n * */\n RadialAxis.radialDefaultOptions = merge(RadialAxisDefaults);\n /* *\n *\n * Functions\n *\n * */\n /**\n * In case of auto connect, add one closestPointRange to the max value\n * right before tickPositions are computed, so that ticks will extend\n * passed the real max.\n * @internal\n */\n function beforeSetTickPositions() {\n // If autoConnect is true, polygonal grid lines are connected, and\n // one closestPointRange is added to the X axis to prevent the last\n // point from overlapping the first.\n this.autoConnect = (this.isCircular &&\n typeof pick(this.userMax, this.options.max) === 'undefined' &&\n correctFloat(this.endAngleRad - this.startAngleRad) ===\n correctFloat(2 * Math.PI));\n // This will lead to add an extra tick to xAxis in order to display\n // a correct range on inverted polar\n if (!this.isCircular && this.chart.inverted) {\n this.max++;\n }\n if (this.autoConnect && isNumber(this.max)) {\n this.max += ((this.categories && 1) ||\n this.pointRange ||\n this.closestPointRange ||\n 0); // #1197, #2260\n }\n }\n /**\n * Augments methods for the value axis.\n *\n * @internal\n *\n * @param {Highcharts.Axis} AxisClass\n * Axis class to extend.\n *\n * @param {Highcharts.Tick} TickClass\n * Tick class to use.\n *\n * @return {Highcharts.Axis}\n * Axis composition.\n */\n function compose(AxisClass, TickClass) {\n if (pushUnique(composed, 'Axis.Radial')) {\n addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n addEvent(AxisClass, 'afterTickSize', onAxisAfterTickSize);\n addEvent(AxisClass, 'autoLabelAlign', onAxisAutoLabelAlign);\n addEvent(AxisClass, 'destroy', onAxisDestroy);\n addEvent(AxisClass, 'init', onAxisInit);\n addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);\n addEvent(TickClass, 'afterGetLabelPosition', onTickAfterGetLabelPosition);\n addEvent(TickClass, 'afterGetPosition', onTickAfterGetPosition);\n addEvent(H, 'setOptions', onGlobalSetOptions);\n wrap(AxisClass.prototype, 'getMinorTickInterval', wrapAxisGetMinorTickInterval);\n wrap(TickClass.prototype, 'getMarkPath', wrapTickGetMarkPath);\n }\n return AxisClass;\n }\n RadialAxis.compose = compose;\n /**\n * Attach and return collecting function for labels in radial axis for\n * anti-collision.\n *\n * @internal\n */\n function createLabelCollector() {\n return () => {\n if (this.isRadial &&\n this.tickPositions &&\n // Undocumented option for now, but working\n this.options.labels &&\n this.options.labels.allowOverlap !== true) {\n return this.tickPositions\n .map((pos) => this.ticks[pos]?.label)\n .filter((label) => Boolean(label));\n }\n };\n }\n /**\n * Creates an empty collector function.\n * @internal\n */\n function createLabelCollectorHidden() {\n return noop;\n }\n /**\n * Find the correct end values of crosshair in polar.\n * @internal\n */\n function getCrosshairPosition(options, x1, y1) {\n const center = this.pane.center;\n let value = options.value, shapeArgs, end, x2, y2;\n if (this.isCircular) {\n if (!defined(value)) {\n // When the snap is set to false\n x2 = options.chartX || 0;\n y2 = options.chartY || 0;\n value = this.translate(Math.atan2(y2 - y1, x2 - x1) - this.startAngleRad, true);\n }\n else if (options.point) {\n // When the snap is set to true\n shapeArgs = options.point.shapeArgs || {};\n if (shapeArgs.start) {\n // Find a true value of the point based on the\n // angle\n value = this.chart.inverted ?\n this.translate(options.point.rectPlotY, true) :\n options.point.x;\n }\n }\n end = this.getPosition(value);\n x2 = end.x;\n y2 = end.y;\n }\n else {\n if (!defined(value)) {\n x2 = options.chartX;\n y2 = options.chartY;\n }\n if (defined(x2) && defined(y2)) {\n // Calculate radius of non-circular axis' crosshair\n y1 = center[1] + this.chart.plotTop;\n value = this.translate(Math.min(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), center[2] / 2) - center[3] / 2, true);\n }\n }\n return [value, x2 || 0, y2 || 0];\n }\n /**\n * Get the path for the axis line. This method is also referenced in the\n * getPlotLinePath method.\n *\n * @internal\n * @param {number} _lineWidth\n * Line width is not used.\n * @param {number} [radius]\n * Radius of radial path.\n * @param {number} [innerRadius]\n * Inner radius of radial path.\n */\n function getLinePath(_lineWidth, radius, innerRadius) {\n const center = this.pane.center, chart = this.chart, left = this.left || 0, top = this.top || 0;\n let end, path, r = pick(radius, center[2] / 2 - this.offset);\n innerRadius ?? (innerRadius = this.horiz ? 0 : this.center && -this.center[3] / 2);\n // In case when innerSize of pane is set, it must be included\n if (innerRadius && innerRadius > 0) {\n r += innerRadius;\n }\n if (this.isCircular || typeof radius !== 'undefined') {\n path = this.chart.renderer.symbols.arc(left + center[0], top + center[1], r, r, {\n start: this.startAngleRad,\n end: this.endAngleRad,\n open: true,\n innerR: 0\n });\n // Bounds used to position the plotLine label next to the line\n // (#7117)\n path.xBounds = [left + center[0]];\n path.yBounds = [top + center[1] - r];\n }\n else {\n end = this.postTranslate(this.angleRad, r);\n path = [\n [\n 'M',\n this.center[0] + chart.plotLeft,\n this.center[1] + chart.plotTop\n ],\n ['L', end.x, end.y]\n ];\n }\n return path;\n }\n /**\n * Wrap the getOffset method to return zero offset for title or labels\n * in a radial axis.\n */\n function getOffset() {\n const axisProto = this.constructor.prototype;\n // Call the Axis prototype method (the method we're in now is on the\n // instance)\n axisProto.getOffset.call(this);\n const offset = this.options.offset ?? (this.pane.hasSeriesType('gauge') ?\n '-20%' : void 0);\n if (defined(offset)) {\n this.offset = relativeLength(offset, this.center[2] / 2) * -1;\n }\n // Title or label offsets are not counted\n this.chart.axisOffset[this.side] = 0;\n }\n /**\n * Find the path for plot bands along the radial axis.\n *\n * @internal\n */\n function getPlotBandPath(from, to, options) {\n const chart = this.chart, radiusToPixels = (radius) => {\n if (typeof radius === 'string') {\n let r = parseInt(radius, 10);\n if (percentRegex.test(radius)) {\n r = (r * fullRadius) / 100;\n }\n return r;\n }\n return radius;\n }, center = this.center, { endAngleRad, startAngleRad } = this, borderRadius = optionsToObject(options.borderRadius ??\n this.pane.options.borderRadius), fullRadius = center[2] / 2, offset = Math.min(this.offset || 0, 0), left = this.left || 0, top = this.top || 0, percentRegex = /%$/, isCircular = this.isCircular, // X axis in a polar chart\n trueBands = this.options.plotBands || [], index = trueBands.indexOf(options);\n let start, end, angle, xOnPerimeter, open, path, outerRadius = pick(radiusToPixels(options.outerRadius), fullRadius), innerRadius = radiusToPixels(options.innerRadius), thickness = radiusToPixels(options.thickness), brStart = true, brEnd = true;\n // Apply conditional border radius, only for ends of band stacks\n if (borderRadius.radius &&\n borderRadius.scope === 'stack' &&\n index > -1) {\n if (trueBands[index - 1] && trueBands[index - 1].to === from) {\n brStart = false;\n }\n if (trueBands[index + 1] && trueBands[index + 1].from === to) {\n brEnd = false;\n }\n }\n // Polygonal plot bands\n if (this.options.gridLineInterpolation === 'polygon') {\n path = this.getPlotLinePath({ value: from }).concat(this.getPlotLinePath({ value: to, reverse: true }));\n // Circular grid bands\n }\n else {\n // Keep within bounds\n if (isNumber(this.min)) {\n from = Math.max(from, this.min);\n }\n if (isNumber(this.max)) {\n to = Math.min(to, this.max);\n }\n const transFrom = this.translate(from), transTo = this.translate(to);\n // Plot bands on Y axis (radial axis) - inner and outer\n // radius depend on to and from\n if (!isCircular) {\n outerRadius = transFrom || 0;\n innerRadius = transTo || 0;\n }\n // Allow background for empty axis\n if (!isNumber(this.min) &&\n !isNumber(this.max) &&\n // Not for plot bands\n !options.color &&\n !options.className) {\n start = startAngleRad;\n end = endAngleRad;\n // Handle full circle\n }\n else if (options.shape === 'circle' || !isCircular) {\n start = -Math.PI / 2;\n end = Math.PI * 1.5;\n open = true;\n }\n else {\n start = startAngleRad + (transFrom || 0);\n end = startAngleRad + (transTo || 0);\n }\n outerRadius -= offset; // #5283\n if (isNumber(thickness)) {\n thickness -= offset; // #5283\n }\n path = chart.renderer.symbols.arc(left + center[0], top + center[1], outerRadius, outerRadius, {\n // Math is for reversed yAxis (#3606)\n start: Math.min(start, end),\n end: Math.max(start, end),\n innerR: pick(innerRadius, isNumber(thickness) ? outerRadius - thickness : void 0, this.center[3] / 2),\n open,\n borderRadius: borderRadius.radius,\n brStart,\n brEnd\n });\n // Provide positioning boxes for the label (#6406)\n if (isCircular) {\n angle = (end + start) / 2;\n xOnPerimeter = (left +\n center[0] +\n (center[2] / 2) * Math.cos(angle));\n path.xBounds = angle > -Math.PI / 2 && angle < Math.PI / 2 ?\n // Right hemisphere\n [xOnPerimeter, chart.plotWidth] :\n // Left hemisphere\n [0, xOnPerimeter];\n path.yBounds = [\n top + center[1] + (center[2] / 2) * Math.sin(angle)\n ];\n // Shift up or down to get the label clear of the perimeter\n path.yBounds[0] += ((angle > -Math.PI && angle < 0) ||\n (angle > Math.PI)) ? -10 : 10;\n }\n }\n return path;\n }\n /**\n * Find the path for plot lines perpendicular to the radial axis.\n */\n function getPlotLinePath(options) {\n const center = this.pane.center, chart = this.chart, inverted = chart.inverted, reverse = options.reverse, backgroundOption = this.pane.options.background, background = backgroundOption ?\n splat(backgroundOption)[0] :\n {}, innerRadius = background.innerRadius || '0%', outerRadius = background.outerRadius || '100%', x1 = center[0] + chart.plotLeft, y1 = center[1] + chart.plotTop, height = this.height, isCrosshair = options.isCrosshair, paneInnerR = center[3] / 2;\n let value = chart.time.parse(options.value) || 0, innerRatio, distance, a, b, otherAxis, xy, tickPositions, crossPos, path;\n const end = this.getPosition(value, center[2] / 2 + (this.isCircular ? this.offset : 0));\n let x2 = end.x, y2 = end.y;\n // Crosshair logic\n if (isCrosshair) {\n // Find crosshair's position and perform destructuring\n // assignment\n crossPos = this.getCrosshairPosition(options, x1, y1);\n value = crossPos[0] || 0;\n x2 = crossPos[1];\n y2 = crossPos[2];\n }\n // Spokes\n if (this.isCircular) {\n distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n a = (typeof innerRadius === 'string') ?\n relativeLength(innerRadius, 1) :\n (innerRadius / distance);\n b = (typeof outerRadius === 'string') ?\n relativeLength(outerRadius, 1) :\n (outerRadius / distance);\n // To ensure that gridLines won't be displayed in area\n // defined by innerSize in case of custom radiuses of pane's\n // background\n if (center && paneInnerR) {\n innerRatio = paneInnerR / distance;\n if (a < innerRatio) {\n a = innerRatio;\n }\n if (b < innerRatio) {\n b = innerRatio;\n }\n }\n path = [\n ['M', x1 + a * (x2 - x1), y1 - a * (y1 - y2)],\n ['L', x2 - (1 - b) * (x2 - x1), y2 + (1 - b) * (y1 - y2)]\n ];\n // Concentric circles\n }\n else {\n // Pick the right values depending if it is grid line or crosshair\n let transValue = this.translate(value);\n // This is required in case when xAxis is non-circular to\n // prevent grid lines (or crosshairs, if enabled) from\n // rendering above the center after they supposed to be\n // displayed below the center point\n if (transValue) {\n if (transValue < 0 || transValue > height) {\n transValue = 0;\n }\n }\n if (this.options.gridLineInterpolation === 'circle') {\n // A value of 0 is in the center, so it won't be\n // visible, but draw it anyway for update and animation\n // (#2366)\n path = this.getLinePath(0, transValue, paneInnerR);\n // Concentric polygons\n }\n else {\n path = [];\n // Find the other axis (a circular one) in the same pane\n chart[inverted ? 'yAxis' : 'xAxis'].forEach((a) => {\n if (a.pane === this.pane) {\n otherAxis = a;\n }\n });\n if (otherAxis) {\n tickPositions = otherAxis.tickPositions;\n if (otherAxis.autoConnect) {\n tickPositions =\n tickPositions.concat([tickPositions[0]]);\n }\n // Reverse the positions for concatenation of polygonal\n // plot bands\n if (reverse) {\n tickPositions = tickPositions.slice().reverse();\n }\n if (transValue) {\n transValue += paneInnerR;\n }\n for (let i = 0; i < tickPositions.length; i++) {\n xy = otherAxis.getPosition(tickPositions[i], transValue);\n path.push(i ? ['L', xy.x, xy.y] : ['M', xy.x, xy.y]);\n }\n }\n }\n }\n return path;\n }\n /**\n * Returns the x, y coordinate of a point given by a value and a pixel\n * distance from center.\n *\n * @internal\n * @param {number} value\n * Point value.\n * @param {number} [length]\n * Distance from center.\n */\n function getPosition(value, length) {\n const translatedVal = this.translate(value);\n return this.postTranslate(this.isCircular ? translatedVal : this.angleRad, // #2848\n // In case when translatedVal is negative, the 0 value must be\n // used instead, in order to deal with lines and labels that\n // fall out of the visible range near the center of a pane\n pick(this.isCircular ?\n length :\n (translatedVal < 0 ? 0 : translatedVal), this.center[2] / 2) - this.offset);\n }\n /**\n * Find the position for the axis title, by default inside the gauge.\n */\n function getTitlePosition() {\n const center = this.center, chart = this.chart, titleOptions = this.options.title;\n return {\n x: chart.plotLeft + center[0] + (titleOptions.x || 0),\n y: (chart.plotTop +\n center[1] -\n ({\n high: 0.5,\n middle: 0.25,\n low: 0\n }[titleOptions.align] *\n center[2]) +\n (titleOptions.y || 0))\n };\n }\n /**\n * Modify radial axis.\n * @internal\n */\n function modify(axis) {\n axis.beforeSetTickPositions = beforeSetTickPositions;\n axis.createLabelCollector = createLabelCollector;\n axis.getCrosshairPosition = getCrosshairPosition;\n axis.getLinePath = getLinePath;\n axis.getOffset = getOffset;\n axis.getPlotBandPath = getPlotBandPath;\n axis.getPlotLinePath = getPlotLinePath;\n axis.getPosition = getPosition;\n axis.getTitlePosition = getTitlePosition;\n axis.postTranslate = postTranslate;\n axis.setAxisSize = setAxisSize;\n axis.setAxisTranslation = setAxisTranslation;\n axis.setOptions = setOptions;\n }\n /**\n * Modify radial axis as hidden.\n * @internal\n *\n * @param {Highcharts.Axis} radialAxis\n * Radial axis to modify.\n */\n function modifyAsHidden(radialAxis) {\n radialAxis.isHidden = true;\n radialAxis.createLabelCollector = createLabelCollectorHidden;\n radialAxis.getOffset = noop;\n radialAxis.redraw = renderHidden;\n radialAxis.render = renderHidden;\n radialAxis.setCategories = noop;\n radialAxis.setTitle = noop;\n }\n /**\n * Finalize modification of axis instance with radial logic.\n */\n function onAxisAfterInit() {\n const chart = this.chart, options = this.options, isHidden = chart.angular && this.isXAxis, pane = this.pane, paneOptions = pane?.options;\n if (!isHidden && pane && (chart.angular || chart.polar)) {\n const fullCircle = Math.PI * 2, startAngle = paneOptions.startAngle ??\n // Gauges start at -135 by default\n (chart.angular ? -135 : 0), \n // Start and end angle options are given in degrees relative to\n // top, while internal computations are in radians relative to\n // right (like SVG).\n start = (startAngle - 90) * Math.PI / 180, end = (pick(paneOptions.endAngle, startAngle + (chart.angular ? 270 : 360)) - 90) * Math.PI / 180;\n // Y axis in polar charts\n this.angleRad = (options.angle || 0) * Math.PI / 180;\n // Gauges\n this.startAngleRad = start;\n this.endAngleRad = end;\n // Normalize Start and End to <0, 2*PI> range\n // (in degrees: <0,360>)\n let normalizedStart = (start % fullCircle + fullCircle) %\n fullCircle, normalizedEnd = (end % fullCircle + fullCircle) % fullCircle;\n // Move normalized angles to <-PI, PI> range (<-180, 180>)\n // to match values returned by Math.atan2()\n if (normalizedStart > Math.PI) {\n normalizedStart -= fullCircle;\n }\n if (normalizedEnd > Math.PI) {\n normalizedEnd -= fullCircle;\n }\n this.normalizedStartAngleRad = normalizedStart;\n this.normalizedEndAngleRad = normalizedEnd;\n }\n }\n /**\n * Gauge-specific tick length\n */\n function onAxisAfterTickSize(e) {\n if (this.chart.angular) {\n const { options, pane } = this;\n if (pane.hasSeriesType('gauge')) {\n e.tickSize = [\n options[`${e.prefix}Length`] ?? 10,\n options[`${e.prefix}Width`] ?? 1\n ];\n // Negate the length\n if (options[`${e.prefix}Position`] === 'inside') {\n e.tickSize[0] *= -1;\n }\n }\n }\n }\n /**\n * Wrap auto label align to avoid setting axis-wide rotation on radial axes.\n * (#4920)\n */\n function onAxisAutoLabelAlign(e) {\n if (this.isRadial) {\n e.align = void 0;\n e.preventDefault();\n }\n }\n /**\n * Remove label collector function on axis remove/update.\n */\n function onAxisDestroy() {\n if (this.chart?.labelCollectors) {\n const index = (this.labelCollector ?\n this.chart.labelCollectors.indexOf(this.labelCollector) :\n -1);\n if (index >= 0) {\n this.chart.labelCollectors.splice(index, 1);\n }\n }\n }\n /**\n * Modify axis instance with radial logic before common axis init.\n */\n function onAxisInit(e) {\n const chart = this.chart, angular = chart.angular, polar = chart.polar, isX = this.isXAxis, coll = this.coll, isHidden = angular && isX, paneIndex = e.userOptions.pane || 0, pane = this.pane = chart.pane && chart.pane[paneIndex];\n let isCircular;\n // Prevent changes for colorAxis\n if (coll === 'colorAxis') {\n this.isRadial = false;\n return;\n }\n // Before prototype.init\n if (angular) {\n if (isHidden) {\n modifyAsHidden(this);\n }\n else {\n modify(this);\n }\n isCircular = !isX;\n }\n else if (polar) {\n modify(this);\n // Check which axis is circular\n isCircular = this.horiz;\n }\n // Disable certain features on angular and polar axes\n if (angular || polar) {\n this.isRadial = true;\n if (!this.labelCollector) {\n this.labelCollector = this.createLabelCollector();\n }\n if (this.labelCollector) {\n // Prevent overlapping axis labels (#9761)\n chart.labelCollectors.push(this.labelCollector);\n }\n }\n else {\n this.isRadial = false;\n }\n // A pointer back to this axis to borrow geometry\n if (pane && isCircular) {\n pane.axis = this;\n }\n this.isCircular = isCircular;\n }\n /**\n * Prepare axis translation.\n */\n function onAxisInitialAxisTranslation() {\n if (this.isRadial) {\n this.beforeSetTickPositions?.();\n }\n }\n /**\n * Find the center position of the label based on the distance option.\n */\n function onTickAfterGetLabelPosition(e) {\n const label = this.label;\n if (!label) {\n return;\n }\n const axis = this.axis, labelBBox = label.getBBox(), labelOptions = axis.options.labels, angle = ((axis.translate(this.pos) + axis.startAngleRad +\n Math.PI / 2) / Math.PI * 180) % 360, correctAngle = Math.round(angle), labelYPosCorrection = !defined(labelOptions.y) ? -labelBBox.height * 0.3 : 0;\n let optionsY = labelOptions.y, ret, centerSlot = 20, // 20 degrees to each side at the top and bottom\n align = labelOptions.align, labelDir = 'end', // Direction of the label 'start' or 'end'\n reducedAngle1 = correctAngle < 0 ?\n correctAngle + 360 : correctAngle, reducedAngle2 = reducedAngle1, translateY = 0, translateX = 0;\n if (axis.isRadial) { // Both X and Y axes in a polar chart\n ret = axis.getPosition(this.pos, (axis.center[2] / 2) +\n relativeLength(labelOptions.distance ?? -25, axis.center[2] / 2) +\n axis.offset);\n // Automatically rotated\n if (labelOptions.rotation === 'auto') {\n label.attr({\n rotation: angle\n });\n // Vertically centered\n }\n else if (!defined(optionsY)) {\n optionsY = (axis.chart.renderer.fontMetrics(label).b -\n labelBBox.height / 2);\n }\n // Automatic alignment\n if (!defined(align)) {\n if (axis.isCircular) { // Y axis\n if (labelBBox.width >\n axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506\n centerSlot = 0;\n }\n if (angle > centerSlot && angle < 180 - centerSlot) {\n align = 'left'; // Right hemisphere\n }\n else if (angle > 180 + centerSlot &&\n angle < 360 - centerSlot) {\n align = 'right'; // Left hemisphere\n }\n else {\n align = 'center'; // Top or bottom\n }\n }\n else {\n align = 'center';\n }\n label.attr({\n align: align\n });\n }\n // Auto alignment for solid-gauges with two labels (#10635)\n if (align === 'auto' &&\n axis.tickPositions.length === 2 &&\n axis.isCircular) {\n // Angles reduced to 0 - 90 or 180 - 270\n if (reducedAngle1 > 90 && reducedAngle1 < 180) {\n reducedAngle1 = 180 - reducedAngle1;\n }\n else if (reducedAngle1 > 270 && reducedAngle1 <= 360) {\n reducedAngle1 = 540 - reducedAngle1;\n }\n // Angles reduced to 0 - 180\n if (reducedAngle2 > 180 && reducedAngle2 <= 360) {\n reducedAngle2 = 360 - reducedAngle2;\n }\n if ((axis.pane.options.startAngle === correctAngle) ||\n (axis.pane.options.startAngle === correctAngle + 360) ||\n (axis.pane.options.startAngle === correctAngle - 360)) {\n labelDir = 'start';\n }\n if ((correctAngle >= -90 && correctAngle <= 90) ||\n (correctAngle >= -360 && correctAngle <= -270) ||\n (correctAngle >= 270 && correctAngle <= 360)) {\n align = (labelDir === 'start') ? 'right' : 'left';\n }\n else {\n align = (labelDir === 'start') ? 'left' : 'right';\n }\n // For angles between (90 + n * 180) +- 20\n if (reducedAngle2 > 70 && reducedAngle2 < 110) {\n align = 'center';\n }\n // Auto Y translation\n if (reducedAngle1 < 15 ||\n (reducedAngle1 >= 180 && reducedAngle1 < 195)) {\n translateY = labelBBox.height * 0.3;\n }\n else if (reducedAngle1 >= 15 && reducedAngle1 <= 35) {\n translateY = labelDir === 'start' ?\n 0 : labelBBox.height * 0.75;\n }\n else if (reducedAngle1 >= 195 && reducedAngle1 <= 215) {\n translateY = labelDir === 'start' ?\n labelBBox.height * 0.75 : 0;\n }\n else if (reducedAngle1 > 35 && reducedAngle1 <= 90) {\n translateY = labelDir === 'start' ?\n -labelBBox.height * 0.25 : labelBBox.height;\n }\n else if (reducedAngle1 > 215 && reducedAngle1 <= 270) {\n translateY = labelDir === 'start' ?\n labelBBox.height : -labelBBox.height * 0.25;\n }\n // Auto X translation\n if (reducedAngle2 < 15) {\n translateX = labelDir === 'start' ?\n -labelBBox.height * 0.15 : labelBBox.height * 0.15;\n }\n else if (reducedAngle2 > 165 && reducedAngle2 <= 180) {\n translateX = labelDir === 'start' ?\n labelBBox.height * 0.15 : -labelBBox.height * 0.15;\n }\n label.attr({ align: align });\n label.translate(translateX, translateY + labelYPosCorrection);\n }\n e.pos.x = ret.x + (labelOptions.x || 0);\n e.pos.y = ret.y + (optionsY || 0);\n }\n }\n /**\n * Add special cases within the Tick class' methods for radial axes.\n */\n function onTickAfterGetPosition(e) {\n if (this.axis.getPosition) {\n extend(e.pos, this.axis.getPosition(this.pos));\n }\n }\n /**\n * Update default options for radial axes from setOptions method.\n */\n function onGlobalSetOptions({ options }) {\n if (options.xAxis) {\n merge(true, RadialAxis.radialDefaultOptions.circular, options.xAxis);\n }\n if (options.yAxis) {\n merge(true, RadialAxis.radialDefaultOptions.radialGauge, options.yAxis);\n }\n }\n /**\n * Translate from intermediate plotX (angle), plotY (axis.len - radius)\n * to final chart coordinates.\n *\n * @internal\n * @param {number} angle\n * Translation angle.\n * @param {number} radius\n * Translation radius.\n */\n function postTranslate(angle, radius) {\n const chart = this.chart, center = this.center;\n angle = this.startAngleRad + angle;\n return {\n x: chart.plotLeft + center[0] + Math.cos(angle) * radius,\n y: chart.plotTop + center[1] + Math.sin(angle) * radius\n };\n }\n /**\n * Prevent setting Y axis dirty.\n */\n function renderHidden() {\n this.isDirty = false;\n }\n /**\n * Override the setAxisSize method to use the arc's circumference as\n * length. This allows tickPixelInterval to apply to pixel lengths along\n * the perimeter.\n * @internal\n */\n function setAxisSize() {\n const axisProto = this.constructor.prototype;\n let center, start;\n axisProto.setAxisSize.call(this);\n if (this.isRadial) {\n // Set the center array\n this.pane.updateCenter();\n // In case when the innerSize is set in a polar chart, the axis'\n // center cannot be a reference to pane's center\n center = this.center = this.pane.center.slice();\n // The sector is used in Axis.translate to compute the\n // translation of reversed axis points (#2570)\n if (this.isCircular) {\n this.sector = this.endAngleRad - this.startAngleRad;\n // Axis len is used to lay out the ticks\n this.len = this.width = this.height =\n center[2] * this.sector / 2;\n }\n else {\n // When the pane's startAngle or the axis' angle is set then\n // new x and y values for vertical axis' center must be\n // calculated\n start = this.postTranslate(this.angleRad, center[3] / 2);\n center[0] = start.x - this.chart.plotLeft;\n center[1] = start.y - this.chart.plotTop;\n // Axis len is used to lay out the ticks\n this.len = this.width = this.height =\n (center[2] - center[3]) / 2;\n }\n }\n }\n /**\n * Override setAxisTranslation by setting the translation to the\n * difference in rotation. This allows the translate method to return\n * angle for any given value.\n *\n * @internal\n */\n function setAxisTranslation() {\n const axisProto = this.constructor.prototype;\n // Call uber method\n axisProto.setAxisTranslation.call(this);\n // Set transA and minPixelPadding\n if (this.center) { // It's not defined the first time\n if (this.isCircular) {\n this.transA = (this.endAngleRad - this.startAngleRad) /\n ((this.max - this.min) || 1);\n }\n else {\n // The transA here is the length of the axis, so in case\n // of inner radius, the length must be decreased by it\n this.transA = ((this.center[2] - this.center[3]) / 2) /\n ((this.max - this.min) || 1);\n }\n if (this.isXAxis) {\n this.minPixelPadding = this.transA * this.minPointOffset;\n }\n else {\n // This is a workaround for regression #2593, but categories\n // still don't position correctly.\n this.minPixelPadding = 0;\n }\n }\n }\n /**\n * Merge and set options.\n */\n function setOptions(userOptions) {\n const { coll } = this;\n const { angular, inverted, polar } = this.chart;\n let defaultPolarOptions = {};\n if (angular) {\n if (!this.isXAxis) {\n defaultPolarOptions = merge(defaultOptions.yAxis, RadialAxis.radialDefaultOptions.radialGauge);\n }\n }\n else if (polar) {\n defaultPolarOptions = this.horiz ?\n merge(defaultOptions.xAxis, RadialAxis.radialDefaultOptions.circular) :\n merge(coll === 'xAxis' ?\n defaultOptions.xAxis :\n defaultOptions.yAxis, RadialAxis.radialDefaultOptions.radial);\n }\n if (inverted && coll === 'yAxis') {\n defaultPolarOptions.stackLabels = isObject(defaultOptions.yAxis, true) ? defaultOptions.yAxis.stackLabels : {};\n defaultPolarOptions.reversedStacks = true;\n }\n const options = this.options = merge(defaultPolarOptions, userOptions);\n // Make sure the plotBands array is instantiated for each Axis\n // (#2649)\n if (!options.plotBands) {\n options.plotBands = [];\n }\n fireEvent(this, 'afterSetOptions');\n }\n /**\n * Wrap the `getMinorTickInterval` method to return 'auto' for gauge axes by\n * default, when `minorTicks` are not explicitly enabled or disabled.\n */\n function wrapAxisGetMinorTickInterval(proceed) {\n if (!defined(this.options.minorTicks) &&\n this.pane.hasSeriesType('gauge')) {\n return 'auto';\n }\n return proceed.apply(this, Array.prototype.slice.call(arguments, 1));\n }\n /**\n * Wrap the getMarkPath function to return the path of the radial marker.\n */\n function wrapTickGetMarkPath(proceed, x, y, tickLength, tickWidth, horiz, renderer) {\n const axis = this.axis;\n let endPoint, ret;\n if (axis.isRadial) {\n endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength);\n ret = [\n 'M',\n x,\n y,\n 'L',\n endPoint.x,\n endPoint.y\n ];\n }\n else {\n ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);\n }\n return ret;\n }\n})(RadialAxis || (RadialAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default RadialAxis;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport A from '../Core/Animation/AnimationUtilities.js';\nconst { animObject } = A;\nimport { optionsToObject } from '../Extensions/BorderRadius.js';\nimport D from '../Core/Defaults.js';\nconst { defaultOptions } = D;\nimport H from '../Core/Globals.js';\nconst { composed } = H;\nimport Series from '../Core/Series/Series.js';\nimport Pane from '../Extensions/Pane/Pane.js';\nimport RadialAxis from '../Core/Axis/RadialAxis.js';\nimport { addEvent, clamp, defined, find, isNumber, isObject, merge, pick, pushUnique, relativeLength, splat, wrap } from '../Shared/Utilities.js';\nimport { uniqueKey } from '../Core/Utilities.js';\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction clipCircle(renderer, x, y, r, innerR) {\n const id = uniqueKey(), clipPath = renderer.createElement('clipPath').attr({\n id: id\n }).add(renderer.defs), wrapper = innerR ?\n renderer.arc(x, y, r, innerR, 0, 2 * Math.PI).add(clipPath) :\n renderer.circle(x, y, r).add(clipPath);\n wrapper.id = id;\n wrapper.clipPath = clipPath;\n return wrapper;\n}\n/**\n * Find correct align and vertical align based on an angle in polar chart\n * @private\n */\nfunction findAlignments(angle, options) {\n let align, verticalAlign;\n if (options.align === null) {\n if (angle > 20 && angle < 160) {\n align = 'left'; // Right hemisphere\n }\n else if (angle > 200 && angle < 340) {\n align = 'right'; // Left hemisphere\n }\n else {\n align = 'center'; // Top or bottom\n }\n options.align = align;\n }\n if (options.verticalAlign === null) {\n if (angle < 45 || angle > 315) {\n verticalAlign = 'bottom'; // Top part\n }\n else if (angle > 135 && angle < 225) {\n verticalAlign = 'top'; // Bottom part\n }\n else {\n verticalAlign = 'middle'; // Left or right\n }\n options.verticalAlign = verticalAlign;\n }\n return options;\n}\n/**\n * #6212 Calculate connectors for spline series in polar chart.\n * @private\n */\nfunction getConnectors(segment, index, calculateNeighbours, connectEnds) {\n const smoothing = 1.5, denom = smoothing + 1, addedNumber = connectEnds ? 1 : 0;\n let i, leftContX, leftContY, rightContX, rightContY, jointAngle;\n // Calculate final index of points depending on the initial index value.\n // Because of calculating neighbors, index may be outside segment\n // array.\n if (index >= 0 && index <= segment.length - 1) {\n i = index;\n }\n else if (index < 0) {\n i = segment.length - 1 + index;\n }\n else {\n i = 0;\n }\n // 1 means control points midway between points, 2 means 1/3 from\n // the point, 3 is 1/4 etc;\n const prevPointInd = ((i - 1 < 0) ? segment.length - (1 + addedNumber) : i - 1), nextPointInd = (i + 1 > segment.length - 1) ? addedNumber : i + 1, previousPoint = segment[prevPointInd], nextPoint = segment[nextPointInd], previousX = previousPoint.plotX, previousY = previousPoint.plotY, nextX = nextPoint.plotX, nextY = nextPoint.plotY, plotX = segment[i].plotX, // Actual point\n plotY = segment[i].plotY;\n leftContX = (smoothing * plotX + previousX) / denom;\n leftContY = (smoothing * plotY + previousY) / denom;\n rightContX = (smoothing * plotX + nextX) / denom;\n rightContY = (smoothing * plotY + nextY) / denom;\n // Distance left control point\n const dLControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)), dRControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)), leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX), rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);\n jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);\n // Ensure the right direction, jointAngle should be in the same quadrant\n // as leftContAngle\n if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {\n jointAngle -= Math.PI;\n }\n // Find the corrected control points for a spline straight through the\n // point\n leftContX = plotX + Math.cos(jointAngle) * dLControlPoint;\n leftContY = plotY + Math.sin(jointAngle) * dLControlPoint;\n rightContX = plotX + Math.cos(Math.PI + jointAngle) * dRControlPoint;\n rightContY = plotY + Math.sin(Math.PI + jointAngle) * dRControlPoint;\n // Push current point's connectors into returned object\n const ret = {\n rightContX: rightContX,\n rightContY: rightContY,\n leftContX: leftContX,\n leftContY: leftContY,\n plotX: plotX,\n plotY: plotY\n };\n // Calculate connectors for previous and next point and push them inside\n // returned object\n if (calculateNeighbours) {\n ret.prevPointCont = getConnectors(segment, prevPointInd, false, connectEnds);\n }\n return ret;\n}\n/**\n *\n */\nfunction onChartAfterDrawChartBox() {\n (this.pane || []).forEach((pane) => {\n pane.render();\n });\n}\n/**\n * If polar has polygonal grid lines, force start and endOnTick on radial axis\n * @private\n */\nfunction onChartAfterInit(event) {\n const xAxis = event.args[0].xAxis, yAxis = event.args[0].yAxis, chart = event.args[0].chart;\n if (xAxis && yAxis) {\n if (yAxis.gridLineInterpolation === 'polygon') {\n xAxis.startOnTick = true;\n xAxis.endOnTick = true;\n }\n else if (xAxis.gridLineInterpolation === 'polygon' &&\n chart.inverted) {\n yAxis.startOnTick = true;\n yAxis.endOnTick = true;\n }\n }\n}\n/**\n *\n */\nfunction onChartCreateAxes() {\n if (!this.pane) {\n this.pane = [];\n }\n this.options.pane = splat(this.options.pane || {});\n splat(this.userOptions.pane || {}).forEach((paneOptions) => {\n new Pane(// eslint-disable-line no-new\n paneOptions, this);\n }, this);\n}\n/**\n * Get selection dimensions\n * @private\n */\nfunction onPointerGetSelectionBox(event) {\n const marker = event.args.marker, xAxis = this.chart.xAxis[0], yAxis = this.chart.yAxis[0], inverted = this.chart.inverted, radialAxis = inverted ? yAxis : xAxis, linearAxis = inverted ? xAxis : yAxis;\n if (this.chart.polar) {\n event.preventDefault();\n const start = (marker.attr ? marker.attr('start') : marker.start) - radialAxis.startAngleRad, r = (marker.attr ? marker.attr('r') : marker.r), end = (marker.attr ? marker.attr('end') : marker.end) - radialAxis.startAngleRad, innerR = (marker.attr ? marker.attr('innerR') : marker.innerR);\n event.result.x = start + radialAxis.pos;\n event.result.width = end - start;\n // `innerR` goes from pane's center but `toValue` computes values from\n // top\n event.result.y = linearAxis.len + linearAxis.pos - r;\n event.result.height = r - innerR;\n }\n}\n/**\n * Get attrs for Polar selection marker\n * @private\n */\nfunction onPointerGetSelectionMarkerAttrs(event) {\n const chart = this.chart;\n if (chart.polar && chart.hoverPane && chart.hoverPane.axis) {\n event.preventDefault();\n const center = chart.hoverPane.center, mouseDownX = chart.mouseDownX || 0, mouseDownY = chart.mouseDownY || 0, chartY = event.args.chartY, chartX = event.args.chartX, fullCircle = Math.PI * 2, startAngleRad = chart.hoverPane.axis.startAngleRad, endAngleRad = chart.hoverPane.axis.endAngleRad, linearAxis = chart.inverted ? chart.xAxis[0] : chart.yAxis[0], attrs = {};\n let shapeType = 'arc';\n attrs.x = center[0] + chart.plotLeft;\n attrs.y = center[1] + chart.plotTop;\n // Adjust the width of the selection marker\n if (this.zoomHor) {\n const paneRadRange = startAngleRad > 0 ?\n endAngleRad - startAngleRad :\n Math.abs(startAngleRad) + Math.abs(endAngleRad);\n let startAngle = Math.atan2(mouseDownY - chart.plotTop - center[1], mouseDownX - chart.plotLeft - center[0]) - startAngleRad, endAngle = Math.atan2(chartY - chart.plotTop - center[1], chartX - chart.plotLeft - center[0]) - startAngleRad;\n attrs.r = center[2] / 2;\n attrs.innerR = center[3] / 2;\n if (startAngle <= 0) {\n startAngle += fullCircle;\n }\n if (endAngle <= 0) {\n endAngle += fullCircle;\n }\n if (endAngle < startAngle) {\n // Swapping angles\n endAngle = [startAngle, startAngle = endAngle][0];\n }\n // If pane is not a full circle we need to let users zoom to the min\n // We do this by swapping angles after pointer crosses\n // middle angle (swapAngle) of the missing slice of the pane\n if (paneRadRange < fullCircle) {\n const swapAngle = endAngleRad + (fullCircle - paneRadRange) / 2;\n if (startAngleRad + endAngle > swapAngle) {\n endAngle = startAngle;\n startAngle = startAngleRad <= 0 ? startAngleRad : 0;\n }\n }\n const start = attrs.start =\n Math.max(startAngle + startAngleRad, startAngleRad), end = attrs.end =\n Math.min(endAngle + startAngleRad, endAngleRad);\n // Adjust the selection shape for polygon grid lines\n if (linearAxis.options.gridLineInterpolation === 'polygon') {\n const radialAxis = chart.hoverPane.axis, min = start - radialAxis.startAngleRad + radialAxis.pos, max = end - start;\n let path = linearAxis.getPlotLinePath({\n value: linearAxis.max\n }), pathStart = radialAxis.toValue(min), pathEnd = radialAxis.toValue(min + max);\n if (pathStart < radialAxis.getExtremes().min) {\n const { min, max } = radialAxis.getExtremes();\n pathStart = max - (min - pathStart);\n }\n if (pathEnd < radialAxis.getExtremes().min) {\n const { min, max } = radialAxis.getExtremes();\n pathEnd = max - (min - pathEnd);\n }\n if (pathEnd < pathStart) {\n // Swapping angles\n pathEnd = [pathStart, pathStart = pathEnd][0];\n }\n // Get trimmed path\n path = trimPath(path, pathStart, pathEnd, radialAxis);\n // Add center to the path\n path.push([\n 'L', center[0] + chart.plotLeft,\n chart.plotTop + center[1]\n ]);\n attrs.d = path;\n shapeType = 'path';\n }\n }\n // Adjust the height of the selection marker\n if (this.zoomVert) {\n const linearAxis = chart.inverted ? chart.xAxis[0] : chart.yAxis[0];\n let innerR = Math.sqrt(Math.pow(mouseDownX - chart.plotLeft - center[0], 2) +\n Math.pow(mouseDownY - chart.plotTop - center[1], 2)), r = Math.sqrt(Math.pow(chartX - chart.plotLeft - center[0], 2) +\n Math.pow(chartY - chart.plotTop - center[1], 2));\n if (r < innerR) {\n // Swapping angles\n innerR = [r, r = innerR][0];\n }\n if (r > center[2] / 2) {\n r = center[2] / 2;\n }\n if (innerR < center[3] / 2) {\n innerR = center[3] / 2;\n }\n if (!this.zoomHor) {\n attrs.start = startAngleRad;\n attrs.end = endAngleRad;\n }\n attrs.r = r;\n attrs.innerR = innerR;\n if (linearAxis.options.gridLineInterpolation === 'polygon') {\n const end = linearAxis.toValue(linearAxis.len + linearAxis.pos - innerR), start = linearAxis.toValue(linearAxis.len + linearAxis.pos - r), path = linearAxis.getPlotLinePath({\n value: start\n }).concat(linearAxis.getPlotLinePath({\n value: end,\n reverse: true\n }));\n attrs.d = path;\n shapeType = 'path';\n }\n }\n if (this.zoomHor &&\n this.zoomVert &&\n linearAxis.options.gridLineInterpolation === 'polygon') {\n const radialAxis = chart.hoverPane.axis, start = attrs.start || 0, end = attrs.end || 0, min = start - radialAxis.startAngleRad + radialAxis.pos, max = end - start, pathStart = radialAxis.toValue(min), pathEnd = radialAxis.toValue(min + max);\n // Trim path\n if (attrs.d instanceof Array) {\n let innerPath = attrs.d.slice(0, attrs.d.length / 2), outerPath = attrs.d.slice(attrs.d.length / 2, attrs.d.length);\n outerPath = [...outerPath].reverse();\n const radialAxis = chart.hoverPane.axis;\n innerPath = trimPath(innerPath, pathStart, pathEnd, radialAxis);\n outerPath = trimPath(outerPath, pathStart, pathEnd, radialAxis);\n if (outerPath) {\n (outerPath[0][0]) = 'L';\n }\n outerPath = [...outerPath].reverse();\n attrs.d = innerPath.concat(outerPath);\n shapeType = 'path';\n }\n }\n event.attrs = attrs;\n event.shapeType = shapeType;\n }\n}\n/**\n * @private\n */\nfunction onSeriesAfterInit() {\n const chart = this.chart;\n if (chart.polar) {\n this.polar = new PolarAdditions(this);\n // Add flags that identifies radial inverted series\n if (chart.inverted) {\n this.isRadialSeries = true;\n if (this.is('column')) {\n this.isRadialBar = true;\n }\n }\n }\n}\n/**\n * Apply conditional rounding to polar bars\n */\nfunction onSeriesAfterColumnTranslate() {\n const { chart, options, yAxis } = this;\n if (options.borderRadius &&\n chart.polar &&\n chart.inverted) {\n const seriesDefault = defaultOptions.plotOptions?.[this.type]\n ?.borderRadius, { scope, where = 'end' } = optionsToObject(options.borderRadius, isObject(seriesDefault) ? seriesDefault : {});\n for (const point of this.points) {\n const { shapeArgs } = point;\n if (point.shapeType === 'arc' && shapeArgs) {\n let brStart = where === 'all', brEnd = true;\n if (options.stacking && scope === 'stack') {\n brStart = point.stackY === point.y && where === 'all',\n brEnd = point.stackY === point.stackTotal;\n }\n if (yAxis.reversed) {\n [brStart, brEnd] = [brEnd, brStart];\n }\n shapeArgs.brStart = brStart;\n shapeArgs.brEnd = brEnd;\n }\n }\n }\n}\n/**\n * Extend translate. The plotX and plotY values are computed as if the polar\n * chart were a cartesian plane, where plotX denotes the angle in radians\n * and (yAxis.len - plotY) is the pixel distance from center.\n * @private\n */\nfunction onSeriesAfterTranslate() {\n if (this.chart.polar && this.xAxis) {\n const series = this, { xAxis, yAxis } = series, chart = series.chart;\n // Prepare k-d-tree handling. It searches by angle (clientX) in\n // case of shared tooltip, and by two dimensional distance in case\n // of non-shared.\n series.kdByAngle = chart.tooltip && chart.tooltip.shared;\n if (series.kdByAngle || chart.inverted) {\n series.searchPoint = searchPointByAngleOrInverted;\n }\n else {\n series.options.findNearestPointBy = 'xy';\n }\n const points = series.points;\n let i = points.length;\n while (i--) {\n // Translate plotX, plotY from angle and radius to true plot\n // coordinates\n if (!series.is('column') && !series.is('columnrange')) {\n series.polar.toXY(points[i]);\n }\n // Treat points below Y axis min as null (#10082)\n if (!chart.hasParallelCoordinates &&\n !series.yAxis.reversed) {\n if (pick(points[i].y, Number.MIN_VALUE) < yAxis.min ||\n points[i].x < xAxis.min ||\n points[i].x > xAxis.max) {\n // Destroy markers\n points[i].isNull = true;\n // Destroy column's graphic\n points[i].plotY = NaN;\n }\n else {\n // Restore isNull flag\n points[i].isNull =\n points[i].isValid && !points[i].isValid();\n }\n }\n }\n // Perform clip after render\n if (!this.hasClipCircleSetter) {\n this.hasClipCircleSetter = !!series.eventsToUnbind.push(addEvent(series, 'afterRender', function () {\n let circ;\n if (chart.polar && this.options.clip !== false) {\n // For clipping purposes there is a need for\n // coordinates from the absolute center\n circ = this.yAxis.pane.center;\n if (!this.clipCircle) {\n this.clipCircle = clipCircle(chart.renderer, circ[0], circ[1], circ[2] / 2, circ[3] / 2);\n }\n else {\n this.clipCircle.animate({\n x: circ[0],\n y: circ[1],\n r: circ[2] / 2,\n innerR: circ[3] / 2\n });\n }\n this.group.clip(this.clipCircle);\n this.setClip = H.noop;\n }\n }));\n }\n }\n}\n/**\n * Search a k-d tree by the point angle (used for shared tooltips in polar) or\n * the inverted point.\n * charts\n * @private\n */\nfunction searchPointByAngleOrInverted(e) {\n const series = this, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, center = xAxis.pane && xAxis.pane.center, plotX = e.chartX - (center && center[0] || 0) - chart.plotLeft, plotY = e.chartY - (center && center[1] || 0) - chart.plotTop;\n const searchKDTreePoint = chart.inverted ? {\n clientX: e.chartX - yAxis.pos,\n plotY: e.chartY - xAxis.pos\n } : {\n clientX: 180 + (Math.atan2(plotX, plotY) * (-180 / Math.PI))\n };\n return series.searchKDTree(searchKDTreePoint);\n}\n/**\n * Trim polygonal path\n * @private\n */\nfunction trimPath(path, start, end, radialAxis) {\n const tickInterval = radialAxis.tickInterval, ticks = radialAxis.tickPositions;\n let lastTick = find(ticks, (tick) => tick >= end), firstTick = find([...ticks].reverse(), (tick) => tick <= start);\n if (!defined(lastTick)) {\n lastTick = ticks[ticks.length - 1];\n }\n if (!defined(firstTick)) {\n firstTick = ticks[0];\n lastTick += tickInterval;\n path[0][0] = 'L';\n // To do: figure out why -3 or -2\n path.unshift(path[path.length - 3]);\n }\n path = path.slice(ticks.indexOf(firstTick), ticks.indexOf(lastTick) + 1);\n path[0][0] = 'M';\n return path;\n}\n/**\n * Extend chart.get to also search in panes. Used internally in\n * responsiveness and chart.update.\n * @private\n */\nfunction wrapChartGet(proceed, id) {\n return find(this.pane || [], (pane) => (\n // @todo remove id or define id type:\n pane.options.id === id)) || proceed.call(this, id);\n}\n/**\n * Align column data labels outside the columns. #1199.\n * @private\n */\nfunction wrapColumnSeriesAlignDataLabel(proceed, point, dataLabel, options, alignTo, isNew) {\n const chart = this.chart, inside = pick(options.inside, !!this.options.stacking);\n let angle, shapeArgs, labelPos;\n if (chart.polar) {\n angle = point.rectPlotX / Math.PI * 180;\n if (!chart.inverted) {\n // Align nicely outside the perimeter of the columns\n options = findAlignments(angle, options);\n }\n else { // Required corrections for data labels of inverted bars\n // The plotX and plotY are correctly set therefore they\n // don't need to be swapped (inverted argument is false)\n this.forceDL = chart.isInsidePlot(point.plotX, point.plotY);\n // Checks if labels should be positioned inside\n if (inside && point.shapeArgs) {\n shapeArgs = point.shapeArgs;\n // Calculates pixel positions for a data label to be\n // inside\n labelPos =\n this.yAxis.postTranslate(\n // Angle\n ((shapeArgs.start || 0) + (shapeArgs.end || 0)) / 2 -\n this\n .xAxis.startAngleRad, \n // Radius\n point.barX +\n (point.pointWidth || 0) / 2);\n alignTo = merge(alignTo, {\n x: labelPos.x - chart.plotLeft,\n y: labelPos.y - chart.plotTop\n });\n }\n else if (point.tooltipPos) {\n alignTo = merge(alignTo, {\n x: point.tooltipPos[0],\n y: point.tooltipPos[1]\n });\n }\n options.align = pick(options.align, 'center');\n options.verticalAlign =\n pick(options.verticalAlign, 'middle');\n }\n Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n // Hide label of a point (only inverted) that is outside the\n // visible y range\n if (this.isRadialBar && point.shapeArgs &&\n point.shapeArgs.start === point.shapeArgs.end) {\n dataLabel.hide();\n }\n else {\n dataLabel.show();\n }\n }\n else {\n proceed.call(this, point, dataLabel, options, alignTo, isNew);\n }\n}\n/**\n * Extend the column prototype's translate method\n * @private\n */\nfunction onAfterColumnTranslate() {\n const series = this, options = series.options, stacking = options.stacking, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, reversed = yAxis.reversed, center = yAxis.center, startAngleRad = xAxis.startAngleRad, endAngleRad = xAxis.endAngleRad, visibleRange = endAngleRad - startAngleRad;\n let threshold = options.threshold, thresholdAngleRad = 0, points, point, i, yMin, yMax, start = 0, end = 0, tooltipPos, pointX, pointY, stackValues, stack, barX, innerR, r;\n // Postprocess plot coordinates\n if (xAxis.isRadial) {\n points = series.points;\n i = points.length;\n yMin = yAxis.translate(yAxis.min);\n yMax = yAxis.translate(yAxis.max);\n threshold = options.threshold || 0;\n if (chart.inverted) {\n // Finding a correct threshold\n if (isNumber(threshold)) {\n thresholdAngleRad = yAxis.translate(threshold);\n // Checks if threshold is outside the visible range\n if (defined(thresholdAngleRad)) {\n if (thresholdAngleRad < 0) {\n thresholdAngleRad = 0;\n }\n else if (thresholdAngleRad > visibleRange) {\n thresholdAngleRad = visibleRange;\n }\n // Adding start angle offset\n series.translatedThreshold =\n thresholdAngleRad + startAngleRad;\n }\n }\n }\n while (i--) {\n point = points[i];\n barX = point.barX;\n pointX = point.x;\n pointY = point.y;\n point.shapeType = 'arc';\n if (chart.inverted) {\n point.plotY = yAxis.translate(pointY);\n if (stacking && yAxis.stacking) {\n stack = yAxis.stacking.stacks[(pointY < 0 ? '-' : '') +\n series.stackKey];\n if (series.visible && stack && stack[pointX]) {\n if (!point.isNull) {\n stackValues = stack[pointX].points[series.getStackIndicator(void 0, pointX, series.index).key];\n // Translating to radial values\n start = yAxis.translate(stackValues[0]);\n end = yAxis.translate(stackValues[1]);\n // If starting point is beyond the\n // range, set it to 0\n if (defined(start)) {\n start = clamp(start, 0, visibleRange);\n }\n }\n }\n }\n else {\n // Initial start and end angles for radial bar\n start = thresholdAngleRad;\n end = point.plotY;\n }\n if (start > end) {\n // Swapping start and end\n end = [start, start = end][0];\n }\n // Prevent from rendering point outside the\n // acceptable circular range\n if (!reversed) {\n if (start < yMin) {\n start = yMin;\n }\n else if (end > yMax) {\n end = yMax;\n }\n else if (end < yMin || start > yMax) {\n start = end = 0;\n }\n }\n else {\n if (end > yMin) {\n end = yMin;\n }\n else if (start < yMax) {\n start = yMax;\n }\n else if (start > yMin || end < yMax) {\n start = end = visibleRange;\n }\n }\n if (yAxis.min > yAxis.max) {\n start = end = reversed ? visibleRange : 0;\n }\n start += startAngleRad;\n end += startAngleRad;\n if (center) {\n point.barX = barX += center[3] / 2;\n }\n // In case when radius, inner radius or both are negative, a\n // point is rendered but partially or as a center point\n innerR = Math.max(barX, 0);\n r = Math.max(barX + (point.pointWidth || 0), 0);\n // Handle border radius\n const brOption = options.borderRadius, brValue = typeof brOption === 'object' ?\n brOption.radius : brOption, borderRadius = relativeLength(brValue || 0, r - innerR);\n point.shapeArgs = {\n x: center[0],\n y: center[1],\n r,\n innerR,\n start,\n end,\n borderRadius\n };\n // Fade out the points if not inside the polar \"plot area\"\n point.opacity = start === end ? 0 : void 0;\n // A correct value for stacked or not fully visible\n // point\n point.plotY = (defined(series.translatedThreshold) &&\n (start < series.translatedThreshold ? start : end)) -\n startAngleRad;\n // Non-inverted polar columns\n }\n else {\n start = barX + startAngleRad;\n point.shapeArgs = series.polar.arc(point.yBottom, point.plotY, start, start + (point.pointWidth || 0));\n // Disallow border radius on polar columns for now. It would\n // take some refactoring to work with the `scope` and the\n // `where` options. Those options would require that only\n // individual corners be rounded, in practice individual calls\n // to applyBorderRadius from the extended `arc` function. That\n // would be a viable solution, though it would not be perfect\n // until we implemented rounding that included the lower points\n // in the stack, like we have for cartesian column.\n point.shapeArgs.borderRadius = 0;\n }\n // Provided a correct coordinates for the tooltip\n series.polar.toXY(point);\n if (chart.inverted) {\n tooltipPos = yAxis.postTranslate(point.rectPlotY, barX + (point.pointWidth || 0) / 2);\n point.tooltipPos = [\n tooltipPos.x - chart.plotLeft,\n tooltipPos.y - chart.plotTop\n ];\n }\n else {\n point.tooltipPos = [point.plotX, point.plotY];\n }\n if (center) {\n point.ttBelow = point.plotY > center[1];\n }\n }\n }\n}\n/**\n * Extend getSegmentPath to allow connecting ends across 0 to provide a\n * closed circle in line-like series.\n * @private\n */\nfunction wrapLineSeriesGetGraphPath(proceed, points) {\n const series = this;\n let firstValid, popLastPoint;\n // Connect the path\n if (this.chart.polar) {\n points = points || this.points;\n // Append first valid point in order to connect the ends\n for (let i = 0; i < points.length; i++) {\n if (!points[i].isNull) {\n firstValid = i;\n break;\n }\n }\n /**\n * Polar charts only. Whether to connect the ends of a line series\n * plot across the extremes.\n *\n * @sample {highcharts} highcharts/plotoptions/line-connectends-false/\n * Do not connect\n *\n * @type {boolean}\n * @since 2.3.0\n * @product highcharts\n * @apioption plotOptions.series.connectEnds\n */\n if (this.options.connectEnds !== false &&\n typeof firstValid !== 'undefined') {\n this.connectEnds = true; // Re-used in splines\n points.splice(points.length, 0, points[firstValid]);\n popLastPoint = true;\n }\n // For area charts, pseudo points are added to the graph, now we\n // need to translate these\n points.forEach((point) => {\n if (typeof point.polarPlotY === 'undefined') {\n series.polar.toXY(point);\n }\n });\n }\n // Run uber method\n const ret = proceed.apply(this, [].slice.call(arguments, 1));\n // #6212 points.splice method is adding points to an array. In case of\n // areaspline getGraphPath method is used two times and in both times\n // points are added to an array. That is why points.pop is used, to get\n // unmodified points.\n if (popLastPoint) {\n points.pop();\n }\n return ret;\n}\n/**\n * Extend getCoordinates to prepare for polar axis values\n * @private\n */\nfunction wrapPointerGetCoordinates(proceed, e) {\n const chart = this.chart;\n let ret = {\n xAxis: [],\n yAxis: []\n };\n if (chart.polar) {\n chart.axes.forEach((axis) => {\n // Skip colorAxis\n if (axis.coll === 'colorAxis') {\n return;\n }\n const isXAxis = axis.isXAxis, center = axis.center, x = e.chartX - center[0] - chart.plotLeft, y = e.chartY - center[1] - chart.plotTop;\n ret[isXAxis ? 'xAxis' : 'yAxis'].push({\n axis: axis,\n value: axis.translate(isXAxis ?\n Math.PI - Math.atan2(x, y) : // Angle\n // distance from center\n Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), true)\n });\n });\n }\n else {\n ret = proceed.call(this, e);\n }\n return ret;\n}\n/**\n * Prevent zooming on mobile devices\n * @private\n */\nfunction wrapPointerPinch(proceed, e) {\n if (this.chart.polar) {\n return;\n }\n proceed.call(this, e);\n}\n/**\n * Define the animate method for regular series\n * @private\n */\nfunction wrapSeriesAnimate(proceed, init) {\n const series = this, chart = this.chart, group = this.group, markerGroup = this.markerGroup, center = this.xAxis && this.xAxis.center, plotLeft = chart.plotLeft, plotTop = chart.plotTop;\n let animation = this.options.animation, attribs, paneInnerR, graphic, shapeArgs, r, innerR;\n // Specific animation for polar charts\n if (chart.polar) {\n if (series.isRadialBar) {\n if (!init) {\n // Run the pie animation for radial bars\n series.startAngleRad = pick(series.translatedThreshold, series.xAxis.startAngleRad);\n H.seriesTypes.pie.prototype.animate.call(series, init);\n }\n }\n else {\n animation = animObject(animation);\n // A different animation needed for column like series\n if (series.is('column')) {\n if (!init) {\n paneInnerR = center[3] / 2;\n series.points.forEach((point) => {\n graphic = point.graphic;\n shapeArgs = point.shapeArgs;\n r = shapeArgs && shapeArgs.r;\n innerR = shapeArgs && shapeArgs.innerR;\n if (graphic && shapeArgs) {\n // Start values\n graphic.attr({\n r: paneInnerR,\n innerR: paneInnerR\n });\n // Animate\n graphic.animate({\n r: r,\n innerR: innerR\n }, series.options.animation);\n }\n });\n }\n }\n else {\n // Initialize the animation\n if (init) {\n // Scale down the group and place it in the center\n attribs = {\n translateX: center[0] + plotLeft,\n translateY: center[1] + plotTop,\n scaleX: 0.001,\n scaleY: 0.001\n };\n group.attr(attribs);\n if (markerGroup) {\n markerGroup.attr(attribs);\n }\n // Run the animation\n }\n else {\n attribs = {\n translateX: plotLeft,\n translateY: plotTop,\n scaleX: 1,\n scaleY: 1\n };\n group.animate(attribs, animation);\n if (markerGroup) {\n markerGroup.animate(attribs, animation);\n }\n }\n }\n }\n // For non-polar charts, revert to the basic animation\n }\n else {\n proceed.call(this, init);\n }\n}\n/**\n * Overridden method for calculating a spline from one point to the next\n * @private\n */\nfunction wrapSplineSeriesGetPointSpline(proceed, segment, point, i) {\n let ret, connectors;\n if (this.chart.polar) {\n // `moveTo` or `lineTo`\n if (!i) {\n ret = ['M', point.plotX, point.plotY];\n }\n else { // Curve from last point to this\n connectors = getConnectors(segment, i, true, this.connectEnds);\n const rightContX = connectors.prevPointCont &&\n connectors.prevPointCont.rightContX;\n const rightContY = connectors.prevPointCont &&\n connectors.prevPointCont.rightContY;\n ret = [\n 'C',\n isNumber(rightContX) ? rightContX : connectors.plotX,\n isNumber(rightContY) ? rightContY : connectors.plotY,\n isNumber(connectors.leftContX) ?\n connectors.leftContX :\n connectors.plotX,\n isNumber(connectors.leftContY) ?\n connectors.leftContY :\n connectors.plotY,\n connectors.plotX,\n connectors.plotY\n ];\n }\n }\n else {\n ret = proceed.call(this, segment, point, i);\n }\n return ret;\n}\n/**\n * Extend the point pos method to calculate point positions for the polar chart.\n * @private\n */\nfunction wrapPointPos(proceed, chartCoordinates, plotX = this.plotX, plotY = this.plotY) {\n const { series } = this, { chart } = series || {};\n if (chart?.polar &&\n isNumber(plotX) &&\n isNumber(plotY)) {\n return [\n plotX + (chartCoordinates ? chart.plotLeft : 0),\n plotY + (chartCoordinates ? chart.plotTop : 0)\n ];\n }\n return proceed.call(this, chartCoordinates, plotX, plotY);\n}\n/* *\n *\n * Class\n *\n * */\n/**\n * Extensions for polar charts. Additionally, much of the geometry required\n * for polar charts is gathered in RadialAxes.js.\n * @private\n */\nclass PolarAdditions {\n /* *\n *\n * Static Functions\n *\n * */\n static compose(AxisClass, ChartClass, PointerClass, SeriesClass, TickClass, PointClass, AreaSplineRangeSeriesClass, ColumnSeriesClass, LineSeriesClass, SplineSeriesClass) {\n Pane.compose(ChartClass, PointerClass);\n RadialAxis.compose(AxisClass, TickClass);\n if (pushUnique(composed, 'Polar')) {\n const chartProto = ChartClass.prototype, pointProto = PointClass.prototype, pointerProto = PointerClass.prototype, seriesProto = SeriesClass.prototype;\n addEvent(ChartClass, 'afterDrawChartBox', onChartAfterDrawChartBox);\n addEvent(ChartClass, 'createAxes', onChartCreateAxes);\n addEvent(ChartClass, 'init', onChartAfterInit);\n wrap(chartProto, 'get', wrapChartGet);\n wrap(pointerProto, 'getCoordinates', wrapPointerGetCoordinates);\n wrap(pointerProto, 'pinch', wrapPointerPinch);\n addEvent(PointerClass, 'getSelectionMarkerAttrs', onPointerGetSelectionMarkerAttrs);\n addEvent(PointerClass, 'getSelectionBox', onPointerGetSelectionBox);\n addEvent(SeriesClass, 'afterInit', onSeriesAfterInit);\n addEvent(SeriesClass, 'afterColumnTranslate', onSeriesAfterColumnTranslate, {\n // After columnrange and polar column modifications\n order: 9\n });\n addEvent(SeriesClass, 'afterTranslate', onSeriesAfterTranslate, { order: 2 } // Run after translation of ||-coords\n );\n addEvent(SeriesClass, 'afterColumnTranslate', onAfterColumnTranslate, { order: 4 });\n wrap(seriesProto, 'animate', wrapSeriesAnimate);\n wrap(pointProto, 'pos', wrapPointPos);\n if (ColumnSeriesClass) {\n const columnProto = ColumnSeriesClass.prototype;\n wrap(columnProto, 'alignDataLabel', wrapColumnSeriesAlignDataLabel);\n wrap(columnProto, 'animate', wrapSeriesAnimate);\n }\n if (LineSeriesClass) {\n const lineProto = LineSeriesClass.prototype;\n wrap(lineProto, 'getGraphPath', wrapLineSeriesGetGraphPath);\n }\n if (SplineSeriesClass) {\n const splineProto = SplineSeriesClass.prototype;\n wrap(splineProto, 'getPointSpline', wrapSplineSeriesGetPointSpline);\n if (AreaSplineRangeSeriesClass) {\n const areaSplineRangeProto = AreaSplineRangeSeriesClass.prototype;\n // #6430 Areasplinerange series use unwrapped getPointSpline\n // method, so we need to set this method again.\n areaSplineRangeProto.getPointSpline =\n splineProto.getPointSpline;\n }\n }\n }\n }\n /* *\n *\n * Constructor\n *\n * */\n constructor(series) {\n this.series = series;\n }\n /* *\n *\n * Functions\n *\n * */\n arc(low, high, start, end) {\n const series = this.series, center = series.xAxis.center, len = series.yAxis.len, paneInnerR = center[3] / 2;\n let r = len - high + paneInnerR, innerR = len - pick(low, len) + paneInnerR;\n // Prevent columns from shooting through the pane's center\n if (series.yAxis.reversed) {\n if (r < 0) {\n r = paneInnerR;\n }\n if (innerR < 0) {\n innerR = paneInnerR;\n }\n }\n // Return a new shapeArgs\n return {\n x: center[0],\n y: center[1],\n r: r,\n innerR: innerR,\n start: start,\n end: end\n };\n }\n /**\n * Translate a point's plotX and plotY from the internal angle and radius\n * measures to true plotX, plotY coordinates\n * @private\n */\n toXY(point) {\n const series = this.series, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, plotX = point.plotX, inverted = chart.inverted, pointY = point.y;\n let plotY = point.plotY, radius = inverted ? plotX : yAxis.len - plotY, clientX;\n // Corrected y position of inverted series other than column\n if (inverted && series && !series.isRadialBar) {\n point.plotY = plotY =\n isNumber(pointY) ? yAxis.translate(pointY) : 0;\n }\n // Save rectangular plotX, plotY for later computation\n point.rectPlotX = plotX;\n point.rectPlotY = plotY;\n if (yAxis.center) {\n radius += yAxis.center[3] / 2;\n }\n // Find the polar plotX and plotY. Avoid setting plotX and plotY to NaN\n // when plotY is undefined (#15438)\n if (isNumber(plotY)) {\n const xy = inverted ? yAxis.postTranslate(plotY, radius) :\n xAxis.postTranslate(plotX, radius);\n point.plotX = point.polarPlotX = xy.x - chart.plotLeft;\n point.plotY = point.polarPlotY = xy.y - chart.plotTop;\n }\n // If shared tooltip, record the angle in degrees in order to align X\n // points. Otherwise, use a standard k-d tree to get the nearest point\n // in two dimensions.\n if (series.kdByAngle) {\n clientX = ((plotX / Math.PI * 180) + (xAxis.pane.options.startAngle || 0)) % 360;\n if (clientX < 0) { // #2665\n clientX += 360;\n }\n point.clientX = clientX;\n }\n else {\n point.clientX = point.plotX;\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nexport default PolarAdditions;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport H from '../Globals.js';\nconst { composed } = H;\nimport StackItem from './Stacking/StackItem.js';\nimport { addEvent, objectEach, pushUnique } from '../../Shared/Utilities.js';\n/* *\n *\n * Namespace\n *\n * */\n/** @internal */\nvar WaterfallAxis;\n(function (WaterfallAxis) {\n /* *\n *\n * Interfaces\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /** @internal */\n function compose(AxisClass, ChartClass) {\n if (pushUnique(composed, 'Axis.Waterfall')) {\n addEvent(AxisClass, 'init', onAxisInit);\n addEvent(AxisClass, 'afterBuildStacks', onAxisAfterBuildStacks);\n addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n addEvent(ChartClass, 'beforeRedraw', onChartBeforeRedraw);\n }\n }\n WaterfallAxis.compose = compose;\n /** @internal */\n function onAxisAfterBuildStacks() {\n const axis = this, stacks = axis.waterfall?.stacks;\n if (stacks) {\n stacks.changed = false;\n delete stacks.alreadyChanged;\n }\n }\n /** @internal */\n function onAxisAfterRender() {\n const axis = this, stackLabelOptions = axis.options.stackLabels;\n if (stackLabelOptions?.enabled &&\n axis.waterfall?.stacks) {\n axis.waterfall.renderStackTotals();\n }\n }\n /** @internal */\n function onAxisInit() {\n const axis = this;\n if (!axis.waterfall) {\n axis.waterfall = new Composition(axis);\n }\n }\n /** @internal */\n function onChartBeforeRedraw() {\n const axes = this.axes, series = this.series;\n for (const s of series) {\n if (s.options.stacking) {\n for (const axis of axes) {\n if (!axis.isXAxis && axis.waterfall) {\n axis.waterfall.stacks.changed = true;\n }\n }\n break;\n }\n }\n }\n /* *\n *\n * Classes\n *\n * */\n /** @internal */\n class Composition {\n /* *\n *\n * Constructors\n *\n * */\n constructor(axis) {\n this.axis = axis;\n this.stacks = {\n changed: false\n };\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Calls StackItem.prototype.render function that creates and renders\n * stack total label for each waterfall stack item.\n *\n * @internal\n * @function Highcharts.Axis#renderWaterfallStackTotals\n */\n renderStackTotals() {\n const yAxis = this.axis, waterfallStacks = yAxis.waterfall?.stacks, stackTotalGroup = yAxis.stacking?.stackTotalGroup, dummyStackItem = new StackItem(yAxis, yAxis.options.stackLabels || {}, false, 0, void 0);\n this.dummyStackItem = dummyStackItem;\n // Render each waterfall stack total\n if (stackTotalGroup) {\n objectEach(waterfallStacks, (type) => {\n objectEach(type, (stackItem, key) => {\n dummyStackItem.total = stackItem.stackTotal;\n dummyStackItem.x = +key;\n if (stackItem.label) {\n dummyStackItem.label = stackItem.label;\n }\n StackItem.prototype.render.call(dummyStackItem, stackTotalGroup);\n stackItem.label = dummyStackItem.label;\n delete dummyStackItem.label;\n });\n });\n }\n dummyStackItem.total = null;\n }\n }\n WaterfallAxis.Composition = Composition;\n})(WaterfallAxis || (WaterfallAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/** @internal */\nexport default WaterfallAxis;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\nimport ColumnSeries from '../Column/ColumnSeries.js';\nimport Point from '../../Core/Series/Point.js';\nimport { isNumber } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\nclass WaterfallPoint extends ColumnSeries.prototype.pointClass {\n /* *\n *\n * Functions\n *\n * */\n getClassName() {\n let className = Point.prototype.getClassName.call(this);\n if (this.isSum) {\n className += ' highcharts-sum';\n }\n else if (this.isIntermediateSum) {\n className += ' highcharts-intermediate-sum';\n }\n return className;\n }\n // Pass the null test in ColumnSeries.translate.\n isValid() {\n return (isNumber(this.y) ||\n this.isSum ||\n Boolean(this.isIntermediateSum));\n }\n}\n/* *\n *\n * Export\n *\n * */\nexport default WaterfallPoint;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * A waterfall chart displays sequentially introduced positive or negative\n * values in cumulative columns.\n *\n * @sample highcharts/demo/waterfall/\n * Waterfall chart\n * @sample highcharts/plotoptions/waterfall-inverted/\n * Horizontal (inverted) waterfall\n * @sample highcharts/plotoptions/waterfall-stacked/\n * Stacked waterfall chart\n *\n * @extends plotOptions.column\n * @excluding boostThreshold, boostBlending\n * @product highcharts\n * @requires highcharts-more\n * @optionparent plotOptions.waterfall\n */\nconst WaterfallSeriesDefaults = {\n /**\n * @type {Highcharts.ColorType}\n * @apioption plotOptions.waterfall.color\n */\n /**\n * The color used specifically for positive point columns. When not\n * specified, the general series color is used.\n *\n * In styled mode, the waterfall colors can be set with the\n * `.highcharts-point-negative`, `.highcharts-sum` and\n * `.highcharts-intermediate-sum` classes.\n *\n * @sample {highcharts} highcharts/demo/waterfall/\n * Waterfall\n *\n * @type {Highcharts.ColorType}\n * @product highcharts\n * @apioption plotOptions.waterfall.upColor\n */\n dataLabels: {\n inside: true\n },\n /**\n * The width of the line connecting waterfall columns.\n *\n * @product highcharts\n */\n lineWidth: 1,\n /**\n * The color of the line that connects columns in a waterfall series.\n *\n * In styled mode, the stroke can be set with the `.highcharts-graph`\n * class.\n *\n * @type {Highcharts.ColorType}\n * @since 3.0\n * @product highcharts\n */\n lineColor: 'var(--highcharts-neutral-color-80)',\n /**\n * A name for the dash style to use for the line connecting the columns\n * of the waterfall series. Possible values: Dash, DashDot, Dot,\n * LongDash, LongDashDot, LongDashDotDot, ShortDash, ShortDashDot,\n * ShortDashDotDot, ShortDot, Solid\n *\n * In styled mode, the stroke dash-array can be set with the\n * `.highcharts-graph` class.\n *\n * @type {Highcharts.DashStyleValue}\n * @since 3.0\n * @product highcharts\n */\n dashStyle: 'Dot',\n /**\n * The color of the border of each waterfall column.\n *\n * In styled mode, the border stroke can be set with the\n * `.highcharts-point` class.\n *\n * @type {Highcharts.ColorType}\n * @since 3.0\n * @product highcharts\n */\n borderColor: 'var(--highcharts-neutral-color-80)',\n states: {\n hover: {\n lineWidthPlus: 0 // #3126\n }\n }\n};\n/**\n * A `waterfall` series. If the [type](#series.waterfall.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.waterfall\n * @excluding dataParser, dataURL, boostThreshold, boostBlending\n * @product highcharts\n * @requires highcharts-more\n * @apioption series.waterfall\n */\n/**\n * An array of data points for the series. For the `waterfall` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 7],\n * [1, 8],\n * [2, 3]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.waterfall.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 8,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 8,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @basic\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @excluding marker\n * @product highcharts\n * @apioption series.waterfall.data\n */\n/**\n * When this property is true, the points acts as a summary column for\n * the values added or subtracted since the last intermediate sum,\n * or since the start of the series. The `y` value is ignored.\n *\n * @sample {highcharts} highcharts/demo/waterfall/\n * Waterfall\n *\n * @type {boolean}\n * @default false\n * @product highcharts\n * @apioption series.waterfall.data.isIntermediateSum\n */\n/**\n * When this property is true, the point display the total sum across\n * the entire series. The `y` value is ignored.\n *\n * @sample {highcharts} highcharts/demo/waterfall/\n * Waterfall\n *\n * @type {boolean}\n * @default false\n * @product highcharts\n * @apioption series.waterfall.data.isSum\n */\n''; // Adds doclets above to transpiled file\n/* *\n *\n * Default Export\n *\n * */\nexport default WaterfallSeriesDefaults;\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { column: ColumnSeries, line: LineSeries } = SeriesRegistry.seriesTypes;\nimport WaterfallAxis from '../../Core/Axis/WaterfallAxis.js';\nimport WaterfallPoint from './WaterfallPoint.js';\nimport WaterfallSeriesDefaults from './WaterfallSeriesDefaults.js';\nimport { addEvent, arrayMax, arrayMin, correctFloat, crisp, extend, isNumber, isObject, merge, objectEach, pick } from '../../Shared/Utilities.js';\n/* *\n *\n * Functions\n *\n * */\n/**\n * Returns true if the key is a direct property of the object.\n * @private\n * @param {*} obj\n * Object with property to test\n * @param {string} key\n * Property key to test\n * @return {boolean}\n * Whether it is a direct property\n */\nfunction ownProp(obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n}\n/* *\n *\n * Class\n *\n * */\n/**\n * Waterfall series type.\n *\n * @private\n */\nclass WaterfallSeries extends ColumnSeries {\n /* *\n *\n * Functions\n *\n * */\n // After generating points, set y-values for all sums.\n generatePoints() {\n // Parent call:\n ColumnSeries.prototype.generatePoints.apply(this);\n const processedYData = this.getColumn('y', true);\n for (let i = 0, len = this.points.length; i < len; i++) {\n const point = this.points[i], y = processedYData[i];\n // Override point value for sums. #3710 Update point does not\n // propagate to sum\n if (isNumber(y) && (point.isIntermediateSum || point.isSum)) {\n point.y = correctFloat(y);\n }\n }\n }\n // Call default processData then override yData to reflect waterfall's\n // extremes on yAxis\n processData(force) {\n const series = this, options = series.options, yData = series.getColumn('y'), isSumData = series.getColumn('isSum'), isIntermediateSumData = series.getColumn('isIntermediateSum'), \n // #3710 Update point does not propagate to sum\n dataLength = yData.length, threshold = options.threshold || 0;\n let subSum, sum, dataMin, dataMax, y;\n sum = subSum = dataMin = dataMax = 0;\n for (let i = 0; i < dataLength; i++) {\n y = yData[i];\n if (y === 'sum' || isSumData[i]) {\n yData[i] = correctFloat(sum);\n }\n else if (y === 'intermediateSum' ||\n isIntermediateSumData[i]) {\n yData[i] = correctFloat(subSum);\n subSum = 0;\n }\n else {\n sum += y;\n subSum += y;\n }\n dataMin = Math.min(sum, dataMin);\n dataMax = Math.max(sum, dataMax);\n }\n super.processData.call(this, force);\n // Record extremes only if stacking was not set:\n if (!options.stacking) {\n series.dataMin = dataMin + threshold;\n series.dataMax = dataMax;\n }\n return;\n }\n // Return y value or string if point is sum\n toYData(pt) {\n if (pt.isSum) {\n return 'sum';\n }\n if (pt.isIntermediateSum) {\n return 'intermediateSum';\n }\n return pt.y;\n }\n // Postprocess mapping between options and SVG attributes\n pointAttribs(point, state) {\n const upColor = this.options.upColor;\n // Set or reset up color (#3710, update to negative)\n if (upColor && !point.options.color && isNumber(point.y)) {\n point.color = point.y > 0 ? upColor : void 0;\n }\n const attr = ColumnSeries.prototype.pointAttribs.call(this, point, state);\n // The dashStyle option in waterfall applies to the graph, not\n // the points\n delete attr.dashstyle;\n return attr;\n }\n // Return an empty path initially, because we need to know the stroke-width\n // in order to set the final path.\n getGraphPath() {\n return this.graph?.pathArray || [['M', 0, 0]];\n }\n // Draw columns' connector lines\n getCrispPath() {\n const // Skip points where Y is not a number (#18636)\n data = this.points.filter((d) => isNumber(d.y)), yAxis = this.yAxis, length = data.length, graphLineWidth = this.graph?.strokeWidth() || 0, reversedXAxis = this.xAxis.reversed, reversedYAxis = this.yAxis.reversed, stacking = this.options.stacking, path = [];\n for (let i = 1; i < length; i++) {\n if (!( // Skip lines that would pass over the null point (#18636)\n this.options.connectNulls ||\n isNumber(this.data[data[i].index - 1].y))) {\n continue;\n }\n const box = data[i].box, prevPoint = data[i - 1], prevY = prevPoint.y || 0, prevBox = data[i - 1].box;\n if (!box || !prevBox) {\n continue;\n }\n const prevStack = yAxis.waterfall?.stacks[this.stackKey], isPos = prevY > 0 ? -prevBox.height : 0;\n if (prevStack && prevBox && box) {\n const prevStackX = prevStack[i - 1];\n // Y position of the connector is different when series are\n // stacked, yAxis is reversed and it also depends on point's\n // value\n let yPos;\n if (stacking) {\n yPos = crisp(yAxis.translate(prevStackX.connectorThreshold || 0, false, true, false, true) +\n (reversedYAxis ? isPos : 0), graphLineWidth);\n }\n else {\n yPos = crisp(prevBox.y + (prevPoint.minPointLengthOffset || 0), graphLineWidth);\n }\n path.push([\n 'M',\n (prevBox.x || 0) + (reversedXAxis ?\n 0 :\n (prevBox.width || 0)),\n yPos\n ], [\n 'L',\n (box.x || 0) + (reversedXAxis ?\n (box.width || 0) :\n 0),\n yPos\n ]);\n }\n if (prevBox &&\n path.length &&\n ((!stacking && prevY < 0 && !reversedYAxis) ||\n (prevY > 0 && reversedYAxis))) {\n const nextLast = path[path.length - 2];\n if (nextLast && typeof nextLast[2] === 'number') {\n nextLast[2] += prevBox.height || 0;\n }\n const last = path[path.length - 1];\n if (last && typeof last[2] === 'number') {\n last[2] += prevBox.height || 0;\n }\n }\n }\n return path;\n }\n // The graph is initially drawn with an empty definition, then updated with\n // crisp rendering.\n drawGraph() {\n LineSeries.prototype.drawGraph.call(this);\n this.graph?.animate({\n d: this.getCrispPath()\n });\n }\n // Waterfall has stacking along the x-values too.\n setStackedPoints(axis) {\n const series = this, options = series.options, waterfallStacks = axis.waterfall?.stacks, seriesThreshold = options.threshold || 0, stackKey = series.stackKey, xData = series.getColumn('x'), yData = series.getColumn('y'), xLength = xData.length;\n let stackThreshold = seriesThreshold, interSum = stackThreshold, actualStackX, totalYVal = 0, actualSum = 0, prevSum = 0, statesLen, posTotal, negTotal, xPoint, yVal, x, alreadyChanged, changed;\n // Function responsible for calculating correct values for stackState\n // array of each stack item. The arguments are: firstS - the value for\n // the first state, nextS - the difference between the previous and the\n // newest state, sInx - counter used in the for that updates each state\n // when necessary, sOff - offset that must be added to each state when\n // they need to be updated (if point isn't a total sum)\n // eslint-disable-next-line require-jsdoc\n const calculateStackState = (firstS, nextS, sInx, sOff) => {\n if (actualStackX) {\n if (!statesLen) {\n actualStackX.stackState[0] = firstS;\n statesLen = actualStackX.stackState.length;\n }\n else {\n for (sInx; sInx < statesLen; sInx++) {\n actualStackX.stackState[sInx] += sOff;\n }\n }\n actualStackX.stackState.push(actualStackX.stackState[statesLen - 1] + nextS);\n }\n };\n if (axis.stacking && waterfallStacks) {\n // Code responsible for creating stacks for waterfall series\n if (series.reserveSpace()) {\n changed = waterfallStacks.changed;\n alreadyChanged = waterfallStacks.alreadyChanged;\n // In case of a redraw, stack for each x value must be emptied\n // (only for the first series in a specific stack) and\n // recalculated once more\n if (alreadyChanged &&\n alreadyChanged.indexOf(stackKey) < 0) {\n changed = true;\n }\n if (!waterfallStacks[stackKey]) {\n waterfallStacks[stackKey] = {};\n }\n const actualStack = waterfallStacks[stackKey];\n if (actualStack) {\n for (let i = 0; i < xLength; i++) {\n x = xData[i];\n if (!actualStack[x] || changed) {\n actualStack[x] = {\n negTotal: 0,\n posTotal: 0,\n stackTotal: 0,\n threshold: 0,\n stateIndex: 0,\n stackState: [],\n label: ((changed &&\n actualStack[x]) ?\n actualStack[x].label :\n void 0)\n };\n }\n actualStackX = actualStack[x];\n yVal = yData[i];\n if (yVal >= 0) {\n actualStackX.posTotal += yVal;\n }\n else {\n actualStackX.negTotal += yVal;\n }\n // Points do not exist yet, so raw data is used\n xPoint = options.data?.[i];\n posTotal = actualStackX.absolutePos =\n actualStackX.posTotal;\n negTotal = actualStackX.absoluteNeg =\n actualStackX.negTotal;\n actualStackX.stackTotal = posTotal + negTotal;\n statesLen = actualStackX.stackState.length;\n if (isObject(xPoint, true) &&\n xPoint.isIntermediateSum) {\n calculateStackState(prevSum, actualSum, 0, prevSum);\n prevSum = actualSum;\n actualSum = seriesThreshold;\n // Swapping values\n stackThreshold ^= interSum;\n interSum ^= stackThreshold;\n stackThreshold ^= interSum;\n }\n else if (isObject(xPoint, true) && xPoint.isSum) {\n calculateStackState(seriesThreshold, totalYVal, statesLen, 0);\n stackThreshold = seriesThreshold;\n }\n else {\n calculateStackState(stackThreshold, yVal, 0, totalYVal);\n if (xPoint) {\n totalYVal += yVal;\n actualSum += yVal;\n }\n }\n actualStackX.stateIndex++;\n actualStackX.threshold = stackThreshold;\n stackThreshold += actualStackX.stackTotal;\n }\n }\n waterfallStacks.changed = false;\n if (!waterfallStacks.alreadyChanged) {\n waterfallStacks.alreadyChanged = [];\n }\n waterfallStacks.alreadyChanged.push(stackKey);\n }\n }\n }\n // Extremes for a non-stacked series are recorded in processData.\n // In case of stacking, use Series.stackedYData to calculate extremes.\n getExtremes() {\n const stacking = this.options.stacking, yAxis = this.yAxis, waterfallStacks = yAxis.waterfall?.stacks;\n let stackedYNeg, stackedYPos;\n if (stacking && waterfallStacks) {\n stackedYNeg = this.stackedYNeg = [];\n stackedYPos = this.stackedYPos = [];\n // The visible y range can be different when stacking is set to\n // overlap and different when it's set to normal\n if (stacking === 'overlap') {\n objectEach(waterfallStacks[this.stackKey], function (stackX) {\n stackedYNeg.push(arrayMin(stackX.stackState));\n stackedYPos.push(arrayMax(stackX.stackState));\n });\n }\n else {\n objectEach(waterfallStacks[this.stackKey], function (stackX) {\n stackedYNeg.push(stackX.negTotal + stackX.threshold);\n stackedYPos.push(stackX.posTotal + stackX.threshold);\n });\n }\n return {\n dataMin: arrayMin(stackedYNeg),\n dataMax: arrayMax(stackedYPos)\n };\n }\n // When not stacking, data extremes have already been computed in the\n // processData function.\n return {\n dataMin: this.dataMin,\n dataMax: this.dataMax\n };\n }\n}\n/* *\n *\n * Static Properties\n *\n * */\nWaterfallSeries.defaultOptions = merge(ColumnSeries.defaultOptions, WaterfallSeriesDefaults);\nWaterfallSeries.compose = WaterfallAxis.compose;\nextend(WaterfallSeries.prototype, {\n pointValKey: 'y',\n // Property needed to prevent lines between the columns from disappearing\n // when negativeColor is used.\n showLine: true,\n pointClass: WaterfallPoint\n});\n// Translate data points from raw values\naddEvent(WaterfallSeries, 'afterColumnTranslate', function () {\n const series = this, { options, points, yAxis } = series, minPointLength = pick(options.minPointLength, 5), halfMinPointLength = minPointLength / 2, threshold = options.threshold || 0, stacking = options.stacking, actualStack = yAxis.waterfall?.stacks[series.stackKey], processedYData = series.getColumn('y', true);\n let previousIntermediate = threshold, previousY = threshold, y, total, hPos;\n for (let i = 0; i < points.length; i++) {\n const point = points[i], yValue = processedYData[i], shapeArgs = point.shapeArgs, box = extend({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }, shapeArgs || {});\n point.box = box;\n const range = [0, yValue], pointY = point.y || 0;\n // Code responsible for correct positions of stacked points\n // starts here\n if (stacking) {\n if (actualStack) {\n const actualStackX = actualStack[i];\n if (stacking === 'overlap') {\n total =\n actualStackX.stackState[actualStackX.stateIndex--];\n y = pointY >= 0 ? total : total - pointY;\n if (ownProp(actualStackX, 'absolutePos')) {\n delete actualStackX.absolutePos;\n }\n if (ownProp(actualStackX, 'absoluteNeg')) {\n delete actualStackX.absoluteNeg;\n }\n }\n else {\n if (pointY >= 0) {\n total = actualStackX.threshold +\n actualStackX.posTotal;\n actualStackX.posTotal -= pointY;\n y = total;\n }\n else {\n total = actualStackX.threshold +\n actualStackX.negTotal;\n actualStackX.negTotal -= pointY;\n y = total - pointY;\n }\n if (!actualStackX.posTotal) {\n if (isNumber(actualStackX.absolutePos) &&\n ownProp(actualStackX, 'absolutePos')) {\n actualStackX.posTotal =\n actualStackX.absolutePos;\n delete actualStackX.absolutePos;\n }\n }\n if (!actualStackX.negTotal) {\n if (isNumber(actualStackX.absoluteNeg) &&\n ownProp(actualStackX, 'absoluteNeg')) {\n actualStackX.negTotal =\n actualStackX.absoluteNeg;\n delete actualStackX.absoluteNeg;\n }\n }\n }\n if (!point.isSum) {\n // The connectorThreshold property is later used in\n // getCrispPath function to draw a connector line in a\n // correct place\n actualStackX.connectorThreshold =\n actualStackX.threshold + actualStackX.stackTotal;\n }\n hPos = y - Math.abs(pointY);\n if (yAxis.reversed) {\n [y, hPos] = [hPos, y];\n }\n point.below = y <= threshold;\n box.y = yAxis.translate(y, false, true, false, true);\n box.height = yAxis.translate(hPos, false, true, false, true) - box.y;\n const dummyStackItem = yAxis.waterfall?.dummyStackItem;\n if (dummyStackItem) {\n dummyStackItem.x = i;\n dummyStackItem.label = actualStack[i].label;\n dummyStackItem.setOffset(series.pointXOffset || 0, series.barW || 0, series.stackedYNeg[i], series.stackedYPos[i], void 0, this.xAxis);\n }\n }\n }\n else {\n // Up points\n y = Math.max(previousY, previousY + pointY) + range[0];\n box.y = yAxis.translate(y, false, true, false, true);\n // Sum points\n if (point.isSum) {\n box.y = yAxis.translate(range[1], false, true, false, true);\n box.height = Math.min(yAxis.translate(range[0], false, true, false, true), yAxis.len) - box.y; // #4256\n point.below = range[1] <= threshold;\n }\n else if (point.isIntermediateSum) {\n if (pointY >= 0) {\n y = range[1] + previousIntermediate;\n hPos = previousIntermediate;\n }\n else {\n y = previousIntermediate;\n hPos = range[1] + previousIntermediate;\n }\n if (yAxis.reversed) {\n [y, hPos] = [hPos, y];\n }\n box.y = yAxis.translate(y, false, true, false, true);\n box.height = Math.abs(box.y -\n Math.min(yAxis.translate(hPos, false, true, false, true), yAxis.len));\n previousIntermediate += range[1];\n point.below = y <= threshold;\n // If it's not the sum point, update previous stack end position\n // and get shape height (#3886)\n }\n else {\n box.height = yValue > 0 ?\n yAxis.translate(previousY, false, true, false, true) - box.y :\n yAxis.translate(previousY + yValue, false, true, false, true) - yAxis.translate(previousY, false, true, false, true);\n previousY += yValue;\n point.below = previousY < threshold;\n }\n }\n // #3952 Negative sum or intermediate sum not rendered correctly\n if (box.height < 0) {\n box.y += box.height;\n box.height *= -1;\n }\n point.plotY = box.y;\n point.yBottom = box.y + box.height;\n if (box.height <= minPointLength && !point.isNull) {\n box.height = minPointLength;\n box.y -= halfMinPointLength;\n point.yBottom = box.y + box.height;\n point.plotY = box.y;\n if (pointY < 0) {\n point.minPointLengthOffset = -halfMinPointLength;\n }\n else {\n point.minPointLengthOffset = halfMinPointLength;\n }\n }\n else {\n // #8024, empty gaps in the line for null data\n if (point.isNull) {\n box.width = 0;\n }\n point.minPointLengthOffset = 0;\n }\n // Correct tooltip placement (#3014)\n const tooltipY = point.plotY + (point.negative ? box.height : 0);\n if (point.below) { // #15334\n point.plotY += box.height;\n }\n if (point.tooltipPos) {\n if (series.chart.inverted) {\n point.tooltipPos[0] = yAxis.len - tooltipY;\n }\n else {\n point.tooltipPos[1] = tooltipY;\n }\n }\n // Check point position after recalculation (#16788)\n point.isInside = this.isPointInside(point);\n // Crisp vector coordinates\n const crispBottom = crisp(point.yBottom, series.borderWidth);\n box.y = crisp(box.y, series.borderWidth);\n box.height = crispBottom - box.y;\n merge(true, point.shapeArgs, box);\n }\n}, { order: 2 });\nSeriesRegistry.registerSeriesType('waterfall', WaterfallSeries);\n/* *\n *\n * Export\n *\n * */\nexport default WaterfallSeries;\n","// A trimmed replacement for `highcharts/es-modules/masters/highcharts-more.src.js`. The official master registers\n// 13 series types (AreaRange, AreaSplineRange, BoxPlot, Bubble, ColumnRange, ColumnPyramid, ErrorBar, Gauge,\n// PackedBubble, Polygon, Waterfall) plus Polar chart support. DPUse only ever renders AreaRange, AreaSplineRange,\n// ColumnRange, Waterfall, and Polar charts (see CARTESIAN/POLAR/RANGE_SERIES_TYPE_MAP in index.ts), so this file\n// mirrors the official master with the unused series types dropped. Imports must stay in this relative order:\n// the compose() calls below depend on side effects (series-type registration) from the imports above them.\n\nimport 'highcharts/es-modules/Series/AreaRange/AreaRangeSeries.js';\nimport 'highcharts/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js';\nimport 'highcharts/es-modules/Series/ColumnRange/ColumnRangeSeries.js';\nimport Highcharts from 'highcharts/es-modules/Core/Globals.js';\nimport Pane from 'highcharts/es-modules/Extensions/Pane/Pane.js';\nimport PolarAdditions from 'highcharts/es-modules/Series/PolarComposition.js';\nimport RadialAxis from 'highcharts/es-modules/Core/Axis/RadialAxis.js';\nimport SeriesRegistry from 'highcharts/es-modules/Core/Series/SeriesRegistry.js';\nimport WaterfallSeries from 'highcharts/es-modules/Series/Waterfall/WaterfallSeries.js';\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, unicorn/no-top-level-side-effects --\n vendor composition shim: highcharts/es-modules/* below the masters has no type declarations (see highchartsEsModules.d.ts), so everything here is implicitly `any`;\n this mirrors the mutate-the-shared-global pattern used by highcharts-more.src.js itself. */\nconst G = Highcharts;\nG.RadialAxis = RadialAxis;\nPane.compose(G.Chart, G.Pointer);\nPolarAdditions.compose(\n G.Axis,\n G.Chart,\n G.Pointer,\n G.Series,\n G.Tick,\n G.Point,\n SeriesRegistry.seriesTypes.areasplinerange,\n SeriesRegistry.seriesTypes.column,\n SeriesRegistry.seriesTypes.line,\n SeriesRegistry.seriesTypes.spline\n);\nWaterfallSeries.compose(G.Axis, G.Chart);\n/* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, unicorn/no-top-level-side-effects --\n end of the vendor composition shim */\n\nexport default G;\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],"mappings":"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"}
|