highcharts 13.0.2 → 13.1.1
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/bower.json +1 -1
- package/css/highcharts.css +6 -2
- package/es-modules/Accessibility/Components/InfoRegionsComponent.js +10 -6
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +2 -1
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +25 -1
- package/es-modules/Accessibility/KeyboardNavigation.js +1 -1
- package/es-modules/Accessibility/Utils/HTMLUtilities.js +13 -3
- package/es-modules/Core/Animation/AnimationUtilities.js +7 -2
- package/es-modules/Core/Animation/Fx.js +1 -0
- package/es-modules/Core/Axis/Axis.js +181 -211
- package/es-modules/Core/Axis/Axis3DComposition.js +13 -15
- package/es-modules/Core/Axis/AxisDefaults.js +9 -8
- package/es-modules/Core/Axis/BrokenAxis.js +5 -4
- package/es-modules/Core/Axis/Color/ColorAxis.js +66 -54
- package/es-modules/Core/Axis/Color/ColorAxisComposition.js +3 -0
- package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +6 -4
- package/es-modules/Core/Axis/DateTimeAxis.js +4 -3
- package/es-modules/Core/Axis/GridAxis.js +17 -13
- package/es-modules/Core/Axis/LogarithmicAxis.js +4 -3
- package/es-modules/Core/Axis/NavigatorAxisComposition.js +3 -4
- package/es-modules/Core/Axis/OrdinalAxis.js +0 -15
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +135 -72
- package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +72 -124
- package/es-modules/Core/Axis/RadialAxis.js +50 -7
- package/es-modules/Core/Axis/ScrollbarAxis.js +3 -0
- package/es-modules/Core/Axis/Stacking/StackItem.js +49 -75
- package/es-modules/Core/Axis/Stacking/StackingAxis.js +34 -22
- package/es-modules/Core/Axis/Tick.js +95 -92
- package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +9 -13
- package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
- package/es-modules/Core/Chart/Chart.js +13 -4
- package/es-modules/Core/Chart/StockChart.js +20 -26
- package/es-modules/Core/Defaults.js +18 -0
- package/es-modules/Core/Globals.js +9 -7
- package/es-modules/Core/Pointer.js +7 -8
- package/es-modules/Core/Renderer/HTML/AST.js +19 -12
- package/es-modules/Core/Renderer/HTML/HTMLElement.js +5 -1
- package/es-modules/Core/Renderer/SVG/SVGElement.js +1 -0
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +1 -1
- package/es-modules/Core/Renderer/SVG/Symbols.js +1 -1
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +6 -2
- package/es-modules/Core/Series/OverlappingDataLabels.js +41 -32
- package/es-modules/Core/Series/Point.js +14 -11
- package/es-modules/Core/Series/Series.js +21 -10
- package/es-modules/Core/Tooltip.js +35 -40
- package/es-modules/Data/DataCursor.js +3 -2
- package/es-modules/Data/DataTable.js +21 -2
- package/es-modules/Data/DataTableCore.js +28 -4
- package/es-modules/Data/Formula/FormulaParser.js +30 -10
- package/es-modules/Extensions/Annotations/Annotation.js +5 -7
- package/es-modules/Extensions/Annotations/AnnotationChart.js +2 -1
- package/es-modules/Extensions/Boost/BoostSeries.js +4 -13
- package/es-modules/Extensions/Breadcrumbs/Breadcrumbs.js +6 -4
- package/es-modules/Extensions/Breadcrumbs/BreadcrumbsDefaults.js +1 -1
- package/es-modules/Extensions/Data.js +4 -2
- package/es-modules/Extensions/DragPanes/DragPanes.js +6 -9
- package/es-modules/Extensions/Drilldown/Drilldown.js +9 -4
- package/es-modules/Extensions/ExportData/ExportData.js +24 -4
- package/es-modules/Extensions/Pane/Pane.js +1 -1
- package/es-modules/Extensions/ParallelCoordinates/ParallelAxis.js +5 -4
- package/es-modules/Extensions/StaticScale.js +13 -11
- package/es-modules/Series/Area/AreaSeriesDefaults.js +1 -1
- package/es-modules/Series/AreaRange/AreaRangeSeriesDefaults.js +1 -1
- package/es-modules/Series/AreaSpline/AreaSplineSeries.js +1 -1
- package/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.js +1 -1
- package/es-modules/Series/Bar/BarSeries.js +1 -1
- package/es-modules/Series/Bellcurve/BellcurveSeriesDefaults.js +1 -1
- package/es-modules/Series/BoxPlot/BoxPlotSeriesDefaults.js +1 -1
- package/es-modules/Series/Bubble/BubbleSeries.js +1 -1
- package/es-modules/Series/Bullet/BulletSeriesDefaults.js +1 -1
- package/es-modules/Series/Candlestick/CandlestickSeriesDefaults.js +1 -1
- package/es-modules/Series/Column/ColumnSeriesDefaults.js +6 -3
- package/es-modules/Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js +2 -3
- package/es-modules/Series/ColumnRange/ColumnRangeSeriesDefaults.js +1 -1
- package/es-modules/Series/Contour/ContourSeriesDefaults.js +12 -14
- package/es-modules/Series/ErrorBar/ErrorBarSeriesDefaults.js +1 -1
- package/es-modules/Series/Flags/FlagsPoint.js +4 -2
- package/es-modules/Series/Flags/FlagsPointOptions.js +12 -0
- package/es-modules/Series/Flags/FlagsSeries.js +8 -7
- package/es-modules/Series/Flags/FlagsSeriesDefaults.js +7 -7
- package/es-modules/Series/Flags/FlagsSeriesOptions.js +12 -0
- package/es-modules/Series/Flags/FlagsSymbols.js +5 -3
- package/es-modules/Series/Funnel/FunnelSeriesDefaults.js +1 -1
- package/es-modules/Series/Gauge/GaugeSeries.js +1 -1
- package/es-modules/Series/GeoHeatmap/GeoHeatmapSeries.js +1 -1
- package/es-modules/Series/HLC/HLCSeriesDefaults.js +1 -7
- package/es-modules/Series/Heatmap/HeatmapSeriesDefaults.js +1 -1
- package/es-modules/Series/HeikinAshi/HeikinAshiSeriesDefaults.js +1 -1
- package/es-modules/Series/Histogram/HistogramSeriesDefaults.js +1 -1
- package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +1 -1
- package/es-modules/Series/Item/ItemSeriesDefaults.js +1 -1
- package/es-modules/Series/Line/LineSeries.js +0 -1
- package/es-modules/Series/Map/MapSeriesDefaults.js +1 -1
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +0 -1
- package/es-modules/Series/MapLine/MapLineSeriesDefaults.js +1 -1
- package/es-modules/Series/MapPoint/MapPointSeriesDefaults.js +0 -1
- package/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js +5 -5
- package/es-modules/Series/OHLC/OHLCSeriesDefaults.js +0 -1
- package/es-modules/Series/PackedBubble/PackedBubbleChart.js +18 -0
- package/es-modules/Series/PackedBubble/PackedBubbleDataLabelOptions.js +12 -0
- package/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +3 -3
- package/es-modules/Series/PackedBubble/PackedBubbleLayout.js +2 -2
- package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
- package/es-modules/Series/PackedBubble/PackedBubblePointOptions.js +12 -0
- package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +20 -20
- package/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +2 -2
- package/es-modules/Series/PackedBubble/PackedBubbleSeriesOptions.js +12 -0
- package/es-modules/Series/ParetoSeries/ParetoPoint.js +17 -0
- package/es-modules/Series/ParetoSeries/ParetoPointOptions.js +12 -0
- package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -3
- package/es-modules/Series/ParetoSeries/ParetoSeriesDefaults.js +1 -1
- package/es-modules/Series/ParetoSeries/ParetoSeriesOptions.js +12 -0
- package/es-modules/Series/PathUtilities.js +3 -1
- package/es-modules/Series/Pictorial/PictorialPointOptions.js +12 -0
- package/es-modules/Series/Pictorial/PictorialSeries.js +5 -25
- package/es-modules/Series/Pictorial/PictorialSeriesDefaults.js +45 -0
- package/es-modules/Series/Pictorial/PictorialSeriesOptions.js +12 -0
- package/es-modules/Series/Pie/PieSeriesDefaults.js +1 -1
- package/es-modules/Series/Pie3D/Pie3DPoint.js +1 -1
- package/es-modules/Series/Pie3D/Pie3DSeries.js +6 -6
- package/es-modules/Series/PolarComposition.js +22 -21
- package/es-modules/Series/Polygon/PolygonPoint.js +17 -0
- package/es-modules/Series/Polygon/PolygonPointOptions.js +12 -0
- package/es-modules/Series/Polygon/PolygonSeriesDefaults.js +1 -1
- package/es-modules/Series/Polygon/PolygonSeriesOptions.js +12 -0
- package/es-modules/Series/Pyramid/PyramidPoint.js +19 -0
- package/es-modules/Series/Pyramid/PyramidPointOptions.js +14 -0
- package/es-modules/Series/Pyramid/PyramidSeries.js +1 -1
- package/es-modules/Series/Pyramid/PyramidSeriesDefaults.js +1 -1
- package/es-modules/Series/Pyramid/PyramidSeriesOptions.js +14 -0
- package/es-modules/Series/Pyramid3D/Pyramid3DPoint.js +19 -0
- package/es-modules/Series/Pyramid3D/Pyramid3DPointOptions.js +14 -0
- package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +1 -1
- package/es-modules/Series/Pyramid3D/Pyramid3DSeriesOptions.js +14 -0
- package/es-modules/Series/Renko/RenkoSeriesDefaults.js +1 -2
- package/es-modules/Series/Sankey/SankeySeriesDefaults.js +6 -7
- package/es-modules/Series/Scatter/ScatterSeriesDefaults.js +1 -1
- package/es-modules/Series/SolidGauge/SolidGaugeSeriesDefaults.js +1 -1
- package/es-modules/Series/Spline/SplineSeries.js +1 -1
- package/es-modules/Series/Streamgraph/StreamgraphSeriesDefaults.js +1 -1
- package/es-modules/Series/Sunburst/SunburstSeriesDefaults.js +1 -1
- package/es-modules/Series/TiledWebMap/TiledWebMapSeriesDefaults.js +2 -2
- package/es-modules/Series/Tilemap/TilemapSeriesDefaults.js +1 -1
- package/es-modules/Series/Timeline/TimelineSeriesDefaults.js +1 -1
- package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +1 -1
- package/es-modules/Series/VariablePie/VariablePieSeriesDefaults.js +1 -1
- package/es-modules/Series/Variwide/VariwideComposition.js +11 -8
- package/es-modules/Series/Vector/VectorSeriesDefaults.js +1 -1
- package/es-modules/Series/Venn/VennSeriesDefaults.js +1 -1
- package/es-modules/Series/Waterfall/WaterfallSeriesDefaults.js +1 -1
- package/es-modules/Series/Windbarb/WindbarbSeriesDefaults.js +1 -1
- package/es-modules/Shared/Utilities.js +7 -0
- package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +1 -1
- package/es-modules/Stock/Indicators/AD/ADIndicator.js +0 -1
- package/es-modules/Stock/Indicators/AO/AOIndicator.js +1 -1
- package/es-modules/Stock/Indicators/APO/APOIndicator.js +1 -1
- package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +0 -1
- package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +1 -1
- package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +2 -2
- package/es-modules/Stock/Indicators/BB/BBIndicator.js +0 -1
- package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +0 -1
- package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +0 -1
- package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +0 -1
- package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +1 -1
- package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -1
- package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +3 -3
- package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +1 -1
- package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +3 -3
- package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +0 -1
- package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +0 -1
- package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +1 -1
- package/es-modules/Stock/Indicators/LinearRegression/LinearRegressionIndicator.js +0 -1
- package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngleIndicator.js +0 -1
- package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionInterceptIndicator.js +0 -1
- package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopesIndicator.js +0 -1
- package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +0 -1
- package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +0 -1
- package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +0 -1
- package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +0 -1
- package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +0 -1
- package/es-modules/Stock/Indicators/PC/PCIndicator.js +1 -1
- package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -1
- package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +0 -1
- package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +0 -1
- package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +0 -1
- package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +0 -1
- package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +0 -1
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
- package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +3 -3
- package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +1 -1
- package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +1 -1
- package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +1 -1
- package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +0 -1
- package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -1
- package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +0 -1
- package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +0 -1
- package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +1 -1
- package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +0 -1
- package/es-modules/Stock/Navigator/ChartNavigatorComposition.js +5 -5
- package/es-modules/Stock/Navigator/Navigator.js +1 -5
- package/es-modules/Stock/Navigator/StandaloneNavigator.js +38 -8
- package/es-modules/Stock/RangeSelector/RangeSelectorComposition.js +2 -2
- package/es-modules/Stock/Scrollbar/ScrollbarDefaults.js +1 -3
- package/es-modules/masters/highcharts-3d.src.js +1 -1
- package/es-modules/masters/highcharts-autoload.src.js +1 -1
- package/es-modules/masters/highcharts-gantt.src.js +1 -1
- package/es-modules/masters/highcharts-more.src.js +1 -1
- package/es-modules/masters/highcharts.src.js +1 -1
- package/es-modules/masters/highmaps.src.js +1 -1
- package/es-modules/masters/highstock.src.js +1 -1
- package/es-modules/masters/i18n/fr-FR.src.d.ts +1 -1
- package/es-modules/masters/i18n/fr-FR.src.js +1 -1
- package/es-modules/masters/i18n/nb-NO.src.d.ts +1 -1
- package/es-modules/masters/i18n/nb-NO.src.js +1 -1
- package/es-modules/masters/i18n/zh-CN.src.d.ts +1 -1
- package/es-modules/masters/i18n/zh-CN.src.js +1 -1
- package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
- package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
- package/es-modules/masters/indicators/ao.src.js +1 -1
- package/es-modules/masters/indicators/apo.src.js +1 -1
- package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
- package/es-modules/masters/indicators/aroon.src.js +1 -1
- package/es-modules/masters/indicators/atr.src.js +1 -1
- package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
- package/es-modules/masters/indicators/cci.src.js +1 -1
- package/es-modules/masters/indicators/chaikin.src.js +1 -1
- package/es-modules/masters/indicators/cmf.src.js +1 -1
- package/es-modules/masters/indicators/cmo.src.js +1 -1
- package/es-modules/masters/indicators/dema.src.js +1 -1
- package/es-modules/masters/indicators/disparity-index.src.js +1 -1
- package/es-modules/masters/indicators/dmi.src.js +1 -1
- package/es-modules/masters/indicators/dpo.src.js +1 -1
- package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
- package/es-modules/masters/indicators/indicators-all.src.js +1 -1
- package/es-modules/masters/indicators/indicators.src.js +1 -1
- package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
- package/es-modules/masters/indicators/klinger.src.js +1 -1
- package/es-modules/masters/indicators/macd.src.js +1 -1
- package/es-modules/masters/indicators/mfi.src.js +1 -1
- package/es-modules/masters/indicators/momentum.src.js +1 -1
- package/es-modules/masters/indicators/natr.src.js +1 -1
- package/es-modules/masters/indicators/obv.src.js +1 -1
- package/es-modules/masters/indicators/pivot-points.src.js +1 -1
- package/es-modules/masters/indicators/ppo.src.js +1 -1
- package/es-modules/masters/indicators/price-channel.src.js +1 -1
- package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
- package/es-modules/masters/indicators/psar.src.js +1 -1
- package/es-modules/masters/indicators/regressions.src.js +1 -1
- package/es-modules/masters/indicators/roc.src.js +1 -1
- package/es-modules/masters/indicators/rsi.src.js +1 -1
- package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
- package/es-modules/masters/indicators/stochastic.src.js +1 -1
- package/es-modules/masters/indicators/supertrend.src.js +1 -1
- package/es-modules/masters/indicators/tema.src.js +1 -1
- package/es-modules/masters/indicators/trendline.src.js +1 -1
- package/es-modules/masters/indicators/trix.src.js +1 -1
- package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
- package/es-modules/masters/indicators/vwap.src.js +1 -1
- package/es-modules/masters/indicators/williams-r.src.js +1 -1
- package/es-modules/masters/indicators/wma.src.js +1 -1
- package/es-modules/masters/indicators/zigzag.src.js +1 -1
- package/es-modules/masters/modules/accessibility.src.js +1 -1
- package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
- package/es-modules/masters/modules/annotations.src.js +1 -1
- package/es-modules/masters/modules/arc-diagram.src.js +1 -1
- package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
- package/es-modules/masters/modules/boost-canvas.src.js +1 -1
- package/es-modules/masters/modules/boost.src.js +1 -1
- package/es-modules/masters/modules/broken-axis.src.js +1 -1
- package/es-modules/masters/modules/bullet.src.js +1 -1
- package/es-modules/masters/modules/coloraxis.src.js +1 -1
- package/es-modules/masters/modules/contour.src.js +1 -1
- package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
- package/es-modules/masters/modules/cylinder.src.js +1 -1
- package/es-modules/masters/modules/data-sorting.src.js +1 -1
- package/es-modules/masters/modules/data-tools.src.js +1 -1
- package/es-modules/masters/modules/data.src.js +1 -1
- package/es-modules/masters/modules/datagrouping.src.js +1 -1
- package/es-modules/masters/modules/debugger.src.js +1 -1
- package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
- package/es-modules/masters/modules/dotplot.src.js +1 -1
- package/es-modules/masters/modules/drag-panes.src.js +1 -1
- package/es-modules/masters/modules/draggable-points.src.js +1 -1
- package/es-modules/masters/modules/drilldown.src.js +1 -1
- package/es-modules/masters/modules/dumbbell.src.js +1 -1
- package/es-modules/masters/modules/export-data.src.js +1 -1
- package/es-modules/masters/modules/exporting.src.js +1 -1
- package/es-modules/masters/modules/flowmap.src.js +1 -1
- package/es-modules/masters/modules/full-screen.src.js +1 -1
- package/es-modules/masters/modules/funnel.src.js +1 -1
- package/es-modules/masters/modules/funnel3d.src.js +1 -1
- package/es-modules/masters/modules/gantt.src.js +1 -1
- package/es-modules/masters/modules/geoheatmap.src.js +1 -1
- package/es-modules/masters/modules/grid-axis.src.js +1 -1
- package/es-modules/masters/modules/heatmap.src.js +1 -1
- package/es-modules/masters/modules/heikinashi.src.js +1 -1
- package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
- package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
- package/es-modules/masters/modules/item-series.src.js +1 -1
- package/es-modules/masters/modules/lollipop.src.js +1 -1
- package/es-modules/masters/modules/map.src.js +1 -1
- package/es-modules/masters/modules/marker-clusters.src.js +1 -1
- package/es-modules/masters/modules/mouse-wheel-zoom.src.js +1 -1
- package/es-modules/masters/modules/navigator.src.js +1 -1
- package/es-modules/masters/modules/networkgraph.src.js +1 -1
- package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
- package/es-modules/masters/modules/non-cartesian-zoom.src.js +1 -1
- package/es-modules/masters/modules/offline-exporting.src.js +1 -1
- package/es-modules/masters/modules/organization.src.js +1 -1
- package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
- package/es-modules/masters/modules/pareto.src.js +1 -1
- package/es-modules/masters/modules/pathfinder.src.js +1 -1
- package/es-modules/masters/modules/pattern-fill.src.js +1 -1
- package/es-modules/masters/modules/pictorial.src.js +1 -1
- package/es-modules/masters/modules/pointandfigure.src.js +1 -1
- package/es-modules/masters/modules/price-indicator.src.js +1 -1
- package/es-modules/masters/modules/pyramid3d.src.js +1 -1
- package/es-modules/masters/modules/renko.src.js +1 -1
- package/es-modules/masters/modules/sankey.src.js +1 -1
- package/es-modules/masters/modules/series-label.src.js +1 -1
- package/es-modules/masters/modules/series-on-point.src.js +1 -1
- package/es-modules/masters/modules/solid-gauge.src.js +1 -1
- package/es-modules/masters/modules/sonification.src.js +1 -1
- package/es-modules/masters/modules/static-scale.src.js +1 -1
- package/es-modules/masters/modules/stock-tools.src.js +1 -1
- package/es-modules/masters/modules/stock.src.js +1 -1
- package/es-modules/masters/modules/streamgraph.src.js +1 -1
- package/es-modules/masters/modules/sunburst.src.js +1 -1
- package/es-modules/masters/modules/textpath.src.js +1 -1
- package/es-modules/masters/modules/tiledwebmap.src.js +1 -1
- package/es-modules/masters/modules/tilemap.src.js +1 -1
- package/es-modules/masters/modules/timeline.src.js +1 -1
- package/es-modules/masters/modules/treegraph.src.js +1 -1
- package/es-modules/masters/modules/treegrid.src.js +1 -1
- package/es-modules/masters/modules/treemap.src.js +1 -1
- package/es-modules/masters/modules/variable-pie.src.js +1 -1
- package/es-modules/masters/modules/variwide.src.js +1 -1
- package/es-modules/masters/modules/vector.src.js +1 -1
- package/es-modules/masters/modules/venn.src.js +1 -1
- package/es-modules/masters/modules/windbarb.src.js +1 -1
- package/es-modules/masters/modules/wordcloud.src.js +1 -1
- package/es-modules/masters/modules/xrange.src.js +1 -1
- package/es-modules/masters/standalone-navigator.src.js +1 -1
- package/es-modules/masters/themes/adaptive.src.js +1 -1
- package/es-modules/masters/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/dark-unica.src.js +1 -1
- package/es-modules/masters/themes/grid-light.src.js +1 -1
- package/es-modules/masters/themes/high-contrast.src.js +1 -1
- package/es-modules/masters/themes/sand-signika.src.js +1 -1
- package/es-modules/masters/themes/sunset.src.js +1 -1
- package/es-modules/tsconfig.tsbuildinfo +1 -1
- package/esm/highcharts-3d.js +2 -2
- package/esm/highcharts-3d.src.js +38 -61
- package/esm/highcharts-autoload.js +2 -2
- package/esm/highcharts-autoload.src.js +18 -39
- package/esm/highcharts-gantt.js +1 -1
- package/esm/highcharts-gantt.src.js +1 -1
- package/esm/highcharts-more.js +2 -2
- package/esm/highcharts-more.src.js +142 -120
- package/esm/highcharts.js +4 -4
- package/esm/highcharts.src.js +825 -751
- package/esm/highmaps.js +1 -1
- package/esm/highmaps.src.js +1 -1
- package/esm/highstock.js +1 -1
- package/esm/highstock.src.js +1 -1
- package/esm/i18n/fr-FR.js +2 -2
- package/esm/i18n/fr-FR.src.js +17 -38
- package/esm/i18n/nb-NO.js +2 -2
- package/esm/i18n/nb-NO.src.js +17 -38
- package/esm/i18n/zh-CN.js +2 -2
- package/esm/i18n/zh-CN.src.js +17 -38
- package/esm/indicators/acceleration-bands.js +2 -2
- package/esm/indicators/acceleration-bands.src.js +18 -39
- package/esm/indicators/accumulation-distribution.js +2 -2
- package/esm/indicators/accumulation-distribution.src.js +17 -39
- package/esm/indicators/ao.js +2 -2
- package/esm/indicators/ao.src.js +18 -39
- package/esm/indicators/apo.js +2 -2
- package/esm/indicators/apo.src.js +18 -39
- package/esm/indicators/aroon-oscillator.js +2 -2
- package/esm/indicators/aroon-oscillator.src.js +19 -40
- package/esm/indicators/aroon.js +2 -2
- package/esm/indicators/aroon.src.js +18 -39
- package/esm/indicators/atr.js +2 -2
- package/esm/indicators/atr.src.js +17 -39
- package/esm/indicators/bollinger-bands.js +2 -2
- package/esm/indicators/bollinger-bands.src.js +17 -39
- package/esm/indicators/cci.js +2 -2
- package/esm/indicators/cci.src.js +17 -39
- package/esm/indicators/chaikin.js +2 -2
- package/esm/indicators/chaikin.src.js +18 -40
- package/esm/indicators/cmf.js +2 -2
- package/esm/indicators/cmf.src.js +17 -39
- package/esm/indicators/cmo.js +2 -2
- package/esm/indicators/cmo.src.js +17 -39
- package/esm/indicators/dema.js +2 -2
- package/esm/indicators/dema.src.js +18 -39
- package/esm/indicators/disparity-index.js +2 -2
- package/esm/indicators/disparity-index.src.js +20 -41
- package/esm/indicators/dmi.js +2 -2
- package/esm/indicators/dmi.src.js +20 -41
- package/esm/indicators/dpo.js +2 -2
- package/esm/indicators/dpo.src.js +18 -39
- package/esm/indicators/ichimoku-kinko-hyo.js +2 -2
- package/esm/indicators/ichimoku-kinko-hyo.src.js +18 -40
- package/esm/indicators/indicators-all.js +2 -2
- package/esm/indicators/indicators-all.src.js +76 -99
- package/esm/indicators/indicators.js +2 -2
- package/esm/indicators/indicators.src.js +48 -46
- package/esm/indicators/keltner-channels.js +2 -2
- package/esm/indicators/keltner-channels.src.js +18 -39
- package/esm/indicators/klinger.js +2 -2
- package/esm/indicators/klinger.src.js +17 -38
- package/esm/indicators/macd.js +2 -2
- package/esm/indicators/macd.src.js +17 -39
- package/esm/indicators/mfi.js +2 -2
- package/esm/indicators/mfi.src.js +17 -39
- package/esm/indicators/momentum.js +2 -2
- package/esm/indicators/momentum.src.js +17 -39
- package/esm/indicators/natr.js +2 -2
- package/esm/indicators/natr.src.js +17 -39
- package/esm/indicators/obv.js +2 -2
- package/esm/indicators/obv.src.js +17 -39
- package/esm/indicators/pivot-points.js +2 -2
- package/esm/indicators/pivot-points.src.js +17 -39
- package/esm/indicators/ppo.js +2 -2
- package/esm/indicators/ppo.src.js +18 -39
- package/esm/indicators/price-channel.js +2 -2
- package/esm/indicators/price-channel.src.js +18 -39
- package/esm/indicators/price-envelopes.js +2 -2
- package/esm/indicators/price-envelopes.src.js +17 -39
- package/esm/indicators/psar.js +2 -2
- package/esm/indicators/psar.src.js +17 -39
- package/esm/indicators/regressions.js +2 -2
- package/esm/indicators/regressions.src.js +17 -42
- package/esm/indicators/roc.js +2 -2
- package/esm/indicators/roc.src.js +17 -39
- package/esm/indicators/rsi.js +2 -2
- package/esm/indicators/rsi.src.js +17 -39
- package/esm/indicators/slow-stochastic.js +2 -2
- package/esm/indicators/slow-stochastic.src.js +17 -38
- package/esm/indicators/stochastic.js +2 -2
- package/esm/indicators/stochastic.src.js +20 -41
- package/esm/indicators/supertrend.js +2 -2
- package/esm/indicators/supertrend.src.js +19 -40
- package/esm/indicators/tema.js +2 -2
- package/esm/indicators/tema.src.js +18 -39
- package/esm/indicators/trendline.js +2 -2
- package/esm/indicators/trendline.src.js +17 -39
- package/esm/indicators/trix.js +2 -2
- package/esm/indicators/trix.src.js +18 -39
- package/esm/indicators/volume-by-price.js +2 -2
- package/esm/indicators/volume-by-price.src.js +18 -39
- package/esm/indicators/vwap.js +2 -2
- package/esm/indicators/vwap.src.js +17 -39
- package/esm/indicators/williams-r.js +2 -2
- package/esm/indicators/williams-r.src.js +18 -39
- package/esm/indicators/wma.js +2 -2
- package/esm/indicators/wma.src.js +17 -39
- package/esm/indicators/zigzag.js +2 -2
- package/esm/indicators/zigzag.src.js +17 -39
- package/esm/modules/accessibility.js +2 -2
- package/esm/modules/accessibility.src.js +90 -76
- package/esm/modules/annotations-advanced.js +3 -3
- package/esm/modules/annotations-advanced.src.js +36 -58
- package/esm/modules/annotations.js +3 -3
- package/esm/modules/annotations.src.js +36 -58
- package/esm/modules/arc-diagram.js +2 -2
- package/esm/modules/arc-diagram.src.js +18 -39
- package/esm/modules/arrow-symbols.js +3 -3
- package/esm/modules/arrow-symbols.src.js +17 -38
- package/esm/modules/boost-canvas.js +2 -2
- package/esm/modules/boost-canvas.src.js +57 -63
- package/esm/modules/boost.js +2 -2
- package/esm/modules/boost.src.js +56 -62
- package/esm/modules/broken-axis.js +2 -2
- package/esm/modules/broken-axis.src.js +21 -41
- package/esm/modules/bullet.js +2 -2
- package/esm/modules/bullet.src.js +18 -39
- package/esm/modules/coloraxis.js +2 -2
- package/esm/modules/coloraxis.src.js +92 -96
- package/esm/modules/contour.js +3 -3
- package/esm/modules/contour.src.js +29 -52
- package/esm/modules/current-date-indicator.js +2 -2
- package/esm/modules/current-date-indicator.src.js +17 -38
- package/esm/modules/cylinder.js +2 -2
- package/esm/modules/cylinder.src.js +18 -39
- package/esm/modules/data-sorting.js +2 -2
- package/esm/modules/data-sorting.src.js +18 -39
- package/esm/modules/data-tools.js +2 -2
- package/esm/modules/data-tools.src.js +110 -67
- package/esm/modules/data.js +4 -4
- package/esm/modules/data.src.js +53 -48
- package/esm/modules/datagrouping.js +2 -2
- package/esm/modules/datagrouping.src.js +52 -48
- package/esm/modules/debugger.js +2 -2
- package/esm/modules/debugger.src.js +17 -38
- package/esm/modules/dependency-wheel.js +2 -2
- package/esm/modules/dependency-wheel.src.js +17 -38
- package/esm/modules/dotplot.js +2 -2
- package/esm/modules/dotplot.src.js +17 -38
- package/esm/modules/drag-panes.js +2 -2
- package/esm/modules/drag-panes.src.js +22 -46
- package/esm/modules/draggable-points.js +2 -2
- package/esm/modules/draggable-points.src.js +17 -38
- package/esm/modules/drilldown.js +2 -2
- package/esm/modules/drilldown.src.js +40 -54
- package/esm/modules/dumbbell.js +2 -2
- package/esm/modules/dumbbell.src.js +18 -39
- package/esm/modules/export-data.js +2 -2
- package/esm/modules/export-data.src.js +42 -43
- package/esm/modules/exporting.js +2 -2
- package/esm/modules/exporting.src.js +26 -47
- package/esm/modules/flowmap.js +2 -2
- package/esm/modules/flowmap.src.js +17 -38
- package/esm/modules/full-screen.js +2 -2
- package/esm/modules/full-screen.src.js +17 -38
- package/esm/modules/funnel.js +2 -2
- package/esm/modules/funnel.src.js +21 -42
- package/esm/modules/funnel3d.js +2 -2
- package/esm/modules/funnel3d.src.js +18 -39
- package/esm/modules/gantt.js +2 -2
- package/esm/modules/gantt.src.js +84 -104
- package/esm/modules/geoheatmap.js +2 -2
- package/esm/modules/geoheatmap.src.js +18 -39
- package/esm/modules/grid-axis.js +2 -2
- package/esm/modules/grid-axis.src.js +34 -51
- package/esm/modules/heatmap.js +2 -2
- package/esm/modules/heatmap.src.js +20 -41
- package/esm/modules/heikinashi.js +2 -2
- package/esm/modules/heikinashi.src.js +18 -39
- package/esm/modules/histogram-bellcurve.js +2 -2
- package/esm/modules/histogram-bellcurve.src.js +19 -40
- package/esm/modules/hollowcandlestick.js +2 -2
- package/esm/modules/hollowcandlestick.src.js +18 -39
- package/esm/modules/item-series.js +2 -2
- package/esm/modules/item-series.src.js +19 -40
- package/esm/modules/lollipop.js +2 -2
- package/esm/modules/lollipop.src.js +18 -39
- package/esm/modules/map.js +2 -2
- package/esm/modules/map.src.js +64 -63
- package/esm/modules/marker-clusters.js +2 -2
- package/esm/modules/marker-clusters.src.js +49 -46
- package/esm/modules/mouse-wheel-zoom.js +2 -2
- package/esm/modules/mouse-wheel-zoom.src.js +17 -38
- package/esm/modules/navigator.js +2 -2
- package/esm/modules/navigator.src.js +72 -67
- package/esm/modules/networkgraph.js +2 -2
- package/esm/modules/networkgraph.src.js +24 -45
- package/esm/modules/no-data-to-display.js +2 -2
- package/esm/modules/no-data-to-display.src.js +17 -38
- package/esm/modules/non-cartesian-zoom.js +2 -2
- package/esm/modules/non-cartesian-zoom.src.js +17 -38
- package/esm/modules/offline-exporting.js +2 -2
- package/esm/modules/offline-exporting.src.js +19 -40
- package/esm/modules/organization.js +2 -2
- package/esm/modules/organization.src.js +20 -39
- package/esm/modules/parallel-coordinates.js +2 -2
- package/esm/modules/parallel-coordinates.src.js +24 -44
- package/esm/modules/pareto.js +2 -2
- package/esm/modules/pareto.src.js +21 -42
- package/esm/modules/pathfinder.js +2 -2
- package/esm/modules/pathfinder.src.js +20 -39
- package/esm/modules/pattern-fill.js +2 -2
- package/esm/modules/pattern-fill.src.js +17 -38
- package/esm/modules/pictorial.js +2 -2
- package/esm/modules/pictorial.src.js +71 -65
- package/esm/modules/pointandfigure.js +2 -2
- package/esm/modules/pointandfigure.src.js +47 -44
- package/esm/modules/price-indicator.js +2 -2
- package/esm/modules/price-indicator.src.js +17 -38
- package/esm/modules/pyramid3d.js +2 -2
- package/esm/modules/pyramid3d.src.js +18 -39
- package/esm/modules/renko.js +2 -2
- package/esm/modules/renko.src.js +18 -40
- package/esm/modules/sankey.js +2 -2
- package/esm/modules/sankey.src.js +24 -46
- package/esm/modules/series-label.js +2 -2
- package/esm/modules/series-label.src.js +17 -38
- package/esm/modules/series-on-point.js +2 -2
- package/esm/modules/series-on-point.src.js +47 -44
- package/esm/modules/solid-gauge.js +2 -2
- package/esm/modules/solid-gauge.src.js +18 -39
- package/esm/modules/sonification.js +2 -2
- package/esm/modules/sonification.src.js +18 -39
- package/esm/modules/static-scale.js +2 -2
- package/esm/modules/static-scale.src.js +30 -49
- package/esm/modules/stock-tools.js +2 -2
- package/esm/modules/stock-tools.src.js +29 -50
- package/esm/modules/stock.js +2 -2
- package/esm/modules/stock.src.js +117 -141
- package/esm/modules/streamgraph.js +2 -2
- package/esm/modules/streamgraph.src.js +18 -39
- package/esm/modules/sunburst.js +2 -2
- package/esm/modules/sunburst.src.js +38 -57
- package/esm/modules/textpath.js +2 -2
- package/esm/modules/textpath.src.js +17 -38
- package/esm/modules/tiledwebmap.js +3 -3
- package/esm/modules/tiledwebmap.src.js +19 -40
- package/esm/modules/tilemap.js +2 -2
- package/esm/modules/tilemap.src.js +22 -40
- package/esm/modules/timeline.js +2 -2
- package/esm/modules/timeline.src.js +19 -40
- package/esm/modules/treegraph.js +2 -2
- package/esm/modules/treegraph.src.js +23 -42
- package/esm/modules/treegrid.js +2 -2
- package/esm/modules/treegrid.src.js +47 -67
- package/esm/modules/treemap.js +2 -2
- package/esm/modules/treemap.src.js +34 -53
- package/esm/modules/variable-pie.js +2 -2
- package/esm/modules/variable-pie.src.js +19 -40
- package/esm/modules/variwide.js +2 -2
- package/esm/modules/variwide.src.js +28 -46
- package/esm/modules/vector.js +2 -2
- package/esm/modules/vector.src.js +18 -39
- package/esm/modules/venn.js +2 -2
- package/esm/modules/venn.src.js +18 -39
- package/esm/modules/windbarb.js +2 -2
- package/esm/modules/windbarb.src.js +18 -39
- package/esm/modules/wordcloud.js +2 -2
- package/esm/modules/wordcloud.src.js +18 -39
- package/esm/modules/xrange.js +2 -2
- package/esm/modules/xrange.src.js +18 -39
- package/esm/standalone-navigator.js +4 -4
- package/esm/standalone-navigator.src.js +877 -777
- package/esm/themes/adaptive.js +2 -2
- package/esm/themes/adaptive.src.js +17 -38
- package/esm/themes/avocado.js +2 -2
- package/esm/themes/avocado.src.js +17 -38
- package/esm/themes/dark-unica.js +2 -2
- package/esm/themes/dark-unica.src.js +17 -38
- package/esm/themes/grid-light.js +2 -2
- package/esm/themes/grid-light.src.js +17 -38
- package/esm/themes/high-contrast.js +2 -2
- package/esm/themes/high-contrast.src.js +17 -38
- package/esm/themes/sand-signika.js +2 -2
- package/esm/themes/sand-signika.src.js +17 -38
- package/esm/themes/sunset.js +2 -2
- package/esm/themes/sunset.src.js +17 -38
- package/highcharts-3d.js +2 -2
- package/highcharts-3d.src.js +43 -66
- package/highcharts-autoload.d.ts +0 -1
- package/highcharts-autoload.js +4 -4
- package/highcharts-autoload.src.d.ts +0 -1
- package/highcharts-autoload.src.js +834 -779
- package/highcharts-gantt.js +4 -4
- package/highcharts-gantt.src.js +896 -840
- package/highcharts-more.d.ts +10 -0
- package/highcharts-more.js +2 -2
- package/highcharts-more.src.d.ts +10 -0
- package/highcharts-more.src.js +147 -125
- package/highcharts.d.ts +2785 -80144
- package/highcharts.js +4 -4
- package/highcharts.src.d.ts +2785 -80144
- package/highcharts.src.js +833 -778
- package/highmaps.js +4 -4
- package/highmaps.src.js +916 -846
- package/highstock.js +4 -4
- package/highstock.src.js +904 -875
- package/i18n/fr-FR.js +2 -2
- package/i18n/fr-FR.src.js +26 -37
- package/i18n/nb-NO.js +2 -2
- package/i18n/nb-NO.src.js +26 -37
- package/i18n/zh-CN.js +2 -2
- package/i18n/zh-CN.src.js +26 -37
- package/indicators/acceleration-bands.js +2 -2
- package/indicators/acceleration-bands.src.js +23 -44
- package/indicators/accumulation-distribution.js +2 -2
- package/indicators/accumulation-distribution.src.js +22 -44
- package/indicators/ao.js +2 -2
- package/indicators/ao.src.js +23 -44
- package/indicators/apo.js +2 -2
- package/indicators/apo.src.js +23 -44
- package/indicators/aroon-oscillator.js +2 -2
- package/indicators/aroon-oscillator.src.js +24 -45
- package/indicators/aroon.js +2 -2
- package/indicators/aroon.src.js +23 -44
- package/indicators/atr.js +2 -2
- package/indicators/atr.src.js +22 -44
- package/indicators/bollinger-bands.js +2 -2
- package/indicators/bollinger-bands.src.js +22 -44
- package/indicators/cci.js +2 -2
- package/indicators/cci.src.js +22 -44
- package/indicators/chaikin.js +2 -2
- package/indicators/chaikin.src.js +23 -45
- package/indicators/cmf.js +2 -2
- package/indicators/cmf.src.js +22 -44
- package/indicators/cmo.js +2 -2
- package/indicators/cmo.src.js +22 -44
- package/indicators/dema.js +2 -2
- package/indicators/dema.src.js +23 -44
- package/indicators/disparity-index.js +2 -2
- package/indicators/disparity-index.src.js +25 -46
- package/indicators/dmi.js +2 -2
- package/indicators/dmi.src.js +25 -46
- package/indicators/dpo.js +2 -2
- package/indicators/dpo.src.js +23 -44
- package/indicators/ichimoku-kinko-hyo.js +2 -2
- package/indicators/ichimoku-kinko-hyo.src.js +23 -45
- package/indicators/indicators-all.js +2 -2
- package/indicators/indicators-all.src.js +81 -104
- package/indicators/indicators.js +2 -2
- package/indicators/indicators.src.js +53 -51
- package/indicators/keltner-channels.js +2 -2
- package/indicators/keltner-channels.src.js +23 -44
- package/indicators/klinger.js +2 -2
- package/indicators/klinger.src.js +22 -43
- package/indicators/macd.js +2 -2
- package/indicators/macd.src.js +22 -44
- package/indicators/mfi.js +2 -2
- package/indicators/mfi.src.js +22 -44
- package/indicators/momentum.js +2 -2
- package/indicators/momentum.src.js +22 -44
- package/indicators/natr.js +2 -2
- package/indicators/natr.src.js +22 -44
- package/indicators/obv.js +2 -2
- package/indicators/obv.src.js +22 -44
- package/indicators/pivot-points.js +2 -2
- package/indicators/pivot-points.src.js +22 -44
- package/indicators/ppo.js +2 -2
- package/indicators/ppo.src.js +23 -44
- package/indicators/price-channel.js +2 -2
- package/indicators/price-channel.src.js +23 -44
- package/indicators/price-envelopes.js +2 -2
- package/indicators/price-envelopes.src.js +22 -44
- package/indicators/psar.js +2 -2
- package/indicators/psar.src.js +22 -44
- package/indicators/regressions.js +2 -2
- package/indicators/regressions.src.js +22 -47
- package/indicators/roc.js +2 -2
- package/indicators/roc.src.js +22 -44
- package/indicators/rsi.js +2 -2
- package/indicators/rsi.src.js +22 -44
- package/indicators/slow-stochastic.js +2 -2
- package/indicators/slow-stochastic.src.js +22 -43
- package/indicators/stochastic.js +2 -2
- package/indicators/stochastic.src.js +25 -46
- package/indicators/supertrend.js +2 -2
- package/indicators/supertrend.src.js +24 -45
- package/indicators/tema.js +2 -2
- package/indicators/tema.src.js +23 -44
- package/indicators/trendline.js +2 -2
- package/indicators/trendline.src.js +22 -44
- package/indicators/trix.js +2 -2
- package/indicators/trix.src.js +23 -44
- package/indicators/volume-by-price.js +2 -2
- package/indicators/volume-by-price.src.js +23 -44
- package/indicators/vwap.js +2 -2
- package/indicators/vwap.src.js +22 -44
- package/indicators/williams-r.js +2 -2
- package/indicators/williams-r.src.js +23 -44
- package/indicators/wma.js +2 -2
- package/indicators/wma.src.js +22 -44
- package/indicators/zigzag.js +2 -2
- package/indicators/zigzag.src.js +22 -44
- package/modules/accessibility.js +2 -2
- package/modules/accessibility.src.js +95 -81
- package/modules/annotations-advanced.js +9 -9
- package/modules/annotations-advanced.src.js +41 -63
- package/modules/annotations.js +3 -3
- package/modules/annotations.src.js +41 -63
- package/modules/arc-diagram.js +2 -2
- package/modules/arc-diagram.src.js +23 -44
- package/modules/arrow-symbols.js +2 -2
- package/modules/arrow-symbols.src.js +17 -38
- package/modules/boost-canvas.js +2 -2
- package/modules/boost-canvas.src.js +62 -68
- package/modules/boost.js +2 -2
- package/modules/boost.src.js +61 -67
- package/modules/broken-axis.js +2 -2
- package/modules/broken-axis.src.js +26 -46
- package/modules/bullet.js +2 -2
- package/modules/bullet.src.js +23 -44
- package/modules/coloraxis.js +2 -2
- package/modules/coloraxis.src.js +97 -101
- package/modules/contour.js +5 -5
- package/modules/contour.src.js +111 -117
- package/modules/current-date-indicator.js +2 -2
- package/modules/current-date-indicator.src.js +17 -38
- package/modules/cylinder.js +2 -2
- package/modules/cylinder.src.js +23 -44
- package/modules/data-sorting.js +2 -2
- package/modules/data-sorting.src.js +18 -39
- package/modules/data-tools.js +2 -2
- package/modules/data-tools.src.js +110 -67
- package/modules/data.js +4 -4
- package/modules/data.src.js +58 -53
- package/modules/datagrouping.js +2 -2
- package/modules/datagrouping.src.js +57 -53
- package/modules/debugger.js +2 -2
- package/modules/debugger.src.js +17 -38
- package/modules/dependency-wheel.js +2 -2
- package/modules/dependency-wheel.src.js +22 -43
- package/modules/dotplot.js +2 -2
- package/modules/dotplot.src.js +22 -43
- package/modules/drag-panes.js +2 -2
- package/modules/drag-panes.src.js +22 -46
- package/modules/draggable-points.js +2 -2
- package/modules/draggable-points.src.js +17 -38
- package/modules/drilldown.js +2 -2
- package/modules/drilldown.src.js +45 -59
- package/modules/dumbbell.js +2 -2
- package/modules/dumbbell.src.js +23 -44
- package/modules/export-data.js +2 -2
- package/modules/export-data.src.js +47 -48
- package/modules/exporting.js +2 -2
- package/modules/exporting.src.js +31 -52
- package/modules/flowmap.js +2 -2
- package/modules/flowmap.src.js +22 -43
- package/modules/full-screen.js +2 -2
- package/modules/full-screen.src.js +22 -43
- package/modules/funnel.js +2 -2
- package/modules/funnel.src.js +26 -47
- package/modules/funnel3d.js +2 -2
- package/modules/funnel3d.src.js +23 -44
- package/modules/gantt.js +8 -8
- package/modules/gantt.src.js +93 -113
- package/modules/geoheatmap.js +2 -2
- package/modules/geoheatmap.src.js +23 -44
- package/modules/grid-axis.js +2 -2
- package/modules/grid-axis.src.js +39 -56
- package/modules/heatmap.js +4 -4
- package/modules/heatmap.src.js +101 -105
- package/modules/heikinashi.js +2 -2
- package/modules/heikinashi.src.js +23 -44
- package/modules/histogram-bellcurve.js +2 -2
- package/modules/histogram-bellcurve.src.js +24 -45
- package/modules/hollowcandlestick.js +2 -2
- package/modules/hollowcandlestick.src.js +23 -44
- package/modules/item-series.js +2 -2
- package/modules/item-series.src.js +24 -45
- package/modules/lollipop.js +2 -2
- package/modules/lollipop.src.js +23 -44
- package/modules/map.js +4 -4
- package/modules/map.src.js +146 -128
- package/modules/marker-clusters.js +2 -2
- package/modules/marker-clusters.src.js +49 -46
- package/modules/mouse-wheel-zoom.js +2 -2
- package/modules/mouse-wheel-zoom.src.js +17 -38
- package/modules/navigator.js +2 -2
- package/modules/navigator.src.js +77 -72
- package/modules/networkgraph.js +2 -2
- package/modules/networkgraph.src.js +29 -50
- package/modules/no-data-to-display.js +2 -2
- package/modules/no-data-to-display.src.js +22 -43
- package/modules/non-cartesian-zoom.js +2 -2
- package/modules/non-cartesian-zoom.src.js +17 -38
- package/modules/offline-exporting.js +2 -2
- package/modules/offline-exporting.src.js +24 -45
- package/modules/organization.js +3 -3
- package/modules/organization.src.js +25 -44
- package/modules/parallel-coordinates.js +2 -2
- package/modules/parallel-coordinates.src.js +29 -49
- package/modules/pareto.js +2 -2
- package/modules/pareto.src.js +26 -47
- package/modules/pathfinder.js +2 -2
- package/modules/pathfinder.src.js +25 -44
- package/modules/pattern-fill.js +2 -2
- package/modules/pattern-fill.src.js +17 -38
- package/modules/pictorial.js +2 -2
- package/modules/pictorial.src.js +76 -70
- package/modules/pointandfigure.js +2 -2
- package/modules/pointandfigure.src.js +52 -49
- package/modules/price-indicator.js +2 -2
- package/modules/price-indicator.src.js +17 -38
- package/modules/pyramid3d.js +2 -2
- package/modules/pyramid3d.src.js +23 -44
- package/modules/renko.js +2 -2
- package/modules/renko.src.js +23 -45
- package/modules/sankey.js +2 -2
- package/modules/sankey.src.js +29 -51
- package/modules/series-label.js +2 -2
- package/modules/series-label.src.js +22 -43
- package/modules/series-on-point.js +2 -2
- package/modules/series-on-point.src.js +52 -49
- package/modules/solid-gauge.js +2 -2
- package/modules/solid-gauge.src.js +23 -44
- package/modules/sonification.js +2 -2
- package/modules/sonification.src.js +23 -44
- package/modules/static-scale.js +2 -2
- package/modules/static-scale.src.js +30 -49
- package/modules/stock-tools.js +2 -2
- package/modules/stock-tools.src.js +34 -55
- package/modules/stock.js +6 -6
- package/modules/stock.src.js +132 -154
- package/modules/streamgraph.js +2 -2
- package/modules/streamgraph.src.js +23 -44
- package/modules/sunburst.js +2 -2
- package/modules/sunburst.src.js +43 -62
- package/modules/textpath.js +2 -2
- package/modules/textpath.src.js +17 -38
- package/modules/tiledwebmap.js +3 -3
- package/modules/tiledwebmap.src.js +24 -45
- package/modules/tilemap.js +2 -2
- package/modules/tilemap.src.js +27 -45
- package/modules/timeline.js +2 -2
- package/modules/timeline.src.js +24 -45
- package/modules/treegraph.js +2 -2
- package/modules/treegraph.src.js +28 -47
- package/modules/treegrid.js +2 -2
- package/modules/treegrid.src.js +52 -72
- package/modules/treemap.js +2 -2
- package/modules/treemap.src.js +39 -58
- package/modules/variable-pie.js +2 -2
- package/modules/variable-pie.src.js +24 -45
- package/modules/variwide.js +2 -2
- package/modules/variwide.src.js +33 -51
- package/modules/vector.js +2 -2
- package/modules/vector.src.js +23 -44
- package/modules/venn.js +2 -2
- package/modules/venn.src.js +23 -44
- package/modules/windbarb.js +2 -2
- package/modules/windbarb.src.js +23 -44
- package/modules/wordcloud.js +2 -2
- package/modules/wordcloud.src.js +23 -44
- package/modules/xrange.js +2 -2
- package/modules/xrange.src.js +23 -44
- package/options/abands.d.ts +183 -8
- package/options/abands.src.d.ts +183 -8
- package/options/ad.d.ts +176 -5
- package/options/ad.src.d.ts +176 -5
- package/options/ao.d.ts +202 -0
- package/options/ao.src.d.ts +202 -0
- package/options/apo.d.ts +178 -8
- package/options/apo.src.d.ts +178 -8
- package/options/arcdiagram.d.ts +785 -0
- package/options/arcdiagram.src.d.ts +785 -0
- package/options/area.d.ts +226 -0
- package/options/area.src.d.ts +226 -0
- package/options/arearange.d.ts +229 -8
- package/options/arearange.src.d.ts +229 -8
- package/options/areaspline.d.ts +1344 -8
- package/options/areaspline.src.d.ts +1344 -8
- package/options/areasplinerange.d.ts +972 -8
- package/options/areasplinerange.src.d.ts +972 -8
- package/options/aroon.d.ts +219 -0
- package/options/aroon.src.d.ts +219 -0
- package/options/aroonoscillator.d.ts +1140 -8
- package/options/aroonoscillator.src.d.ts +1140 -8
- package/options/atr.d.ts +210 -0
- package/options/atr.src.d.ts +210 -0
- package/options/bar.d.ts +183 -10
- package/options/bar.src.d.ts +183 -10
- package/options/bb.d.ts +1232 -0
- package/options/bb.src.d.ts +1232 -0
- package/options/bellcurve.d.ts +1167 -8
- package/options/bellcurve.src.d.ts +1167 -8
- package/options/boxplot.d.ts +163 -10
- package/options/boxplot.src.d.ts +163 -10
- package/options/bubble.d.ts +1005 -8
- package/options/bubble.src.d.ts +1005 -8
- package/options/bullet.d.ts +953 -8
- package/options/bullet.src.d.ts +953 -8
- package/options/candlestick.d.ts +1309 -8
- package/options/candlestick.src.d.ts +1309 -8
- package/options/cci.d.ts +210 -0
- package/options/cci.src.d.ts +210 -0
- package/options/chaikin.d.ts +180 -8
- package/options/chaikin.src.d.ts +180 -8
- package/options/cmf.d.ts +211 -0
- package/options/cmf.src.d.ts +211 -0
- package/options/cmo.d.ts +175 -5
- package/options/cmo.src.d.ts +175 -5
- package/options/column.d.ts +252 -2
- package/options/column.src.d.ts +252 -2
- package/options/columnpyramid.d.ts +1296 -0
- package/options/columnpyramid.src.d.ts +1296 -0
- package/options/columnrange.d.ts +216 -2
- package/options/columnrange.src.d.ts +216 -2
- package/options/contour.d.ts +1148 -0
- package/options/contour.src.d.ts +1148 -0
- package/options/cylinder.d.ts +183 -2
- package/options/cylinder.src.d.ts +183 -2
- package/options/dema.d.ts +1181 -0
- package/options/dema.src.d.ts +1181 -0
- package/options/dependencywheel.d.ts +315 -0
- package/options/dependencywheel.src.d.ts +315 -0
- package/options/disparityindex.d.ts +1157 -8
- package/options/disparityindex.src.d.ts +1157 -8
- package/options/dmi.d.ts +1227 -0
- package/options/dmi.src.d.ts +1227 -0
- package/options/dpo.d.ts +1140 -8
- package/options/dpo.src.d.ts +1140 -8
- package/options/dumbbell.d.ts +286 -0
- package/options/dumbbell.src.d.ts +286 -0
- package/options/ema.d.ts +1156 -5
- package/options/ema.src.d.ts +1156 -5
- package/options/errorbar.d.ts +1286 -0
- package/options/errorbar.src.d.ts +1286 -0
- package/options/flags.d.ts +1269 -8
- package/options/flags.src.d.ts +1269 -8
- package/options/flowmap.d.ts +551 -0
- package/options/flowmap.src.d.ts +551 -0
- package/options/funnel.d.ts +728 -10
- package/options/funnel.src.d.ts +728 -10
- package/options/gantt.d.ts +1011 -0
- package/options/gantt.src.d.ts +1011 -0
- package/options/gauge.d.ts +675 -0
- package/options/gauge.src.d.ts +675 -0
- package/options/geoheatmap.d.ts +585 -8
- package/options/geoheatmap.src.d.ts +585 -8
- package/options/heatmap.d.ts +1054 -8
- package/options/heatmap.src.d.ts +1054 -8
- package/options/heikinashi.d.ts +178 -10
- package/options/heikinashi.src.d.ts +178 -10
- package/options/histogram.d.ts +1226 -0
- package/options/histogram.src.d.ts +1226 -0
- package/options/hlc.d.ts +223 -2
- package/options/hlc.src.d.ts +223 -2
- package/options/hollowcandlestick.d.ts +1335 -0
- package/options/hollowcandlestick.src.d.ts +1335 -0
- package/options/ikh.d.ts +228 -5
- package/options/ikh.src.d.ts +228 -5
- package/options/item.d.ts +217 -8
- package/options/item.src.d.ts +217 -8
- package/options/keltnerchannels.d.ts +1220 -0
- package/options/keltnerchannels.src.d.ts +1220 -0
- package/options/klinger.d.ts +1162 -0
- package/options/klinger.src.d.ts +1162 -0
- package/options/line.d.ts +1377 -8
- package/options/line.src.d.ts +1377 -8
- package/options/linearregression.d.ts +199 -5
- package/options/linearregression.src.d.ts +199 -5
- package/options/linearregressionangle.d.ts +1157 -5
- package/options/linearregressionangle.src.d.ts +1157 -5
- package/options/linearregressionintercept.d.ts +240 -0
- package/options/linearregressionintercept.src.d.ts +240 -0
- package/options/linearregressionslope.d.ts +240 -0
- package/options/linearregressionslope.src.d.ts +240 -0
- package/options/lollipop.d.ts +949 -0
- package/options/lollipop.src.d.ts +949 -0
- package/options/macd.d.ts +254 -0
- package/options/macd.src.d.ts +254 -0
- package/options/map.d.ts +150 -8
- package/options/map.src.d.ts +150 -8
- package/options/mapbubble.d.ts +1016 -8
- package/options/mapbubble.src.d.ts +1016 -8
- package/options/mapline.d.ts +994 -0
- package/options/mapline.src.d.ts +994 -0
- package/options/mappoint.d.ts +1105 -1
- package/options/mappoint.src.d.ts +1105 -1
- package/options/mfi.d.ts +181 -5
- package/options/mfi.src.d.ts +181 -5
- package/options/momentum.d.ts +215 -0
- package/options/momentum.src.d.ts +215 -0
- package/options/natr.d.ts +170 -5
- package/options/natr.src.d.ts +170 -5
- package/options/networkgraph.d.ts +365 -0
- package/options/networkgraph.src.d.ts +365 -0
- package/options/obv.d.ts +170 -5
- package/options/obv.src.d.ts +170 -5
- package/options/ohlc.d.ts +183 -7
- package/options/ohlc.src.d.ts +183 -7
- package/options/organization.d.ts +808 -0
- package/options/organization.src.d.ts +808 -0
- package/options/packedbubble.d.ts +877 -8
- package/options/packedbubble.src.d.ts +877 -8
- package/options/pareto.d.ts +1028 -0
- package/options/pareto.src.d.ts +1028 -0
- package/options/pc.d.ts +183 -8
- package/options/pc.src.d.ts +183 -8
- package/options/pictorial.d.ts +202 -2
- package/options/pictorial.src.d.ts +202 -2
- package/options/pie.d.ts +196 -8
- package/options/pie.src.d.ts +196 -8
- package/options/pivotpoints.d.ts +1199 -0
- package/options/pivotpoints.src.d.ts +1199 -0
- package/options/pointandfigure.d.ts +980 -0
- package/options/pointandfigure.src.d.ts +980 -0
- package/options/polygon.d.ts +234 -0
- package/options/polygon.src.d.ts +234 -0
- package/options/ppo.d.ts +1156 -8
- package/options/ppo.src.d.ts +1156 -8
- package/options/priceenvelopes.d.ts +1229 -0
- package/options/priceenvelopes.src.d.ts +1229 -0
- package/options/psar.d.ts +1156 -5
- package/options/psar.src.d.ts +1156 -5
- package/options/pyramid.d.ts +837 -2
- package/options/pyramid.src.d.ts +837 -2
- package/options/renko.d.ts +247 -10
- package/options/renko.src.d.ts +247 -10
- package/options/roc.d.ts +1215 -0
- package/options/roc.src.d.ts +1215 -0
- package/options/rsi.d.ts +1157 -5
- package/options/rsi.src.d.ts +1157 -5
- package/options/sankey.d.ts +276 -8
- package/options/sankey.src.d.ts +276 -8
- package/options/scatter.d.ts +3043 -1018
- package/options/scatter.src.d.ts +3043 -1018
- package/options/series.d.ts +175 -0
- package/options/series.src.d.ts +175 -0
- package/options/slowstochastic.d.ts +183 -0
- package/options/slowstochastic.src.d.ts +183 -0
- package/options/sma.d.ts +211 -0
- package/options/sma.src.d.ts +211 -0
- package/options/solidgauge.d.ts +218 -0
- package/options/solidgauge.src.d.ts +218 -0
- package/options/spline.d.ts +230 -0
- package/options/spline.src.d.ts +230 -0
- package/options/stochastic.d.ts +1170 -8
- package/options/stochastic.src.d.ts +1170 -8
- package/options/streamgraph.d.ts +1345 -8
- package/options/streamgraph.src.d.ts +1345 -8
- package/options/sunburst.d.ts +286 -9
- package/options/sunburst.src.d.ts +286 -9
- package/options/supertrend.d.ts +1208 -0
- package/options/supertrend.src.d.ts +1208 -0
- package/options/tema.d.ts +1140 -8
- package/options/tema.src.d.ts +1140 -8
- package/options/tiledwebmap.d.ts +164 -0
- package/options/tiledwebmap.src.d.ts +164 -0
- package/options/tilemap.d.ts +687 -0
- package/options/tilemap.src.d.ts +687 -0
- package/options/timeline.d.ts +282 -0
- package/options/timeline.src.d.ts +282 -0
- package/options/treegraph.d.ts +982 -0
- package/options/treegraph.src.d.ts +982 -0
- package/options/treemap.d.ts +1396 -22
- package/options/treemap.src.d.ts +1396 -22
- package/options/trendline.d.ts +211 -0
- package/options/trendline.src.d.ts +211 -0
- package/options/trix.d.ts +178 -8
- package/options/trix.src.d.ts +178 -8
- package/options/variablepie.d.ts +686 -8
- package/options/variablepie.src.d.ts +686 -8
- package/options/variwide.d.ts +178 -2
- package/options/variwide.src.d.ts +178 -2
- package/options/vbp.d.ts +576 -0
- package/options/vbp.src.d.ts +576 -0
- package/options/vector.d.ts +660 -0
- package/options/vector.src.d.ts +660 -0
- package/options/venn.d.ts +654 -0
- package/options/venn.src.d.ts +654 -0
- package/options/vwap.d.ts +1157 -5
- package/options/vwap.src.d.ts +1157 -5
- package/options/waterfall.d.ts +1254 -8
- package/options/waterfall.src.d.ts +1254 -8
- package/options/williamsr.d.ts +209 -0
- package/options/williamsr.src.d.ts +209 -0
- package/options/windbarb.d.ts +222 -2
- package/options/windbarb.src.d.ts +222 -2
- package/options/wma.d.ts +1156 -5
- package/options/wma.src.d.ts +1156 -5
- package/options/wordcloud.d.ts +682 -0
- package/options/wordcloud.src.d.ts +682 -0
- package/options/xrange.d.ts +1168 -0
- package/options/xrange.src.d.ts +1168 -0
- package/options/zigzag.d.ts +1197 -0
- package/options/zigzag.src.d.ts +1197 -0
- package/package.json +1 -1
- package/standalone-navigator.js +4 -4
- package/standalone-navigator.src.js +885 -804
- package/themes/adaptive.js +2 -2
- package/themes/adaptive.src.js +22 -43
- package/themes/avocado.js +2 -2
- package/themes/avocado.src.js +17 -38
- package/themes/dark-unica.js +2 -2
- package/themes/dark-unica.src.js +17 -38
- package/themes/grid-light.js +2 -2
- package/themes/grid-light.src.js +17 -38
- package/themes/high-contrast.js +2 -2
- package/themes/high-contrast.src.js +17 -38
- package/themes/sand-signika.js +2 -2
- package/themes/sand-signika.src.js +17 -38
- package/themes/sunset.js +2 -2
- package/themes/sunset.src.js +17 -38
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @license Highcharts JS v13.
|
|
2
|
+
* @license Highcharts JS v13.1.1 (2026-09-20)
|
|
3
3
|
* @module highcharts/highcharts-autoload
|
|
4
4
|
*
|
|
5
5
|
* (c) 2009-2024 Torstein Honsi
|
|
@@ -23,36 +23,17 @@ return /******/ (() => { // webpackBootstrap
|
|
|
23
23
|
/******/
|
|
24
24
|
/************************************************************************/
|
|
25
25
|
/******/ /* webpack/runtime/define property getters */
|
|
26
|
-
/******/
|
|
27
|
-
/******/
|
|
28
|
-
/******/
|
|
29
|
-
/******/ if(
|
|
30
|
-
/******/
|
|
31
|
-
/******/ while(i < definition.length) {
|
|
32
|
-
/******/ var key = definition[i++];
|
|
33
|
-
/******/ var binding = definition[i++];
|
|
34
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
35
|
-
/******/ if(binding === 0) {
|
|
36
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
37
|
-
/******/ } else {
|
|
38
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
39
|
-
/******/ }
|
|
40
|
-
/******/ } else if(binding === 0) { i++; }
|
|
41
|
-
/******/ }
|
|
42
|
-
/******/ } else {
|
|
43
|
-
/******/ for(var key in definition) {
|
|
44
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
45
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
46
|
-
/******/ }
|
|
47
|
-
/******/ }
|
|
26
|
+
/******/ // define getter/value functions for harmony exports
|
|
27
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
28
|
+
/******/ for(var key in definition) {
|
|
29
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
30
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
48
31
|
/******/ }
|
|
49
|
-
/******/ }
|
|
50
|
-
/******/ }
|
|
32
|
+
/******/ }
|
|
33
|
+
/******/ };
|
|
51
34
|
/******/
|
|
52
35
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
53
|
-
/******/ (
|
|
54
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
55
|
-
/******/ })();
|
|
36
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
|
|
56
37
|
/******/
|
|
57
38
|
/************************************************************************/
|
|
58
39
|
let __webpack_exports__ = {};
|
|
@@ -91,7 +72,7 @@ var Globals;
|
|
|
91
72
|
* Constants
|
|
92
73
|
*
|
|
93
74
|
* */
|
|
94
|
-
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.
|
|
75
|
+
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.1', Globals.win = (typeof window !== 'undefined' ?
|
|
95
76
|
window :
|
|
96
77
|
{}), // eslint-disable-line node/no-unsupported-features/es-builtins
|
|
97
78
|
Globals.doc = Globals.win.document, Globals.svg = !!Globals.doc?.createElementNS?.(Globals.SVG_NS, 'svg')?.createSVGRect, Globals.pageLang = Globals.doc?.documentElement?.closest('[lang]')?.lang, Globals.userAgent = Globals.win.navigator?.userAgent || '', Globals.isChrome = Globals.win.chrome, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.marginNames = [
|
|
@@ -102,14 +83,16 @@ var Globals;
|
|
|
102
83
|
], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
|
|
103
84
|
// Checks whether the browser supports passive events, (#11353).
|
|
104
85
|
let supportsPassive = false;
|
|
105
|
-
//
|
|
106
|
-
//
|
|
86
|
+
// Accessors don't work on IE as well as passive events - instead
|
|
87
|
+
// of using polyfill, we can exclude IE totally. The getter has to
|
|
88
|
+
// be enumerable, or wrappers that shallow-copy the options never
|
|
89
|
+
// read it (#25092).
|
|
107
90
|
if (!Globals.isMS) {
|
|
108
|
-
const opts =
|
|
109
|
-
get
|
|
110
|
-
supportsPassive = true;
|
|
91
|
+
const opts = {
|
|
92
|
+
get passive() {
|
|
93
|
+
return (supportsPassive = true);
|
|
111
94
|
}
|
|
112
|
-
}
|
|
95
|
+
};
|
|
113
96
|
if (Globals.win.addEventListener && Globals.win.removeEventListener) {
|
|
114
97
|
Globals.win.addEventListener('testPassive', Globals.noop, opts);
|
|
115
98
|
Globals.win.removeEventListener('testPassive', Globals.noop, opts);
|
|
@@ -2185,6 +2168,13 @@ function extend(a, b) {
|
|
|
2185
2168
|
a = {};
|
|
2186
2169
|
}
|
|
2187
2170
|
for (n in b) { // eslint-disable-line guard-for-in
|
|
2171
|
+
// Prototype pollution (#14883). Keys like `__proto__` may arrive as
|
|
2172
|
+
// own, enumerable properties through `JSON.parse`, in which case
|
|
2173
|
+
// assigning them would mutate the prototype of the target instead of
|
|
2174
|
+
// adding a property.
|
|
2175
|
+
if (n === '__proto__' || n === 'constructor') {
|
|
2176
|
+
continue;
|
|
2177
|
+
}
|
|
2188
2178
|
a[n] = b[n];
|
|
2189
2179
|
}
|
|
2190
2180
|
return a;
|
|
@@ -5446,6 +5436,13 @@ const defaultOptions = {
|
|
|
5446
5436
|
* @since 2.0
|
|
5447
5437
|
* @apioption title.align
|
|
5448
5438
|
*/
|
|
5439
|
+
/**
|
|
5440
|
+
* A CSS class name to apply to the title's container div,
|
|
5441
|
+
* allowing unique CSS styling for each chart.
|
|
5442
|
+
*
|
|
5443
|
+
* @type {string}
|
|
5444
|
+
* @apioption title.className
|
|
5445
|
+
*/
|
|
5449
5446
|
/**
|
|
5450
5447
|
* The margin between the title and the plot area, or if a subtitle
|
|
5451
5448
|
* is present, the margin between the subtitle and the plot area.
|
|
@@ -5508,6 +5505,13 @@ const defaultOptions = {
|
|
|
5508
5505
|
* @since 2.0
|
|
5509
5506
|
* @apioption subtitle.align
|
|
5510
5507
|
*/
|
|
5508
|
+
/**
|
|
5509
|
+
* A CSS class name to apply to the subtitle's container div,
|
|
5510
|
+
* allowing unique CSS styling for each chart.
|
|
5511
|
+
*
|
|
5512
|
+
* @type {string}
|
|
5513
|
+
* @apioption subtitle.className
|
|
5514
|
+
*/
|
|
5511
5515
|
/**
|
|
5512
5516
|
* When the subtitle is floating, the plot area will not move to make
|
|
5513
5517
|
* space for it.
|
|
@@ -7640,6 +7644,10 @@ const defaultOptions = {
|
|
|
7640
7644
|
/**
|
|
7641
7645
|
* The URL for the credits label.
|
|
7642
7646
|
*
|
|
7647
|
+
* URLs that do not start with one of the
|
|
7648
|
+
* [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
|
|
7649
|
+
* for example `javascript:` URLs, are ignored.
|
|
7650
|
+
*
|
|
7643
7651
|
* @sample {highcharts} highcharts/credits/href/
|
|
7644
7652
|
* Custom URL and text
|
|
7645
7653
|
* @sample {highmaps} maps/credits/customized/
|
|
@@ -8613,6 +8621,7 @@ class Fx {
|
|
|
8613
8621
|
* Prepare start and end values so that the path can be animated one to one.
|
|
8614
8622
|
*
|
|
8615
8623
|
* @function Highcharts.Fx#initPath
|
|
8624
|
+
* @internal
|
|
8616
8625
|
*
|
|
8617
8626
|
* @param {Highcharts.SVGElement} elem
|
|
8618
8627
|
* The SVGElement item.
|
|
@@ -8912,7 +8921,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8912
8921
|
if (el) {
|
|
8913
8922
|
stop(el, prop);
|
|
8914
8923
|
}
|
|
8915
|
-
const fx = new Animation_Fx(el, opt, prop), d = params.d
|
|
8924
|
+
const fx = new Animation_Fx(el, opt, prop), d = params.d,
|
|
8925
|
+
// Discrete value that doesn't animate, apply at once
|
|
8926
|
+
applyImmediately = prop === 'dashstyle';
|
|
8916
8927
|
let start = 0, end = void 0, unit = '';
|
|
8917
8928
|
if (prop === 'd' && isArray(d)) {
|
|
8918
8929
|
fx.paths = fx.initPath(el, el.pathArray, d);
|
|
@@ -8921,6 +8932,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8921
8932
|
}
|
|
8922
8933
|
else if (el?.attr) {
|
|
8923
8934
|
start = el.attr(prop);
|
|
8935
|
+
if (applyImmediately) {
|
|
8936
|
+
el.attr(prop, val);
|
|
8937
|
+
}
|
|
8924
8938
|
}
|
|
8925
8939
|
else if (el) {
|
|
8926
8940
|
start = +(getStyle(el, prop) || 0);
|
|
@@ -8935,7 +8949,7 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8935
8949
|
end = end.replace(/px/g, ''); // #4351
|
|
8936
8950
|
}
|
|
8937
8951
|
// Empty dashstyle animation crashes treemap on hover
|
|
8938
|
-
if (defined(end)) {
|
|
8952
|
+
if (defined(end) && !applyImmediately) {
|
|
8939
8953
|
fx.run(start, end, unit);
|
|
8940
8954
|
}
|
|
8941
8955
|
});
|
|
@@ -9074,7 +9088,7 @@ class AST {
|
|
|
9074
9088
|
if (AST.allowedAttributes.indexOf(key) === -1) {
|
|
9075
9089
|
valid = false;
|
|
9076
9090
|
}
|
|
9077
|
-
if (['background', 'dynsrc', 'href', 'lowsrc', 'src']
|
|
9091
|
+
if (['background', 'dynsrc', 'href', 'lowsrc', 'src', 'xlink:href']
|
|
9078
9092
|
.indexOf(key) !== -1) {
|
|
9079
9093
|
valid = isString(val) && AST.allowedReferences.some((ref) => val.indexOf(ref) === 0);
|
|
9080
9094
|
}
|
|
@@ -9257,17 +9271,25 @@ class AST {
|
|
|
9257
9271
|
markup, 'text/html');
|
|
9258
9272
|
}
|
|
9259
9273
|
catch {
|
|
9260
|
-
//
|
|
9261
|
-
//
|
|
9262
|
-
//
|
|
9263
|
-
//
|
|
9264
|
-
//
|
|
9265
|
-
//
|
|
9274
|
+
// Due to a Chromium issue where chart redraws are triggered by a
|
|
9275
|
+
// `beforeprint` event (#16931),
|
|
9276
|
+
// https://issues.chromium.org/issues/40222135, the Trusted
|
|
9277
|
+
// Types `createHTML` callback can throw "The provided callback
|
|
9278
|
+
// is no longer runnable" while the browser is mid-print. Retry
|
|
9279
|
+
// with the raw string - `DOMParser` itself is not a Trusted
|
|
9280
|
+
// Types sink, so parsing it directly is safe.
|
|
9281
|
+
try {
|
|
9282
|
+
doc = new DOMParser().parseFromString(markup, 'text/html');
|
|
9283
|
+
}
|
|
9284
|
+
catch {
|
|
9285
|
+
// Ignore, fall through to the inert-document fallback below.
|
|
9286
|
+
}
|
|
9266
9287
|
}
|
|
9267
9288
|
if (!doc) {
|
|
9268
|
-
|
|
9269
|
-
|
|
9270
|
-
doc =
|
|
9289
|
+
// Never assign untrusted markup to a live document's innerHTML.
|
|
9290
|
+
// Parse into a detached, inert document instead.
|
|
9291
|
+
doc = Core_Globals.doc.implementation.createHTMLDocument('');
|
|
9292
|
+
doc.body.innerHTML = markup;
|
|
9271
9293
|
}
|
|
9272
9294
|
const appendChildNodes = (node, addTo) => {
|
|
9273
9295
|
// Preserve the camelCase of SVG tags via localName (#24702).
|
|
@@ -9504,7 +9526,6 @@ AST.allowedTags = [
|
|
|
9504
9526
|
'span',
|
|
9505
9527
|
'stop',
|
|
9506
9528
|
'strong',
|
|
9507
|
-
'style',
|
|
9508
9529
|
'sub',
|
|
9509
9530
|
'sup',
|
|
9510
9531
|
'svg',
|
|
@@ -10284,6 +10305,7 @@ class SVGElement {
|
|
|
10284
10305
|
let ret = (this[key + 'Value'] ??
|
|
10285
10306
|
this[key] ??
|
|
10286
10307
|
(this.element ? this.element.getAttribute(key) : null) ??
|
|
10308
|
+
this.box?.[key] ?? // For labels, when animating border radius
|
|
10287
10309
|
0);
|
|
10288
10310
|
if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
|
|
10289
10311
|
ret = parseFloat(ret);
|
|
@@ -12878,7 +12900,7 @@ function arc(cx, cy, w, h, options) {
|
|
|
12878
12900
|
* Path
|
|
12879
12901
|
*/
|
|
12880
12902
|
function callout(x, y, w, h, options) {
|
|
12881
|
-
const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
|
|
12903
|
+
const arrowLength = options?.arrowLength ?? 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
|
|
12882
12904
|
const path = roundedRect(x, y, w, h, { r });
|
|
12883
12905
|
if (!isNumber(anchorX)) {
|
|
12884
12906
|
return path;
|
|
@@ -13502,8 +13524,12 @@ class TextBuilder {
|
|
|
13502
13524
|
this.truncate(textNode, textNode.textContent || '', void 0, 0,
|
|
13503
13525
|
// Target width
|
|
13504
13526
|
width, ellipsisWidth, stringWithEllipsis);
|
|
13505
|
-
|
|
13506
|
-
|
|
13527
|
+
// If there is still text left, add an ellipsis to
|
|
13528
|
+
// the end of the line
|
|
13529
|
+
if (textNode.textContent) {
|
|
13530
|
+
textNode.textContent = textNode.textContent
|
|
13531
|
+
?.replace('\u2026', '') + '\u2026';
|
|
13532
|
+
}
|
|
13507
13533
|
}
|
|
13508
13534
|
break;
|
|
13509
13535
|
}
|
|
@@ -13929,7 +13955,7 @@ class SVGRenderer {
|
|
|
13929
13955
|
this.url = this.getReferenceURL();
|
|
13930
13956
|
// Add description
|
|
13931
13957
|
const desc = this.createElement('desc').add();
|
|
13932
|
-
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.
|
|
13958
|
+
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.1'));
|
|
13933
13959
|
this.defs = this.createElement('defs').add();
|
|
13934
13960
|
this.allowHTML = allowHTML;
|
|
13935
13961
|
this.forExport = forExport;
|
|
@@ -15768,7 +15794,11 @@ class HTMLElement extends SVG_SVGElement {
|
|
|
15768
15794
|
// Some properties require other properties to be set
|
|
15769
15795
|
if (styles?.textOverflow === 'ellipsis') {
|
|
15770
15796
|
styles.overflow = 'hidden';
|
|
15771
|
-
|
|
15797
|
+
// With a line clamp, the text should wrap and ellipsis at the
|
|
15798
|
+
// clamped line instead of staying on one line (#24724)
|
|
15799
|
+
if (!(styles.lineClamp ?? this.styles.lineClamp)) {
|
|
15800
|
+
styles.whiteSpace = 'nowrap';
|
|
15801
|
+
}
|
|
15772
15802
|
}
|
|
15773
15803
|
// Apply line clamp
|
|
15774
15804
|
if (styles?.lineClamp) {
|
|
@@ -16957,15 +16987,16 @@ var AxisDefaults;
|
|
|
16957
16987
|
/**
|
|
16958
16988
|
* The label's pixel distance from the perimeter of the plot area.
|
|
16959
16989
|
* On cartesian charts, this is overridden if the `labels.y` setting
|
|
16960
|
-
* is set.
|
|
16990
|
+
* is set. Defaults to 15 unless the labels are aligned inside the
|
|
16991
|
+
* plot area, in which case it defaults to 0.
|
|
16961
16992
|
*
|
|
16962
16993
|
* @sample {highcharts} highcharts/yaxis/labels-distance/
|
|
16963
16994
|
* Polar chart, labels centered under the arc
|
|
16964
16995
|
*
|
|
16965
16996
|
* @type {number}
|
|
16966
16997
|
* @product highcharts gantt
|
|
16998
|
+
* @apioption xAxis.labels.distance
|
|
16967
16999
|
*/
|
|
16968
|
-
distance: 15,
|
|
16969
17000
|
/**
|
|
16970
17001
|
* Enable or disable the axis labels.
|
|
16971
17002
|
*
|
|
@@ -17223,18 +17254,18 @@ var AxisDefaults;
|
|
|
17223
17254
|
* @apioption xAxis.top
|
|
17224
17255
|
*/
|
|
17225
17256
|
/**
|
|
17226
|
-
* Index of another axis that this axis is linked to.
|
|
17227
|
-
* linked to a master axis, it will take the same
|
|
17228
|
-
* the master, but as assigned by min or max or by
|
|
17229
|
-
* It can be used to show additional info, or to ease
|
|
17230
|
-
* chart by duplicating the scales.
|
|
17257
|
+
* Index or [id](#xAxis.id) of another axis that this axis is linked to.
|
|
17258
|
+
* When an axis is linked to a master axis, it will take the same
|
|
17259
|
+
* extremes as the master, but as assigned by min or max or by
|
|
17260
|
+
* `setExtremes`. It can be used to show additional info, or to ease
|
|
17261
|
+
* reading the chart by duplicating the scales.
|
|
17231
17262
|
*
|
|
17232
17263
|
* @sample {highcharts} highcharts/xaxis/linkedto/
|
|
17233
17264
|
* Different string formats of the same date
|
|
17234
17265
|
* @sample {highcharts} highcharts/yaxis/linkedto/
|
|
17235
17266
|
* Y values on both sides
|
|
17236
17267
|
*
|
|
17237
|
-
* @type {number}
|
|
17268
|
+
* @type {number|string}
|
|
17238
17269
|
* @since 2.0.2
|
|
17239
17270
|
* @product highcharts highstock gantt
|
|
17240
17271
|
* @apioption xAxis.linkedTo
|
|
@@ -19354,7 +19385,7 @@ class Tick {
|
|
|
19354
19385
|
*/
|
|
19355
19386
|
addLabel() {
|
|
19356
19387
|
const tick = this, axis = tick.axis, options = axis.options, chart = axis.chart, categories = axis.categories, log = axis.logarithmic, names = axis.names, pos = tick.pos, labelOptions = (tick.options?.labels ?? options.labels), tickPositions = axis.tickPositions, isFirst = pos === tickPositions[0], isLast = pos === tickPositions[tickPositions.length - 1], tickPositionInfo = tickPositions.info, boundary = tickPositionInfo?.boundaryTicks[pos], DTLFormats = options.dateTimeLabelFormats;
|
|
19357
|
-
let
|
|
19388
|
+
let dateTimeLabelFormat, dateTimeLabelFormats, i;
|
|
19358
19389
|
// The context value
|
|
19359
19390
|
let value = this.parameters.category || (categories ?
|
|
19360
19391
|
(categories[pos] ?? names[pos] ?? pos) :
|
|
@@ -19440,10 +19471,15 @@ class Tick {
|
|
|
19440
19471
|
}
|
|
19441
19472
|
return axis.defaultLabelFormatter.call(ctx);
|
|
19442
19473
|
};
|
|
19443
|
-
|
|
19474
|
+
/**
|
|
19475
|
+
* The rendered text label of the tick.
|
|
19476
|
+
* @name Highcharts.Tick#label
|
|
19477
|
+
* @type {Highcharts.SVGElement|undefined}
|
|
19478
|
+
*/
|
|
19479
|
+
tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
|
|
19444
19480
|
// Set up conditional formatting based on the format list if existing.
|
|
19445
|
-
const list = dateTimeLabelFormats?.list;
|
|
19446
|
-
if (list) {
|
|
19481
|
+
const list = dateTimeLabelFormats?.list, label = tick.label;
|
|
19482
|
+
if (list && label) {
|
|
19447
19483
|
tick.shortenLabel = function () {
|
|
19448
19484
|
for (i = 0; i < list.length; i++) {
|
|
19449
19485
|
extend(ctx, { dateTimeLabelFormat: list[i] });
|
|
@@ -19451,43 +19487,17 @@ class Tick {
|
|
|
19451
19487
|
text: labelFormatter.call(ctx, ctx)
|
|
19452
19488
|
});
|
|
19453
19489
|
if (label.getBBox().width <
|
|
19454
|
-
axis.getSlotWidth(tick) - 2 *
|
|
19455
|
-
(labelOptions.padding || 0)) {
|
|
19490
|
+
axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
|
|
19456
19491
|
return;
|
|
19457
19492
|
}
|
|
19458
19493
|
}
|
|
19459
|
-
label.attr({
|
|
19460
|
-
text: ''
|
|
19461
|
-
});
|
|
19494
|
+
label.attr({ text: '' });
|
|
19462
19495
|
};
|
|
19463
19496
|
}
|
|
19464
19497
|
else {
|
|
19465
19498
|
// #15692
|
|
19466
19499
|
tick.shortenLabel = void 0;
|
|
19467
19500
|
}
|
|
19468
|
-
// First call
|
|
19469
|
-
if (!label) {
|
|
19470
|
-
/**
|
|
19471
|
-
* The rendered text label of the tick.
|
|
19472
|
-
* @name Highcharts.Tick#label
|
|
19473
|
-
* @type {Highcharts.SVGElement|undefined}
|
|
19474
|
-
*/
|
|
19475
|
-
tick.label = label = tick.createLabel(text, labelOptions);
|
|
19476
|
-
// Base value to detect change for new calls to getBBox
|
|
19477
|
-
tick.rotation = 0;
|
|
19478
|
-
// Update
|
|
19479
|
-
}
|
|
19480
|
-
else if (label.textStr !== text) {
|
|
19481
|
-
// When resetting text, also reset the width if dynamically set
|
|
19482
|
-
// (#8809)
|
|
19483
|
-
if (label.textWidth &&
|
|
19484
|
-
!labelOptions.style.width &&
|
|
19485
|
-
!label.styles.width) {
|
|
19486
|
-
label.css({ width: void 0 });
|
|
19487
|
-
}
|
|
19488
|
-
label.attr({ text });
|
|
19489
|
-
label.textPxLength = label.getBBox().width;
|
|
19490
|
-
}
|
|
19491
19501
|
}
|
|
19492
19502
|
/**
|
|
19493
19503
|
* Render and return the label of the tick.
|
|
@@ -19495,18 +19505,33 @@ class Tick {
|
|
|
19495
19505
|
* @internal
|
|
19496
19506
|
* @function Highcharts.Tick#createLabel
|
|
19497
19507
|
*/
|
|
19498
|
-
createLabel(
|
|
19499
|
-
const axis = this.axis, { renderer, styledMode } = axis.chart,
|
|
19500
|
-
|
|
19501
|
-
|
|
19502
|
-
|
|
19503
|
-
|
|
19508
|
+
createLabel(text, labelOptions, xy) {
|
|
19509
|
+
const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
|
|
19510
|
+
let label = this.label;
|
|
19511
|
+
if (defined(text) && labelOptions.enabled) {
|
|
19512
|
+
label || (label = renderer
|
|
19513
|
+
.text(text, xy?.x, xy?.y, labelOptions.useHTML)
|
|
19514
|
+
.add(axis.labelGroup));
|
|
19515
|
+
}
|
|
19516
|
+
else if (label) {
|
|
19517
|
+
label = label.destroy();
|
|
19518
|
+
// Reset so it doesn't animate when re-enabled
|
|
19519
|
+
this.isNewLabel = true;
|
|
19520
|
+
}
|
|
19504
19521
|
// Un-rotated length
|
|
19505
|
-
if (label) {
|
|
19522
|
+
if (label && (label.labelStyle !== style || text !== label.textStr)) {
|
|
19523
|
+
// Store a reference to the current style object to avoid running
|
|
19524
|
+
// this block on every render call unless something actually
|
|
19525
|
+
// changes.
|
|
19526
|
+
label.labelStyle = style;
|
|
19527
|
+
if (text !== label.textStr) {
|
|
19528
|
+
label.attr({ text });
|
|
19529
|
+
delete label.textPxLength;
|
|
19530
|
+
}
|
|
19506
19531
|
if (!styledMode) {
|
|
19507
|
-
label.css(merge(
|
|
19532
|
+
label.css(merge(style));
|
|
19508
19533
|
}
|
|
19509
|
-
label.textPxLength = label.getBBox().width;
|
|
19534
|
+
label.textPxLength ?? (label.textPxLength = label.getBBox().width);
|
|
19510
19535
|
// Apply the white-space setting after we read the full text width
|
|
19511
19536
|
if (!styledMode && whiteSpace) {
|
|
19512
19537
|
label.css({ whiteSpace });
|
|
@@ -19578,19 +19603,27 @@ class Tick {
|
|
|
19578
19603
|
* @internal
|
|
19579
19604
|
*/
|
|
19580
19605
|
getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
|
|
19581
|
-
const axis = this.axis, transA = axis
|
|
19582
|
-
axis.
|
|
19606
|
+
const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
|
|
19607
|
+
axis.linkedParent ?
|
|
19583
19608
|
axis.linkedParent.reversed :
|
|
19584
|
-
axis.reversed),
|
|
19609
|
+
axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
|
|
19585
19610
|
// Adjust for label alignment if we use reserveSpace: true (#5286)
|
|
19586
19611
|
labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
|
|
19587
|
-
-axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19588
|
-
0), distance = labelOptions.distance
|
|
19612
|
+
-(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19613
|
+
0), distance = labelOptions.distance ?? (
|
|
19614
|
+
// If the label is aligned inside the plot area, default to 0.
|
|
19615
|
+
// This is default behavior or Stock y-axis labels.
|
|
19616
|
+
(side === 1 &&
|
|
19617
|
+
labelAlign === 'right' &&
|
|
19618
|
+
!labelOptions.reserveSpace) ? 0 :
|
|
19619
|
+
(side === 3 &&
|
|
19620
|
+
labelAlign === 'left' &&
|
|
19621
|
+
!labelOptions.reserveSpace) ? 0 : 15), pos = {};
|
|
19589
19622
|
let yOffset, line;
|
|
19590
|
-
if (
|
|
19623
|
+
if (side === 0) {
|
|
19591
19624
|
yOffset = label.rotation ? -distance : -label.getBBox().height;
|
|
19592
19625
|
}
|
|
19593
|
-
else if (
|
|
19626
|
+
else if (side === 2) {
|
|
19594
19627
|
yOffset = rotCorr.y + distance;
|
|
19595
19628
|
}
|
|
19596
19629
|
else {
|
|
@@ -19599,12 +19632,12 @@ class Tick {
|
|
|
19599
19632
|
(rotCorr.y - label.getBBox(false, 0).height / 2);
|
|
19600
19633
|
}
|
|
19601
19634
|
if (defined(labelOptions.y)) {
|
|
19602
|
-
yOffset =
|
|
19635
|
+
yOffset = side === 0 && axis.horiz ?
|
|
19603
19636
|
labelOptions.y + yOffset :
|
|
19604
19637
|
labelOptions.y;
|
|
19605
19638
|
}
|
|
19606
19639
|
x = x +
|
|
19607
|
-
(labelOptions.x ?? [0, 1, 0, -1][
|
|
19640
|
+
(labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
|
|
19608
19641
|
labelOffsetCorrection +
|
|
19609
19642
|
rotCorr.x -
|
|
19610
19643
|
(tickmarkOffset && horiz ?
|
|
@@ -19659,7 +19692,7 @@ class Tick {
|
|
|
19659
19692
|
* @function Highcharts.Tick#handleOverflow
|
|
19660
19693
|
*/
|
|
19661
19694
|
handleOverflow(xy) {
|
|
19662
|
-
const tick = this, axis = this
|
|
19695
|
+
const tick = this, { axis, label } = this, labelOptions = axis.options.labels, pxPos = xy.x, { chartWidth, spacing } = axis.chart, leftBound = axis.labelLeft ?? Math.min(axis.pos, spacing[3]), rightBound = (axis.labelRight ?? Math.max(!axis.isRadial ? axis.pos + axis.len : 0, chartWidth - spacing[1])), rotation = label?.rotation || 0, factor = getAlignFactor(axis.labelAlign || label?.attr('align')), labelWidth = label?.getBBox().width || 0, slotWidth = axis.getSlotWidth(tick), xCorrection = factor;
|
|
19663
19696
|
let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
|
|
19664
19697
|
// Check if the label overshoots the chart spacing box. If it does, move
|
|
19665
19698
|
// it. If it now overshoots the slotWidth, add ellipsis.
|
|
@@ -19707,10 +19740,10 @@ class Tick {
|
|
|
19707
19740
|
tick.shortenLabel();
|
|
19708
19741
|
}
|
|
19709
19742
|
else {
|
|
19710
|
-
label.css(
|
|
19743
|
+
label.css({
|
|
19711
19744
|
width: Math.floor(textWidth) + 'px',
|
|
19712
19745
|
lineClamp: axis.isRadial ? 0 : 1
|
|
19713
|
-
})
|
|
19746
|
+
});
|
|
19714
19747
|
}
|
|
19715
19748
|
}
|
|
19716
19749
|
}
|
|
@@ -19726,8 +19759,11 @@ class Tick {
|
|
|
19726
19759
|
* @param {number} [opacity]
|
|
19727
19760
|
*/
|
|
19728
19761
|
render(index, old, opacity) {
|
|
19729
|
-
const tick = this, axis = tick.axis, horiz = axis.horiz, pos = tick.pos, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, axisStart = axis.pos, axisEnd = axisStart + axis.len, pxPos = horiz ? x : y;
|
|
19730
|
-
|
|
19762
|
+
const tick = this, axis = tick.axis, horiz = (old ? axis.old?.horiz : void 0) ?? axis.horiz, pos = tick.pos, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), xy = tick.getPosition(horiz, pos, tickmarkOffset, old), x = xy.x, y = xy.y, axisStart = axis.pos, axisEnd = axisStart + axis.len, pxPos = horiz ? x : y;
|
|
19763
|
+
if (!axis.visible) {
|
|
19764
|
+
opacity = 0;
|
|
19765
|
+
}
|
|
19766
|
+
const labelOpacity = opacity ?? 1;
|
|
19731
19767
|
// Anything that is not between `axis.pos` and `axis.pos + axis.length`
|
|
19732
19768
|
// should not be visible (#20166). The `correctFloat` is for reversed
|
|
19733
19769
|
// axes in Safari.
|
|
@@ -19755,25 +19791,21 @@ class Tick {
|
|
|
19755
19791
|
* @param {number} opacity The opacity of the grid line
|
|
19756
19792
|
*/
|
|
19757
19793
|
renderGridLine(old, opacity) {
|
|
19758
|
-
const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), renderer = axis.chart
|
|
19759
|
-
let gridLine = tick.gridLine,
|
|
19794
|
+
const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), { renderer, styledMode } = axis.chart;
|
|
19795
|
+
let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
|
|
19760
19796
|
if (tick.type === 'minor') {
|
|
19761
19797
|
gridLineWidth = options.minorGridLineWidth;
|
|
19762
19798
|
gridLineColor = options.minorGridLineColor;
|
|
19763
19799
|
dashStyle = options.minorGridLineDashStyle;
|
|
19764
19800
|
}
|
|
19801
|
+
// Apply the stroke width initially so the crisping works
|
|
19802
|
+
if (!styledMode) {
|
|
19803
|
+
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19804
|
+
}
|
|
19765
19805
|
if (!gridLine) {
|
|
19766
|
-
if (!axis.chart.styledMode) {
|
|
19767
|
-
attribs.stroke = gridLineColor;
|
|
19768
|
-
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19769
|
-
attribs.dashstyle = dashStyle;
|
|
19770
|
-
}
|
|
19771
19806
|
if (!type) {
|
|
19772
19807
|
attribs.zIndex = 1;
|
|
19773
19808
|
}
|
|
19774
|
-
if (old) {
|
|
19775
|
-
opacity = 0;
|
|
19776
|
-
}
|
|
19777
19809
|
/**
|
|
19778
19810
|
* The rendered grid line of the tick.
|
|
19779
19811
|
* @name Highcharts.Tick#gridLine
|
|
@@ -19784,22 +19816,24 @@ class Tick {
|
|
|
19784
19816
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
|
|
19785
19817
|
.add(axis.gridGroup);
|
|
19786
19818
|
}
|
|
19787
|
-
|
|
19788
|
-
|
|
19789
|
-
|
|
19790
|
-
|
|
19791
|
-
|
|
19792
|
-
|
|
19793
|
-
|
|
19794
|
-
|
|
19819
|
+
// Grid line path
|
|
19820
|
+
const d = axis.getPlotLinePath({
|
|
19821
|
+
value: pos + tickmarkOffset,
|
|
19822
|
+
lineWidth: gridLine.strokeWidth(),
|
|
19823
|
+
force: 'pass',
|
|
19824
|
+
old: old,
|
|
19825
|
+
acrossPanes: false // #18025
|
|
19826
|
+
});
|
|
19827
|
+
if (d) {
|
|
19828
|
+
attribs.d = d;
|
|
19829
|
+
attribs.opacity = old ? 0 : opacity;
|
|
19830
|
+
if (!styledMode) {
|
|
19831
|
+
attribs.stroke = gridLineColor;
|
|
19832
|
+
attribs.dashstyle = dashStyle;
|
|
19833
|
+
}
|
|
19795
19834
|
// If the parameter 'old' is set, the current call will be followed
|
|
19796
19835
|
// by another call, therefore do not do any animations this time
|
|
19797
|
-
|
|
19798
|
-
gridLine[old || tick.isNew ? 'attr' : 'animate']({
|
|
19799
|
-
d: gridLinePath,
|
|
19800
|
-
opacity: opacity
|
|
19801
|
-
});
|
|
19802
|
-
}
|
|
19836
|
+
gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
|
|
19803
19837
|
}
|
|
19804
19838
|
}
|
|
19805
19839
|
/**
|
|
@@ -19811,13 +19845,13 @@ class Tick {
|
|
|
19811
19845
|
* @param {number} opacity The opacity of the mark
|
|
19812
19846
|
*/
|
|
19813
19847
|
renderMark(xy, opacity) {
|
|
19814
|
-
const tick = this, axis = tick.axis, options = axis
|
|
19848
|
+
const tick = this, axis = tick.axis, { chart, options } = axis, renderer = chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'] ?? (!type && axis.isXAxis ? 1 : 0), // X axis defaults to 1
|
|
19815
19849
|
tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
|
|
19816
19850
|
let mark = tick.mark;
|
|
19817
|
-
const
|
|
19818
|
-
if (tickSize) {
|
|
19851
|
+
const verb = mark ? 'animate' : 'attr';
|
|
19852
|
+
if (tickSize || mark) {
|
|
19819
19853
|
// Negate the length
|
|
19820
|
-
if (axis.opposite) {
|
|
19854
|
+
if (axis.opposite && tickSize) {
|
|
19821
19855
|
tickSize[0] = -tickSize[0];
|
|
19822
19856
|
}
|
|
19823
19857
|
// First time, create it
|
|
@@ -19830,16 +19864,16 @@ class Tick {
|
|
|
19830
19864
|
tick.mark = mark = renderer.path()
|
|
19831
19865
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
|
|
19832
19866
|
.add(axis.axisGroup);
|
|
19833
|
-
if (!axis.chart.styledMode) {
|
|
19834
|
-
mark.attr({
|
|
19835
|
-
stroke: tickColor,
|
|
19836
|
-
'stroke-width': tickWidth
|
|
19837
|
-
});
|
|
19838
|
-
}
|
|
19839
19867
|
}
|
|
19840
|
-
|
|
19841
|
-
|
|
19842
|
-
|
|
19868
|
+
if (!chart.styledMode) {
|
|
19869
|
+
mark[verb]({
|
|
19870
|
+
stroke: tickColor,
|
|
19871
|
+
'stroke-width': tickWidth
|
|
19872
|
+
});
|
|
19873
|
+
}
|
|
19874
|
+
mark[verb]({
|
|
19875
|
+
d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
|
|
19876
|
+
opacity: tickSize ? opacity : 0
|
|
19843
19877
|
});
|
|
19844
19878
|
}
|
|
19845
19879
|
}
|
|
@@ -20001,6 +20035,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
|
|
|
20001
20035
|
* Axis options
|
|
20002
20036
|
*/
|
|
20003
20037
|
class Axis {
|
|
20038
|
+
/* *
|
|
20039
|
+
*
|
|
20040
|
+
* Static Properties
|
|
20041
|
+
*
|
|
20042
|
+
* */
|
|
20004
20043
|
/* *
|
|
20005
20044
|
*
|
|
20006
20045
|
* Constructors
|
|
@@ -20077,9 +20116,11 @@ class Axis {
|
|
|
20077
20116
|
* @name Highcharts.Axis#side
|
|
20078
20117
|
* @type {number}
|
|
20079
20118
|
*/
|
|
20080
|
-
axis.side =
|
|
20081
|
-
(
|
|
20082
|
-
|
|
20119
|
+
axis.side = userOptions.side ??
|
|
20120
|
+
(horiz ?
|
|
20121
|
+
(axis.opposite ? 0 : 2) : // Top : bottom
|
|
20122
|
+
(axis.opposite ? 1 : 3) // Right : left
|
|
20123
|
+
);
|
|
20083
20124
|
/**
|
|
20084
20125
|
* Current options for the axis after merge of defaults and user's
|
|
20085
20126
|
* options.
|
|
@@ -20090,8 +20131,8 @@ class Axis {
|
|
|
20090
20131
|
axis.setOptions(userOptions);
|
|
20091
20132
|
const options = axis.options, labelsOptions = options.labels;
|
|
20092
20133
|
// Set the type and fire an event
|
|
20093
|
-
axis.type
|
|
20094
|
-
axis.uniqueNames
|
|
20134
|
+
axis.type = options.type || 'linear';
|
|
20135
|
+
axis.uniqueNames = options.uniqueNames ?? true;
|
|
20095
20136
|
fireEvent(axis, 'afterSetType');
|
|
20096
20137
|
/**
|
|
20097
20138
|
* User's options for this axis without defaults.
|
|
@@ -20108,7 +20149,7 @@ class Axis {
|
|
|
20108
20149
|
* @name Highcharts.Axis#reversed
|
|
20109
20150
|
* @type {boolean}
|
|
20110
20151
|
*/
|
|
20111
|
-
axis.reversed =
|
|
20152
|
+
axis.reversed = options.reversed;
|
|
20112
20153
|
axis.visible = options.visible;
|
|
20113
20154
|
axis.zoomEnabled = options.zoomEnabled;
|
|
20114
20155
|
// Initial categories
|
|
@@ -20130,16 +20171,12 @@ class Axis {
|
|
|
20130
20171
|
*/
|
|
20131
20172
|
axis.categories = (isArray(options.categories) && options.categories) ||
|
|
20132
20173
|
(axis.hasNames ? [] : void 0);
|
|
20133
|
-
|
|
20134
|
-
// faster than array searching (#7725). Preserve on update (#3830)
|
|
20135
|
-
axis.names || (axis.names = []);
|
|
20174
|
+
axis.names || (axis.names = []); // Preserve on update (#3830)
|
|
20136
20175
|
axis.namesMap || (axis.namesMap = {});
|
|
20137
20176
|
// Placeholder for plotLines and plotBands groups
|
|
20138
|
-
axis.plotLinesAndBandsGroups = {};
|
|
20177
|
+
axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
|
|
20139
20178
|
// Shorthand types
|
|
20140
20179
|
axis.positiveValuesOnly = !!axis.logarithmic;
|
|
20141
|
-
// Flag, if axis is linked to another axis
|
|
20142
|
-
axis.isLinked = defined(options.linkedTo);
|
|
20143
20180
|
/**
|
|
20144
20181
|
* List of major ticks mapped by position on axis.
|
|
20145
20182
|
*
|
|
@@ -20148,8 +20185,8 @@ class Axis {
|
|
|
20148
20185
|
* @name Highcharts.Axis#ticks
|
|
20149
20186
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20150
20187
|
*/
|
|
20151
|
-
axis.ticks = {};
|
|
20152
|
-
axis.labelEdge = [];
|
|
20188
|
+
axis.ticks || (axis.ticks = {});
|
|
20189
|
+
axis.labelEdge || (axis.labelEdge = []);
|
|
20153
20190
|
/**
|
|
20154
20191
|
* List of minor ticks mapped by position on the axis.
|
|
20155
20192
|
*
|
|
@@ -20158,11 +20195,9 @@ class Axis {
|
|
|
20158
20195
|
* @name Highcharts.Axis#minorTicks
|
|
20159
20196
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20160
20197
|
*/
|
|
20161
|
-
axis.minorTicks = {};
|
|
20162
|
-
// List of plotLines/Bands
|
|
20163
|
-
axis.plotLinesAndBands = [];
|
|
20198
|
+
axis.minorTicks || (axis.minorTicks = {});
|
|
20164
20199
|
// Alternate bands
|
|
20165
|
-
axis.alternateBands = {};
|
|
20200
|
+
axis.alternateBands || (axis.alternateBands = {});
|
|
20166
20201
|
/**
|
|
20167
20202
|
* The length of the axis in terms of pixels.
|
|
20168
20203
|
*
|
|
@@ -20196,7 +20231,7 @@ class Axis {
|
|
|
20196
20231
|
* @name Highcharts.Axis#crosshair
|
|
20197
20232
|
* @type {boolean|Highcharts.AxisCrosshairOptions}
|
|
20198
20233
|
*/
|
|
20199
|
-
const crosshair = options.crosshair ?? splat(chart.options.tooltip
|
|
20234
|
+
const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
|
|
20200
20235
|
axis.crosshair = crosshair === true ? {} : crosshair;
|
|
20201
20236
|
// Register. Don't add it again on Axis.update().
|
|
20202
20237
|
if (chart.axes.indexOf(axis) === -1) { //
|
|
@@ -20251,14 +20286,14 @@ class Axis {
|
|
|
20251
20286
|
},
|
|
20252
20287
|
margin: 15
|
|
20253
20288
|
} :
|
|
20254
|
-
// Left and right axis, title rotated 90 or
|
|
20289
|
+
// Left and right axis, title rotated -90 or 90 degrees
|
|
20255
20290
|
// respectively
|
|
20256
20291
|
{
|
|
20257
20292
|
labels: {
|
|
20258
20293
|
padding: 1
|
|
20259
20294
|
},
|
|
20260
20295
|
title: {
|
|
20261
|
-
rotation: 90
|
|
20296
|
+
rotation: this.side === 1 ? 90 : -90
|
|
20262
20297
|
}
|
|
20263
20298
|
};
|
|
20264
20299
|
this.options = merge(sideSpecific,
|
|
@@ -20472,6 +20507,9 @@ class Axis {
|
|
|
20472
20507
|
if (!axis.isRadial) {
|
|
20473
20508
|
returnValue = correctFloat(returnValue);
|
|
20474
20509
|
}
|
|
20510
|
+
if (Math.abs(returnValue) < 1e-9) {
|
|
20511
|
+
returnValue = 0;
|
|
20512
|
+
}
|
|
20475
20513
|
}
|
|
20476
20514
|
return returnValue;
|
|
20477
20515
|
}
|
|
@@ -20527,7 +20565,7 @@ class Axis {
|
|
|
20527
20565
|
* The SVG path definition for the plot line.
|
|
20528
20566
|
*/
|
|
20529
20567
|
getPlotLinePath(options) {
|
|
20530
|
-
const axis = this,
|
|
20568
|
+
const axis = this, { chart, left, top, transB } = axis, { lineWidth, old, value } = options, horiz = (old ? axis.old?.horiz : void 0) ?? axis.horiz, cHeight = (old && chart.oldChartHeight) || chart.chartHeight, cWidth = (old && chart.oldChartWidth) || chart.chartWidth;
|
|
20531
20569
|
let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
|
|
20532
20570
|
// eslint-disable-next-line valid-jsdoc
|
|
20533
20571
|
/**
|
|
@@ -20565,17 +20603,17 @@ class Axis {
|
|
|
20565
20603
|
skip = true;
|
|
20566
20604
|
force = false; // #7175, don't force it when path is invalid
|
|
20567
20605
|
}
|
|
20568
|
-
else if (
|
|
20569
|
-
y1 =
|
|
20606
|
+
else if (horiz) {
|
|
20607
|
+
y1 = top;
|
|
20570
20608
|
y2 = cHeight - axis.bottom + (axis.options.isInternal ?
|
|
20571
20609
|
0 :
|
|
20572
20610
|
(chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
|
|
20573
|
-
x1 = x2 = between(x1,
|
|
20611
|
+
x1 = x2 = between(x1, left, left + axis.width);
|
|
20574
20612
|
}
|
|
20575
20613
|
else {
|
|
20576
|
-
x1 =
|
|
20614
|
+
x1 = left;
|
|
20577
20615
|
x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
|
|
20578
|
-
y1 = y2 = between(y1,
|
|
20616
|
+
y1 = y2 = between(y1, top, top + axis.height);
|
|
20579
20617
|
}
|
|
20580
20618
|
e.path = skip && !force ?
|
|
20581
20619
|
void 0 :
|
|
@@ -21004,7 +21042,7 @@ class Axis {
|
|
|
21004
21042
|
* @emits Highcharts.Axis#event:foundExtremes
|
|
21005
21043
|
*/
|
|
21006
21044
|
setTickInterval(secondPass) {
|
|
21007
|
-
const axis = this, { categories, chart, dataMax, dataMin, dateTime, isXAxis, logarithmic, options, softThreshold } = axis, time = chart.time, threshold = isNumber(axis.threshold) ? axis.threshold : void 0, minRange = axis.minRange || 0, { ceiling, floor,
|
|
21045
|
+
const axis = this, { categories, chart, dataMax, dataMin, dateTime, isXAxis, logarithmic, options, softThreshold } = axis, time = chart.time, threshold = isNumber(axis.threshold) ? axis.threshold : void 0, minRange = axis.minRange || 0, { ceiling, floor, softMax, softMin } = options, linkedParent = axis.linkedParent, tickPixelIntervalOption = options.tickPixelInterval;
|
|
21008
21046
|
let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
|
|
21009
21047
|
// Only non-negative tickInterval is valid, #12961
|
|
21010
21048
|
tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
|
|
@@ -21017,7 +21055,6 @@ class Axis {
|
|
|
21017
21055
|
hardMax = (axis.userMax ?? time.parse(options.max));
|
|
21018
21056
|
// Linked axis gets the extremes from the parent axis
|
|
21019
21057
|
if (linkedParent) {
|
|
21020
|
-
axis.linkedParent = linkedParent;
|
|
21021
21058
|
linkedParentExtremes = linkedParent.getExtremes();
|
|
21022
21059
|
axis.min =
|
|
21023
21060
|
linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
|
|
@@ -21327,7 +21364,7 @@ class Axis {
|
|
|
21327
21364
|
// Reset min/max or remove extremes based on start/end on tick
|
|
21328
21365
|
this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
|
|
21329
21366
|
this.trimTicks(tickPositions, startOnTick, endOnTick);
|
|
21330
|
-
if (!this.
|
|
21367
|
+
if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
|
|
21331
21368
|
// Subtract half a unit (#2619, #2846, #2515, #3390), but not in
|
|
21332
21369
|
// case of multiple ticks (#6897)
|
|
21333
21370
|
if (this.single &&
|
|
@@ -21362,7 +21399,7 @@ class Axis {
|
|
|
21362
21399
|
trimTicks(tickPositions, startOnTick, endOnTick) {
|
|
21363
21400
|
const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
|
|
21364
21401
|
fireEvent(this, 'trimTicks');
|
|
21365
|
-
if (!this.
|
|
21402
|
+
if (!this.linkedParent ||
|
|
21366
21403
|
// Linked non-grid axes should trim ticks, #21743.
|
|
21367
21404
|
// Grid axis has custom handling of ticks.
|
|
21368
21405
|
!this.grid) {
|
|
@@ -21636,7 +21673,15 @@ class Axis {
|
|
|
21636
21673
|
* @emits Highcharts.Axis#event:afterSetScale
|
|
21637
21674
|
*/
|
|
21638
21675
|
setScale() {
|
|
21639
|
-
const axis = this, { coll, stacking } = axis
|
|
21676
|
+
const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
|
|
21677
|
+
find(axes, (a) => a.options.id === linkedTo) :
|
|
21678
|
+
(isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
|
|
21679
|
+
parent === axis ? void 0 : parent;
|
|
21680
|
+
// Scale a later-ordered parent first so its extremes are ready. Skip
|
|
21681
|
+
// grid column axes, which live outside the collection (#24658).
|
|
21682
|
+
if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
|
|
21683
|
+
linkedParent.setScale();
|
|
21684
|
+
}
|
|
21640
21685
|
let isDirtyData = false, isXAxisDirty = false;
|
|
21641
21686
|
axis.series.forEach((series) => {
|
|
21642
21687
|
isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
|
|
@@ -21653,7 +21698,7 @@ class Axis {
|
|
|
21653
21698
|
if (isDirtyAxisLength ||
|
|
21654
21699
|
isDirtyData ||
|
|
21655
21700
|
isXAxisDirty ||
|
|
21656
|
-
axis.
|
|
21701
|
+
axis.linkedParent ||
|
|
21657
21702
|
axis.forceRedraw ||
|
|
21658
21703
|
axis.userMin !== axis.old?.userMin ||
|
|
21659
21704
|
axis.userMax !== axis.old?.userMax ||
|
|
@@ -22015,7 +22060,7 @@ class Axis {
|
|
|
22015
22060
|
renderUnsquish() {
|
|
22016
22061
|
const chart = this.chart, renderer = chart.renderer, tickPositions = this.tickPositions, ticks = this.ticks, labelOptions = this.options.labels, labelStyleOptions = labelOptions.style, horiz = this.horiz, slotWidth = this.getSlotWidth(), innerWidth = Math.max(1, Math.round(slotWidth - (horiz ?
|
|
22017
22062
|
2 * (labelOptions.padding || 0) :
|
|
22018
|
-
labelOptions.distance
|
|
22063
|
+
labelOptions.distance ?? 15 // #21172
|
|
22019
22064
|
))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
|
|
22020
22065
|
let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
|
|
22021
22066
|
// Set rotation option unless it is "auto", like in gauges
|
|
@@ -22095,7 +22140,6 @@ class Axis {
|
|
|
22095
22140
|
});
|
|
22096
22141
|
}
|
|
22097
22142
|
}
|
|
22098
|
-
tick.rotation = attr.rotation;
|
|
22099
22143
|
}
|
|
22100
22144
|
}, this);
|
|
22101
22145
|
// Note: Why is this not part of getLabelPosition?
|
|
@@ -22127,46 +22171,50 @@ class Axis {
|
|
|
22127
22171
|
* Whether or not to display the title.
|
|
22128
22172
|
*/
|
|
22129
22173
|
addTitle(display) {
|
|
22130
|
-
const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode
|
|
22131
|
-
|
|
22132
|
-
|
|
22133
|
-
|
|
22134
|
-
|
|
22135
|
-
|
|
22136
|
-
|
|
22137
|
-
|
|
22138
|
-
|
|
22139
|
-
|
|
22140
|
-
|
|
22141
|
-
|
|
22142
|
-
|
|
22143
|
-
|
|
22144
|
-
|
|
22145
|
-
|
|
22146
|
-
|
|
22147
|
-
|
|
22148
|
-
|
|
22149
|
-
|
|
22150
|
-
|
|
22151
|
-
})
|
|
22174
|
+
const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode, textAlign = axisTitleOptions.textAlign ||
|
|
22175
|
+
(horiz ? {
|
|
22176
|
+
low: 'left',
|
|
22177
|
+
middle: 'center',
|
|
22178
|
+
high: 'right'
|
|
22179
|
+
} : {
|
|
22180
|
+
low: opposite ? 'right' : 'left',
|
|
22181
|
+
middle: 'center',
|
|
22182
|
+
high: opposite ? 'left' : 'right'
|
|
22183
|
+
})[axisTitleOptions.align], attr = {
|
|
22184
|
+
text: axisTitleOptions.text || '',
|
|
22185
|
+
zIndex: 7,
|
|
22186
|
+
align: textAlign
|
|
22187
|
+
}, animatable = {
|
|
22188
|
+
rotation: axisTitleOptions.rotation || 0
|
|
22189
|
+
};
|
|
22190
|
+
let axisTitle = axis.axisTitle;
|
|
22191
|
+
if (!axisTitle) {
|
|
22192
|
+
axisTitle = renderer
|
|
22193
|
+
.text('', 0, 0, axisTitleOptions.useHTML)
|
|
22194
|
+
.attr(extend(attr, animatable))
|
|
22152
22195
|
.addClass('highcharts-axis-title');
|
|
22153
|
-
|
|
22154
|
-
|
|
22155
|
-
axis.axisTitle.css(merge(axisTitleOptions.style));
|
|
22156
|
-
}
|
|
22157
|
-
axis.axisTitle.add(axis.axisGroup);
|
|
22158
|
-
axis.axisTitle.isNew = true;
|
|
22196
|
+
axisTitle.add(axis.axisGroup);
|
|
22197
|
+
axisTitle.isNew = true;
|
|
22159
22198
|
}
|
|
22160
|
-
|
|
22161
|
-
|
|
22162
|
-
|
|
22163
|
-
|
|
22164
|
-
|
|
22165
|
-
|
|
22166
|
-
|
|
22199
|
+
else {
|
|
22200
|
+
axisTitle
|
|
22201
|
+
.attr(attr)
|
|
22202
|
+
.animate(animatable);
|
|
22203
|
+
}
|
|
22204
|
+
if (!styledMode) {
|
|
22205
|
+
// #7814, don't mutate the style option
|
|
22206
|
+
const css = merge(axisTitleOptions.style);
|
|
22207
|
+
// Max width defaults to the length of the axis
|
|
22208
|
+
if (!axisTitleOptions.style.width &&
|
|
22209
|
+
!axis.isRadial) {
|
|
22210
|
+
css.width = axis.len + 'px';
|
|
22211
|
+
}
|
|
22212
|
+
axisTitle.css(css);
|
|
22167
22213
|
}
|
|
22168
22214
|
// Hide or show the title depending on whether showEmpty is set
|
|
22169
|
-
|
|
22215
|
+
axisTitle[display ? 'show' : 'hide'](display);
|
|
22216
|
+
// Register
|
|
22217
|
+
axis.axisTitle = axisTitle;
|
|
22170
22218
|
}
|
|
22171
22219
|
/**
|
|
22172
22220
|
* Generates a tick for initial positioning.
|
|
@@ -22194,17 +22242,18 @@ class Axis {
|
|
|
22194
22242
|
createGroups() {
|
|
22195
22243
|
const { axisParent, // Used in color axis
|
|
22196
22244
|
chart, coll, options } = this, renderer = chart.renderer;
|
|
22197
|
-
const createGroup = (name, suffix
|
|
22198
|
-
.attr({ zIndex })
|
|
22245
|
+
const createGroup = (name, suffix) => renderer.g(name)
|
|
22199
22246
|
.addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
|
|
22200
22247
|
(this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
|
|
22201
22248
|
(options.className || ''))
|
|
22202
22249
|
.add(axisParent);
|
|
22203
|
-
|
|
22204
|
-
|
|
22205
|
-
|
|
22206
|
-
this.
|
|
22207
|
-
|
|
22250
|
+
(this.axisGroup || (this.axisGroup = createGroup('axis', '')))
|
|
22251
|
+
.attr({ zIndex: options.zIndex });
|
|
22252
|
+
(this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
|
|
22253
|
+
.clip(this.clippable ? chart.plotClipInner : void 0)
|
|
22254
|
+
.attr({ zIndex: options.gridZIndex });
|
|
22255
|
+
(this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
|
|
22256
|
+
.attr({ zIndex: options.labels.zIndex });
|
|
22208
22257
|
}
|
|
22209
22258
|
/**
|
|
22210
22259
|
* Shuffle existing category ticks, like in bar race chart
|
|
@@ -22212,8 +22261,11 @@ class Axis {
|
|
|
22212
22261
|
* @internal
|
|
22213
22262
|
*/
|
|
22214
22263
|
shuffleTicks() {
|
|
22215
|
-
const ticks = this.ticks, oldNames = this.old?.names;
|
|
22216
|
-
if (this.type === 'category' &&
|
|
22264
|
+
const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
|
|
22265
|
+
if (this.type === 'category' &&
|
|
22266
|
+
oldNames &&
|
|
22267
|
+
!hasDuplicates(oldNames) &&
|
|
22268
|
+
!hasDuplicates(this.names)) {
|
|
22217
22269
|
oldNames.forEach((name, oldPos) => {
|
|
22218
22270
|
const pos = this.namesMap[name];
|
|
22219
22271
|
if (defined(pos) && oldPos !== pos) {
|
|
@@ -22255,7 +22307,7 @@ class Axis {
|
|
|
22255
22307
|
* @emits Highcharts.Axis#event:afterGetOffset
|
|
22256
22308
|
*/
|
|
22257
22309
|
getOffset() {
|
|
22258
|
-
const axis = this, { chart, horiz, options, side, ticks, tickPositions, coll } = axis, hasData = axis.hasData(), axisTitleOptions = options.title, labelOptions = options.labels, hasCrossing = isNumber(options.crossing), axisOffset = chart.axisOffset, clipOffset = chart.clipOffset, directionFactor = [-1, 1, 1, -1][side];
|
|
22310
|
+
const axis = this, { chart, horiz, options, side, ticks, tickPositions, coll } = axis, hasData = axis.hasData(), axisTitleOptions = options.title, labelOptions = options.labels, hasCrossing = isNumber(options.crossing), axisOffset = chart.axisOffset, clipOffset = chart.clipOffset, directionFactor = [-1, 1, 1, -1][side], distance = labelOptions.distance ?? 15;
|
|
22259
22311
|
let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
|
|
22260
22312
|
labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
|
|
22261
22313
|
// For reuse in Axis.render
|
|
@@ -22263,7 +22315,7 @@ class Axis {
|
|
|
22263
22315
|
// Set/reset staggerLines
|
|
22264
22316
|
axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
|
|
22265
22317
|
axis.createGroups();
|
|
22266
|
-
if (hasData || axis.
|
|
22318
|
+
if (hasData || axis.linkedParent) {
|
|
22267
22319
|
// Shuffle existing category ticks
|
|
22268
22320
|
axis.shuffleTicks();
|
|
22269
22321
|
// Generate new ticks
|
|
@@ -22315,6 +22367,9 @@ class Axis {
|
|
|
22315
22367
|
axisTitleOptions.margin ?? (horiz ? 5 : 10);
|
|
22316
22368
|
}
|
|
22317
22369
|
}
|
|
22370
|
+
else {
|
|
22371
|
+
axis.axisTitle = axis.axisTitle?.destroy();
|
|
22372
|
+
}
|
|
22318
22373
|
// Render the axis line
|
|
22319
22374
|
axis.renderLine();
|
|
22320
22375
|
// Handle automatic or user set offset
|
|
@@ -22338,12 +22393,10 @@ class Axis {
|
|
|
22338
22393
|
labelOffsetPadded -= lineHeightCorrection;
|
|
22339
22394
|
labelOffsetPadded += directionFactor * (horiz ?
|
|
22340
22395
|
(labelOptions.y ??
|
|
22341
|
-
(tickRotCorr.y +
|
|
22342
|
-
directionFactor * labelOptions.distance)) :
|
|
22396
|
+
(tickRotCorr.y + directionFactor * distance)) :
|
|
22343
22397
|
(labelOptions.x ?? (reserveSpaceDefault ?
|
|
22344
|
-
directionFactor * (
|
|
22345
|
-
tickRotCorr.x +
|
|
22346
|
-
directionFactor * labelOptions.distance)));
|
|
22398
|
+
directionFactor * (distance - absTickRotCorrX) :
|
|
22399
|
+
tickRotCorr.x + directionFactor * distance)));
|
|
22347
22400
|
if (!horiz &&
|
|
22348
22401
|
!reserveSpaceDefault &&
|
|
22349
22402
|
axis.labelAlign === 'center' &&
|
|
@@ -22357,8 +22410,8 @@ class Axis {
|
|
|
22357
22410
|
// has rendered.
|
|
22358
22411
|
if (coll !== 'colorAxis' && clipOffset) {
|
|
22359
22412
|
const tickSize = this.tickSize('tick');
|
|
22360
|
-
axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
|
|
22361
|
-
|
|
22413
|
+
axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
|
|
22414
|
+
labelOffsetPadded, // #3027
|
|
22362
22415
|
tickPositions?.length && tickSize ?
|
|
22363
22416
|
tickSize[0] + directionFactor * axis.offset :
|
|
22364
22417
|
0 // #4866
|
|
@@ -22420,18 +22473,20 @@ class Axis {
|
|
|
22420
22473
|
* @function Highcharts.Axis#renderLine
|
|
22421
22474
|
*/
|
|
22422
22475
|
renderLine() {
|
|
22423
|
-
const { chart, offset = 0, options } = this;
|
|
22476
|
+
const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
|
|
22424
22477
|
this.axisLine || (this.axisLine = chart.renderer.path()
|
|
22425
22478
|
.addClass('highcharts-axis-line')
|
|
22426
|
-
.attr(
|
|
22427
|
-
stroke: options.lineColor,
|
|
22428
|
-
'stroke-width': options.lineWidth,
|
|
22429
|
-
zIndex: 7
|
|
22430
|
-
})
|
|
22479
|
+
.attr({ zIndex: 7 })
|
|
22431
22480
|
.clip(this.clippable && offset <= 0 ?
|
|
22432
22481
|
chart.plotClipOuter :
|
|
22433
22482
|
void 0)
|
|
22434
22483
|
.add(this.axisGroup));
|
|
22484
|
+
if (!chart.styledMode) {
|
|
22485
|
+
this.axisLine[verb]({
|
|
22486
|
+
stroke: options.lineColor,
|
|
22487
|
+
'stroke-width': options.lineWidth
|
|
22488
|
+
});
|
|
22489
|
+
}
|
|
22435
22490
|
}
|
|
22436
22491
|
/**
|
|
22437
22492
|
* Position the axis title.
|
|
@@ -22516,9 +22571,9 @@ class Axis {
|
|
|
22516
22571
|
* Whether the tick should animate in from last computed position
|
|
22517
22572
|
*/
|
|
22518
22573
|
renderTick(pos, i, slideIn) {
|
|
22519
|
-
const axis = this,
|
|
22574
|
+
const axis = this, ticks = axis.ticks;
|
|
22520
22575
|
// Linked axes need an extra check to find out if
|
|
22521
|
-
if (!
|
|
22576
|
+
if (!axis.linkedParent ||
|
|
22522
22577
|
(pos >= axis.min && pos <= axis.max) ||
|
|
22523
22578
|
axis.grid?.isColumn) {
|
|
22524
22579
|
if (!ticks[pos]) {
|
|
@@ -22544,11 +22599,13 @@ class Axis {
|
|
|
22544
22599
|
* @emits Highcharts.Axis#event:afterRender
|
|
22545
22600
|
*/
|
|
22546
22601
|
render() {
|
|
22547
|
-
const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options,
|
|
22602
|
+
const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options, tickPositions = axis.tickPositions, axisTitle = axis.axisTitle, ticks = axis.ticks, minorTicks = axis.minorTicks, alternateBands = axis.alternateBands, alternateGridColor = options.alternateGridColor, crossing = options.crossing, tickmarkOffset = axis.tickmarkOffset, axisLine = axis.axisLine, showAxis = axis.showAxis, opacity = +axis.visible, animation = animObject(renderer.globalAnimation);
|
|
22548
22603
|
let from, to;
|
|
22549
22604
|
// Reset
|
|
22550
22605
|
axis.labelEdge.length = 0;
|
|
22551
22606
|
axis.overlap = false;
|
|
22607
|
+
// Update z-indices
|
|
22608
|
+
this.createGroups();
|
|
22552
22609
|
// Mark all elements inActive before we go over and mark the active ones
|
|
22553
22610
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22554
22611
|
objectEach(coll, function (tick) {
|
|
@@ -22567,7 +22624,7 @@ class Axis {
|
|
|
22567
22624
|
}
|
|
22568
22625
|
}
|
|
22569
22626
|
// If the series has data draw the ticks. Else only the line and title
|
|
22570
|
-
if (axis.hasData() ||
|
|
22627
|
+
if (axis.hasData() || axis.linkedParent) {
|
|
22571
22628
|
const slideInTicks = axis.chart.hasRendered &&
|
|
22572
22629
|
axis.old && isNumber(axis.old.min);
|
|
22573
22630
|
// Minor ticks
|
|
@@ -22605,8 +22662,10 @@ class Axis {
|
|
|
22605
22662
|
tickmarkOffset)) { // #2248, #4660
|
|
22606
22663
|
if (!alternateBands[pos]) {
|
|
22607
22664
|
// Should be imported from PlotLineOrBand.js, but
|
|
22608
|
-
// the dependency cycle with axis is a problem
|
|
22609
|
-
|
|
22665
|
+
// the dependency cycle with axis is a problem. Try
|
|
22666
|
+
// moving it to the PlotLineOrBand axis composition
|
|
22667
|
+
// later.
|
|
22668
|
+
alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
|
|
22610
22669
|
}
|
|
22611
22670
|
from = pos + tickmarkOffset; // #949
|
|
22612
22671
|
alternateBands[pos].options = {
|
|
@@ -22620,17 +22679,13 @@ class Axis {
|
|
|
22620
22679
|
}
|
|
22621
22680
|
});
|
|
22622
22681
|
}
|
|
22623
|
-
// Custom plot lines and bands
|
|
22624
|
-
if (!axis._addedPlotLB) { // Only first time
|
|
22625
|
-
axis._addedPlotLB = true;
|
|
22626
|
-
(options.plotLines || [])
|
|
22627
|
-
.concat(options.plotBands || [])
|
|
22628
|
-
.forEach(function (plotLineOptions) {
|
|
22629
|
-
axis
|
|
22630
|
-
.addPlotBandOrLine(plotLineOptions);
|
|
22631
|
-
});
|
|
22632
|
-
}
|
|
22633
22682
|
} // End if hasData
|
|
22683
|
+
// Render or update rendering of plot lines and bands
|
|
22684
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
22685
|
+
for (const plotItem of this[coll]) {
|
|
22686
|
+
plotItem.render();
|
|
22687
|
+
}
|
|
22688
|
+
}
|
|
22634
22689
|
// Remove inactive ticks
|
|
22635
22690
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22636
22691
|
const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
|
|
@@ -22664,20 +22719,22 @@ class Axis {
|
|
|
22664
22719
|
// Set the axis line path
|
|
22665
22720
|
if (axisLine) {
|
|
22666
22721
|
axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
|
|
22667
|
-
d: this.getLinePath(axisLine.strokeWidth())
|
|
22722
|
+
d: this.getLinePath(axisLine.strokeWidth()),
|
|
22723
|
+
opacity
|
|
22668
22724
|
});
|
|
22669
22725
|
axisLine.isPlaced = true;
|
|
22670
22726
|
// Show or hide the line depending on options.showEmpty
|
|
22671
22727
|
axisLine[showAxis ? 'show' : 'hide'](showAxis);
|
|
22672
22728
|
}
|
|
22673
22729
|
if (axisTitle && showAxis) {
|
|
22674
|
-
axisTitle[axisTitle.isNew ? 'attr' : 'animate'](
|
|
22730
|
+
axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
|
|
22731
|
+
opacity,
|
|
22732
|
+
...axis.getTitlePosition(axisTitle)
|
|
22733
|
+
});
|
|
22675
22734
|
axisTitle.isNew = false;
|
|
22676
22735
|
}
|
|
22677
22736
|
// Stacked totals
|
|
22678
|
-
|
|
22679
|
-
axis.stacking.renderStackTotals();
|
|
22680
|
-
}
|
|
22737
|
+
axis.stacking?.renderStackTotals();
|
|
22681
22738
|
// First time, save the existing state
|
|
22682
22739
|
if (!this.old) {
|
|
22683
22740
|
this.saveOld();
|
|
@@ -22693,13 +22750,11 @@ class Axis {
|
|
|
22693
22750
|
* @function Highcharts.Axis#redraw
|
|
22694
22751
|
*/
|
|
22695
22752
|
redraw() {
|
|
22696
|
-
|
|
22753
|
+
// If it was initially visible, but dynamically hidden, `this.axisGroup`
|
|
22754
|
+
// exists. Then render with opacity 0.
|
|
22755
|
+
if (this.visible || this.axisGroup) {
|
|
22697
22756
|
// Render the axis
|
|
22698
22757
|
this.render();
|
|
22699
|
-
// Move plot lines and bands
|
|
22700
|
-
this.plotLinesAndBands.forEach(function (plotLine) {
|
|
22701
|
-
plotLine.render();
|
|
22702
|
-
});
|
|
22703
22758
|
}
|
|
22704
22759
|
// Mark associated series as dirty and ready for redraw
|
|
22705
22760
|
this.series.forEach(function (series) {
|
|
@@ -22713,6 +22768,7 @@ class Axis {
|
|
|
22713
22768
|
*/
|
|
22714
22769
|
saveOld() {
|
|
22715
22770
|
this.old = isNumber(this.min) ? {
|
|
22771
|
+
horiz: this.horiz,
|
|
22716
22772
|
len: this.len,
|
|
22717
22773
|
max: this.max,
|
|
22718
22774
|
min: this.min,
|
|
@@ -22722,64 +22778,37 @@ class Axis {
|
|
|
22722
22778
|
userMin: this.userMin
|
|
22723
22779
|
} : void 0;
|
|
22724
22780
|
}
|
|
22725
|
-
/**
|
|
22726
|
-
* Returns an array of axis properties, that should be untouched during
|
|
22727
|
-
* reinitialization.
|
|
22728
|
-
*
|
|
22729
|
-
* @internal
|
|
22730
|
-
* @function Highcharts.Axis#getKeepProps
|
|
22731
|
-
*/
|
|
22732
|
-
getKeepProps() {
|
|
22733
|
-
return (this.keepProps || Axis.keepProps);
|
|
22734
|
-
}
|
|
22735
22781
|
/**
|
|
22736
22782
|
* Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
|
|
22737
22783
|
* to fully remove the axis.
|
|
22738
22784
|
*
|
|
22739
22785
|
* @internal
|
|
22740
22786
|
* @function Highcharts.Axis#destroy
|
|
22741
|
-
*
|
|
22742
|
-
* @param {boolean} [keepEvents]
|
|
22743
|
-
* Whether to preserve events, used internally in Axis.update.
|
|
22744
22787
|
*/
|
|
22745
|
-
destroy(
|
|
22746
|
-
|
|
22747
|
-
fireEvent(this, 'destroy', { keepEvents: keepEvents });
|
|
22788
|
+
destroy() {
|
|
22789
|
+
fireEvent(this, 'destroy');
|
|
22748
22790
|
// Remove the events
|
|
22749
|
-
|
|
22750
|
-
removeEvent(axis);
|
|
22751
|
-
}
|
|
22791
|
+
removeEvent(this);
|
|
22752
22792
|
// Destroy collections
|
|
22753
|
-
[
|
|
22754
|
-
|
|
22755
|
-
|
|
22756
|
-
|
|
22757
|
-
|
|
22758
|
-
|
|
22759
|
-
|
|
22760
|
-
|
|
22761
|
-
|
|
22762
|
-
// Destroy elements
|
|
22793
|
+
[
|
|
22794
|
+
this.ticks,
|
|
22795
|
+
this.minorTicks,
|
|
22796
|
+
this.alternateBands,
|
|
22797
|
+
this.plotBands,
|
|
22798
|
+
this.plotLines,
|
|
22799
|
+
this.plotLinesAndBandsGroups
|
|
22800
|
+
].forEach(destroyObjectProperties);
|
|
22801
|
+
// Destroy elements and clear reference
|
|
22763
22802
|
[
|
|
22764
22803
|
'axisLine', 'axisTitle', 'axisGroup',
|
|
22765
22804
|
'gridGroup', 'labelGroup', 'cross', 'scrollbar'
|
|
22766
|
-
].forEach(
|
|
22767
|
-
|
|
22768
|
-
axis[prop] = axis[prop].destroy();
|
|
22769
|
-
}
|
|
22805
|
+
].forEach((prop) => {
|
|
22806
|
+
this[prop] = this[prop]?.destroy();
|
|
22770
22807
|
});
|
|
22771
|
-
// Destroy each generated group for plotLines and plotBands
|
|
22772
|
-
for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
|
|
22773
|
-
axis.plotLinesAndBandsGroups[plotGroup] =
|
|
22774
|
-
axis.plotLinesAndBandsGroups[plotGroup].destroy();
|
|
22775
|
-
}
|
|
22776
22808
|
// Delete all properties and fall back to the prototype.
|
|
22777
|
-
objectEach(
|
|
22778
|
-
|
|
22779
|
-
delete axis[key];
|
|
22780
|
-
}
|
|
22809
|
+
objectEach(this, (_val, key) => {
|
|
22810
|
+
delete this[key];
|
|
22781
22811
|
});
|
|
22782
|
-
this.eventOptions = eventOptions;
|
|
22783
22812
|
}
|
|
22784
22813
|
/**
|
|
22785
22814
|
* Internal function to draw a crosshair.
|
|
@@ -22873,25 +22902,21 @@ class Axis {
|
|
|
22873
22902
|
void 0 :
|
|
22874
22903
|
chart.plotClipInner)
|
|
22875
22904
|
.add();
|
|
22876
|
-
|
|
22877
|
-
|
|
22878
|
-
|
|
22879
|
-
|
|
22880
|
-
|
|
22881
|
-
|
|
22882
|
-
|
|
22883
|
-
|
|
22884
|
-
|
|
22885
|
-
|
|
22886
|
-
|
|
22887
|
-
|
|
22888
|
-
|
|
22889
|
-
|
|
22890
|
-
|
|
22891
|
-
dashstyle: options.dashStyle
|
|
22892
|
-
});
|
|
22893
|
-
}
|
|
22894
|
-
}
|
|
22905
|
+
}
|
|
22906
|
+
// Presentational attributes
|
|
22907
|
+
if (!chart.styledMode) {
|
|
22908
|
+
cross
|
|
22909
|
+
.attr({
|
|
22910
|
+
stroke: options.color || (categorized ?
|
|
22911
|
+
Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
|
|
22912
|
+
'var(--highcharts-neutral-color-20)'),
|
|
22913
|
+
'stroke-width': options.width ?? 1,
|
|
22914
|
+
// Dash style must be after stroke-width
|
|
22915
|
+
dashstyle: options.dashStyle || 'Solid'
|
|
22916
|
+
})
|
|
22917
|
+
.css({
|
|
22918
|
+
'pointer-events': 'none'
|
|
22919
|
+
});
|
|
22895
22920
|
}
|
|
22896
22921
|
cross
|
|
22897
22922
|
.show()
|
|
@@ -22901,9 +22926,7 @@ class Axis {
|
|
|
22901
22926
|
'stroke-width': this.transA
|
|
22902
22927
|
});
|
|
22903
22928
|
}
|
|
22904
|
-
|
|
22905
|
-
this.cross.e = e;
|
|
22906
|
-
}
|
|
22929
|
+
cross.e = e;
|
|
22907
22930
|
},
|
|
22908
22931
|
// Only use delay if the crosshair is currently hidden
|
|
22909
22932
|
(!graphic || graphic.attr('visibility') === 'hidden') ?
|
|
@@ -22942,13 +22965,14 @@ class Axis {
|
|
|
22942
22965
|
* operations on the chart, it is a good idea to set redraw to false and
|
|
22943
22966
|
* call {@link Chart#redraw} after.
|
|
22944
22967
|
*/
|
|
22945
|
-
update(options, redraw) {
|
|
22968
|
+
update(options = {}, redraw = true) {
|
|
22946
22969
|
const chart = this.chart;
|
|
22970
|
+
fireEvent(this, 'update', { options });
|
|
22947
22971
|
options = merge(this.userOptions, options);
|
|
22948
|
-
this.
|
|
22972
|
+
this.isDirty = this.forceRedraw = true;
|
|
22949
22973
|
this.init(chart, options);
|
|
22950
22974
|
chart.isDirtyBox = true;
|
|
22951
|
-
if (redraw
|
|
22975
|
+
if (redraw) {
|
|
22952
22976
|
chart.redraw();
|
|
22953
22977
|
}
|
|
22954
22978
|
}
|
|
@@ -23017,26 +23041,6 @@ class Axis {
|
|
|
23017
23041
|
this.update({ categories: categories }, redraw);
|
|
23018
23042
|
}
|
|
23019
23043
|
}
|
|
23020
|
-
/* *
|
|
23021
|
-
*
|
|
23022
|
-
* Static Properties
|
|
23023
|
-
*
|
|
23024
|
-
* */
|
|
23025
|
-
/**
|
|
23026
|
-
* Properties to survive after destroy, needed for Axis.update (#4317,
|
|
23027
|
-
* #5773, #5881).
|
|
23028
|
-
* @internal
|
|
23029
|
-
*/
|
|
23030
|
-
Axis.keepProps = [
|
|
23031
|
-
'coll',
|
|
23032
|
-
'extKey',
|
|
23033
|
-
'hcEvents',
|
|
23034
|
-
'len',
|
|
23035
|
-
'names',
|
|
23036
|
-
'series',
|
|
23037
|
-
'userMax',
|
|
23038
|
-
'userMin'
|
|
23039
|
-
];
|
|
23040
23044
|
/* *
|
|
23041
23045
|
*
|
|
23042
23046
|
* Default Export
|
|
@@ -23307,6 +23311,8 @@ Axis.keepProps = [
|
|
|
23307
23311
|
* */
|
|
23308
23312
|
|
|
23309
23313
|
|
|
23314
|
+
const { composed: DateTimeAxis_composed } = Core_Globals;
|
|
23315
|
+
|
|
23310
23316
|
|
|
23311
23317
|
/* *
|
|
23312
23318
|
*
|
|
@@ -23330,8 +23336,7 @@ var DateTimeAxis;
|
|
|
23330
23336
|
* @internal
|
|
23331
23337
|
*/
|
|
23332
23338
|
function compose(AxisClass) {
|
|
23333
|
-
if (
|
|
23334
|
-
AxisClass.keepProps.push('dateTime');
|
|
23339
|
+
if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
|
|
23335
23340
|
const axisProto = AxisClass.prototype;
|
|
23336
23341
|
axisProto.getTimeTicks = getTimeTicks;
|
|
23337
23342
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
@@ -23493,6 +23498,8 @@ var DateTimeAxis;
|
|
|
23493
23498
|
* */
|
|
23494
23499
|
|
|
23495
23500
|
|
|
23501
|
+
const { composed: LogarithmicAxis_composed } = Core_Globals;
|
|
23502
|
+
|
|
23496
23503
|
/* *
|
|
23497
23504
|
*
|
|
23498
23505
|
* Class
|
|
@@ -23516,8 +23523,7 @@ var LogarithmicAxis;
|
|
|
23516
23523
|
* @internal
|
|
23517
23524
|
*/
|
|
23518
23525
|
function compose(AxisClass) {
|
|
23519
|
-
if (
|
|
23520
|
-
AxisClass.keepProps.push('logarithmic');
|
|
23526
|
+
if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
|
|
23521
23527
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
23522
23528
|
addEvent(AxisClass, 'afterInit', onAfterInit);
|
|
23523
23529
|
}
|
|
@@ -23726,24 +23732,7 @@ var PlotLineOrBandAxis;
|
|
|
23726
23732
|
* Functions
|
|
23727
23733
|
*
|
|
23728
23734
|
* */
|
|
23729
|
-
|
|
23730
|
-
* Add a plot band after render time.
|
|
23731
|
-
*
|
|
23732
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23733
|
-
* Toggle the plot band from a button
|
|
23734
|
-
*
|
|
23735
|
-
* @function Highcharts.Axis#addPlotBand
|
|
23736
|
-
*
|
|
23737
|
-
* @param {Highcharts.AxisPlotBandsOptions} options
|
|
23738
|
-
* A configuration object for the plot band, as defined in
|
|
23739
|
-
* [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
|
|
23740
|
-
*
|
|
23741
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23742
|
-
* The added plot band, or `undefined` if the options are not valid.
|
|
23743
|
-
*/
|
|
23744
|
-
function addPlotBand(options) {
|
|
23745
|
-
return this.addPlotBandOrLine(options, 'plotBands');
|
|
23746
|
-
}
|
|
23735
|
+
const getAdderFunction = (coll) =>
|
|
23747
23736
|
/**
|
|
23748
23737
|
* Add a plot band or plot line after render time. Called from
|
|
23749
23738
|
* addPlotBand and addPlotLine internally.
|
|
@@ -23751,65 +23740,85 @@ var PlotLineOrBandAxis;
|
|
|
23751
23740
|
* @internal
|
|
23752
23741
|
* @function Highcharts.Axis#addPlotBandOrLine
|
|
23753
23742
|
* @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
|
|
23754
|
-
*
|
|
23743
|
+
* The `plotBand` or `plotLine` configuration object.
|
|
23755
23744
|
*/
|
|
23756
|
-
function
|
|
23757
|
-
|
|
23758
|
-
|
|
23745
|
+
function addPlotLineOrBand(options) {
|
|
23746
|
+
var _a;
|
|
23747
|
+
const plotItem = new PlotLineOrBandClass(this, options, coll);
|
|
23759
23748
|
if (this.visible) {
|
|
23760
|
-
|
|
23761
|
-
}
|
|
23762
|
-
if (obj) { // #2189
|
|
23763
|
-
if (!this._addedPlotLB) {
|
|
23764
|
-
this._addedPlotLB = true;
|
|
23765
|
-
(userOptions.plotLines || [])
|
|
23766
|
-
.concat(userOptions.plotBands || [])
|
|
23767
|
-
.forEach((plotLineOptions) => {
|
|
23768
|
-
this.addPlotBandOrLine(plotLineOptions);
|
|
23769
|
-
});
|
|
23770
|
-
}
|
|
23771
|
-
// Add it to the user options for exporting and Axis.update
|
|
23772
|
-
if (coll) {
|
|
23773
|
-
// Workaround Microsoft/TypeScript issue #32693
|
|
23774
|
-
const updatedOptions = (userOptions[coll] || []);
|
|
23775
|
-
updatedOptions.push(options);
|
|
23776
|
-
userOptions[coll] = updatedOptions;
|
|
23777
|
-
}
|
|
23778
|
-
this.plotLinesAndBands.push(obj);
|
|
23749
|
+
plotItem.render();
|
|
23779
23750
|
}
|
|
23780
|
-
|
|
23781
|
-
|
|
23782
|
-
|
|
23783
|
-
|
|
23784
|
-
|
|
23785
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23786
|
-
* Toggle the plot line from a button
|
|
23787
|
-
*
|
|
23788
|
-
* @function Highcharts.Axis#addPlotLine
|
|
23789
|
-
*
|
|
23790
|
-
* @param {Highcharts.AxisPlotLinesOptions} options
|
|
23791
|
-
* A configuration object for the plot line, as defined in
|
|
23792
|
-
* [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
|
|
23793
|
-
*
|
|
23794
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23795
|
-
* The added plot line, or `undefined` if the options are not valid.
|
|
23796
|
-
*/
|
|
23797
|
-
function addPlotLine(options) {
|
|
23798
|
-
return this.addPlotBandOrLine(options, 'plotLines');
|
|
23799
|
-
}
|
|
23751
|
+
(_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
|
|
23752
|
+
this.options[coll].push(options);
|
|
23753
|
+
this[coll].push(plotItem);
|
|
23754
|
+
return plotItem;
|
|
23755
|
+
};
|
|
23800
23756
|
/** @internal */
|
|
23801
23757
|
function compose(PlotLineOrBandType, AxisClass) {
|
|
23802
23758
|
const axisProto = AxisClass.prototype;
|
|
23803
23759
|
if (!axisProto.addPlotBand) {
|
|
23804
23760
|
PlotLineOrBandClass = PlotLineOrBandType;
|
|
23805
23761
|
extend(axisProto, {
|
|
23806
|
-
addPlotBand,
|
|
23807
|
-
addPlotLine,
|
|
23808
|
-
addPlotBandOrLine,
|
|
23762
|
+
addPlotBand: getAdderFunction('plotBands'),
|
|
23763
|
+
addPlotLine: getAdderFunction('plotLines'),
|
|
23809
23764
|
getPlotBandPath,
|
|
23810
|
-
removePlotBand,
|
|
23811
|
-
removePlotLine
|
|
23812
|
-
|
|
23765
|
+
removePlotBand: removePlotBandOrLine,
|
|
23766
|
+
removePlotLine: removePlotBandOrLine
|
|
23767
|
+
});
|
|
23768
|
+
addEvent(AxisClass, 'afterInit', function () {
|
|
23769
|
+
// First time only, not on Axis.update()
|
|
23770
|
+
if (!this.plotBands) {
|
|
23771
|
+
// Placeholder for plotlines and plotbands groups
|
|
23772
|
+
this.plotLinesAndBandsGroups = {};
|
|
23773
|
+
// Plot lines and bands from options
|
|
23774
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23775
|
+
this[coll] = [];
|
|
23776
|
+
for (const pOptions of splat(this.options[coll] || [])) {
|
|
23777
|
+
this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
|
|
23778
|
+
}
|
|
23779
|
+
}
|
|
23780
|
+
}
|
|
23781
|
+
});
|
|
23782
|
+
// Update plot bands and lines one to one
|
|
23783
|
+
addEvent(AxisClass, 'update', function ({ options }) {
|
|
23784
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23785
|
+
// Check if we have new options to process, otherwise do
|
|
23786
|
+
// nothing with existing plot lines and bands
|
|
23787
|
+
if (options[coll]) {
|
|
23788
|
+
const plotItems = this[coll];
|
|
23789
|
+
splat(options[coll]).forEach((pOptions = {}, i) => {
|
|
23790
|
+
// Match by id
|
|
23791
|
+
let pItem;
|
|
23792
|
+
if (pOptions?.id) {
|
|
23793
|
+
pItem = plotItems.find((p) => p.id === pOptions.id);
|
|
23794
|
+
}
|
|
23795
|
+
// Match by index
|
|
23796
|
+
pItem || (pItem = plotItems[i]);
|
|
23797
|
+
// Update
|
|
23798
|
+
if (pItem) {
|
|
23799
|
+
pItem.update(pOptions, false);
|
|
23800
|
+
options[coll][i] = pItem.options;
|
|
23801
|
+
// Add
|
|
23802
|
+
}
|
|
23803
|
+
else {
|
|
23804
|
+
pItem = this[coll === 'plotBands' ?
|
|
23805
|
+
'addPlotBand' :
|
|
23806
|
+
'addPlotLine'](pOptions);
|
|
23807
|
+
}
|
|
23808
|
+
pItem.isActive = true;
|
|
23809
|
+
});
|
|
23810
|
+
// Remove inactive items from end to start
|
|
23811
|
+
let i = plotItems.length;
|
|
23812
|
+
while (i--) {
|
|
23813
|
+
if (!plotItems[i].isActive) {
|
|
23814
|
+
plotItems[i].remove();
|
|
23815
|
+
}
|
|
23816
|
+
else {
|
|
23817
|
+
delete plotItems[i].isActive;
|
|
23818
|
+
}
|
|
23819
|
+
}
|
|
23820
|
+
}
|
|
23821
|
+
}
|
|
23813
23822
|
});
|
|
23814
23823
|
}
|
|
23815
23824
|
return AxisClass;
|
|
@@ -23880,23 +23889,6 @@ var PlotLineOrBandAxis;
|
|
|
23880
23889
|
}
|
|
23881
23890
|
return result;
|
|
23882
23891
|
}
|
|
23883
|
-
/**
|
|
23884
|
-
* Remove a plot band by its id.
|
|
23885
|
-
*
|
|
23886
|
-
* @sample highcharts/members/axis-removeplotband/
|
|
23887
|
-
* Remove plot band by id
|
|
23888
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23889
|
-
* Toggle the plot band from a button
|
|
23890
|
-
*
|
|
23891
|
-
* @function Highcharts.Axis#removePlotBand
|
|
23892
|
-
*
|
|
23893
|
-
* @param {string} id
|
|
23894
|
-
* The plot band's `id` as given in the original configuration
|
|
23895
|
-
* object or in the `addPlotBand` option.
|
|
23896
|
-
*/
|
|
23897
|
-
function removePlotBand(id) {
|
|
23898
|
-
this.removePlotBandOrLine(id);
|
|
23899
|
-
}
|
|
23900
23892
|
/**
|
|
23901
23893
|
* Remove a plot band or plot line from the chart by id. Called
|
|
23902
23894
|
* internally from `removePlotBand` and `removePlotLine`.
|
|
@@ -23904,45 +23896,7 @@ var PlotLineOrBandAxis;
|
|
|
23904
23896
|
* @function Highcharts.Axis#removePlotBandOrLine
|
|
23905
23897
|
*/
|
|
23906
23898
|
function removePlotBandOrLine(id) {
|
|
23907
|
-
|
|
23908
|
-
if (plotLinesAndBands) { // #15639
|
|
23909
|
-
let i = plotLinesAndBands.length;
|
|
23910
|
-
while (i--) {
|
|
23911
|
-
if (plotLinesAndBands[i].id === id) {
|
|
23912
|
-
plotLinesAndBands[i].destroy();
|
|
23913
|
-
}
|
|
23914
|
-
}
|
|
23915
|
-
([
|
|
23916
|
-
options.plotLines || [],
|
|
23917
|
-
userOptions.plotLines || [],
|
|
23918
|
-
options.plotBands || [],
|
|
23919
|
-
userOptions.plotBands || []
|
|
23920
|
-
]).forEach(function (arr) {
|
|
23921
|
-
i = arr.length;
|
|
23922
|
-
while (i--) {
|
|
23923
|
-
if (arr[i]?.id === id) {
|
|
23924
|
-
erase(arr, arr[i]);
|
|
23925
|
-
}
|
|
23926
|
-
}
|
|
23927
|
-
});
|
|
23928
|
-
}
|
|
23929
|
-
}
|
|
23930
|
-
/**
|
|
23931
|
-
* Remove a plot line by its id.
|
|
23932
|
-
*
|
|
23933
|
-
* @sample highcharts/xaxis/plotlines-id/
|
|
23934
|
-
* Remove plot line by id
|
|
23935
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23936
|
-
* Toggle the plot line from a button
|
|
23937
|
-
*
|
|
23938
|
-
* @function Highcharts.Axis#removePlotLine
|
|
23939
|
-
*
|
|
23940
|
-
* @param {string} id
|
|
23941
|
-
* The plot line's `id` as given in the original configuration
|
|
23942
|
-
* object or in the `addPlotLine` option.
|
|
23943
|
-
*/
|
|
23944
|
-
function removePlotLine(id) {
|
|
23945
|
-
this.removePlotBandOrLine(id);
|
|
23899
|
+
[...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
|
|
23946
23900
|
}
|
|
23947
23901
|
})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
|
|
23948
23902
|
/* *
|
|
@@ -24006,9 +23960,11 @@ class PlotLineOrBand {
|
|
|
24006
23960
|
this.labelCollectors.push(() => {
|
|
24007
23961
|
const labels = [];
|
|
24008
23962
|
for (const axis of this.axes) {
|
|
24009
|
-
for (const
|
|
24010
|
-
|
|
24011
|
-
|
|
23963
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23964
|
+
for (const { label, options } of axis[coll]) {
|
|
23965
|
+
if (label && !options?.label?.allowOverlap) {
|
|
23966
|
+
labels.push(label);
|
|
23967
|
+
}
|
|
24012
23968
|
}
|
|
24013
23969
|
}
|
|
24014
23970
|
}
|
|
@@ -24022,7 +23978,7 @@ class PlotLineOrBand {
|
|
|
24022
23978
|
* Constructor
|
|
24023
23979
|
*
|
|
24024
23980
|
* */
|
|
24025
|
-
constructor(axis, options) {
|
|
23981
|
+
constructor(axis, options, coll) {
|
|
24026
23982
|
/**
|
|
24027
23983
|
* Related axis.
|
|
24028
23984
|
*
|
|
@@ -24038,6 +23994,7 @@ class PlotLineOrBand {
|
|
|
24038
23994
|
*/
|
|
24039
23995
|
this.options = options;
|
|
24040
23996
|
this.id = options.id;
|
|
23997
|
+
this.coll = coll;
|
|
24041
23998
|
}
|
|
24042
23999
|
/* *
|
|
24043
24000
|
*
|
|
@@ -24053,43 +24010,28 @@ class PlotLineOrBand {
|
|
|
24053
24010
|
*/
|
|
24054
24011
|
render() {
|
|
24055
24012
|
fireEvent(this, 'render');
|
|
24056
|
-
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart,
|
|
24013
|
+
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
|
|
24057
24014
|
// These properties only exist on either band or line
|
|
24058
24015
|
to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
|
|
24059
|
-
let optionsLabel = options.label, { label, svgElem } = this,
|
|
24060
|
-
const isBand =
|
|
24061
|
-
'class':
|
|
24062
|
-
|
|
24063
|
-
|
|
24064
|
-
|
|
24065
|
-
// Set the
|
|
24066
|
-
if (!
|
|
24067
|
-
|
|
24068
|
-
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24069
|
-
attribs['stroke-width'] =
|
|
24070
|
-
options.width ?? 1;
|
|
24071
|
-
if (options.dashStyle) {
|
|
24072
|
-
attribs.dashstyle = options.dashStyle;
|
|
24073
|
-
}
|
|
24074
|
-
}
|
|
24075
|
-
else if (isBand) { // Plot band
|
|
24076
|
-
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24077
|
-
if (borderWidth) {
|
|
24078
|
-
attribs.stroke = options.borderColor;
|
|
24079
|
-
attribs['stroke-width'] = borderWidth;
|
|
24080
|
-
}
|
|
24081
|
-
}
|
|
24016
|
+
let optionsLabel = options.label, { label, svgElem } = this, group;
|
|
24017
|
+
const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
|
|
24018
|
+
'class': `highcharts-plot-${shortKey} ${options.className || ''}`
|
|
24019
|
+
}, strokeWidth = isBand ?
|
|
24020
|
+
(borderWidth || 0) :
|
|
24021
|
+
(options.width ?? 1);
|
|
24022
|
+
// Set the stroke width before the path is calculated
|
|
24023
|
+
if (!styledMode) {
|
|
24024
|
+
attribs['stroke-width'] = strokeWidth;
|
|
24082
24025
|
}
|
|
24083
24026
|
// Grouping and zIndex
|
|
24084
|
-
groupAttribs.zIndex = zIndex;
|
|
24085
|
-
groupName += '-' + zIndex;
|
|
24086
24027
|
group = axis.plotLinesAndBandsGroups[groupName];
|
|
24087
24028
|
if (!group) {
|
|
24088
24029
|
axis.plotLinesAndBandsGroups[groupName] = group =
|
|
24089
24030
|
renderer.g('plot-' + groupName)
|
|
24090
24031
|
.clip(chart.plotClipOuter)
|
|
24091
|
-
.attr(
|
|
24032
|
+
.attr({ zIndex }).add();
|
|
24092
24033
|
}
|
|
24034
|
+
group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
|
|
24093
24035
|
// Create the path
|
|
24094
24036
|
if (!svgElem) {
|
|
24095
24037
|
/**
|
|
@@ -24100,40 +24042,58 @@ class PlotLineOrBand {
|
|
|
24100
24042
|
*/
|
|
24101
24043
|
this.svgElem = svgElem = renderer
|
|
24102
24044
|
.path()
|
|
24103
|
-
.attr(attribs)
|
|
24104
|
-
|
|
24045
|
+
.attr(attribs);
|
|
24046
|
+
}
|
|
24047
|
+
// Add it to the correct index while allowing dynamic z-index update
|
|
24048
|
+
if (svgElem.parentGroup !== group) {
|
|
24049
|
+
svgElem.add(group);
|
|
24105
24050
|
}
|
|
24106
24051
|
// Set the path or return
|
|
24107
|
-
|
|
24052
|
+
let path;
|
|
24053
|
+
if (!isBand && defined(value)) { // Plot line
|
|
24108
24054
|
path = axis.getPlotLinePath({
|
|
24109
24055
|
value: logarithmic?.log2lin(value) ?? value,
|
|
24110
24056
|
lineWidth: svgElem.strokeWidth(),
|
|
24111
24057
|
acrossPanes: options.acrossPanes
|
|
24112
24058
|
});
|
|
24113
24059
|
}
|
|
24114
|
-
else if (defined(from) && defined(to)) { // Plot band
|
|
24060
|
+
else if (isBand && defined(from) && defined(to)) { // Plot band
|
|
24115
24061
|
path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
|
|
24116
24062
|
}
|
|
24117
|
-
|
|
24118
|
-
|
|
24063
|
+
if (path) {
|
|
24064
|
+
attribs.d = path;
|
|
24065
|
+
}
|
|
24066
|
+
// Apply the styling
|
|
24067
|
+
if (!styledMode) {
|
|
24068
|
+
if (isBand) { // Plot band
|
|
24069
|
+
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24070
|
+
if (borderWidth) {
|
|
24071
|
+
attribs.stroke = options.borderColor;
|
|
24072
|
+
}
|
|
24073
|
+
}
|
|
24074
|
+
else {
|
|
24075
|
+
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24076
|
+
if (options.dashStyle) {
|
|
24077
|
+
attribs.dashstyle = options.dashStyle;
|
|
24078
|
+
}
|
|
24079
|
+
}
|
|
24119
24080
|
}
|
|
24120
24081
|
// Common for lines and bands. Add events only if they were not added
|
|
24121
24082
|
// before.
|
|
24122
|
-
if (
|
|
24083
|
+
if (isNew && events) {
|
|
24123
24084
|
objectEach(events, (_event, eventType) => {
|
|
24124
24085
|
svgElem?.on(eventType, (e) => {
|
|
24125
24086
|
events[eventType].apply(this, [e, this]);
|
|
24126
24087
|
});
|
|
24127
24088
|
});
|
|
24128
|
-
this.eventsAdded = true;
|
|
24129
24089
|
}
|
|
24130
24090
|
if ((isNew || !svgElem.d) && path?.length) {
|
|
24131
|
-
svgElem.attr(
|
|
24091
|
+
svgElem.attr(attribs);
|
|
24132
24092
|
}
|
|
24133
24093
|
else if (svgElem) {
|
|
24134
24094
|
if (path) {
|
|
24135
24095
|
svgElem.show();
|
|
24136
|
-
svgElem.animate(
|
|
24096
|
+
svgElem.animate(attribs);
|
|
24137
24097
|
}
|
|
24138
24098
|
else if (svgElem.d) {
|
|
24139
24099
|
svgElem.hide();
|
|
@@ -24173,7 +24133,7 @@ class PlotLineOrBand {
|
|
|
24173
24133
|
* @function Highcharts.PlotLineOrBand#renderLabel
|
|
24174
24134
|
*/
|
|
24175
24135
|
renderLabel(optionsLabel, path, isBand, zIndex) {
|
|
24176
|
-
const plotLine = this, axis = plotLine.axis,
|
|
24136
|
+
const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
|
|
24177
24137
|
let label = plotLine.label;
|
|
24178
24138
|
// Add the SVG element
|
|
24179
24139
|
if (!label) {
|
|
@@ -24184,25 +24144,31 @@ class PlotLineOrBand {
|
|
|
24184
24144
|
* @type {Highcharts.SVGElement}
|
|
24185
24145
|
*/
|
|
24186
24146
|
plotLine.label = label = renderer
|
|
24187
|
-
.text(
|
|
24188
|
-
.attr({
|
|
24189
|
-
|
|
24190
|
-
|
|
24191
|
-
|
|
24192
|
-
|
|
24193
|
-
|
|
24194
|
-
|
|
24195
|
-
|
|
24196
|
-
|
|
24197
|
-
|
|
24198
|
-
|
|
24199
|
-
|
|
24200
|
-
|
|
24201
|
-
|
|
24202
|
-
|
|
24203
|
-
|
|
24204
|
-
|
|
24205
|
-
|
|
24147
|
+
.text('', 0, 0, optionsLabel.useHTML)
|
|
24148
|
+
.attr({ zIndex });
|
|
24149
|
+
}
|
|
24150
|
+
label
|
|
24151
|
+
.attr({
|
|
24152
|
+
text: this.getLabelText(optionsLabel),
|
|
24153
|
+
align: optionsLabel.textAlign || optionsLabel.align,
|
|
24154
|
+
'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
|
|
24155
|
+
'-label ' + (optionsLabel.className || '')
|
|
24156
|
+
})[label.placed ? 'animate' : 'attr']({
|
|
24157
|
+
opacity: 1,
|
|
24158
|
+
rotation: optionsLabel.rotation
|
|
24159
|
+
});
|
|
24160
|
+
if (!chart.styledMode) {
|
|
24161
|
+
label.css(merge({
|
|
24162
|
+
// To allow theming, and in lack of a general place to set
|
|
24163
|
+
// default options for plot lines and bands, default to the
|
|
24164
|
+
// title color. If we expose the palette, we should use that
|
|
24165
|
+
// instead.
|
|
24166
|
+
color: chart.options.title?.style?.color,
|
|
24167
|
+
fontSize: '0.8em',
|
|
24168
|
+
textOverflow: (isBand && !inside) ? '' : 'ellipsis'
|
|
24169
|
+
}, optionsLabel.style));
|
|
24170
|
+
}
|
|
24171
|
+
if (!label.added) {
|
|
24206
24172
|
label.add();
|
|
24207
24173
|
}
|
|
24208
24174
|
// Get the bounding box and align the label
|
|
@@ -24226,12 +24192,31 @@ class PlotLineOrBand {
|
|
|
24226
24192
|
axis.height - (label.alignAttr.y -
|
|
24227
24193
|
axis.top) : (optionsLabel.clip ?
|
|
24228
24194
|
(axis.width + axis.left) :
|
|
24229
|
-
|
|
24195
|
+
chart.chartWidth) - label.alignAttr.x) :
|
|
24230
24196
|
bBoxWidth)) + 'px'
|
|
24231
24197
|
});
|
|
24232
24198
|
}
|
|
24199
|
+
else if (label.textWidth) {
|
|
24200
|
+
label.css({ width: 'auto' });
|
|
24201
|
+
}
|
|
24233
24202
|
label.show(true);
|
|
24234
24203
|
}
|
|
24204
|
+
/**
|
|
24205
|
+
* Update the plot line or band with new options.
|
|
24206
|
+
*
|
|
24207
|
+
* @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
|
|
24208
|
+
* The new options to apply
|
|
24209
|
+
* @param {boolean} [redraw=true]
|
|
24210
|
+
* Whether to redraw the plot guide immediately
|
|
24211
|
+
*
|
|
24212
|
+
* @function Highcharts.PlotLineOrBand#update
|
|
24213
|
+
*/
|
|
24214
|
+
update(options, redraw = true) {
|
|
24215
|
+
merge(true, this.options, options);
|
|
24216
|
+
if (redraw) {
|
|
24217
|
+
this.render();
|
|
24218
|
+
}
|
|
24219
|
+
}
|
|
24235
24220
|
/**
|
|
24236
24221
|
* Get label's text content.
|
|
24237
24222
|
* @internal
|
|
@@ -24243,15 +24228,22 @@ class PlotLineOrBand {
|
|
|
24243
24228
|
optionsLabel.text;
|
|
24244
24229
|
}
|
|
24245
24230
|
/**
|
|
24246
|
-
*
|
|
24247
|
-
*
|
|
24248
|
-
* @function Highcharts.PlotLineOrBand#destroy
|
|
24231
|
+
* Destroy the item's elements
|
|
24249
24232
|
*/
|
|
24250
24233
|
destroy() {
|
|
24234
|
+
destroyObjectProperties(this, this.axis);
|
|
24235
|
+
}
|
|
24236
|
+
/**
|
|
24237
|
+
* Remove the plot line or band and destroy its elements.
|
|
24238
|
+
*
|
|
24239
|
+
* @function Highcharts.PlotLineOrBand#remove
|
|
24240
|
+
*/
|
|
24241
|
+
remove() {
|
|
24251
24242
|
// Remove it from the lookup
|
|
24252
|
-
erase(this.axis.
|
|
24253
|
-
|
|
24254
|
-
|
|
24243
|
+
erase(this.axis[this.coll], this);
|
|
24244
|
+
// Remove from options
|
|
24245
|
+
erase(this.axis.options[this.coll] || [], this.options);
|
|
24246
|
+
this.destroy();
|
|
24255
24247
|
}
|
|
24256
24248
|
}
|
|
24257
24249
|
/* *
|
|
@@ -24298,10 +24290,24 @@ class PlotLineOrBand {
|
|
|
24298
24290
|
* In styled mode, the plot bands are styled by the `.highcharts-plot-band`
|
|
24299
24291
|
* class in addition to the `className` option.
|
|
24300
24292
|
*
|
|
24293
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
|
|
24294
|
+
* by index or id. The following merging rules apply:
|
|
24295
|
+
* - If `plotBands` are not defined in the new options, all existing plot bands
|
|
24296
|
+
* are kept.
|
|
24297
|
+
* - If `plotBands` are defined without ids, the existing plot bands are updated
|
|
24298
|
+
* by index. If the new array has fewer plot bands, the remaining existing
|
|
24299
|
+
* plot bands are removed. If the new array has more plot bands, the extra
|
|
24300
|
+
* ones are added. An empty array removes all existing plot bands.
|
|
24301
|
+
* - If `plotBands` are defined with ids, the existing plot bands are matched
|
|
24302
|
+
* by id, and remaining unmatched existing plot bands are removed.
|
|
24303
|
+
*
|
|
24301
24304
|
* @productdesc {highcharts}
|
|
24302
24305
|
* In a gauge, a plot band on the Y axis (value axis) will stretch along the
|
|
24303
24306
|
* perimeter of the gauge.
|
|
24304
24307
|
*
|
|
24308
|
+
* @sample {highcharts} highcharts/xaxis/plotbands-color/
|
|
24309
|
+
* Basic plot band
|
|
24310
|
+
*
|
|
24305
24311
|
* @type {Array<*>}
|
|
24306
24312
|
* @product highcharts highstock gantt
|
|
24307
24313
|
* @apioption xAxis.plotBands
|
|
@@ -24593,12 +24599,23 @@ class PlotLineOrBand {
|
|
|
24593
24599
|
* In styled mode, the plot lines are styled by the
|
|
24594
24600
|
* `.highcharts-plot-line` class in addition to the `className` option.
|
|
24595
24601
|
*
|
|
24602
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
|
|
24603
|
+
* by index or id. The following merging rules apply:
|
|
24604
|
+
* - If `plotLines` are not defined in the new options, all existing plot lines
|
|
24605
|
+
* are kept.
|
|
24606
|
+
* - If `plotLines` are defined without ids, the existing plot lines are updated
|
|
24607
|
+
* by index. If the new array has fewer plot lines, the remaining existing
|
|
24608
|
+
* plot lines are removed. If the new array has more plot lines, the extra
|
|
24609
|
+
* ones are added. An empty array removes all existing plot lines.
|
|
24610
|
+
* - If `plotLines` are defined with ids, the existing plot lines are matched
|
|
24611
|
+
* by id, and remaining unmatched existing plot lines are removed.
|
|
24612
|
+
*
|
|
24596
24613
|
* @type {Array<*>}
|
|
24597
24614
|
* @product highcharts highstock gantt
|
|
24598
|
-
* @sample
|
|
24599
|
-
*
|
|
24600
|
-
* @sample
|
|
24601
|
-
*
|
|
24615
|
+
* @sample {highcharts} highcharts/xaxis/plotlines-color/
|
|
24616
|
+
* Basic plot line
|
|
24617
|
+
* @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
|
|
24618
|
+
* Solid gauge plot line
|
|
24602
24619
|
* @apioption xAxis.plotLines
|
|
24603
24620
|
*/
|
|
24604
24621
|
/**
|
|
@@ -25107,14 +25124,11 @@ class Tooltip {
|
|
|
25107
25124
|
*/
|
|
25108
25125
|
destroy() {
|
|
25109
25126
|
// Destroy and clear local variables
|
|
25110
|
-
|
|
25111
|
-
|
|
25112
|
-
}
|
|
25127
|
+
this.tracker = this.tracker?.destroy();
|
|
25128
|
+
this.label = this.label?.destroy();
|
|
25113
25129
|
if (this.split) {
|
|
25114
25130
|
this.cleanSplit(true);
|
|
25115
|
-
|
|
25116
|
-
this.tt = this.tt.destroy();
|
|
25117
|
-
}
|
|
25131
|
+
this.tt = this.tt?.destroy();
|
|
25118
25132
|
}
|
|
25119
25133
|
if (this.renderer) {
|
|
25120
25134
|
this.renderer = this.renderer.destroy();
|
|
@@ -25644,6 +25658,8 @@ class Tooltip {
|
|
|
25644
25658
|
!this.isHidden &&
|
|
25645
25659
|
!options.fixed &&
|
|
25646
25660
|
options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
|
|
25661
|
+
this.anchorX = anchorX;
|
|
25662
|
+
this.anchorY = anchorY;
|
|
25647
25663
|
if (!skipAnchor) {
|
|
25648
25664
|
attr.anchorX = anchorX;
|
|
25649
25665
|
attr.anchorY = anchorY;
|
|
@@ -26090,45 +26106,37 @@ class Tooltip {
|
|
|
26090
26106
|
*/
|
|
26091
26107
|
drawTracker() {
|
|
26092
26108
|
const tooltip = this;
|
|
26093
|
-
if (!
|
|
26094
|
-
|
|
26095
|
-
tooltip.tracker = tooltip.tracker.destroy();
|
|
26096
|
-
}
|
|
26109
|
+
if (!tooltip.shouldStickOnContact()) {
|
|
26110
|
+
tooltip.tracker = tooltip.tracker?.destroy();
|
|
26097
26111
|
return;
|
|
26098
26112
|
}
|
|
26099
|
-
const chart = tooltip.chart
|
|
26100
|
-
|
|
26101
|
-
|
|
26102
|
-
if (!
|
|
26113
|
+
const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
|
|
26114
|
+
// Split tooltips render into a plain group, with no box to trace
|
|
26115
|
+
box = label?.box;
|
|
26116
|
+
if (!box || !points) {
|
|
26103
26117
|
return;
|
|
26104
26118
|
}
|
|
26105
|
-
const
|
|
26106
|
-
|
|
26107
|
-
|
|
26108
|
-
|
|
26109
|
-
|
|
26110
|
-
|
|
26111
|
-
|
|
26112
|
-
|
|
26113
|
-
|
|
26114
|
-
|
|
26115
|
-
|
|
26116
|
-
//
|
|
26117
|
-
|
|
26118
|
-
|
|
26119
|
-
|
|
26120
|
-
|
|
26121
|
-
|
|
26122
|
-
|
|
26123
|
-
|
|
26124
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
|
|
26125
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height));
|
|
26126
|
-
if (tooltip.tracker) {
|
|
26127
|
-
tooltip.tracker.attr(box);
|
|
26128
|
-
}
|
|
26129
|
-
else {
|
|
26119
|
+
const { height, r, width, x, y } = box;
|
|
26120
|
+
let { anchorX, anchorY } = box;
|
|
26121
|
+
// Shared tooltips clear the label anchor (#22295), so fall back to the
|
|
26122
|
+
// anchor the position was calculated from
|
|
26123
|
+
if (!isNumber(anchorX)) {
|
|
26124
|
+
anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
|
|
26125
|
+
anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
|
|
26126
|
+
}
|
|
26127
|
+
// Match the tooltip shape, but stretch the connector all the way to the
|
|
26128
|
+
// point, so that the pointer can travel between the two without losing
|
|
26129
|
+
// contact. Only the side facing the anchor overshoots the box, so the
|
|
26130
|
+
// largest of the four distances is the one to cover. (#24255)
|
|
26131
|
+
const d = label.renderer.symbols.callout(x, y, width, height, {
|
|
26132
|
+
anchorX,
|
|
26133
|
+
anchorY,
|
|
26134
|
+
arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
|
|
26135
|
+
r
|
|
26136
|
+
});
|
|
26137
|
+
if (!tooltip.tracker) {
|
|
26130
26138
|
tooltip.tracker = label.renderer
|
|
26131
|
-
.
|
|
26139
|
+
.path()
|
|
26132
26140
|
.addClass('highcharts-tracker')
|
|
26133
26141
|
.add(label);
|
|
26134
26142
|
// For a rapid move going outside of the elements keeping the
|
|
@@ -26136,10 +26144,14 @@ class Tooltip {
|
|
|
26136
26144
|
addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
|
|
26137
26145
|
if (!chart.styledMode) {
|
|
26138
26146
|
tooltip.tracker.attr({
|
|
26139
|
-
fill: 'rgba(0,0,0,0)'
|
|
26147
|
+
fill: 'rgba(0,0,0,0)',
|
|
26148
|
+
stroke: 'rgba(0,0,0,0)',
|
|
26149
|
+
'stroke-linejoin': 'round',
|
|
26150
|
+
'stroke-width': 10
|
|
26140
26151
|
});
|
|
26141
26152
|
}
|
|
26142
26153
|
}
|
|
26154
|
+
tooltip.tracker.attr({ d });
|
|
26143
26155
|
}
|
|
26144
26156
|
/** @internal */
|
|
26145
26157
|
styledModeFormat(formatString) {
|
|
@@ -27086,7 +27098,8 @@ class Point {
|
|
|
27086
27098
|
/**
|
|
27087
27099
|
* Set a value in an object, on the property defined by key. The key
|
|
27088
27100
|
* supports nested properties using dot notation. The function modifies the
|
|
27089
|
-
* input object and does not make a copy.
|
|
27101
|
+
* input object and does not make a copy. Paths containing `__proto__` or
|
|
27102
|
+
* `constructor` are ignored.
|
|
27090
27103
|
*
|
|
27091
27104
|
* @function Highcharts.Point#setNestedProperty<T>
|
|
27092
27105
|
*
|
|
@@ -27104,11 +27117,18 @@ class Point {
|
|
|
27104
27117
|
*/
|
|
27105
27118
|
setNestedProperty(object, value, key) {
|
|
27106
27119
|
const nestedKeys = key.split('.');
|
|
27120
|
+
// Reject nested keys that would allow prototype pollution
|
|
27121
|
+
if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
|
|
27122
|
+
return object;
|
|
27123
|
+
}
|
|
27107
27124
|
nestedKeys.reduce(function (result, key, i, arr) {
|
|
27108
27125
|
const isLastKey = arr.length - 1 === i;
|
|
27109
27126
|
result[key] = (isLastKey ?
|
|
27110
27127
|
value :
|
|
27111
|
-
|
|
27128
|
+
// Inherited objects are shared with everything else on
|
|
27129
|
+
// that prototype, so start a fresh one instead
|
|
27130
|
+
isObject(result[key], true) &&
|
|
27131
|
+
Object.hasOwnProperty.call(result, key) ?
|
|
27112
27132
|
result[key] :
|
|
27113
27133
|
{});
|
|
27114
27134
|
return result[key];
|
|
@@ -27190,15 +27210,10 @@ class Point {
|
|
|
27190
27210
|
*/
|
|
27191
27211
|
function update() {
|
|
27192
27212
|
point.applyOptions(options);
|
|
27193
|
-
// Update visuals, #4146
|
|
27194
|
-
//
|
|
27195
|
-
|
|
27196
|
-
const shouldDestroyGraphic = point.y === null ?
|
|
27197
|
-
!hasMockGraphic :
|
|
27198
|
-
hasMockGraphic;
|
|
27199
|
-
if (graphic && shouldDestroyGraphic) {
|
|
27213
|
+
// Update visuals, #4146. The a11y mock graphic is exempt, it is
|
|
27214
|
+
// maintained by the accessibility module, #12718.
|
|
27215
|
+
if (graphic && point.y === null && !point.hasMockGraphic) {
|
|
27200
27216
|
point.graphic = graphic.destroy();
|
|
27201
|
-
delete point.hasMockGraphic;
|
|
27202
27217
|
}
|
|
27203
27218
|
if (isObject(options, true)) {
|
|
27204
27219
|
// Destroy so we can get new elements
|
|
@@ -27213,7 +27228,7 @@ class Point {
|
|
|
27213
27228
|
point.dataLabel = point.dataLabel.destroy(); // #2468
|
|
27214
27229
|
}
|
|
27215
27230
|
}
|
|
27216
|
-
const pointOptions = point.optionsToObject(options);
|
|
27231
|
+
const index = point.index, pointOptions = point.optionsToObject(options);
|
|
27217
27232
|
if (!series.hasProcessedDataTable) {
|
|
27218
27233
|
// Record changes in the data table (#24451)
|
|
27219
27234
|
series.dataTable.setRow(pointOptions, index);
|
|
@@ -29217,19 +29232,18 @@ class Pointer {
|
|
|
29217
29232
|
if (hasMoved ?? true) {
|
|
29218
29233
|
this.pinch(e);
|
|
29219
29234
|
}
|
|
29235
|
+
// If inside, capture touch-drag and display tooltip. If not
|
|
29236
|
+
// inside, allow dragging the finger to scroll the page
|
|
29237
|
+
if (this.hasPointerCapture && // #25095
|
|
29238
|
+
e.type === 'touchmove' &&
|
|
29239
|
+
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29240
|
+
e.preventDefault();
|
|
29241
|
+
}
|
|
29220
29242
|
}
|
|
29221
29243
|
else if (start) {
|
|
29222
29244
|
// Hide the tooltip on touching outside the plot area (#1203)
|
|
29223
29245
|
this.reset();
|
|
29224
29246
|
}
|
|
29225
|
-
// If inside, capture touch-drag and display tooltip. If not inside,
|
|
29226
|
-
// allow dragging the finger to scroll the page
|
|
29227
|
-
if ((chart.tooltip?.options.followTouchMove ?? true) &&
|
|
29228
|
-
isInside &&
|
|
29229
|
-
e.type === 'touchmove' &&
|
|
29230
|
-
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29231
|
-
e.preventDefault();
|
|
29232
|
-
}
|
|
29233
29247
|
}
|
|
29234
29248
|
else if (e.touches.length === 2) {
|
|
29235
29249
|
this.pinch(e);
|
|
@@ -29629,13 +29643,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
|
|
|
29629
29643
|
class DataTableCore {
|
|
29630
29644
|
constructor(options = {}) {
|
|
29631
29645
|
this.isDataTable = true;
|
|
29632
|
-
|
|
29646
|
+
// Reject IDs that would pollute the prototype of ID-keyed maps.
|
|
29647
|
+
const id = this.isPollutingKey(options.id) ? void 0 : options.id;
|
|
29648
|
+
this.autoId = !id;
|
|
29633
29649
|
this.columns = {};
|
|
29634
|
-
this.id = (
|
|
29650
|
+
this.id = (id || uniqueKey());
|
|
29635
29651
|
this.rowCount = 0;
|
|
29636
29652
|
this.versionTag = uniqueKey();
|
|
29637
29653
|
let rowCount = 0;
|
|
29638
29654
|
objectEach(options.columns || {}, (column, columnId) => {
|
|
29655
|
+
if (columnId === '__proto__' ||
|
|
29656
|
+
columnId === 'constructor') {
|
|
29657
|
+
return;
|
|
29658
|
+
}
|
|
29639
29659
|
this.columns[columnId] = column.slice();
|
|
29640
29660
|
rowCount = Math.max(rowCount, column.length);
|
|
29641
29661
|
});
|
|
@@ -29646,6 +29666,17 @@ class DataTableCore {
|
|
|
29646
29666
|
* Functions
|
|
29647
29667
|
*
|
|
29648
29668
|
* */
|
|
29669
|
+
/**
|
|
29670
|
+
* Checks whether a key would pollute the prototype if used to index a
|
|
29671
|
+
* plain object (e.g. as a column ID or table ID).
|
|
29672
|
+
*
|
|
29673
|
+
* @private
|
|
29674
|
+
* @param {string|undefined} key The key to check.
|
|
29675
|
+
* @return {boolean} True if the key is unsafe to use.
|
|
29676
|
+
*/
|
|
29677
|
+
isPollutingKey(key) {
|
|
29678
|
+
return key === '__proto__' || key === 'constructor';
|
|
29679
|
+
}
|
|
29649
29680
|
/**
|
|
29650
29681
|
* Applies a row count to the table by setting the `rowCount` property and
|
|
29651
29682
|
* adjusting the length of all columns.
|
|
@@ -29804,6 +29835,10 @@ class DataTableCore {
|
|
|
29804
29835
|
setColumns(columns, rowIndex, eventDetail) {
|
|
29805
29836
|
let rowCount = this.rowCount;
|
|
29806
29837
|
objectEach(columns, (column, columnId) => {
|
|
29838
|
+
if (columnId === '__proto__' ||
|
|
29839
|
+
columnId === 'constructor') {
|
|
29840
|
+
return;
|
|
29841
|
+
}
|
|
29807
29842
|
this.columns[columnId] = column.slice();
|
|
29808
29843
|
rowCount = column.length;
|
|
29809
29844
|
});
|
|
@@ -29842,11 +29877,14 @@ class DataTableCore {
|
|
|
29842
29877
|
* @emits #afterSetRows
|
|
29843
29878
|
*/
|
|
29844
29879
|
setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
|
|
29845
|
-
var _a;
|
|
29846
29880
|
const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
|
|
29847
29881
|
if (eventDetail?.addColumns !== false) {
|
|
29848
29882
|
for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
|
|
29849
|
-
|
|
29883
|
+
const rowKey = rowKeys[i];
|
|
29884
|
+
if (!this.isPollutingKey(rowKey) &&
|
|
29885
|
+
!Object.hasOwnProperty.call(columns, rowKey)) {
|
|
29886
|
+
columns[rowKey] = new Array(this.rowCount);
|
|
29887
|
+
}
|
|
29850
29888
|
}
|
|
29851
29889
|
}
|
|
29852
29890
|
objectEach(columns, (column, columnId) => {
|
|
@@ -33826,7 +33864,19 @@ class Series {
|
|
|
33826
33864
|
.optionsToObject
|
|
33827
33865
|
.call({ series: this }, data[i]);
|
|
33828
33866
|
for (const key of Object.keys(ptOptions)) {
|
|
33829
|
-
|
|
33867
|
+
// Assigning these would write through to
|
|
33868
|
+
// `Object.prototype` or the `Object` constructor instead
|
|
33869
|
+
// of creating a column, and thereby affect unrelated
|
|
33870
|
+
// objects on the page
|
|
33871
|
+
if (key === '__proto__' || key === 'constructor') {
|
|
33872
|
+
continue;
|
|
33873
|
+
}
|
|
33874
|
+
// Inherited keys like `toString` are truthy without being
|
|
33875
|
+
// columns of ours, so test for an own property rather
|
|
33876
|
+
// than for a value (#25321)
|
|
33877
|
+
if (!Object.hasOwnProperty.call(columns, key)) {
|
|
33878
|
+
columns[key] = new Array(dataLength);
|
|
33879
|
+
}
|
|
33830
33880
|
columns[key][i] = ptOptions[key];
|
|
33831
33881
|
}
|
|
33832
33882
|
}
|
|
@@ -34479,7 +34529,7 @@ class Series {
|
|
|
34479
34529
|
// Apply plotBorderRadius clipping
|
|
34480
34530
|
plotClipGroup?.clip(
|
|
34481
34531
|
// Navigator y-axis is not clippable
|
|
34482
|
-
clip && this.yAxis
|
|
34532
|
+
clip && this.yAxis?.clippable ?
|
|
34483
34533
|
chart.plotClipInner :
|
|
34484
34534
|
void 0);
|
|
34485
34535
|
}
|
|
@@ -34782,28 +34832,27 @@ class Series {
|
|
|
34782
34832
|
* @emits Highcharts.Series#event:destroy
|
|
34783
34833
|
*/
|
|
34784
34834
|
destroy(keepEventsForUpdate) {
|
|
34785
|
-
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent)
|
|
34786
|
-
let destroy,
|
|
34835
|
+
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
|
|
34836
|
+
let destroy, axis;
|
|
34787
34837
|
// Add event hook
|
|
34788
34838
|
fireEvent(series, 'destroy', { keepEventsForUpdate });
|
|
34789
34839
|
// Remove events
|
|
34790
34840
|
this.removeEvents(keepEventsForUpdate);
|
|
34791
34841
|
// Erase from axes
|
|
34792
|
-
(series.axisTypes || [])
|
|
34793
|
-
axis = series[
|
|
34842
|
+
for (const coll of (series.axisTypes || [])) {
|
|
34843
|
+
axis = series[coll];
|
|
34794
34844
|
if (axis?.series) {
|
|
34795
34845
|
erase(axis.series, series);
|
|
34796
34846
|
axis.isDirty = axis.forceRedraw = true;
|
|
34797
34847
|
}
|
|
34798
|
-
}
|
|
34848
|
+
}
|
|
34799
34849
|
// Remove legend items
|
|
34800
34850
|
if (series.legendItem) {
|
|
34801
34851
|
series.chart.legend.destroyItem(series);
|
|
34802
34852
|
}
|
|
34803
34853
|
// Destroy all points with their elements
|
|
34804
|
-
|
|
34805
|
-
|
|
34806
|
-
data[i]?.destroy?.(true);
|
|
34854
|
+
for (const point of series.points || []) {
|
|
34855
|
+
point?.destroy?.(true);
|
|
34807
34856
|
}
|
|
34808
34857
|
for (const zone of series.zones || []) {
|
|
34809
34858
|
// Destroy SVGElement's but preserve primitive props (#20426)
|
|
@@ -38942,7 +38991,10 @@ class Chart {
|
|
|
38942
38991
|
elem = this.renderer.text(options.text, 0, 0, options.useHTML)
|
|
38943
38992
|
.attr({
|
|
38944
38993
|
align: options.align,
|
|
38945
|
-
'class':
|
|
38994
|
+
'class': [
|
|
38995
|
+
options.className,
|
|
38996
|
+
'highcharts-' + key
|
|
38997
|
+
].filter(isString).join(' '),
|
|
38946
38998
|
zIndex: options.zIndex || 4
|
|
38947
38999
|
})
|
|
38948
39000
|
.css({
|
|
@@ -39947,7 +39999,7 @@ class Chart {
|
|
|
39947
39999
|
if (label &&
|
|
39948
40000
|
(labels.reserveSpace ?? !isNumber(options.crossing))) {
|
|
39949
40001
|
expectedSpace = label.getBBox().height +
|
|
39950
|
-
labels.distance +
|
|
40002
|
+
(labels.distance ?? 15) +
|
|
39951
40003
|
Math.max(isNumber(offset) ? offset : 0, 0);
|
|
39952
40004
|
}
|
|
39953
40005
|
if (expectedSpace) {
|
|
@@ -40035,6 +40087,12 @@ class Chart {
|
|
|
40035
40087
|
addCredits(credits) {
|
|
40036
40088
|
const chart = this, creds = merge(true, this.options.credits, credits);
|
|
40037
40089
|
if (creds.enabled && !this.credits) {
|
|
40090
|
+
// Run the user-supplied URL through the allow list, so that
|
|
40091
|
+
// references like `javascript:` can't be executed from the
|
|
40092
|
+
// credits label
|
|
40093
|
+
const href = creds.href ?
|
|
40094
|
+
HTML_AST.filterUserAttributes({ href: creds.href }).href :
|
|
40095
|
+
void 0;
|
|
40038
40096
|
/**
|
|
40039
40097
|
* The chart's credits label. The label has an `update` method that
|
|
40040
40098
|
* allows setting new options as per the
|
|
@@ -40048,8 +40106,8 @@ class Chart {
|
|
|
40048
40106
|
.on('click', function (e) {
|
|
40049
40107
|
// Fire the event with browser redirect as default function
|
|
40050
40108
|
fireEvent(chart, 'creditsClick', e, () => {
|
|
40051
|
-
if (
|
|
40052
|
-
Chart_win.location.href =
|
|
40109
|
+
if (href) {
|
|
40110
|
+
Chart_win.location.href = href;
|
|
40053
40111
|
}
|
|
40054
40112
|
});
|
|
40055
40113
|
})
|
|
@@ -41666,14 +41724,11 @@ class StackItem {
|
|
|
41666
41724
|
*
|
|
41667
41725
|
* */
|
|
41668
41726
|
/** @internal */
|
|
41669
|
-
constructor(axis,
|
|
41670
|
-
const inverted = axis.chart.inverted, reversed = axis.reversed;
|
|
41727
|
+
constructor(axis, negativeValue, x, stackOption) {
|
|
41671
41728
|
this.axis = axis;
|
|
41672
41729
|
// The stack goes to the left either if the stack has negative value
|
|
41673
41730
|
// or when axis is reversed. XOR operator.
|
|
41674
|
-
|
|
41675
|
-
// Save the options to be able to style the label
|
|
41676
|
-
this.options = options = options || {};
|
|
41731
|
+
this.negativeValue = negativeValue;
|
|
41677
41732
|
// Save the x value to be able to position the label later
|
|
41678
41733
|
this.x = x;
|
|
41679
41734
|
// Initialize total value
|
|
@@ -41688,20 +41743,6 @@ class StackItem {
|
|
|
41688
41743
|
this.stack = stackOption;
|
|
41689
41744
|
this.leftCliff = 0;
|
|
41690
41745
|
this.rightCliff = 0;
|
|
41691
|
-
// The align options and text align varies on whether the stack is
|
|
41692
|
-
// negative and if the chart is inverted or not.
|
|
41693
|
-
// First test the user supplied value, then use the dynamic.
|
|
41694
|
-
this.alignOptions = {
|
|
41695
|
-
align: options.align ||
|
|
41696
|
-
(inverted ? (isNegative ? 'left' : 'right') : 'center'),
|
|
41697
|
-
verticalAlign: options.verticalAlign ||
|
|
41698
|
-
(inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
|
|
41699
|
-
y: options.y,
|
|
41700
|
-
x: options.x
|
|
41701
|
-
};
|
|
41702
|
-
this.textAlign =
|
|
41703
|
-
options.textAlign ||
|
|
41704
|
-
(inverted ? (!isNegative ? 'left' : 'right') : 'center');
|
|
41705
41746
|
}
|
|
41706
41747
|
/* *
|
|
41707
41748
|
*
|
|
@@ -41717,39 +41758,34 @@ class StackItem {
|
|
|
41717
41758
|
* @internal
|
|
41718
41759
|
*/
|
|
41719
41760
|
render(group) {
|
|
41720
|
-
const
|
|
41761
|
+
const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
|
|
41721
41762
|
// Format the text in the label.
|
|
41722
|
-
|
|
41763
|
+
text = (formatOption ?
|
|
41723
41764
|
StackItem_format(formatOption, this, chart) :
|
|
41724
|
-
options.formatter?.call(this, this)) || '';
|
|
41725
|
-
//
|
|
41726
|
-
|
|
41727
|
-
|
|
41728
|
-
|
|
41765
|
+
options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
|
|
41766
|
+
// Create new label
|
|
41767
|
+
this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
|
|
41768
|
+
const label = this.label, animatableAttribs = {
|
|
41769
|
+
r: options.borderRadius || 0,
|
|
41770
|
+
// Set default padding to 5 as it is in dataLabels #12308
|
|
41771
|
+
padding: (options.padding ?? 5)
|
|
41772
|
+
};
|
|
41773
|
+
if (!chart.styledMode) {
|
|
41774
|
+
animatableAttribs.fill = options.backgroundColor;
|
|
41775
|
+
animatableAttribs.stroke = options.borderColor;
|
|
41776
|
+
animatableAttribs['stroke-width'] = options.borderWidth;
|
|
41777
|
+
label.css(options.style || {});
|
|
41729
41778
|
}
|
|
41730
|
-
|
|
41731
|
-
|
|
41732
|
-
|
|
41733
|
-
|
|
41734
|
-
|
|
41735
|
-
|
|
41736
|
-
|
|
41737
|
-
padding: (options.padding ?? 5),
|
|
41738
|
-
visibility: 'hidden' // Hidden until setOffset is called
|
|
41739
|
-
};
|
|
41740
|
-
if (!chart.styledMode) {
|
|
41741
|
-
attr.fill = options.backgroundColor;
|
|
41742
|
-
attr.stroke = options.borderColor;
|
|
41743
|
-
attr['stroke-width'] = options.borderWidth;
|
|
41744
|
-
this.label.css(options.style || {});
|
|
41745
|
-
}
|
|
41746
|
-
this.label.attr(attr);
|
|
41747
|
-
if (!this.label.added) {
|
|
41748
|
-
this.label.add(group); // Add to the labels-group
|
|
41749
|
-
}
|
|
41779
|
+
label
|
|
41780
|
+
.attr({
|
|
41781
|
+
text,
|
|
41782
|
+
visibility: 'hidden' // Hidden until setOffset is called
|
|
41783
|
+
})[verb](animatableAttribs);
|
|
41784
|
+
if (!label.added) {
|
|
41785
|
+
label.add(group); // Add to the labels-group
|
|
41750
41786
|
}
|
|
41751
41787
|
// Rank it higher than data labels (#8742)
|
|
41752
|
-
|
|
41788
|
+
label.labelrank = chart.plotSizeY;
|
|
41753
41789
|
fireEvent(this, 'afterRender');
|
|
41754
41790
|
}
|
|
41755
41791
|
/**
|
|
@@ -41758,35 +41794,38 @@ class StackItem {
|
|
|
41758
41794
|
* @internal
|
|
41759
41795
|
*/
|
|
41760
41796
|
setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
|
|
41761
|
-
const {
|
|
41762
|
-
xOffset,
|
|
41763
|
-
width,
|
|
41797
|
+
const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
|
|
41764
41798
|
boxBottom,
|
|
41765
41799
|
boxTop,
|
|
41766
41800
|
defaultX,
|
|
41767
|
-
|
|
41768
|
-
|
|
41801
|
+
isNegative,
|
|
41802
|
+
width,
|
|
41803
|
+
xAxis,
|
|
41804
|
+
xOffset
|
|
41805
|
+
}), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
|
|
41806
|
+
align,
|
|
41807
|
+
verticalAlign,
|
|
41808
|
+
x,
|
|
41809
|
+
y
|
|
41810
|
+
};
|
|
41769
41811
|
if (label && stackBox) {
|
|
41770
41812
|
const labelBox = label.getBBox(void 0, 0), padding = label.padding;
|
|
41771
41813
|
let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
|
|
41772
|
-
// Reset alignOptions property after justify #12337
|
|
41773
|
-
alignOptions.x = options.x || 0;
|
|
41774
|
-
alignOptions.y = options.y || 0;
|
|
41775
41814
|
// Calculate the adjusted Stack position, to take into consideration
|
|
41776
|
-
//
|
|
41777
|
-
//
|
|
41778
|
-
//
|
|
41779
|
-
const { x, y } = this.adjustStackPosition({
|
|
41815
|
+
// the size if the labelBox and vertical alignment as well as the
|
|
41816
|
+
// text alignment. It needs to be done to work with default
|
|
41817
|
+
// SVGLabel.align/justify methods.
|
|
41818
|
+
const { x: adjustX, y: adjustY } = this.adjustStackPosition({
|
|
41780
41819
|
labelBox,
|
|
41781
41820
|
verticalAlign,
|
|
41782
41821
|
textAlign
|
|
41783
41822
|
});
|
|
41784
|
-
stackBox.x -=
|
|
41785
|
-
stackBox.y -=
|
|
41823
|
+
stackBox.x -= adjustX;
|
|
41824
|
+
stackBox.y -= adjustY;
|
|
41786
41825
|
// Align the label to the adjusted box.
|
|
41787
41826
|
label.align(alignOptions, false, stackBox);
|
|
41788
|
-
// Check if label is inside the plotArea #12294
|
|
41789
|
-
visible = chart.isInsidePlot(label.alignAttr.x +
|
|
41827
|
+
// Check if the label is inside the plotArea #12294
|
|
41828
|
+
visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
|
|
41790
41829
|
if (!visible) {
|
|
41791
41830
|
isJustify = false;
|
|
41792
41831
|
}
|
|
@@ -41794,11 +41833,8 @@ class StackItem {
|
|
|
41794
41833
|
// Justify stackLabel into the alignBox
|
|
41795
41834
|
StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
|
|
41796
41835
|
}
|
|
41797
|
-
// Add
|
|
41798
|
-
// Also add correct rotation with its rotation origin. #15129
|
|
41836
|
+
// Add correct rotation with its rotation origin (#15129)
|
|
41799
41837
|
label.attr({
|
|
41800
|
-
x: label.alignAttr.x,
|
|
41801
|
-
y: label.alignAttr.y,
|
|
41802
41838
|
rotation: options.rotation,
|
|
41803
41839
|
rotationOriginX: labelBox.width *
|
|
41804
41840
|
getAlignFactor(options.textAlign || 'center'),
|
|
@@ -41837,22 +41873,22 @@ class StackItem {
|
|
|
41837
41873
|
* The x, y, height, width of the stack.
|
|
41838
41874
|
*/
|
|
41839
41875
|
getStackBox(stackBoxProps) {
|
|
41840
|
-
const
|
|
41876
|
+
const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
|
|
41841
41877
|
100 :
|
|
41842
41878
|
(boxTop ?? this.total ?? 0), y = axis.toPixels(totalStackValue), xAxis = stackBoxProps.xAxis || chart.xAxis[0], x = (defaultX ?? xAxis.translate(this.x)) + xOffset, yZero = axis.toPixels(boxBottom ||
|
|
41843
41879
|
(isNumber(axis.min) &&
|
|
41844
41880
|
axis.logarithmic &&
|
|
41845
41881
|
axis.logarithmic.lin2log(axis.min)) ||
|
|
41846
|
-
0), height = Math.abs(y - yZero), inverted = chart.inverted
|
|
41882
|
+
0), height = Math.abs(y - yZero), inverted = chart.inverted;
|
|
41847
41883
|
return inverted ?
|
|
41848
41884
|
{
|
|
41849
|
-
x: (
|
|
41885
|
+
x: (isNegative ? y : y - height) - chart.plotLeft,
|
|
41850
41886
|
y: xAxis.height - x - width + xAxis.top - chart.plotTop,
|
|
41851
41887
|
width: height,
|
|
41852
41888
|
height: width
|
|
41853
41889
|
} : {
|
|
41854
41890
|
x: x + xAxis.transB - chart.plotLeft,
|
|
41855
|
-
y: (
|
|
41891
|
+
y: (isNegative ? y - height : y) - chart.plotTop,
|
|
41856
41892
|
width: width,
|
|
41857
41893
|
height: height
|
|
41858
41894
|
};
|
|
@@ -41888,10 +41924,6 @@ class StackItem {
|
|
|
41888
41924
|
* @name Highcharts.StackItemObject#cumulative
|
|
41889
41925
|
* @type {number}
|
|
41890
41926
|
*/ /**
|
|
41891
|
-
* True if on the negative side
|
|
41892
|
-
* @name Highcharts.StackItemObject#isNegative
|
|
41893
|
-
* @type {boolean}
|
|
41894
|
-
*/ /**
|
|
41895
41927
|
* Related SVG element
|
|
41896
41928
|
* @name Highcharts.StackItemObject#label
|
|
41897
41929
|
* @type {Highcharts.SVGElement}
|
|
@@ -42108,7 +42140,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
|
|
|
42108
42140
|
stacks[key][x].total = null;
|
|
42109
42141
|
}
|
|
42110
42142
|
else {
|
|
42111
|
-
stacks[key][x] = new Stacking_StackItem(axis,
|
|
42143
|
+
stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
|
|
42112
42144
|
}
|
|
42113
42145
|
}
|
|
42114
42146
|
// If the StackItem doesn't exist, create it first
|
|
@@ -42265,29 +42297,41 @@ class AxisAdditions {
|
|
|
42265
42297
|
});
|
|
42266
42298
|
});
|
|
42267
42299
|
}
|
|
42268
|
-
/**
|
|
42300
|
+
/**
|
|
42301
|
+
* Create the stack totals group and render the individual labels into it
|
|
42302
|
+
* @internal
|
|
42303
|
+
*/
|
|
42269
42304
|
renderStackTotals() {
|
|
42270
|
-
const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks,
|
|
42271
|
-
|
|
42272
|
-
|
|
42273
|
-
|
|
42274
|
-
|
|
42275
|
-
|
|
42276
|
-
|
|
42277
|
-
|
|
42278
|
-
|
|
42279
|
-
|
|
42280
|
-
|
|
42281
|
-
|
|
42282
|
-
|
|
42283
|
-
|
|
42284
|
-
|
|
42285
|
-
|
|
42305
|
+
const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, { animation, enabled } = axis.options.stackLabels || {}, animationConfig = getDeferredAnimation(chart, animation || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||
|
|
42306
|
+
(enabled ?
|
|
42307
|
+
renderer
|
|
42308
|
+
.g('stack-labels')
|
|
42309
|
+
.attr({
|
|
42310
|
+
zIndex: 6,
|
|
42311
|
+
opacity: 0
|
|
42312
|
+
})
|
|
42313
|
+
.add() :
|
|
42314
|
+
void 0));
|
|
42315
|
+
if (stackTotalGroup) {
|
|
42316
|
+
// The plotLeft/Top will change when y axis gets wider so we need to
|
|
42317
|
+
// translate the stackTotalGroup at every render call. See bug #506
|
|
42318
|
+
// and #516
|
|
42319
|
+
stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
|
|
42320
|
+
// Render each stack total
|
|
42321
|
+
objectEach(stacks, (type) => {
|
|
42322
|
+
objectEach(type, (stack) => {
|
|
42323
|
+
if (enabled) {
|
|
42324
|
+
stack.render(stackTotalGroup);
|
|
42325
|
+
}
|
|
42326
|
+
else {
|
|
42327
|
+
stack.label = stack.label?.destroy();
|
|
42328
|
+
}
|
|
42329
|
+
});
|
|
42286
42330
|
});
|
|
42287
|
-
|
|
42288
|
-
|
|
42289
|
-
|
|
42290
|
-
}
|
|
42331
|
+
stackTotalGroup.animate({
|
|
42332
|
+
opacity: 1
|
|
42333
|
+
}, animationConfig);
|
|
42334
|
+
}
|
|
42291
42335
|
}
|
|
42292
42336
|
}
|
|
42293
42337
|
/* *
|
|
@@ -42609,7 +42653,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
|
|
|
42609
42653
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42610
42654
|
*
|
|
42611
42655
|
* @extends series,plotOptions.line
|
|
42612
|
-
* @excluding dataParser,dataURL
|
|
42613
42656
|
* @product highcharts highstock
|
|
42614
42657
|
* @apioption series.line
|
|
42615
42658
|
*/
|
|
@@ -42983,7 +43026,7 @@ const AreaSeriesDefaults = {
|
|
|
42983
43026
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42984
43027
|
*
|
|
42985
43028
|
* @extends series,plotOptions.area
|
|
42986
|
-
* @excluding
|
|
43029
|
+
* @excluding useOhlcData
|
|
42987
43030
|
* @product highcharts highstock
|
|
42988
43031
|
* @apioption series.area
|
|
42989
43032
|
*/
|
|
@@ -43620,7 +43663,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
|
|
|
43620
43663
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
43621
43664
|
*
|
|
43622
43665
|
* @extends series,plotOptions.spline
|
|
43623
|
-
* @excluding
|
|
43666
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43624
43667
|
* @product highcharts highstock
|
|
43625
43668
|
* @apioption series.spline
|
|
43626
43669
|
*/
|
|
@@ -43782,7 +43825,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
|
|
|
43782
43825
|
*
|
|
43783
43826
|
*
|
|
43784
43827
|
* @extends series,plotOptions.areaspline
|
|
43785
|
-
* @excluding
|
|
43828
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43786
43829
|
* @product highcharts highstock
|
|
43787
43830
|
* @apioption series.areaspline
|
|
43788
43831
|
*/
|
|
@@ -44059,13 +44102,16 @@ const ColumnSeriesDefaults = {
|
|
|
44059
44102
|
* The minimal height for a column or width for a bar. By default,
|
|
44060
44103
|
* 0 values are not shown. To visualize a 0 (or close to zero) point,
|
|
44061
44104
|
* set the minimal point length to a pixel value like 3\. In stacked
|
|
44062
|
-
* column charts,
|
|
44063
|
-
* packed values.
|
|
44105
|
+
* column charts, the length is applied to each point in isolation, so
|
|
44106
|
+
* tightly packed values may overlap. See the stacked sample below for a
|
|
44107
|
+
* plugin that lays out the stack as a whole instead.
|
|
44064
44108
|
*
|
|
44065
44109
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength/
|
|
44066
44110
|
* Zero base value
|
|
44067
44111
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
|
|
44068
44112
|
* Positive and negative close to zero values
|
|
44113
|
+
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
|
|
44114
|
+
* Stack-aware minimum length
|
|
44069
44115
|
*
|
|
44070
44116
|
* @product highcharts highstock gantt
|
|
44071
44117
|
*/
|
|
@@ -44236,7 +44282,7 @@ const ColumnSeriesDefaults = {
|
|
|
44236
44282
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
44237
44283
|
*
|
|
44238
44284
|
* @extends series,plotOptions.column
|
|
44239
|
-
* @excluding connectNulls,
|
|
44285
|
+
* @excluding connectNulls, gapSize, gapUnit, linecap,
|
|
44240
44286
|
* lineWidth, marker, connectEnds, step
|
|
44241
44287
|
* @product highcharts highstock
|
|
44242
44288
|
* @apioption series.column
|
|
@@ -45880,7 +45926,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
|
|
|
45880
45926
|
* it is inherited from [chart.type](#chart.type).
|
|
45881
45927
|
*
|
|
45882
45928
|
* @extends series,plotOptions.bar
|
|
45883
|
-
* @excluding connectNulls, dashStyle,
|
|
45929
|
+
* @excluding connectNulls, dashStyle, gapSize, gapUnit,
|
|
45884
45930
|
* linecap, lineWidth, marker, connectEnds, step
|
|
45885
45931
|
* @product highcharts
|
|
45886
45932
|
* @apioption series.bar
|
|
@@ -46081,7 +46127,7 @@ const ScatterSeriesDefaults = {
|
|
|
46081
46127
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
46082
46128
|
*
|
|
46083
46129
|
* @extends series,plotOptions.scatter
|
|
46084
|
-
* @excluding cropThreshold,
|
|
46130
|
+
* @excluding cropThreshold, useOhlcData
|
|
46085
46131
|
* @product highcharts highstock
|
|
46086
46132
|
* @apioption series.scatter
|
|
46087
46133
|
*/
|
|
@@ -47183,7 +47229,7 @@ const PieSeriesDefaults = {
|
|
|
47183
47229
|
* it is inherited from [chart.type](#chart.type).
|
|
47184
47230
|
*
|
|
47185
47231
|
* @extends series,plotOptions.pie
|
|
47186
|
-
* @excluding cropThreshold,
|
|
47232
|
+
* @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
|
|
47187
47233
|
* dataSorting, step, boostThreshold, boostBlending
|
|
47188
47234
|
* @product highcharts highmaps
|
|
47189
47235
|
* @apioption series.pie
|
|
@@ -48284,6 +48330,7 @@ var GeometryUtilities;
|
|
|
48284
48330
|
* */
|
|
48285
48331
|
|
|
48286
48332
|
|
|
48333
|
+
|
|
48287
48334
|
const { pointInPolygon } = Geometry_GeometryUtilities;
|
|
48288
48335
|
|
|
48289
48336
|
/* *
|
|
@@ -48424,30 +48471,34 @@ function composeOverlappingDataLabels(ChartClass) {
|
|
|
48424
48471
|
* Whether label is affected
|
|
48425
48472
|
*/
|
|
48426
48473
|
function hideOrShow(label, chart) {
|
|
48427
|
-
let
|
|
48474
|
+
let isLabelAffected = false;
|
|
48428
48475
|
if (label) {
|
|
48429
|
-
newOpacity = label.newOpacity;
|
|
48476
|
+
const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
|
|
48477
|
+
// For tick labels, we need to stop running animations otherwise they
|
|
48478
|
+
// may continue to run after we set the new opacity
|
|
48479
|
+
if (!isDataLabel) {
|
|
48480
|
+
stop(label, 'opacity');
|
|
48481
|
+
}
|
|
48430
48482
|
if (label.oldOpacity !== newOpacity) {
|
|
48431
48483
|
// Toggle data labels
|
|
48432
|
-
if (
|
|
48484
|
+
if (isDataLabel) {
|
|
48433
48485
|
// Make sure the label is completely hidden to avoid catching
|
|
48434
48486
|
// clicks (#4362)
|
|
48435
48487
|
label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
|
|
48436
|
-
|
|
48488
|
+
isLabelAffected = true;
|
|
48489
|
+
// Animate or set the opacity
|
|
48490
|
+
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
|
|
48437
48491
|
if (!chart.styledMode) {
|
|
48438
48492
|
label.css({
|
|
48439
48493
|
pointerEvents: newOpacity ? 'auto' : 'none'
|
|
48440
48494
|
});
|
|
48441
48495
|
}
|
|
48442
|
-
};
|
|
48443
|
-
isLabelAffected = true;
|
|
48444
|
-
// Animate or set the opacity
|
|
48445
|
-
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
|
|
48496
|
+
});
|
|
48446
48497
|
fireEvent(chart, 'afterHideOverlappingLabel');
|
|
48447
|
-
// Toggle other labels
|
|
48498
|
+
// Toggle other labels - tick labels, stack labels
|
|
48448
48499
|
}
|
|
48449
48500
|
else {
|
|
48450
|
-
label.attr({
|
|
48501
|
+
label[label.placed ? 'animate' : 'attr']({
|
|
48451
48502
|
opacity: newOpacity
|
|
48452
48503
|
});
|
|
48453
48504
|
}
|
|
@@ -48463,25 +48514,37 @@ function hideOrShow(label, chart) {
|
|
|
48463
48514
|
* @internal
|
|
48464
48515
|
*/
|
|
48465
48516
|
function OverlappingDataLabels_onChartRender() {
|
|
48466
|
-
const chart = this
|
|
48517
|
+
const chart = this,
|
|
48518
|
+
// Helper function for data labels and stack labels when dynamicly
|
|
48519
|
+
// toggling the allowOverlap option
|
|
48520
|
+
toggle = (label, allowOverlap) => {
|
|
48521
|
+
// Allow overlap, reset opacity and show
|
|
48522
|
+
if (allowOverlap) {
|
|
48523
|
+
label.oldOpacity = label.opacity;
|
|
48524
|
+
label.newOpacity = 1;
|
|
48525
|
+
hideOrShow(label, chart);
|
|
48526
|
+
// Do not allow overlap
|
|
48527
|
+
}
|
|
48528
|
+
else {
|
|
48529
|
+
labels.push(label);
|
|
48530
|
+
}
|
|
48531
|
+
};
|
|
48467
48532
|
let labels = [];
|
|
48468
48533
|
// Consider external label collectors
|
|
48469
48534
|
for (const collector of (chart.labelCollectors || [])) {
|
|
48470
48535
|
labels = labels.concat(collector());
|
|
48471
48536
|
}
|
|
48472
|
-
|
|
48473
|
-
|
|
48474
|
-
|
|
48475
|
-
|
|
48476
|
-
|
|
48477
|
-
|
|
48478
|
-
|
|
48479
|
-
labels.push(stackItem.label);
|
|
48480
|
-
}
|
|
48481
|
-
});
|
|
48537
|
+
// Stack labels
|
|
48538
|
+
for (const { options, stacking } of (chart.yAxis || [])) {
|
|
48539
|
+
objectEach(stacking?.stacks, (stack) => {
|
|
48540
|
+
objectEach(stack, ({ label }) => {
|
|
48541
|
+
if (label) {
|
|
48542
|
+
toggle(label, options.stackLabels?.allowOverlap);
|
|
48543
|
+
}
|
|
48482
48544
|
});
|
|
48483
|
-
}
|
|
48545
|
+
});
|
|
48484
48546
|
}
|
|
48547
|
+
// Series data labels
|
|
48485
48548
|
for (const series of (chart.series || [])) {
|
|
48486
48549
|
if (series.visible && series.hasDataLabels?.()) { // #3866
|
|
48487
48550
|
const push = (points) => {
|
|
@@ -48510,21 +48573,13 @@ function OverlappingDataLabels_onChartRender() {
|
|
|
48510
48573
|
}
|
|
48511
48574
|
*/
|
|
48512
48575
|
// Allow overlap if the option is explicitly true
|
|
48513
|
-
|
|
48576
|
+
toggle(label, (
|
|
48514
48577
|
// #13449
|
|
48515
48578
|
options.allowOverlap ??
|
|
48516
48579
|
// Pie labels outside have a separate placement
|
|
48517
48580
|
// logic, skip the overlap logic
|
|
48518
48581
|
(series.is('pie') &&
|
|
48519
|
-
Number(options.distance) > 0))
|
|
48520
|
-
label.oldOpacity = label.opacity;
|
|
48521
|
-
label.newOpacity = 1;
|
|
48522
|
-
hideOrShow(label, chart);
|
|
48523
|
-
// Do not allow overlap
|
|
48524
|
-
}
|
|
48525
|
-
else {
|
|
48526
|
-
labels.push(label);
|
|
48527
|
-
}
|
|
48582
|
+
Number(options.distance) > 0)));
|
|
48528
48583
|
});
|
|
48529
48584
|
}
|
|
48530
48585
|
}
|
|
@@ -49200,7 +49255,7 @@ var Responsive;
|
|
|
49200
49255
|
;// ./code/es-modules/masters/highcharts.src.js
|
|
49201
49256
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
49202
49257
|
/**
|
|
49203
|
-
* @license Highcharts JS v13.
|
|
49258
|
+
* @license Highcharts JS v13.1.1 (2026-09-20)
|
|
49204
49259
|
* @module highcharts/highcharts
|
|
49205
49260
|
*
|
|
49206
49261
|
* (c) 2009-2026 Highsoft AS
|