highcharts 13.0.2 → 13.1.0
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 +18 -11
- 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 +824 -750
- 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 +876 -776
- 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 +833 -778
- package/highcharts-gantt.js +4 -4
- package/highcharts-gantt.src.js +895 -839
- 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 +832 -777
- package/highmaps.js +4 -4
- package/highmaps.src.js +915 -845
- package/highstock.js +4 -4
- package/highstock.src.js +903 -874
- 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 +884 -803
- 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,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
2
2
|
/**
|
|
3
|
-
* @license Highcharts JS v13.0
|
|
3
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
4
4
|
* @module highcharts/standalone-navigator
|
|
5
5
|
*
|
|
6
6
|
* Standalone Navigator for Highcharts.
|
|
@@ -40,7 +40,7 @@ var Globals;
|
|
|
40
40
|
* Constants
|
|
41
41
|
*
|
|
42
42
|
* */
|
|
43
|
-
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0
|
|
43
|
+
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
|
|
44
44
|
window :
|
|
45
45
|
{}), // eslint-disable-line node/no-unsupported-features/es-builtins
|
|
46
46
|
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 = [
|
|
@@ -51,14 +51,16 @@ var Globals;
|
|
|
51
51
|
], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
|
|
52
52
|
// Checks whether the browser supports passive events, (#11353).
|
|
53
53
|
let supportsPassive = false;
|
|
54
|
-
//
|
|
55
|
-
//
|
|
54
|
+
// Accessors don't work on IE as well as passive events - instead
|
|
55
|
+
// of using polyfill, we can exclude IE totally. The getter has to
|
|
56
|
+
// be enumerable, or wrappers that shallow-copy the options never
|
|
57
|
+
// read it (#25092).
|
|
56
58
|
if (!Globals.isMS) {
|
|
57
|
-
const opts =
|
|
58
|
-
get
|
|
59
|
-
supportsPassive = true;
|
|
59
|
+
const opts = {
|
|
60
|
+
get passive() {
|
|
61
|
+
return (supportsPassive = true);
|
|
60
62
|
}
|
|
61
|
-
}
|
|
63
|
+
};
|
|
62
64
|
if (Globals.win.addEventListener && Globals.win.removeEventListener) {
|
|
63
65
|
Globals.win.addEventListener('testPassive', Globals.noop, opts);
|
|
64
66
|
Globals.win.removeEventListener('testPassive', Globals.noop, opts);
|
|
@@ -2134,6 +2136,13 @@ function extend(a, b) {
|
|
|
2134
2136
|
a = {};
|
|
2135
2137
|
}
|
|
2136
2138
|
for (n in b) { // eslint-disable-line guard-for-in
|
|
2139
|
+
// Prototype pollution (#14883). Keys like `__proto__` may arrive as
|
|
2140
|
+
// own, enumerable properties through `JSON.parse`, in which case
|
|
2141
|
+
// assigning them would mutate the prototype of the target instead of
|
|
2142
|
+
// adding a property.
|
|
2143
|
+
if (n === '__proto__' || n === 'constructor') {
|
|
2144
|
+
continue;
|
|
2145
|
+
}
|
|
2137
2146
|
a[n] = b[n];
|
|
2138
2147
|
}
|
|
2139
2148
|
return a;
|
|
@@ -5395,6 +5404,13 @@ const defaultOptions = {
|
|
|
5395
5404
|
* @since 2.0
|
|
5396
5405
|
* @apioption title.align
|
|
5397
5406
|
*/
|
|
5407
|
+
/**
|
|
5408
|
+
* A CSS class name to apply to the title's container div,
|
|
5409
|
+
* allowing unique CSS styling for each chart.
|
|
5410
|
+
*
|
|
5411
|
+
* @type {string}
|
|
5412
|
+
* @apioption title.className
|
|
5413
|
+
*/
|
|
5398
5414
|
/**
|
|
5399
5415
|
* The margin between the title and the plot area, or if a subtitle
|
|
5400
5416
|
* is present, the margin between the subtitle and the plot area.
|
|
@@ -5457,6 +5473,13 @@ const defaultOptions = {
|
|
|
5457
5473
|
* @since 2.0
|
|
5458
5474
|
* @apioption subtitle.align
|
|
5459
5475
|
*/
|
|
5476
|
+
/**
|
|
5477
|
+
* A CSS class name to apply to the subtitle's container div,
|
|
5478
|
+
* allowing unique CSS styling for each chart.
|
|
5479
|
+
*
|
|
5480
|
+
* @type {string}
|
|
5481
|
+
* @apioption subtitle.className
|
|
5482
|
+
*/
|
|
5460
5483
|
/**
|
|
5461
5484
|
* When the subtitle is floating, the plot area will not move to make
|
|
5462
5485
|
* space for it.
|
|
@@ -7589,6 +7612,10 @@ const defaultOptions = {
|
|
|
7589
7612
|
/**
|
|
7590
7613
|
* The URL for the credits label.
|
|
7591
7614
|
*
|
|
7615
|
+
* URLs that do not start with one of the
|
|
7616
|
+
* [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
|
|
7617
|
+
* for example `javascript:` URLs, are ignored.
|
|
7618
|
+
*
|
|
7592
7619
|
* @sample {highcharts} highcharts/credits/href/
|
|
7593
7620
|
* Custom URL and text
|
|
7594
7621
|
* @sample {highmaps} maps/credits/customized/
|
|
@@ -8562,6 +8589,7 @@ class Fx {
|
|
|
8562
8589
|
* Prepare start and end values so that the path can be animated one to one.
|
|
8563
8590
|
*
|
|
8564
8591
|
* @function Highcharts.Fx#initPath
|
|
8592
|
+
* @internal
|
|
8565
8593
|
*
|
|
8566
8594
|
* @param {Highcharts.SVGElement} elem
|
|
8567
8595
|
* The SVGElement item.
|
|
@@ -8861,7 +8889,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8861
8889
|
if (el) {
|
|
8862
8890
|
stop(el, prop);
|
|
8863
8891
|
}
|
|
8864
|
-
const fx = new Animation_Fx(el, opt, prop), d = params.d
|
|
8892
|
+
const fx = new Animation_Fx(el, opt, prop), d = params.d,
|
|
8893
|
+
// Discrete value that doesn't animate, apply at once
|
|
8894
|
+
applyImmediately = prop === 'dashstyle';
|
|
8865
8895
|
let start = 0, end = void 0, unit = '';
|
|
8866
8896
|
if (prop === 'd' && isArray(d)) {
|
|
8867
8897
|
fx.paths = fx.initPath(el, el.pathArray, d);
|
|
@@ -8870,6 +8900,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8870
8900
|
}
|
|
8871
8901
|
else if (el?.attr) {
|
|
8872
8902
|
start = el.attr(prop);
|
|
8903
|
+
if (applyImmediately) {
|
|
8904
|
+
el.attr(prop, val);
|
|
8905
|
+
}
|
|
8873
8906
|
}
|
|
8874
8907
|
else if (el) {
|
|
8875
8908
|
start = +(getStyle(el, prop) || 0);
|
|
@@ -8884,7 +8917,7 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8884
8917
|
end = end.replace(/px/g, ''); // #4351
|
|
8885
8918
|
}
|
|
8886
8919
|
// Empty dashstyle animation crashes treemap on hover
|
|
8887
|
-
if (defined(end)) {
|
|
8920
|
+
if (defined(end) && !applyImmediately) {
|
|
8888
8921
|
fx.run(start, end, unit);
|
|
8889
8922
|
}
|
|
8890
8923
|
});
|
|
@@ -9206,17 +9239,25 @@ class AST {
|
|
|
9206
9239
|
markup, 'text/html');
|
|
9207
9240
|
}
|
|
9208
9241
|
catch {
|
|
9209
|
-
//
|
|
9210
|
-
//
|
|
9211
|
-
//
|
|
9212
|
-
//
|
|
9213
|
-
//
|
|
9214
|
-
//
|
|
9242
|
+
// Due to a Chromium issue where chart redraws are triggered by a
|
|
9243
|
+
// `beforeprint` event (#16931),
|
|
9244
|
+
// https://issues.chromium.org/issues/40222135, the Trusted
|
|
9245
|
+
// Types `createHTML` callback can throw "The provided callback
|
|
9246
|
+
// is no longer runnable" while the browser is mid-print. Retry
|
|
9247
|
+
// with the raw string - `DOMParser` itself is not a Trusted
|
|
9248
|
+
// Types sink, so parsing it directly is safe.
|
|
9249
|
+
try {
|
|
9250
|
+
doc = new DOMParser().parseFromString(markup, 'text/html');
|
|
9251
|
+
}
|
|
9252
|
+
catch {
|
|
9253
|
+
// Ignore, fall through to the inert-document fallback below.
|
|
9254
|
+
}
|
|
9215
9255
|
}
|
|
9216
9256
|
if (!doc) {
|
|
9217
|
-
|
|
9218
|
-
|
|
9219
|
-
doc =
|
|
9257
|
+
// Never assign untrusted markup to a live document's innerHTML.
|
|
9258
|
+
// Parse into a detached, inert document instead.
|
|
9259
|
+
doc = Core_Globals.doc.implementation.createHTMLDocument('');
|
|
9260
|
+
doc.body.innerHTML = markup;
|
|
9220
9261
|
}
|
|
9221
9262
|
const appendChildNodes = (node, addTo) => {
|
|
9222
9263
|
// Preserve the camelCase of SVG tags via localName (#24702).
|
|
@@ -9453,7 +9494,6 @@ AST.allowedTags = [
|
|
|
9453
9494
|
'span',
|
|
9454
9495
|
'stop',
|
|
9455
9496
|
'strong',
|
|
9456
|
-
'style',
|
|
9457
9497
|
'sub',
|
|
9458
9498
|
'sup',
|
|
9459
9499
|
'svg',
|
|
@@ -10233,6 +10273,7 @@ class SVGElement {
|
|
|
10233
10273
|
let ret = (this[key + 'Value'] ??
|
|
10234
10274
|
this[key] ??
|
|
10235
10275
|
(this.element ? this.element.getAttribute(key) : null) ??
|
|
10276
|
+
this.box?.[key] ?? // For labels, when animating border radius
|
|
10236
10277
|
0);
|
|
10237
10278
|
if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
|
|
10238
10279
|
ret = parseFloat(ret);
|
|
@@ -12827,7 +12868,7 @@ function arc(cx, cy, w, h, options) {
|
|
|
12827
12868
|
* Path
|
|
12828
12869
|
*/
|
|
12829
12870
|
function callout(x, y, w, h, options) {
|
|
12830
|
-
const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
|
|
12871
|
+
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;
|
|
12831
12872
|
const path = roundedRect(x, y, w, h, { r });
|
|
12832
12873
|
if (!isNumber(anchorX)) {
|
|
12833
12874
|
return path;
|
|
@@ -13451,8 +13492,12 @@ class TextBuilder {
|
|
|
13451
13492
|
this.truncate(textNode, textNode.textContent || '', void 0, 0,
|
|
13452
13493
|
// Target width
|
|
13453
13494
|
width, ellipsisWidth, stringWithEllipsis);
|
|
13454
|
-
|
|
13455
|
-
|
|
13495
|
+
// If there is still text left, add an ellipsis to
|
|
13496
|
+
// the end of the line
|
|
13497
|
+
if (textNode.textContent) {
|
|
13498
|
+
textNode.textContent = textNode.textContent
|
|
13499
|
+
?.replace('\u2026', '') + '\u2026';
|
|
13500
|
+
}
|
|
13456
13501
|
}
|
|
13457
13502
|
break;
|
|
13458
13503
|
}
|
|
@@ -13878,7 +13923,7 @@ class SVGRenderer {
|
|
|
13878
13923
|
this.url = this.getReferenceURL();
|
|
13879
13924
|
// Add description
|
|
13880
13925
|
const desc = this.createElement('desc').add();
|
|
13881
|
-
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0
|
|
13926
|
+
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
|
|
13882
13927
|
this.defs = this.createElement('defs').add();
|
|
13883
13928
|
this.allowHTML = allowHTML;
|
|
13884
13929
|
this.forExport = forExport;
|
|
@@ -15717,7 +15762,11 @@ class HTMLElement extends SVG_SVGElement {
|
|
|
15717
15762
|
// Some properties require other properties to be set
|
|
15718
15763
|
if (styles?.textOverflow === 'ellipsis') {
|
|
15719
15764
|
styles.overflow = 'hidden';
|
|
15720
|
-
|
|
15765
|
+
// With a line clamp, the text should wrap and ellipsis at the
|
|
15766
|
+
// clamped line instead of staying on one line (#24724)
|
|
15767
|
+
if (!(styles.lineClamp ?? this.styles.lineClamp)) {
|
|
15768
|
+
styles.whiteSpace = 'nowrap';
|
|
15769
|
+
}
|
|
15721
15770
|
}
|
|
15722
15771
|
// Apply line clamp
|
|
15723
15772
|
if (styles?.lineClamp) {
|
|
@@ -16906,15 +16955,16 @@ var AxisDefaults;
|
|
|
16906
16955
|
/**
|
|
16907
16956
|
* The label's pixel distance from the perimeter of the plot area.
|
|
16908
16957
|
* On cartesian charts, this is overridden if the `labels.y` setting
|
|
16909
|
-
* is set.
|
|
16958
|
+
* is set. Defaults to 15 unless the labels are aligned inside the
|
|
16959
|
+
* plot area, in which case it defaults to 0.
|
|
16910
16960
|
*
|
|
16911
16961
|
* @sample {highcharts} highcharts/yaxis/labels-distance/
|
|
16912
16962
|
* Polar chart, labels centered under the arc
|
|
16913
16963
|
*
|
|
16914
16964
|
* @type {number}
|
|
16915
16965
|
* @product highcharts gantt
|
|
16966
|
+
* @apioption xAxis.labels.distance
|
|
16916
16967
|
*/
|
|
16917
|
-
distance: 15,
|
|
16918
16968
|
/**
|
|
16919
16969
|
* Enable or disable the axis labels.
|
|
16920
16970
|
*
|
|
@@ -17172,18 +17222,18 @@ var AxisDefaults;
|
|
|
17172
17222
|
* @apioption xAxis.top
|
|
17173
17223
|
*/
|
|
17174
17224
|
/**
|
|
17175
|
-
* Index of another axis that this axis is linked to.
|
|
17176
|
-
* linked to a master axis, it will take the same
|
|
17177
|
-
* the master, but as assigned by min or max or by
|
|
17178
|
-
* It can be used to show additional info, or to ease
|
|
17179
|
-
* chart by duplicating the scales.
|
|
17225
|
+
* Index or [id](#xAxis.id) of another axis that this axis is linked to.
|
|
17226
|
+
* When an axis is linked to a master axis, it will take the same
|
|
17227
|
+
* extremes as the master, but as assigned by min or max or by
|
|
17228
|
+
* `setExtremes`. It can be used to show additional info, or to ease
|
|
17229
|
+
* reading the chart by duplicating the scales.
|
|
17180
17230
|
*
|
|
17181
17231
|
* @sample {highcharts} highcharts/xaxis/linkedto/
|
|
17182
17232
|
* Different string formats of the same date
|
|
17183
17233
|
* @sample {highcharts} highcharts/yaxis/linkedto/
|
|
17184
17234
|
* Y values on both sides
|
|
17185
17235
|
*
|
|
17186
|
-
* @type {number}
|
|
17236
|
+
* @type {number|string}
|
|
17187
17237
|
* @since 2.0.2
|
|
17188
17238
|
* @product highcharts highstock gantt
|
|
17189
17239
|
* @apioption xAxis.linkedTo
|
|
@@ -19303,7 +19353,7 @@ class Tick {
|
|
|
19303
19353
|
*/
|
|
19304
19354
|
addLabel() {
|
|
19305
19355
|
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;
|
|
19306
|
-
let
|
|
19356
|
+
let dateTimeLabelFormat, dateTimeLabelFormats, i;
|
|
19307
19357
|
// The context value
|
|
19308
19358
|
let value = this.parameters.category || (categories ?
|
|
19309
19359
|
(categories[pos] ?? names[pos] ?? pos) :
|
|
@@ -19389,10 +19439,15 @@ class Tick {
|
|
|
19389
19439
|
}
|
|
19390
19440
|
return axis.defaultLabelFormatter.call(ctx);
|
|
19391
19441
|
};
|
|
19392
|
-
|
|
19442
|
+
/**
|
|
19443
|
+
* The rendered text label of the tick.
|
|
19444
|
+
* @name Highcharts.Tick#label
|
|
19445
|
+
* @type {Highcharts.SVGElement|undefined}
|
|
19446
|
+
*/
|
|
19447
|
+
tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
|
|
19393
19448
|
// Set up conditional formatting based on the format list if existing.
|
|
19394
|
-
const list = dateTimeLabelFormats?.list;
|
|
19395
|
-
if (list) {
|
|
19449
|
+
const list = dateTimeLabelFormats?.list, label = tick.label;
|
|
19450
|
+
if (list && label) {
|
|
19396
19451
|
tick.shortenLabel = function () {
|
|
19397
19452
|
for (i = 0; i < list.length; i++) {
|
|
19398
19453
|
extend(ctx, { dateTimeLabelFormat: list[i] });
|
|
@@ -19400,43 +19455,17 @@ class Tick {
|
|
|
19400
19455
|
text: labelFormatter.call(ctx, ctx)
|
|
19401
19456
|
});
|
|
19402
19457
|
if (label.getBBox().width <
|
|
19403
|
-
axis.getSlotWidth(tick) - 2 *
|
|
19404
|
-
(labelOptions.padding || 0)) {
|
|
19458
|
+
axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
|
|
19405
19459
|
return;
|
|
19406
19460
|
}
|
|
19407
19461
|
}
|
|
19408
|
-
label.attr({
|
|
19409
|
-
text: ''
|
|
19410
|
-
});
|
|
19462
|
+
label.attr({ text: '' });
|
|
19411
19463
|
};
|
|
19412
19464
|
}
|
|
19413
19465
|
else {
|
|
19414
19466
|
// #15692
|
|
19415
19467
|
tick.shortenLabel = void 0;
|
|
19416
19468
|
}
|
|
19417
|
-
// First call
|
|
19418
|
-
if (!label) {
|
|
19419
|
-
/**
|
|
19420
|
-
* The rendered text label of the tick.
|
|
19421
|
-
* @name Highcharts.Tick#label
|
|
19422
|
-
* @type {Highcharts.SVGElement|undefined}
|
|
19423
|
-
*/
|
|
19424
|
-
tick.label = label = tick.createLabel(text, labelOptions);
|
|
19425
|
-
// Base value to detect change for new calls to getBBox
|
|
19426
|
-
tick.rotation = 0;
|
|
19427
|
-
// Update
|
|
19428
|
-
}
|
|
19429
|
-
else if (label.textStr !== text) {
|
|
19430
|
-
// When resetting text, also reset the width if dynamically set
|
|
19431
|
-
// (#8809)
|
|
19432
|
-
if (label.textWidth &&
|
|
19433
|
-
!labelOptions.style.width &&
|
|
19434
|
-
!label.styles.width) {
|
|
19435
|
-
label.css({ width: void 0 });
|
|
19436
|
-
}
|
|
19437
|
-
label.attr({ text });
|
|
19438
|
-
label.textPxLength = label.getBBox().width;
|
|
19439
|
-
}
|
|
19440
19469
|
}
|
|
19441
19470
|
/**
|
|
19442
19471
|
* Render and return the label of the tick.
|
|
@@ -19444,18 +19473,33 @@ class Tick {
|
|
|
19444
19473
|
* @internal
|
|
19445
19474
|
* @function Highcharts.Tick#createLabel
|
|
19446
19475
|
*/
|
|
19447
|
-
createLabel(
|
|
19448
|
-
const axis = this.axis, { renderer, styledMode } = axis.chart,
|
|
19449
|
-
|
|
19450
|
-
|
|
19451
|
-
|
|
19452
|
-
|
|
19476
|
+
createLabel(text, labelOptions, xy) {
|
|
19477
|
+
const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
|
|
19478
|
+
let label = this.label;
|
|
19479
|
+
if (defined(text) && labelOptions.enabled) {
|
|
19480
|
+
label || (label = renderer
|
|
19481
|
+
.text(text, xy?.x, xy?.y, labelOptions.useHTML)
|
|
19482
|
+
.add(axis.labelGroup));
|
|
19483
|
+
}
|
|
19484
|
+
else if (label) {
|
|
19485
|
+
label = label.destroy();
|
|
19486
|
+
// Reset so it doesn't animate when re-enabled
|
|
19487
|
+
this.isNewLabel = true;
|
|
19488
|
+
}
|
|
19453
19489
|
// Un-rotated length
|
|
19454
|
-
if (label) {
|
|
19490
|
+
if (label && (label.labelStyle !== style || text !== label.textStr)) {
|
|
19491
|
+
// Store a reference to the current style object to avoid running
|
|
19492
|
+
// this block on every render call unless something actually
|
|
19493
|
+
// changes.
|
|
19494
|
+
label.labelStyle = style;
|
|
19495
|
+
if (text !== label.textStr) {
|
|
19496
|
+
label.attr({ text });
|
|
19497
|
+
delete label.textPxLength;
|
|
19498
|
+
}
|
|
19455
19499
|
if (!styledMode) {
|
|
19456
|
-
label.css(merge(
|
|
19500
|
+
label.css(merge(style));
|
|
19457
19501
|
}
|
|
19458
|
-
label.textPxLength = label.getBBox().width;
|
|
19502
|
+
label.textPxLength ?? (label.textPxLength = label.getBBox().width);
|
|
19459
19503
|
// Apply the white-space setting after we read the full text width
|
|
19460
19504
|
if (!styledMode && whiteSpace) {
|
|
19461
19505
|
label.css({ whiteSpace });
|
|
@@ -19527,19 +19571,27 @@ class Tick {
|
|
|
19527
19571
|
* @internal
|
|
19528
19572
|
*/
|
|
19529
19573
|
getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
|
|
19530
|
-
const axis = this.axis, transA = axis
|
|
19531
|
-
axis.
|
|
19574
|
+
const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
|
|
19575
|
+
axis.linkedParent ?
|
|
19532
19576
|
axis.linkedParent.reversed :
|
|
19533
|
-
axis.reversed),
|
|
19577
|
+
axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
|
|
19534
19578
|
// Adjust for label alignment if we use reserveSpace: true (#5286)
|
|
19535
19579
|
labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
|
|
19536
|
-
-axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19537
|
-
0), distance = labelOptions.distance
|
|
19580
|
+
-(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19581
|
+
0), distance = labelOptions.distance ?? (
|
|
19582
|
+
// If the label is aligned inside the plot area, default to 0.
|
|
19583
|
+
// This is default behavior or Stock y-axis labels.
|
|
19584
|
+
(side === 1 &&
|
|
19585
|
+
labelAlign === 'right' &&
|
|
19586
|
+
!labelOptions.reserveSpace) ? 0 :
|
|
19587
|
+
(side === 3 &&
|
|
19588
|
+
labelAlign === 'left' &&
|
|
19589
|
+
!labelOptions.reserveSpace) ? 0 : 15), pos = {};
|
|
19538
19590
|
let yOffset, line;
|
|
19539
|
-
if (
|
|
19591
|
+
if (side === 0) {
|
|
19540
19592
|
yOffset = label.rotation ? -distance : -label.getBBox().height;
|
|
19541
19593
|
}
|
|
19542
|
-
else if (
|
|
19594
|
+
else if (side === 2) {
|
|
19543
19595
|
yOffset = rotCorr.y + distance;
|
|
19544
19596
|
}
|
|
19545
19597
|
else {
|
|
@@ -19548,12 +19600,12 @@ class Tick {
|
|
|
19548
19600
|
(rotCorr.y - label.getBBox(false, 0).height / 2);
|
|
19549
19601
|
}
|
|
19550
19602
|
if (defined(labelOptions.y)) {
|
|
19551
|
-
yOffset =
|
|
19603
|
+
yOffset = side === 0 && axis.horiz ?
|
|
19552
19604
|
labelOptions.y + yOffset :
|
|
19553
19605
|
labelOptions.y;
|
|
19554
19606
|
}
|
|
19555
19607
|
x = x +
|
|
19556
|
-
(labelOptions.x ?? [0, 1, 0, -1][
|
|
19608
|
+
(labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
|
|
19557
19609
|
labelOffsetCorrection +
|
|
19558
19610
|
rotCorr.x -
|
|
19559
19611
|
(tickmarkOffset && horiz ?
|
|
@@ -19608,7 +19660,7 @@ class Tick {
|
|
|
19608
19660
|
* @function Highcharts.Tick#handleOverflow
|
|
19609
19661
|
*/
|
|
19610
19662
|
handleOverflow(xy) {
|
|
19611
|
-
const tick = this, axis = this
|
|
19663
|
+
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;
|
|
19612
19664
|
let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
|
|
19613
19665
|
// Check if the label overshoots the chart spacing box. If it does, move
|
|
19614
19666
|
// it. If it now overshoots the slotWidth, add ellipsis.
|
|
@@ -19656,10 +19708,10 @@ class Tick {
|
|
|
19656
19708
|
tick.shortenLabel();
|
|
19657
19709
|
}
|
|
19658
19710
|
else {
|
|
19659
|
-
label.css(
|
|
19711
|
+
label.css({
|
|
19660
19712
|
width: Math.floor(textWidth) + 'px',
|
|
19661
19713
|
lineClamp: axis.isRadial ? 0 : 1
|
|
19662
|
-
})
|
|
19714
|
+
});
|
|
19663
19715
|
}
|
|
19664
19716
|
}
|
|
19665
19717
|
}
|
|
@@ -19675,8 +19727,11 @@ class Tick {
|
|
|
19675
19727
|
* @param {number} [opacity]
|
|
19676
19728
|
*/
|
|
19677
19729
|
render(index, old, opacity) {
|
|
19678
|
-
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;
|
|
19679
|
-
|
|
19730
|
+
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;
|
|
19731
|
+
if (!axis.visible) {
|
|
19732
|
+
opacity = 0;
|
|
19733
|
+
}
|
|
19734
|
+
const labelOpacity = opacity ?? 1;
|
|
19680
19735
|
// Anything that is not between `axis.pos` and `axis.pos + axis.length`
|
|
19681
19736
|
// should not be visible (#20166). The `correctFloat` is for reversed
|
|
19682
19737
|
// axes in Safari.
|
|
@@ -19704,25 +19759,21 @@ class Tick {
|
|
|
19704
19759
|
* @param {number} opacity The opacity of the grid line
|
|
19705
19760
|
*/
|
|
19706
19761
|
renderGridLine(old, opacity) {
|
|
19707
|
-
const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), renderer = axis.chart
|
|
19708
|
-
let gridLine = tick.gridLine,
|
|
19762
|
+
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;
|
|
19763
|
+
let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
|
|
19709
19764
|
if (tick.type === 'minor') {
|
|
19710
19765
|
gridLineWidth = options.minorGridLineWidth;
|
|
19711
19766
|
gridLineColor = options.minorGridLineColor;
|
|
19712
19767
|
dashStyle = options.minorGridLineDashStyle;
|
|
19713
19768
|
}
|
|
19769
|
+
// Apply the stroke width initially so the crisping works
|
|
19770
|
+
if (!styledMode) {
|
|
19771
|
+
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19772
|
+
}
|
|
19714
19773
|
if (!gridLine) {
|
|
19715
|
-
if (!axis.chart.styledMode) {
|
|
19716
|
-
attribs.stroke = gridLineColor;
|
|
19717
|
-
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19718
|
-
attribs.dashstyle = dashStyle;
|
|
19719
|
-
}
|
|
19720
19774
|
if (!type) {
|
|
19721
19775
|
attribs.zIndex = 1;
|
|
19722
19776
|
}
|
|
19723
|
-
if (old) {
|
|
19724
|
-
opacity = 0;
|
|
19725
|
-
}
|
|
19726
19777
|
/**
|
|
19727
19778
|
* The rendered grid line of the tick.
|
|
19728
19779
|
* @name Highcharts.Tick#gridLine
|
|
@@ -19733,22 +19784,24 @@ class Tick {
|
|
|
19733
19784
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
|
|
19734
19785
|
.add(axis.gridGroup);
|
|
19735
19786
|
}
|
|
19736
|
-
|
|
19737
|
-
|
|
19738
|
-
|
|
19739
|
-
|
|
19740
|
-
|
|
19741
|
-
|
|
19742
|
-
|
|
19743
|
-
|
|
19787
|
+
// Grid line path
|
|
19788
|
+
const d = axis.getPlotLinePath({
|
|
19789
|
+
value: pos + tickmarkOffset,
|
|
19790
|
+
lineWidth: gridLine.strokeWidth(),
|
|
19791
|
+
force: 'pass',
|
|
19792
|
+
old: old,
|
|
19793
|
+
acrossPanes: false // #18025
|
|
19794
|
+
});
|
|
19795
|
+
if (d) {
|
|
19796
|
+
attribs.d = d;
|
|
19797
|
+
attribs.opacity = old ? 0 : opacity;
|
|
19798
|
+
if (!styledMode) {
|
|
19799
|
+
attribs.stroke = gridLineColor;
|
|
19800
|
+
attribs.dashstyle = dashStyle;
|
|
19801
|
+
}
|
|
19744
19802
|
// If the parameter 'old' is set, the current call will be followed
|
|
19745
19803
|
// by another call, therefore do not do any animations this time
|
|
19746
|
-
|
|
19747
|
-
gridLine[old || tick.isNew ? 'attr' : 'animate']({
|
|
19748
|
-
d: gridLinePath,
|
|
19749
|
-
opacity: opacity
|
|
19750
|
-
});
|
|
19751
|
-
}
|
|
19804
|
+
gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
|
|
19752
19805
|
}
|
|
19753
19806
|
}
|
|
19754
19807
|
/**
|
|
@@ -19760,13 +19813,13 @@ class Tick {
|
|
|
19760
19813
|
* @param {number} opacity The opacity of the mark
|
|
19761
19814
|
*/
|
|
19762
19815
|
renderMark(xy, opacity) {
|
|
19763
|
-
const tick = this, axis = tick.axis, options = axis
|
|
19816
|
+
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
|
|
19764
19817
|
tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
|
|
19765
19818
|
let mark = tick.mark;
|
|
19766
|
-
const
|
|
19767
|
-
if (tickSize) {
|
|
19819
|
+
const verb = mark ? 'animate' : 'attr';
|
|
19820
|
+
if (tickSize || mark) {
|
|
19768
19821
|
// Negate the length
|
|
19769
|
-
if (axis.opposite) {
|
|
19822
|
+
if (axis.opposite && tickSize) {
|
|
19770
19823
|
tickSize[0] = -tickSize[0];
|
|
19771
19824
|
}
|
|
19772
19825
|
// First time, create it
|
|
@@ -19779,16 +19832,16 @@ class Tick {
|
|
|
19779
19832
|
tick.mark = mark = renderer.path()
|
|
19780
19833
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
|
|
19781
19834
|
.add(axis.axisGroup);
|
|
19782
|
-
if (!axis.chart.styledMode) {
|
|
19783
|
-
mark.attr({
|
|
19784
|
-
stroke: tickColor,
|
|
19785
|
-
'stroke-width': tickWidth
|
|
19786
|
-
});
|
|
19787
|
-
}
|
|
19788
19835
|
}
|
|
19789
|
-
|
|
19790
|
-
|
|
19791
|
-
|
|
19836
|
+
if (!chart.styledMode) {
|
|
19837
|
+
mark[verb]({
|
|
19838
|
+
stroke: tickColor,
|
|
19839
|
+
'stroke-width': tickWidth
|
|
19840
|
+
});
|
|
19841
|
+
}
|
|
19842
|
+
mark[verb]({
|
|
19843
|
+
d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
|
|
19844
|
+
opacity: tickSize ? opacity : 0
|
|
19792
19845
|
});
|
|
19793
19846
|
}
|
|
19794
19847
|
}
|
|
@@ -19950,6 +20003,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
|
|
|
19950
20003
|
* Axis options
|
|
19951
20004
|
*/
|
|
19952
20005
|
class Axis {
|
|
20006
|
+
/* *
|
|
20007
|
+
*
|
|
20008
|
+
* Static Properties
|
|
20009
|
+
*
|
|
20010
|
+
* */
|
|
19953
20011
|
/* *
|
|
19954
20012
|
*
|
|
19955
20013
|
* Constructors
|
|
@@ -20026,9 +20084,11 @@ class Axis {
|
|
|
20026
20084
|
* @name Highcharts.Axis#side
|
|
20027
20085
|
* @type {number}
|
|
20028
20086
|
*/
|
|
20029
|
-
axis.side =
|
|
20030
|
-
(
|
|
20031
|
-
|
|
20087
|
+
axis.side = userOptions.side ??
|
|
20088
|
+
(horiz ?
|
|
20089
|
+
(axis.opposite ? 0 : 2) : // Top : bottom
|
|
20090
|
+
(axis.opposite ? 1 : 3) // Right : left
|
|
20091
|
+
);
|
|
20032
20092
|
/**
|
|
20033
20093
|
* Current options for the axis after merge of defaults and user's
|
|
20034
20094
|
* options.
|
|
@@ -20039,8 +20099,8 @@ class Axis {
|
|
|
20039
20099
|
axis.setOptions(userOptions);
|
|
20040
20100
|
const options = axis.options, labelsOptions = options.labels;
|
|
20041
20101
|
// Set the type and fire an event
|
|
20042
|
-
axis.type
|
|
20043
|
-
axis.uniqueNames
|
|
20102
|
+
axis.type = options.type || 'linear';
|
|
20103
|
+
axis.uniqueNames = options.uniqueNames ?? true;
|
|
20044
20104
|
fireEvent(axis, 'afterSetType');
|
|
20045
20105
|
/**
|
|
20046
20106
|
* User's options for this axis without defaults.
|
|
@@ -20057,7 +20117,7 @@ class Axis {
|
|
|
20057
20117
|
* @name Highcharts.Axis#reversed
|
|
20058
20118
|
* @type {boolean}
|
|
20059
20119
|
*/
|
|
20060
|
-
axis.reversed =
|
|
20120
|
+
axis.reversed = options.reversed;
|
|
20061
20121
|
axis.visible = options.visible;
|
|
20062
20122
|
axis.zoomEnabled = options.zoomEnabled;
|
|
20063
20123
|
// Initial categories
|
|
@@ -20079,16 +20139,12 @@ class Axis {
|
|
|
20079
20139
|
*/
|
|
20080
20140
|
axis.categories = (isArray(options.categories) && options.categories) ||
|
|
20081
20141
|
(axis.hasNames ? [] : void 0);
|
|
20082
|
-
|
|
20083
|
-
// faster than array searching (#7725). Preserve on update (#3830)
|
|
20084
|
-
axis.names || (axis.names = []);
|
|
20142
|
+
axis.names || (axis.names = []); // Preserve on update (#3830)
|
|
20085
20143
|
axis.namesMap || (axis.namesMap = {});
|
|
20086
20144
|
// Placeholder for plotLines and plotBands groups
|
|
20087
|
-
axis.plotLinesAndBandsGroups = {};
|
|
20145
|
+
axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
|
|
20088
20146
|
// Shorthand types
|
|
20089
20147
|
axis.positiveValuesOnly = !!axis.logarithmic;
|
|
20090
|
-
// Flag, if axis is linked to another axis
|
|
20091
|
-
axis.isLinked = defined(options.linkedTo);
|
|
20092
20148
|
/**
|
|
20093
20149
|
* List of major ticks mapped by position on axis.
|
|
20094
20150
|
*
|
|
@@ -20097,8 +20153,8 @@ class Axis {
|
|
|
20097
20153
|
* @name Highcharts.Axis#ticks
|
|
20098
20154
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20099
20155
|
*/
|
|
20100
|
-
axis.ticks = {};
|
|
20101
|
-
axis.labelEdge = [];
|
|
20156
|
+
axis.ticks || (axis.ticks = {});
|
|
20157
|
+
axis.labelEdge || (axis.labelEdge = []);
|
|
20102
20158
|
/**
|
|
20103
20159
|
* List of minor ticks mapped by position on the axis.
|
|
20104
20160
|
*
|
|
@@ -20107,11 +20163,9 @@ class Axis {
|
|
|
20107
20163
|
* @name Highcharts.Axis#minorTicks
|
|
20108
20164
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20109
20165
|
*/
|
|
20110
|
-
axis.minorTicks = {};
|
|
20111
|
-
// List of plotLines/Bands
|
|
20112
|
-
axis.plotLinesAndBands = [];
|
|
20166
|
+
axis.minorTicks || (axis.minorTicks = {});
|
|
20113
20167
|
// Alternate bands
|
|
20114
|
-
axis.alternateBands = {};
|
|
20168
|
+
axis.alternateBands || (axis.alternateBands = {});
|
|
20115
20169
|
/**
|
|
20116
20170
|
* The length of the axis in terms of pixels.
|
|
20117
20171
|
*
|
|
@@ -20145,7 +20199,7 @@ class Axis {
|
|
|
20145
20199
|
* @name Highcharts.Axis#crosshair
|
|
20146
20200
|
* @type {boolean|Highcharts.AxisCrosshairOptions}
|
|
20147
20201
|
*/
|
|
20148
|
-
const crosshair = options.crosshair ?? splat(chart.options.tooltip
|
|
20202
|
+
const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
|
|
20149
20203
|
axis.crosshair = crosshair === true ? {} : crosshair;
|
|
20150
20204
|
// Register. Don't add it again on Axis.update().
|
|
20151
20205
|
if (chart.axes.indexOf(axis) === -1) { //
|
|
@@ -20200,14 +20254,14 @@ class Axis {
|
|
|
20200
20254
|
},
|
|
20201
20255
|
margin: 15
|
|
20202
20256
|
} :
|
|
20203
|
-
// Left and right axis, title rotated 90 or
|
|
20257
|
+
// Left and right axis, title rotated -90 or 90 degrees
|
|
20204
20258
|
// respectively
|
|
20205
20259
|
{
|
|
20206
20260
|
labels: {
|
|
20207
20261
|
padding: 1
|
|
20208
20262
|
},
|
|
20209
20263
|
title: {
|
|
20210
|
-
rotation: 90
|
|
20264
|
+
rotation: this.side === 1 ? 90 : -90
|
|
20211
20265
|
}
|
|
20212
20266
|
};
|
|
20213
20267
|
this.options = merge(sideSpecific,
|
|
@@ -20421,6 +20475,9 @@ class Axis {
|
|
|
20421
20475
|
if (!axis.isRadial) {
|
|
20422
20476
|
returnValue = correctFloat(returnValue);
|
|
20423
20477
|
}
|
|
20478
|
+
if (Math.abs(returnValue) < 1e-9) {
|
|
20479
|
+
returnValue = 0;
|
|
20480
|
+
}
|
|
20424
20481
|
}
|
|
20425
20482
|
return returnValue;
|
|
20426
20483
|
}
|
|
@@ -20476,7 +20533,7 @@ class Axis {
|
|
|
20476
20533
|
* The SVG path definition for the plot line.
|
|
20477
20534
|
*/
|
|
20478
20535
|
getPlotLinePath(options) {
|
|
20479
|
-
const axis = this,
|
|
20536
|
+
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;
|
|
20480
20537
|
let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
|
|
20481
20538
|
// eslint-disable-next-line valid-jsdoc
|
|
20482
20539
|
/**
|
|
@@ -20514,17 +20571,17 @@ class Axis {
|
|
|
20514
20571
|
skip = true;
|
|
20515
20572
|
force = false; // #7175, don't force it when path is invalid
|
|
20516
20573
|
}
|
|
20517
|
-
else if (
|
|
20518
|
-
y1 =
|
|
20574
|
+
else if (horiz) {
|
|
20575
|
+
y1 = top;
|
|
20519
20576
|
y2 = cHeight - axis.bottom + (axis.options.isInternal ?
|
|
20520
20577
|
0 :
|
|
20521
20578
|
(chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
|
|
20522
|
-
x1 = x2 = between(x1,
|
|
20579
|
+
x1 = x2 = between(x1, left, left + axis.width);
|
|
20523
20580
|
}
|
|
20524
20581
|
else {
|
|
20525
|
-
x1 =
|
|
20582
|
+
x1 = left;
|
|
20526
20583
|
x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
|
|
20527
|
-
y1 = y2 = between(y1,
|
|
20584
|
+
y1 = y2 = between(y1, top, top + axis.height);
|
|
20528
20585
|
}
|
|
20529
20586
|
e.path = skip && !force ?
|
|
20530
20587
|
void 0 :
|
|
@@ -20953,7 +21010,7 @@ class Axis {
|
|
|
20953
21010
|
* @emits Highcharts.Axis#event:foundExtremes
|
|
20954
21011
|
*/
|
|
20955
21012
|
setTickInterval(secondPass) {
|
|
20956
|
-
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,
|
|
21013
|
+
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;
|
|
20957
21014
|
let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
|
|
20958
21015
|
// Only non-negative tickInterval is valid, #12961
|
|
20959
21016
|
tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
|
|
@@ -20966,7 +21023,6 @@ class Axis {
|
|
|
20966
21023
|
hardMax = (axis.userMax ?? time.parse(options.max));
|
|
20967
21024
|
// Linked axis gets the extremes from the parent axis
|
|
20968
21025
|
if (linkedParent) {
|
|
20969
|
-
axis.linkedParent = linkedParent;
|
|
20970
21026
|
linkedParentExtremes = linkedParent.getExtremes();
|
|
20971
21027
|
axis.min =
|
|
20972
21028
|
linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
|
|
@@ -21276,7 +21332,7 @@ class Axis {
|
|
|
21276
21332
|
// Reset min/max or remove extremes based on start/end on tick
|
|
21277
21333
|
this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
|
|
21278
21334
|
this.trimTicks(tickPositions, startOnTick, endOnTick);
|
|
21279
|
-
if (!this.
|
|
21335
|
+
if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
|
|
21280
21336
|
// Subtract half a unit (#2619, #2846, #2515, #3390), but not in
|
|
21281
21337
|
// case of multiple ticks (#6897)
|
|
21282
21338
|
if (this.single &&
|
|
@@ -21311,7 +21367,7 @@ class Axis {
|
|
|
21311
21367
|
trimTicks(tickPositions, startOnTick, endOnTick) {
|
|
21312
21368
|
const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
|
|
21313
21369
|
fireEvent(this, 'trimTicks');
|
|
21314
|
-
if (!this.
|
|
21370
|
+
if (!this.linkedParent ||
|
|
21315
21371
|
// Linked non-grid axes should trim ticks, #21743.
|
|
21316
21372
|
// Grid axis has custom handling of ticks.
|
|
21317
21373
|
!this.grid) {
|
|
@@ -21585,7 +21641,15 @@ class Axis {
|
|
|
21585
21641
|
* @emits Highcharts.Axis#event:afterSetScale
|
|
21586
21642
|
*/
|
|
21587
21643
|
setScale() {
|
|
21588
|
-
const axis = this, { coll, stacking } = axis
|
|
21644
|
+
const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
|
|
21645
|
+
find(axes, (a) => a.options.id === linkedTo) :
|
|
21646
|
+
(isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
|
|
21647
|
+
parent === axis ? void 0 : parent;
|
|
21648
|
+
// Scale a later-ordered parent first so its extremes are ready. Skip
|
|
21649
|
+
// grid column axes, which live outside the collection (#24658).
|
|
21650
|
+
if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
|
|
21651
|
+
linkedParent.setScale();
|
|
21652
|
+
}
|
|
21589
21653
|
let isDirtyData = false, isXAxisDirty = false;
|
|
21590
21654
|
axis.series.forEach((series) => {
|
|
21591
21655
|
isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
|
|
@@ -21602,7 +21666,7 @@ class Axis {
|
|
|
21602
21666
|
if (isDirtyAxisLength ||
|
|
21603
21667
|
isDirtyData ||
|
|
21604
21668
|
isXAxisDirty ||
|
|
21605
|
-
axis.
|
|
21669
|
+
axis.linkedParent ||
|
|
21606
21670
|
axis.forceRedraw ||
|
|
21607
21671
|
axis.userMin !== axis.old?.userMin ||
|
|
21608
21672
|
axis.userMax !== axis.old?.userMax ||
|
|
@@ -21964,7 +22028,7 @@ class Axis {
|
|
|
21964
22028
|
renderUnsquish() {
|
|
21965
22029
|
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 ?
|
|
21966
22030
|
2 * (labelOptions.padding || 0) :
|
|
21967
|
-
labelOptions.distance
|
|
22031
|
+
labelOptions.distance ?? 15 // #21172
|
|
21968
22032
|
))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
|
|
21969
22033
|
let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
|
|
21970
22034
|
// Set rotation option unless it is "auto", like in gauges
|
|
@@ -22044,7 +22108,6 @@ class Axis {
|
|
|
22044
22108
|
});
|
|
22045
22109
|
}
|
|
22046
22110
|
}
|
|
22047
|
-
tick.rotation = attr.rotation;
|
|
22048
22111
|
}
|
|
22049
22112
|
}, this);
|
|
22050
22113
|
// Note: Why is this not part of getLabelPosition?
|
|
@@ -22076,46 +22139,50 @@ class Axis {
|
|
|
22076
22139
|
* Whether or not to display the title.
|
|
22077
22140
|
*/
|
|
22078
22141
|
addTitle(display) {
|
|
22079
|
-
const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode
|
|
22080
|
-
|
|
22081
|
-
|
|
22082
|
-
|
|
22083
|
-
|
|
22084
|
-
|
|
22085
|
-
|
|
22086
|
-
|
|
22087
|
-
|
|
22088
|
-
|
|
22089
|
-
|
|
22090
|
-
|
|
22091
|
-
|
|
22092
|
-
|
|
22093
|
-
|
|
22094
|
-
|
|
22095
|
-
|
|
22096
|
-
|
|
22097
|
-
|
|
22098
|
-
|
|
22099
|
-
|
|
22100
|
-
})
|
|
22142
|
+
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 ||
|
|
22143
|
+
(horiz ? {
|
|
22144
|
+
low: 'left',
|
|
22145
|
+
middle: 'center',
|
|
22146
|
+
high: 'right'
|
|
22147
|
+
} : {
|
|
22148
|
+
low: opposite ? 'right' : 'left',
|
|
22149
|
+
middle: 'center',
|
|
22150
|
+
high: opposite ? 'left' : 'right'
|
|
22151
|
+
})[axisTitleOptions.align], attr = {
|
|
22152
|
+
text: axisTitleOptions.text || '',
|
|
22153
|
+
zIndex: 7,
|
|
22154
|
+
align: textAlign
|
|
22155
|
+
}, animatable = {
|
|
22156
|
+
rotation: axisTitleOptions.rotation || 0
|
|
22157
|
+
};
|
|
22158
|
+
let axisTitle = axis.axisTitle;
|
|
22159
|
+
if (!axisTitle) {
|
|
22160
|
+
axisTitle = renderer
|
|
22161
|
+
.text('', 0, 0, axisTitleOptions.useHTML)
|
|
22162
|
+
.attr(extend(attr, animatable))
|
|
22101
22163
|
.addClass('highcharts-axis-title');
|
|
22102
|
-
|
|
22103
|
-
|
|
22104
|
-
axis.axisTitle.css(merge(axisTitleOptions.style));
|
|
22105
|
-
}
|
|
22106
|
-
axis.axisTitle.add(axis.axisGroup);
|
|
22107
|
-
axis.axisTitle.isNew = true;
|
|
22164
|
+
axisTitle.add(axis.axisGroup);
|
|
22165
|
+
axisTitle.isNew = true;
|
|
22108
22166
|
}
|
|
22109
|
-
|
|
22110
|
-
|
|
22111
|
-
|
|
22112
|
-
|
|
22113
|
-
|
|
22114
|
-
|
|
22115
|
-
|
|
22167
|
+
else {
|
|
22168
|
+
axisTitle
|
|
22169
|
+
.attr(attr)
|
|
22170
|
+
.animate(animatable);
|
|
22171
|
+
}
|
|
22172
|
+
if (!styledMode) {
|
|
22173
|
+
// #7814, don't mutate the style option
|
|
22174
|
+
const css = merge(axisTitleOptions.style);
|
|
22175
|
+
// Max width defaults to the length of the axis
|
|
22176
|
+
if (!axisTitleOptions.style.width &&
|
|
22177
|
+
!axis.isRadial) {
|
|
22178
|
+
css.width = axis.len + 'px';
|
|
22179
|
+
}
|
|
22180
|
+
axisTitle.css(css);
|
|
22116
22181
|
}
|
|
22117
22182
|
// Hide or show the title depending on whether showEmpty is set
|
|
22118
|
-
|
|
22183
|
+
axisTitle[display ? 'show' : 'hide'](display);
|
|
22184
|
+
// Register
|
|
22185
|
+
axis.axisTitle = axisTitle;
|
|
22119
22186
|
}
|
|
22120
22187
|
/**
|
|
22121
22188
|
* Generates a tick for initial positioning.
|
|
@@ -22143,17 +22210,18 @@ class Axis {
|
|
|
22143
22210
|
createGroups() {
|
|
22144
22211
|
const { axisParent, // Used in color axis
|
|
22145
22212
|
chart, coll, options } = this, renderer = chart.renderer;
|
|
22146
|
-
const createGroup = (name, suffix
|
|
22147
|
-
.attr({ zIndex })
|
|
22213
|
+
const createGroup = (name, suffix) => renderer.g(name)
|
|
22148
22214
|
.addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
|
|
22149
22215
|
(this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
|
|
22150
22216
|
(options.className || ''))
|
|
22151
22217
|
.add(axisParent);
|
|
22152
|
-
|
|
22153
|
-
|
|
22154
|
-
|
|
22155
|
-
this.
|
|
22156
|
-
|
|
22218
|
+
(this.axisGroup || (this.axisGroup = createGroup('axis', '')))
|
|
22219
|
+
.attr({ zIndex: options.zIndex });
|
|
22220
|
+
(this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
|
|
22221
|
+
.clip(this.clippable ? chart.plotClipInner : void 0)
|
|
22222
|
+
.attr({ zIndex: options.gridZIndex });
|
|
22223
|
+
(this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
|
|
22224
|
+
.attr({ zIndex: options.labels.zIndex });
|
|
22157
22225
|
}
|
|
22158
22226
|
/**
|
|
22159
22227
|
* Shuffle existing category ticks, like in bar race chart
|
|
@@ -22161,8 +22229,11 @@ class Axis {
|
|
|
22161
22229
|
* @internal
|
|
22162
22230
|
*/
|
|
22163
22231
|
shuffleTicks() {
|
|
22164
|
-
const ticks = this.ticks, oldNames = this.old?.names;
|
|
22165
|
-
if (this.type === 'category' &&
|
|
22232
|
+
const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
|
|
22233
|
+
if (this.type === 'category' &&
|
|
22234
|
+
oldNames &&
|
|
22235
|
+
!hasDuplicates(oldNames) &&
|
|
22236
|
+
!hasDuplicates(this.names)) {
|
|
22166
22237
|
oldNames.forEach((name, oldPos) => {
|
|
22167
22238
|
const pos = this.namesMap[name];
|
|
22168
22239
|
if (defined(pos) && oldPos !== pos) {
|
|
@@ -22204,7 +22275,7 @@ class Axis {
|
|
|
22204
22275
|
* @emits Highcharts.Axis#event:afterGetOffset
|
|
22205
22276
|
*/
|
|
22206
22277
|
getOffset() {
|
|
22207
|
-
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];
|
|
22278
|
+
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;
|
|
22208
22279
|
let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
|
|
22209
22280
|
labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
|
|
22210
22281
|
// For reuse in Axis.render
|
|
@@ -22212,7 +22283,7 @@ class Axis {
|
|
|
22212
22283
|
// Set/reset staggerLines
|
|
22213
22284
|
axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
|
|
22214
22285
|
axis.createGroups();
|
|
22215
|
-
if (hasData || axis.
|
|
22286
|
+
if (hasData || axis.linkedParent) {
|
|
22216
22287
|
// Shuffle existing category ticks
|
|
22217
22288
|
axis.shuffleTicks();
|
|
22218
22289
|
// Generate new ticks
|
|
@@ -22264,6 +22335,9 @@ class Axis {
|
|
|
22264
22335
|
axisTitleOptions.margin ?? (horiz ? 5 : 10);
|
|
22265
22336
|
}
|
|
22266
22337
|
}
|
|
22338
|
+
else {
|
|
22339
|
+
axis.axisTitle = axis.axisTitle?.destroy();
|
|
22340
|
+
}
|
|
22267
22341
|
// Render the axis line
|
|
22268
22342
|
axis.renderLine();
|
|
22269
22343
|
// Handle automatic or user set offset
|
|
@@ -22287,12 +22361,10 @@ class Axis {
|
|
|
22287
22361
|
labelOffsetPadded -= lineHeightCorrection;
|
|
22288
22362
|
labelOffsetPadded += directionFactor * (horiz ?
|
|
22289
22363
|
(labelOptions.y ??
|
|
22290
|
-
(tickRotCorr.y +
|
|
22291
|
-
directionFactor * labelOptions.distance)) :
|
|
22364
|
+
(tickRotCorr.y + directionFactor * distance)) :
|
|
22292
22365
|
(labelOptions.x ?? (reserveSpaceDefault ?
|
|
22293
|
-
directionFactor * (
|
|
22294
|
-
tickRotCorr.x +
|
|
22295
|
-
directionFactor * labelOptions.distance)));
|
|
22366
|
+
directionFactor * (distance - absTickRotCorrX) :
|
|
22367
|
+
tickRotCorr.x + directionFactor * distance)));
|
|
22296
22368
|
if (!horiz &&
|
|
22297
22369
|
!reserveSpaceDefault &&
|
|
22298
22370
|
axis.labelAlign === 'center' &&
|
|
@@ -22306,8 +22378,8 @@ class Axis {
|
|
|
22306
22378
|
// has rendered.
|
|
22307
22379
|
if (coll !== 'colorAxis' && clipOffset) {
|
|
22308
22380
|
const tickSize = this.tickSize('tick');
|
|
22309
|
-
axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
|
|
22310
|
-
|
|
22381
|
+
axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
|
|
22382
|
+
labelOffsetPadded, // #3027
|
|
22311
22383
|
tickPositions?.length && tickSize ?
|
|
22312
22384
|
tickSize[0] + directionFactor * axis.offset :
|
|
22313
22385
|
0 // #4866
|
|
@@ -22369,18 +22441,20 @@ class Axis {
|
|
|
22369
22441
|
* @function Highcharts.Axis#renderLine
|
|
22370
22442
|
*/
|
|
22371
22443
|
renderLine() {
|
|
22372
|
-
const { chart, offset = 0, options } = this;
|
|
22444
|
+
const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
|
|
22373
22445
|
this.axisLine || (this.axisLine = chart.renderer.path()
|
|
22374
22446
|
.addClass('highcharts-axis-line')
|
|
22375
|
-
.attr(
|
|
22376
|
-
stroke: options.lineColor,
|
|
22377
|
-
'stroke-width': options.lineWidth,
|
|
22378
|
-
zIndex: 7
|
|
22379
|
-
})
|
|
22447
|
+
.attr({ zIndex: 7 })
|
|
22380
22448
|
.clip(this.clippable && offset <= 0 ?
|
|
22381
22449
|
chart.plotClipOuter :
|
|
22382
22450
|
void 0)
|
|
22383
22451
|
.add(this.axisGroup));
|
|
22452
|
+
if (!chart.styledMode) {
|
|
22453
|
+
this.axisLine[verb]({
|
|
22454
|
+
stroke: options.lineColor,
|
|
22455
|
+
'stroke-width': options.lineWidth
|
|
22456
|
+
});
|
|
22457
|
+
}
|
|
22384
22458
|
}
|
|
22385
22459
|
/**
|
|
22386
22460
|
* Position the axis title.
|
|
@@ -22465,9 +22539,9 @@ class Axis {
|
|
|
22465
22539
|
* Whether the tick should animate in from last computed position
|
|
22466
22540
|
*/
|
|
22467
22541
|
renderTick(pos, i, slideIn) {
|
|
22468
|
-
const axis = this,
|
|
22542
|
+
const axis = this, ticks = axis.ticks;
|
|
22469
22543
|
// Linked axes need an extra check to find out if
|
|
22470
|
-
if (!
|
|
22544
|
+
if (!axis.linkedParent ||
|
|
22471
22545
|
(pos >= axis.min && pos <= axis.max) ||
|
|
22472
22546
|
axis.grid?.isColumn) {
|
|
22473
22547
|
if (!ticks[pos]) {
|
|
@@ -22493,11 +22567,13 @@ class Axis {
|
|
|
22493
22567
|
* @emits Highcharts.Axis#event:afterRender
|
|
22494
22568
|
*/
|
|
22495
22569
|
render() {
|
|
22496
|
-
const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options,
|
|
22570
|
+
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);
|
|
22497
22571
|
let from, to;
|
|
22498
22572
|
// Reset
|
|
22499
22573
|
axis.labelEdge.length = 0;
|
|
22500
22574
|
axis.overlap = false;
|
|
22575
|
+
// Update z-indices
|
|
22576
|
+
this.createGroups();
|
|
22501
22577
|
// Mark all elements inActive before we go over and mark the active ones
|
|
22502
22578
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22503
22579
|
objectEach(coll, function (tick) {
|
|
@@ -22516,7 +22592,7 @@ class Axis {
|
|
|
22516
22592
|
}
|
|
22517
22593
|
}
|
|
22518
22594
|
// If the series has data draw the ticks. Else only the line and title
|
|
22519
|
-
if (axis.hasData() ||
|
|
22595
|
+
if (axis.hasData() || axis.linkedParent) {
|
|
22520
22596
|
const slideInTicks = axis.chart.hasRendered &&
|
|
22521
22597
|
axis.old && isNumber(axis.old.min);
|
|
22522
22598
|
// Minor ticks
|
|
@@ -22554,8 +22630,10 @@ class Axis {
|
|
|
22554
22630
|
tickmarkOffset)) { // #2248, #4660
|
|
22555
22631
|
if (!alternateBands[pos]) {
|
|
22556
22632
|
// Should be imported from PlotLineOrBand.js, but
|
|
22557
|
-
// the dependency cycle with axis is a problem
|
|
22558
|
-
|
|
22633
|
+
// the dependency cycle with axis is a problem. Try
|
|
22634
|
+
// moving it to the PlotLineOrBand axis composition
|
|
22635
|
+
// later.
|
|
22636
|
+
alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
|
|
22559
22637
|
}
|
|
22560
22638
|
from = pos + tickmarkOffset; // #949
|
|
22561
22639
|
alternateBands[pos].options = {
|
|
@@ -22569,17 +22647,13 @@ class Axis {
|
|
|
22569
22647
|
}
|
|
22570
22648
|
});
|
|
22571
22649
|
}
|
|
22572
|
-
// Custom plot lines and bands
|
|
22573
|
-
if (!axis._addedPlotLB) { // Only first time
|
|
22574
|
-
axis._addedPlotLB = true;
|
|
22575
|
-
(options.plotLines || [])
|
|
22576
|
-
.concat(options.plotBands || [])
|
|
22577
|
-
.forEach(function (plotLineOptions) {
|
|
22578
|
-
axis
|
|
22579
|
-
.addPlotBandOrLine(plotLineOptions);
|
|
22580
|
-
});
|
|
22581
|
-
}
|
|
22582
22650
|
} // End if hasData
|
|
22651
|
+
// Render or update rendering of plot lines and bands
|
|
22652
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
22653
|
+
for (const plotItem of this[coll]) {
|
|
22654
|
+
plotItem.render();
|
|
22655
|
+
}
|
|
22656
|
+
}
|
|
22583
22657
|
// Remove inactive ticks
|
|
22584
22658
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22585
22659
|
const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
|
|
@@ -22613,20 +22687,22 @@ class Axis {
|
|
|
22613
22687
|
// Set the axis line path
|
|
22614
22688
|
if (axisLine) {
|
|
22615
22689
|
axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
|
|
22616
|
-
d: this.getLinePath(axisLine.strokeWidth())
|
|
22690
|
+
d: this.getLinePath(axisLine.strokeWidth()),
|
|
22691
|
+
opacity
|
|
22617
22692
|
});
|
|
22618
22693
|
axisLine.isPlaced = true;
|
|
22619
22694
|
// Show or hide the line depending on options.showEmpty
|
|
22620
22695
|
axisLine[showAxis ? 'show' : 'hide'](showAxis);
|
|
22621
22696
|
}
|
|
22622
22697
|
if (axisTitle && showAxis) {
|
|
22623
|
-
axisTitle[axisTitle.isNew ? 'attr' : 'animate'](
|
|
22698
|
+
axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
|
|
22699
|
+
opacity,
|
|
22700
|
+
...axis.getTitlePosition(axisTitle)
|
|
22701
|
+
});
|
|
22624
22702
|
axisTitle.isNew = false;
|
|
22625
22703
|
}
|
|
22626
22704
|
// Stacked totals
|
|
22627
|
-
|
|
22628
|
-
axis.stacking.renderStackTotals();
|
|
22629
|
-
}
|
|
22705
|
+
axis.stacking?.renderStackTotals();
|
|
22630
22706
|
// First time, save the existing state
|
|
22631
22707
|
if (!this.old) {
|
|
22632
22708
|
this.saveOld();
|
|
@@ -22642,13 +22718,11 @@ class Axis {
|
|
|
22642
22718
|
* @function Highcharts.Axis#redraw
|
|
22643
22719
|
*/
|
|
22644
22720
|
redraw() {
|
|
22645
|
-
|
|
22721
|
+
// If it was initially visible, but dynamically hidden, `this.axisGroup`
|
|
22722
|
+
// exists. Then render with opacity 0.
|
|
22723
|
+
if (this.visible || this.axisGroup) {
|
|
22646
22724
|
// Render the axis
|
|
22647
22725
|
this.render();
|
|
22648
|
-
// Move plot lines and bands
|
|
22649
|
-
this.plotLinesAndBands.forEach(function (plotLine) {
|
|
22650
|
-
plotLine.render();
|
|
22651
|
-
});
|
|
22652
22726
|
}
|
|
22653
22727
|
// Mark associated series as dirty and ready for redraw
|
|
22654
22728
|
this.series.forEach(function (series) {
|
|
@@ -22662,6 +22736,7 @@ class Axis {
|
|
|
22662
22736
|
*/
|
|
22663
22737
|
saveOld() {
|
|
22664
22738
|
this.old = isNumber(this.min) ? {
|
|
22739
|
+
horiz: this.horiz,
|
|
22665
22740
|
len: this.len,
|
|
22666
22741
|
max: this.max,
|
|
22667
22742
|
min: this.min,
|
|
@@ -22671,64 +22746,37 @@ class Axis {
|
|
|
22671
22746
|
userMin: this.userMin
|
|
22672
22747
|
} : void 0;
|
|
22673
22748
|
}
|
|
22674
|
-
/**
|
|
22675
|
-
* Returns an array of axis properties, that should be untouched during
|
|
22676
|
-
* reinitialization.
|
|
22677
|
-
*
|
|
22678
|
-
* @internal
|
|
22679
|
-
* @function Highcharts.Axis#getKeepProps
|
|
22680
|
-
*/
|
|
22681
|
-
getKeepProps() {
|
|
22682
|
-
return (this.keepProps || Axis.keepProps);
|
|
22683
|
-
}
|
|
22684
22749
|
/**
|
|
22685
22750
|
* Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
|
|
22686
22751
|
* to fully remove the axis.
|
|
22687
22752
|
*
|
|
22688
22753
|
* @internal
|
|
22689
22754
|
* @function Highcharts.Axis#destroy
|
|
22690
|
-
*
|
|
22691
|
-
* @param {boolean} [keepEvents]
|
|
22692
|
-
* Whether to preserve events, used internally in Axis.update.
|
|
22693
22755
|
*/
|
|
22694
|
-
destroy(
|
|
22695
|
-
|
|
22696
|
-
fireEvent(this, 'destroy', { keepEvents: keepEvents });
|
|
22756
|
+
destroy() {
|
|
22757
|
+
fireEvent(this, 'destroy');
|
|
22697
22758
|
// Remove the events
|
|
22698
|
-
|
|
22699
|
-
removeEvent(axis);
|
|
22700
|
-
}
|
|
22759
|
+
removeEvent(this);
|
|
22701
22760
|
// Destroy collections
|
|
22702
|
-
[
|
|
22703
|
-
|
|
22704
|
-
|
|
22705
|
-
|
|
22706
|
-
|
|
22707
|
-
|
|
22708
|
-
|
|
22709
|
-
|
|
22710
|
-
|
|
22711
|
-
// Destroy elements
|
|
22761
|
+
[
|
|
22762
|
+
this.ticks,
|
|
22763
|
+
this.minorTicks,
|
|
22764
|
+
this.alternateBands,
|
|
22765
|
+
this.plotBands,
|
|
22766
|
+
this.plotLines,
|
|
22767
|
+
this.plotLinesAndBandsGroups
|
|
22768
|
+
].forEach(destroyObjectProperties);
|
|
22769
|
+
// Destroy elements and clear reference
|
|
22712
22770
|
[
|
|
22713
22771
|
'axisLine', 'axisTitle', 'axisGroup',
|
|
22714
22772
|
'gridGroup', 'labelGroup', 'cross', 'scrollbar'
|
|
22715
|
-
].forEach(
|
|
22716
|
-
|
|
22717
|
-
axis[prop] = axis[prop].destroy();
|
|
22718
|
-
}
|
|
22773
|
+
].forEach((prop) => {
|
|
22774
|
+
this[prop] = this[prop]?.destroy();
|
|
22719
22775
|
});
|
|
22720
|
-
// Destroy each generated group for plotLines and plotBands
|
|
22721
|
-
for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
|
|
22722
|
-
axis.plotLinesAndBandsGroups[plotGroup] =
|
|
22723
|
-
axis.plotLinesAndBandsGroups[plotGroup].destroy();
|
|
22724
|
-
}
|
|
22725
22776
|
// Delete all properties and fall back to the prototype.
|
|
22726
|
-
objectEach(
|
|
22727
|
-
|
|
22728
|
-
delete axis[key];
|
|
22729
|
-
}
|
|
22777
|
+
objectEach(this, (_val, key) => {
|
|
22778
|
+
delete this[key];
|
|
22730
22779
|
});
|
|
22731
|
-
this.eventOptions = eventOptions;
|
|
22732
22780
|
}
|
|
22733
22781
|
/**
|
|
22734
22782
|
* Internal function to draw a crosshair.
|
|
@@ -22822,25 +22870,21 @@ class Axis {
|
|
|
22822
22870
|
void 0 :
|
|
22823
22871
|
chart.plotClipInner)
|
|
22824
22872
|
.add();
|
|
22825
|
-
|
|
22826
|
-
|
|
22827
|
-
|
|
22828
|
-
|
|
22829
|
-
|
|
22830
|
-
|
|
22831
|
-
|
|
22832
|
-
|
|
22833
|
-
|
|
22834
|
-
|
|
22835
|
-
|
|
22836
|
-
|
|
22837
|
-
|
|
22838
|
-
|
|
22839
|
-
|
|
22840
|
-
dashstyle: options.dashStyle
|
|
22841
|
-
});
|
|
22842
|
-
}
|
|
22843
|
-
}
|
|
22873
|
+
}
|
|
22874
|
+
// Presentational attributes
|
|
22875
|
+
if (!chart.styledMode) {
|
|
22876
|
+
cross
|
|
22877
|
+
.attr({
|
|
22878
|
+
stroke: options.color || (categorized ?
|
|
22879
|
+
Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
|
|
22880
|
+
'var(--highcharts-neutral-color-20)'),
|
|
22881
|
+
'stroke-width': options.width ?? 1,
|
|
22882
|
+
// Dash style must be after stroke-width
|
|
22883
|
+
dashstyle: options.dashStyle || 'Solid'
|
|
22884
|
+
})
|
|
22885
|
+
.css({
|
|
22886
|
+
'pointer-events': 'none'
|
|
22887
|
+
});
|
|
22844
22888
|
}
|
|
22845
22889
|
cross
|
|
22846
22890
|
.show()
|
|
@@ -22850,9 +22894,7 @@ class Axis {
|
|
|
22850
22894
|
'stroke-width': this.transA
|
|
22851
22895
|
});
|
|
22852
22896
|
}
|
|
22853
|
-
|
|
22854
|
-
this.cross.e = e;
|
|
22855
|
-
}
|
|
22897
|
+
cross.e = e;
|
|
22856
22898
|
},
|
|
22857
22899
|
// Only use delay if the crosshair is currently hidden
|
|
22858
22900
|
(!graphic || graphic.attr('visibility') === 'hidden') ?
|
|
@@ -22891,13 +22933,14 @@ class Axis {
|
|
|
22891
22933
|
* operations on the chart, it is a good idea to set redraw to false and
|
|
22892
22934
|
* call {@link Chart#redraw} after.
|
|
22893
22935
|
*/
|
|
22894
|
-
update(options, redraw) {
|
|
22936
|
+
update(options = {}, redraw = true) {
|
|
22895
22937
|
const chart = this.chart;
|
|
22938
|
+
fireEvent(this, 'update', { options });
|
|
22896
22939
|
options = merge(this.userOptions, options);
|
|
22897
|
-
this.
|
|
22940
|
+
this.isDirty = this.forceRedraw = true;
|
|
22898
22941
|
this.init(chart, options);
|
|
22899
22942
|
chart.isDirtyBox = true;
|
|
22900
|
-
if (redraw
|
|
22943
|
+
if (redraw) {
|
|
22901
22944
|
chart.redraw();
|
|
22902
22945
|
}
|
|
22903
22946
|
}
|
|
@@ -22966,26 +23009,6 @@ class Axis {
|
|
|
22966
23009
|
this.update({ categories: categories }, redraw);
|
|
22967
23010
|
}
|
|
22968
23011
|
}
|
|
22969
|
-
/* *
|
|
22970
|
-
*
|
|
22971
|
-
* Static Properties
|
|
22972
|
-
*
|
|
22973
|
-
* */
|
|
22974
|
-
/**
|
|
22975
|
-
* Properties to survive after destroy, needed for Axis.update (#4317,
|
|
22976
|
-
* #5773, #5881).
|
|
22977
|
-
* @internal
|
|
22978
|
-
*/
|
|
22979
|
-
Axis.keepProps = [
|
|
22980
|
-
'coll',
|
|
22981
|
-
'extKey',
|
|
22982
|
-
'hcEvents',
|
|
22983
|
-
'len',
|
|
22984
|
-
'names',
|
|
22985
|
-
'series',
|
|
22986
|
-
'userMax',
|
|
22987
|
-
'userMin'
|
|
22988
|
-
];
|
|
22989
23012
|
/* *
|
|
22990
23013
|
*
|
|
22991
23014
|
* Default Export
|
|
@@ -23256,6 +23279,8 @@ Axis.keepProps = [
|
|
|
23256
23279
|
* */
|
|
23257
23280
|
|
|
23258
23281
|
|
|
23282
|
+
const { composed: DateTimeAxis_composed } = Core_Globals;
|
|
23283
|
+
|
|
23259
23284
|
|
|
23260
23285
|
/* *
|
|
23261
23286
|
*
|
|
@@ -23279,8 +23304,7 @@ var DateTimeAxis;
|
|
|
23279
23304
|
* @internal
|
|
23280
23305
|
*/
|
|
23281
23306
|
function compose(AxisClass) {
|
|
23282
|
-
if (
|
|
23283
|
-
AxisClass.keepProps.push('dateTime');
|
|
23307
|
+
if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
|
|
23284
23308
|
const axisProto = AxisClass.prototype;
|
|
23285
23309
|
axisProto.getTimeTicks = getTimeTicks;
|
|
23286
23310
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
@@ -23442,6 +23466,8 @@ var DateTimeAxis;
|
|
|
23442
23466
|
* */
|
|
23443
23467
|
|
|
23444
23468
|
|
|
23469
|
+
const { composed: LogarithmicAxis_composed } = Core_Globals;
|
|
23470
|
+
|
|
23445
23471
|
/* *
|
|
23446
23472
|
*
|
|
23447
23473
|
* Class
|
|
@@ -23465,8 +23491,7 @@ var LogarithmicAxis;
|
|
|
23465
23491
|
* @internal
|
|
23466
23492
|
*/
|
|
23467
23493
|
function compose(AxisClass) {
|
|
23468
|
-
if (
|
|
23469
|
-
AxisClass.keepProps.push('logarithmic');
|
|
23494
|
+
if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
|
|
23470
23495
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
23471
23496
|
addEvent(AxisClass, 'afterInit', onAfterInit);
|
|
23472
23497
|
}
|
|
@@ -23675,24 +23700,7 @@ var PlotLineOrBandAxis;
|
|
|
23675
23700
|
* Functions
|
|
23676
23701
|
*
|
|
23677
23702
|
* */
|
|
23678
|
-
|
|
23679
|
-
* Add a plot band after render time.
|
|
23680
|
-
*
|
|
23681
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23682
|
-
* Toggle the plot band from a button
|
|
23683
|
-
*
|
|
23684
|
-
* @function Highcharts.Axis#addPlotBand
|
|
23685
|
-
*
|
|
23686
|
-
* @param {Highcharts.AxisPlotBandsOptions} options
|
|
23687
|
-
* A configuration object for the plot band, as defined in
|
|
23688
|
-
* [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
|
|
23689
|
-
*
|
|
23690
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23691
|
-
* The added plot band, or `undefined` if the options are not valid.
|
|
23692
|
-
*/
|
|
23693
|
-
function addPlotBand(options) {
|
|
23694
|
-
return this.addPlotBandOrLine(options, 'plotBands');
|
|
23695
|
-
}
|
|
23703
|
+
const getAdderFunction = (coll) =>
|
|
23696
23704
|
/**
|
|
23697
23705
|
* Add a plot band or plot line after render time. Called from
|
|
23698
23706
|
* addPlotBand and addPlotLine internally.
|
|
@@ -23700,65 +23708,85 @@ var PlotLineOrBandAxis;
|
|
|
23700
23708
|
* @internal
|
|
23701
23709
|
* @function Highcharts.Axis#addPlotBandOrLine
|
|
23702
23710
|
* @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
|
|
23703
|
-
*
|
|
23711
|
+
* The `plotBand` or `plotLine` configuration object.
|
|
23704
23712
|
*/
|
|
23705
|
-
function
|
|
23706
|
-
|
|
23707
|
-
|
|
23713
|
+
function addPlotLineOrBand(options) {
|
|
23714
|
+
var _a;
|
|
23715
|
+
const plotItem = new PlotLineOrBandClass(this, options, coll);
|
|
23708
23716
|
if (this.visible) {
|
|
23709
|
-
|
|
23710
|
-
}
|
|
23711
|
-
if (obj) { // #2189
|
|
23712
|
-
if (!this._addedPlotLB) {
|
|
23713
|
-
this._addedPlotLB = true;
|
|
23714
|
-
(userOptions.plotLines || [])
|
|
23715
|
-
.concat(userOptions.plotBands || [])
|
|
23716
|
-
.forEach((plotLineOptions) => {
|
|
23717
|
-
this.addPlotBandOrLine(plotLineOptions);
|
|
23718
|
-
});
|
|
23719
|
-
}
|
|
23720
|
-
// Add it to the user options for exporting and Axis.update
|
|
23721
|
-
if (coll) {
|
|
23722
|
-
// Workaround Microsoft/TypeScript issue #32693
|
|
23723
|
-
const updatedOptions = (userOptions[coll] || []);
|
|
23724
|
-
updatedOptions.push(options);
|
|
23725
|
-
userOptions[coll] = updatedOptions;
|
|
23726
|
-
}
|
|
23727
|
-
this.plotLinesAndBands.push(obj);
|
|
23717
|
+
plotItem.render();
|
|
23728
23718
|
}
|
|
23729
|
-
|
|
23730
|
-
|
|
23731
|
-
|
|
23732
|
-
|
|
23733
|
-
|
|
23734
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23735
|
-
* Toggle the plot line from a button
|
|
23736
|
-
*
|
|
23737
|
-
* @function Highcharts.Axis#addPlotLine
|
|
23738
|
-
*
|
|
23739
|
-
* @param {Highcharts.AxisPlotLinesOptions} options
|
|
23740
|
-
* A configuration object for the plot line, as defined in
|
|
23741
|
-
* [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
|
|
23742
|
-
*
|
|
23743
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23744
|
-
* The added plot line, or `undefined` if the options are not valid.
|
|
23745
|
-
*/
|
|
23746
|
-
function addPlotLine(options) {
|
|
23747
|
-
return this.addPlotBandOrLine(options, 'plotLines');
|
|
23748
|
-
}
|
|
23719
|
+
(_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
|
|
23720
|
+
this.options[coll].push(options);
|
|
23721
|
+
this[coll].push(plotItem);
|
|
23722
|
+
return plotItem;
|
|
23723
|
+
};
|
|
23749
23724
|
/** @internal */
|
|
23750
23725
|
function compose(PlotLineOrBandType, AxisClass) {
|
|
23751
23726
|
const axisProto = AxisClass.prototype;
|
|
23752
23727
|
if (!axisProto.addPlotBand) {
|
|
23753
23728
|
PlotLineOrBandClass = PlotLineOrBandType;
|
|
23754
23729
|
extend(axisProto, {
|
|
23755
|
-
addPlotBand,
|
|
23756
|
-
addPlotLine,
|
|
23757
|
-
addPlotBandOrLine,
|
|
23730
|
+
addPlotBand: getAdderFunction('plotBands'),
|
|
23731
|
+
addPlotLine: getAdderFunction('plotLines'),
|
|
23758
23732
|
getPlotBandPath,
|
|
23759
|
-
removePlotBand,
|
|
23760
|
-
removePlotLine
|
|
23761
|
-
|
|
23733
|
+
removePlotBand: removePlotBandOrLine,
|
|
23734
|
+
removePlotLine: removePlotBandOrLine
|
|
23735
|
+
});
|
|
23736
|
+
addEvent(AxisClass, 'afterInit', function () {
|
|
23737
|
+
// First time only, not on Axis.update()
|
|
23738
|
+
if (!this.plotBands) {
|
|
23739
|
+
// Placeholder for plotlines and plotbands groups
|
|
23740
|
+
this.plotLinesAndBandsGroups = {};
|
|
23741
|
+
// Plot lines and bands from options
|
|
23742
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23743
|
+
this[coll] = [];
|
|
23744
|
+
for (const pOptions of splat(this.options[coll] || [])) {
|
|
23745
|
+
this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
|
|
23746
|
+
}
|
|
23747
|
+
}
|
|
23748
|
+
}
|
|
23749
|
+
});
|
|
23750
|
+
// Update plot bands and lines one to one
|
|
23751
|
+
addEvent(AxisClass, 'update', function ({ options }) {
|
|
23752
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23753
|
+
// Check if we have new options to process, otherwise do
|
|
23754
|
+
// nothing with existing plot lines and bands
|
|
23755
|
+
if (options[coll]) {
|
|
23756
|
+
const plotItems = this[coll];
|
|
23757
|
+
splat(options[coll]).forEach((pOptions = {}, i) => {
|
|
23758
|
+
// Match by id
|
|
23759
|
+
let pItem;
|
|
23760
|
+
if (pOptions?.id) {
|
|
23761
|
+
pItem = plotItems.find((p) => p.id === pOptions.id);
|
|
23762
|
+
}
|
|
23763
|
+
// Match by index
|
|
23764
|
+
pItem || (pItem = plotItems[i]);
|
|
23765
|
+
// Update
|
|
23766
|
+
if (pItem) {
|
|
23767
|
+
pItem.update(pOptions, false);
|
|
23768
|
+
options[coll][i] = pItem.options;
|
|
23769
|
+
// Add
|
|
23770
|
+
}
|
|
23771
|
+
else {
|
|
23772
|
+
pItem = this[coll === 'plotBands' ?
|
|
23773
|
+
'addPlotBand' :
|
|
23774
|
+
'addPlotLine'](pOptions);
|
|
23775
|
+
}
|
|
23776
|
+
pItem.isActive = true;
|
|
23777
|
+
});
|
|
23778
|
+
// Remove inactive items from end to start
|
|
23779
|
+
let i = plotItems.length;
|
|
23780
|
+
while (i--) {
|
|
23781
|
+
if (!plotItems[i].isActive) {
|
|
23782
|
+
plotItems[i].remove();
|
|
23783
|
+
}
|
|
23784
|
+
else {
|
|
23785
|
+
delete plotItems[i].isActive;
|
|
23786
|
+
}
|
|
23787
|
+
}
|
|
23788
|
+
}
|
|
23789
|
+
}
|
|
23762
23790
|
});
|
|
23763
23791
|
}
|
|
23764
23792
|
return AxisClass;
|
|
@@ -23829,23 +23857,6 @@ var PlotLineOrBandAxis;
|
|
|
23829
23857
|
}
|
|
23830
23858
|
return result;
|
|
23831
23859
|
}
|
|
23832
|
-
/**
|
|
23833
|
-
* Remove a plot band by its id.
|
|
23834
|
-
*
|
|
23835
|
-
* @sample highcharts/members/axis-removeplotband/
|
|
23836
|
-
* Remove plot band by id
|
|
23837
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23838
|
-
* Toggle the plot band from a button
|
|
23839
|
-
*
|
|
23840
|
-
* @function Highcharts.Axis#removePlotBand
|
|
23841
|
-
*
|
|
23842
|
-
* @param {string} id
|
|
23843
|
-
* The plot band's `id` as given in the original configuration
|
|
23844
|
-
* object or in the `addPlotBand` option.
|
|
23845
|
-
*/
|
|
23846
|
-
function removePlotBand(id) {
|
|
23847
|
-
this.removePlotBandOrLine(id);
|
|
23848
|
-
}
|
|
23849
23860
|
/**
|
|
23850
23861
|
* Remove a plot band or plot line from the chart by id. Called
|
|
23851
23862
|
* internally from `removePlotBand` and `removePlotLine`.
|
|
@@ -23853,45 +23864,7 @@ var PlotLineOrBandAxis;
|
|
|
23853
23864
|
* @function Highcharts.Axis#removePlotBandOrLine
|
|
23854
23865
|
*/
|
|
23855
23866
|
function removePlotBandOrLine(id) {
|
|
23856
|
-
|
|
23857
|
-
if (plotLinesAndBands) { // #15639
|
|
23858
|
-
let i = plotLinesAndBands.length;
|
|
23859
|
-
while (i--) {
|
|
23860
|
-
if (plotLinesAndBands[i].id === id) {
|
|
23861
|
-
plotLinesAndBands[i].destroy();
|
|
23862
|
-
}
|
|
23863
|
-
}
|
|
23864
|
-
([
|
|
23865
|
-
options.plotLines || [],
|
|
23866
|
-
userOptions.plotLines || [],
|
|
23867
|
-
options.plotBands || [],
|
|
23868
|
-
userOptions.plotBands || []
|
|
23869
|
-
]).forEach(function (arr) {
|
|
23870
|
-
i = arr.length;
|
|
23871
|
-
while (i--) {
|
|
23872
|
-
if (arr[i]?.id === id) {
|
|
23873
|
-
erase(arr, arr[i]);
|
|
23874
|
-
}
|
|
23875
|
-
}
|
|
23876
|
-
});
|
|
23877
|
-
}
|
|
23878
|
-
}
|
|
23879
|
-
/**
|
|
23880
|
-
* Remove a plot line by its id.
|
|
23881
|
-
*
|
|
23882
|
-
* @sample highcharts/xaxis/plotlines-id/
|
|
23883
|
-
* Remove plot line by id
|
|
23884
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23885
|
-
* Toggle the plot line from a button
|
|
23886
|
-
*
|
|
23887
|
-
* @function Highcharts.Axis#removePlotLine
|
|
23888
|
-
*
|
|
23889
|
-
* @param {string} id
|
|
23890
|
-
* The plot line's `id` as given in the original configuration
|
|
23891
|
-
* object or in the `addPlotLine` option.
|
|
23892
|
-
*/
|
|
23893
|
-
function removePlotLine(id) {
|
|
23894
|
-
this.removePlotBandOrLine(id);
|
|
23867
|
+
[...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
|
|
23895
23868
|
}
|
|
23896
23869
|
})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
|
|
23897
23870
|
/* *
|
|
@@ -23955,9 +23928,11 @@ class PlotLineOrBand {
|
|
|
23955
23928
|
this.labelCollectors.push(() => {
|
|
23956
23929
|
const labels = [];
|
|
23957
23930
|
for (const axis of this.axes) {
|
|
23958
|
-
for (const
|
|
23959
|
-
|
|
23960
|
-
|
|
23931
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23932
|
+
for (const { label, options } of axis[coll]) {
|
|
23933
|
+
if (label && !options?.label?.allowOverlap) {
|
|
23934
|
+
labels.push(label);
|
|
23935
|
+
}
|
|
23961
23936
|
}
|
|
23962
23937
|
}
|
|
23963
23938
|
}
|
|
@@ -23971,7 +23946,7 @@ class PlotLineOrBand {
|
|
|
23971
23946
|
* Constructor
|
|
23972
23947
|
*
|
|
23973
23948
|
* */
|
|
23974
|
-
constructor(axis, options) {
|
|
23949
|
+
constructor(axis, options, coll) {
|
|
23975
23950
|
/**
|
|
23976
23951
|
* Related axis.
|
|
23977
23952
|
*
|
|
@@ -23987,6 +23962,7 @@ class PlotLineOrBand {
|
|
|
23987
23962
|
*/
|
|
23988
23963
|
this.options = options;
|
|
23989
23964
|
this.id = options.id;
|
|
23965
|
+
this.coll = coll;
|
|
23990
23966
|
}
|
|
23991
23967
|
/* *
|
|
23992
23968
|
*
|
|
@@ -24002,43 +23978,28 @@ class PlotLineOrBand {
|
|
|
24002
23978
|
*/
|
|
24003
23979
|
render() {
|
|
24004
23980
|
fireEvent(this, 'render');
|
|
24005
|
-
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart,
|
|
23981
|
+
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
|
|
24006
23982
|
// These properties only exist on either band or line
|
|
24007
23983
|
to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
|
|
24008
|
-
let optionsLabel = options.label, { label, svgElem } = this,
|
|
24009
|
-
const isBand =
|
|
24010
|
-
'class':
|
|
24011
|
-
|
|
24012
|
-
|
|
24013
|
-
|
|
24014
|
-
// Set the
|
|
24015
|
-
if (!
|
|
24016
|
-
|
|
24017
|
-
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24018
|
-
attribs['stroke-width'] =
|
|
24019
|
-
options.width ?? 1;
|
|
24020
|
-
if (options.dashStyle) {
|
|
24021
|
-
attribs.dashstyle = options.dashStyle;
|
|
24022
|
-
}
|
|
24023
|
-
}
|
|
24024
|
-
else if (isBand) { // Plot band
|
|
24025
|
-
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24026
|
-
if (borderWidth) {
|
|
24027
|
-
attribs.stroke = options.borderColor;
|
|
24028
|
-
attribs['stroke-width'] = borderWidth;
|
|
24029
|
-
}
|
|
24030
|
-
}
|
|
23984
|
+
let optionsLabel = options.label, { label, svgElem } = this, group;
|
|
23985
|
+
const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
|
|
23986
|
+
'class': `highcharts-plot-${shortKey} ${options.className || ''}`
|
|
23987
|
+
}, strokeWidth = isBand ?
|
|
23988
|
+
(borderWidth || 0) :
|
|
23989
|
+
(options.width ?? 1);
|
|
23990
|
+
// Set the stroke width before the path is calculated
|
|
23991
|
+
if (!styledMode) {
|
|
23992
|
+
attribs['stroke-width'] = strokeWidth;
|
|
24031
23993
|
}
|
|
24032
23994
|
// Grouping and zIndex
|
|
24033
|
-
groupAttribs.zIndex = zIndex;
|
|
24034
|
-
groupName += '-' + zIndex;
|
|
24035
23995
|
group = axis.plotLinesAndBandsGroups[groupName];
|
|
24036
23996
|
if (!group) {
|
|
24037
23997
|
axis.plotLinesAndBandsGroups[groupName] = group =
|
|
24038
23998
|
renderer.g('plot-' + groupName)
|
|
24039
23999
|
.clip(chart.plotClipOuter)
|
|
24040
|
-
.attr(
|
|
24000
|
+
.attr({ zIndex }).add();
|
|
24041
24001
|
}
|
|
24002
|
+
group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
|
|
24042
24003
|
// Create the path
|
|
24043
24004
|
if (!svgElem) {
|
|
24044
24005
|
/**
|
|
@@ -24049,40 +24010,58 @@ class PlotLineOrBand {
|
|
|
24049
24010
|
*/
|
|
24050
24011
|
this.svgElem = svgElem = renderer
|
|
24051
24012
|
.path()
|
|
24052
|
-
.attr(attribs)
|
|
24053
|
-
|
|
24013
|
+
.attr(attribs);
|
|
24014
|
+
}
|
|
24015
|
+
// Add it to the correct index while allowing dynamic z-index update
|
|
24016
|
+
if (svgElem.parentGroup !== group) {
|
|
24017
|
+
svgElem.add(group);
|
|
24054
24018
|
}
|
|
24055
24019
|
// Set the path or return
|
|
24056
|
-
|
|
24020
|
+
let path;
|
|
24021
|
+
if (!isBand && defined(value)) { // Plot line
|
|
24057
24022
|
path = axis.getPlotLinePath({
|
|
24058
24023
|
value: logarithmic?.log2lin(value) ?? value,
|
|
24059
24024
|
lineWidth: svgElem.strokeWidth(),
|
|
24060
24025
|
acrossPanes: options.acrossPanes
|
|
24061
24026
|
});
|
|
24062
24027
|
}
|
|
24063
|
-
else if (defined(from) && defined(to)) { // Plot band
|
|
24028
|
+
else if (isBand && defined(from) && defined(to)) { // Plot band
|
|
24064
24029
|
path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
|
|
24065
24030
|
}
|
|
24066
|
-
|
|
24067
|
-
|
|
24031
|
+
if (path) {
|
|
24032
|
+
attribs.d = path;
|
|
24033
|
+
}
|
|
24034
|
+
// Apply the styling
|
|
24035
|
+
if (!styledMode) {
|
|
24036
|
+
if (isBand) { // Plot band
|
|
24037
|
+
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24038
|
+
if (borderWidth) {
|
|
24039
|
+
attribs.stroke = options.borderColor;
|
|
24040
|
+
}
|
|
24041
|
+
}
|
|
24042
|
+
else {
|
|
24043
|
+
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24044
|
+
if (options.dashStyle) {
|
|
24045
|
+
attribs.dashstyle = options.dashStyle;
|
|
24046
|
+
}
|
|
24047
|
+
}
|
|
24068
24048
|
}
|
|
24069
24049
|
// Common for lines and bands. Add events only if they were not added
|
|
24070
24050
|
// before.
|
|
24071
|
-
if (
|
|
24051
|
+
if (isNew && events) {
|
|
24072
24052
|
objectEach(events, (_event, eventType) => {
|
|
24073
24053
|
svgElem?.on(eventType, (e) => {
|
|
24074
24054
|
events[eventType].apply(this, [e, this]);
|
|
24075
24055
|
});
|
|
24076
24056
|
});
|
|
24077
|
-
this.eventsAdded = true;
|
|
24078
24057
|
}
|
|
24079
24058
|
if ((isNew || !svgElem.d) && path?.length) {
|
|
24080
|
-
svgElem.attr(
|
|
24059
|
+
svgElem.attr(attribs);
|
|
24081
24060
|
}
|
|
24082
24061
|
else if (svgElem) {
|
|
24083
24062
|
if (path) {
|
|
24084
24063
|
svgElem.show();
|
|
24085
|
-
svgElem.animate(
|
|
24064
|
+
svgElem.animate(attribs);
|
|
24086
24065
|
}
|
|
24087
24066
|
else if (svgElem.d) {
|
|
24088
24067
|
svgElem.hide();
|
|
@@ -24122,7 +24101,7 @@ class PlotLineOrBand {
|
|
|
24122
24101
|
* @function Highcharts.PlotLineOrBand#renderLabel
|
|
24123
24102
|
*/
|
|
24124
24103
|
renderLabel(optionsLabel, path, isBand, zIndex) {
|
|
24125
|
-
const plotLine = this, axis = plotLine.axis,
|
|
24104
|
+
const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
|
|
24126
24105
|
let label = plotLine.label;
|
|
24127
24106
|
// Add the SVG element
|
|
24128
24107
|
if (!label) {
|
|
@@ -24133,25 +24112,31 @@ class PlotLineOrBand {
|
|
|
24133
24112
|
* @type {Highcharts.SVGElement}
|
|
24134
24113
|
*/
|
|
24135
24114
|
plotLine.label = label = renderer
|
|
24136
|
-
.text(
|
|
24137
|
-
.attr({
|
|
24138
|
-
|
|
24139
|
-
|
|
24140
|
-
|
|
24141
|
-
|
|
24142
|
-
|
|
24143
|
-
|
|
24144
|
-
|
|
24145
|
-
|
|
24146
|
-
|
|
24147
|
-
|
|
24148
|
-
|
|
24149
|
-
|
|
24150
|
-
|
|
24151
|
-
|
|
24152
|
-
|
|
24153
|
-
|
|
24154
|
-
|
|
24115
|
+
.text('', 0, 0, optionsLabel.useHTML)
|
|
24116
|
+
.attr({ zIndex });
|
|
24117
|
+
}
|
|
24118
|
+
label
|
|
24119
|
+
.attr({
|
|
24120
|
+
text: this.getLabelText(optionsLabel),
|
|
24121
|
+
align: optionsLabel.textAlign || optionsLabel.align,
|
|
24122
|
+
'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
|
|
24123
|
+
'-label ' + (optionsLabel.className || '')
|
|
24124
|
+
})[label.placed ? 'animate' : 'attr']({
|
|
24125
|
+
opacity: 1,
|
|
24126
|
+
rotation: optionsLabel.rotation
|
|
24127
|
+
});
|
|
24128
|
+
if (!chart.styledMode) {
|
|
24129
|
+
label.css(merge({
|
|
24130
|
+
// To allow theming, and in lack of a general place to set
|
|
24131
|
+
// default options for plot lines and bands, default to the
|
|
24132
|
+
// title color. If we expose the palette, we should use that
|
|
24133
|
+
// instead.
|
|
24134
|
+
color: chart.options.title?.style?.color,
|
|
24135
|
+
fontSize: '0.8em',
|
|
24136
|
+
textOverflow: (isBand && !inside) ? '' : 'ellipsis'
|
|
24137
|
+
}, optionsLabel.style));
|
|
24138
|
+
}
|
|
24139
|
+
if (!label.added) {
|
|
24155
24140
|
label.add();
|
|
24156
24141
|
}
|
|
24157
24142
|
// Get the bounding box and align the label
|
|
@@ -24175,12 +24160,31 @@ class PlotLineOrBand {
|
|
|
24175
24160
|
axis.height - (label.alignAttr.y -
|
|
24176
24161
|
axis.top) : (optionsLabel.clip ?
|
|
24177
24162
|
(axis.width + axis.left) :
|
|
24178
|
-
|
|
24163
|
+
chart.chartWidth) - label.alignAttr.x) :
|
|
24179
24164
|
bBoxWidth)) + 'px'
|
|
24180
24165
|
});
|
|
24181
24166
|
}
|
|
24167
|
+
else if (label.textWidth) {
|
|
24168
|
+
label.css({ width: 'auto' });
|
|
24169
|
+
}
|
|
24182
24170
|
label.show(true);
|
|
24183
24171
|
}
|
|
24172
|
+
/**
|
|
24173
|
+
* Update the plot line or band with new options.
|
|
24174
|
+
*
|
|
24175
|
+
* @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
|
|
24176
|
+
* The new options to apply
|
|
24177
|
+
* @param {boolean} [redraw=true]
|
|
24178
|
+
* Whether to redraw the plot guide immediately
|
|
24179
|
+
*
|
|
24180
|
+
* @function Highcharts.PlotLineOrBand#update
|
|
24181
|
+
*/
|
|
24182
|
+
update(options, redraw = true) {
|
|
24183
|
+
merge(true, this.options, options);
|
|
24184
|
+
if (redraw) {
|
|
24185
|
+
this.render();
|
|
24186
|
+
}
|
|
24187
|
+
}
|
|
24184
24188
|
/**
|
|
24185
24189
|
* Get label's text content.
|
|
24186
24190
|
* @internal
|
|
@@ -24192,15 +24196,22 @@ class PlotLineOrBand {
|
|
|
24192
24196
|
optionsLabel.text;
|
|
24193
24197
|
}
|
|
24194
24198
|
/**
|
|
24195
|
-
*
|
|
24196
|
-
*
|
|
24197
|
-
* @function Highcharts.PlotLineOrBand#destroy
|
|
24199
|
+
* Destroy the item's elements
|
|
24198
24200
|
*/
|
|
24199
24201
|
destroy() {
|
|
24202
|
+
destroyObjectProperties(this, this.axis);
|
|
24203
|
+
}
|
|
24204
|
+
/**
|
|
24205
|
+
* Remove the plot line or band and destroy its elements.
|
|
24206
|
+
*
|
|
24207
|
+
* @function Highcharts.PlotLineOrBand#remove
|
|
24208
|
+
*/
|
|
24209
|
+
remove() {
|
|
24200
24210
|
// Remove it from the lookup
|
|
24201
|
-
erase(this.axis.
|
|
24202
|
-
|
|
24203
|
-
|
|
24211
|
+
erase(this.axis[this.coll], this);
|
|
24212
|
+
// Remove from options
|
|
24213
|
+
erase(this.axis.options[this.coll] || [], this.options);
|
|
24214
|
+
this.destroy();
|
|
24204
24215
|
}
|
|
24205
24216
|
}
|
|
24206
24217
|
/* *
|
|
@@ -24247,10 +24258,24 @@ class PlotLineOrBand {
|
|
|
24247
24258
|
* In styled mode, the plot bands are styled by the `.highcharts-plot-band`
|
|
24248
24259
|
* class in addition to the `className` option.
|
|
24249
24260
|
*
|
|
24261
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
|
|
24262
|
+
* by index or id. The following merging rules apply:
|
|
24263
|
+
* - If `plotBands` are not defined in the new options, all existing plot bands
|
|
24264
|
+
* are kept.
|
|
24265
|
+
* - If `plotBands` are defined without ids, the existing plot bands are updated
|
|
24266
|
+
* by index. If the new array has fewer plot bands, the remaining existing
|
|
24267
|
+
* plot bands are removed. If the new array has more plot bands, the extra
|
|
24268
|
+
* ones are added. An empty array removes all existing plot bands.
|
|
24269
|
+
* - If `plotBands` are defined with ids, the existing plot bands are matched
|
|
24270
|
+
* by id, and remaining unmatched existing plot bands are removed.
|
|
24271
|
+
*
|
|
24250
24272
|
* @productdesc {highcharts}
|
|
24251
24273
|
* In a gauge, a plot band on the Y axis (value axis) will stretch along the
|
|
24252
24274
|
* perimeter of the gauge.
|
|
24253
24275
|
*
|
|
24276
|
+
* @sample {highcharts} highcharts/xaxis/plotbands-color/
|
|
24277
|
+
* Basic plot band
|
|
24278
|
+
*
|
|
24254
24279
|
* @type {Array<*>}
|
|
24255
24280
|
* @product highcharts highstock gantt
|
|
24256
24281
|
* @apioption xAxis.plotBands
|
|
@@ -24542,12 +24567,23 @@ class PlotLineOrBand {
|
|
|
24542
24567
|
* In styled mode, the plot lines are styled by the
|
|
24543
24568
|
* `.highcharts-plot-line` class in addition to the `className` option.
|
|
24544
24569
|
*
|
|
24570
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
|
|
24571
|
+
* by index or id. The following merging rules apply:
|
|
24572
|
+
* - If `plotLines` are not defined in the new options, all existing plot lines
|
|
24573
|
+
* are kept.
|
|
24574
|
+
* - If `plotLines` are defined without ids, the existing plot lines are updated
|
|
24575
|
+
* by index. If the new array has fewer plot lines, the remaining existing
|
|
24576
|
+
* plot lines are removed. If the new array has more plot lines, the extra
|
|
24577
|
+
* ones are added. An empty array removes all existing plot lines.
|
|
24578
|
+
* - If `plotLines` are defined with ids, the existing plot lines are matched
|
|
24579
|
+
* by id, and remaining unmatched existing plot lines are removed.
|
|
24580
|
+
*
|
|
24545
24581
|
* @type {Array<*>}
|
|
24546
24582
|
* @product highcharts highstock gantt
|
|
24547
|
-
* @sample
|
|
24548
|
-
*
|
|
24549
|
-
* @sample
|
|
24550
|
-
*
|
|
24583
|
+
* @sample {highcharts} highcharts/xaxis/plotlines-color/
|
|
24584
|
+
* Basic plot line
|
|
24585
|
+
* @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
|
|
24586
|
+
* Solid gauge plot line
|
|
24551
24587
|
* @apioption xAxis.plotLines
|
|
24552
24588
|
*/
|
|
24553
24589
|
/**
|
|
@@ -25056,14 +25092,11 @@ class Tooltip {
|
|
|
25056
25092
|
*/
|
|
25057
25093
|
destroy() {
|
|
25058
25094
|
// Destroy and clear local variables
|
|
25059
|
-
|
|
25060
|
-
|
|
25061
|
-
}
|
|
25095
|
+
this.tracker = this.tracker?.destroy();
|
|
25096
|
+
this.label = this.label?.destroy();
|
|
25062
25097
|
if (this.split) {
|
|
25063
25098
|
this.cleanSplit(true);
|
|
25064
|
-
|
|
25065
|
-
this.tt = this.tt.destroy();
|
|
25066
|
-
}
|
|
25099
|
+
this.tt = this.tt?.destroy();
|
|
25067
25100
|
}
|
|
25068
25101
|
if (this.renderer) {
|
|
25069
25102
|
this.renderer = this.renderer.destroy();
|
|
@@ -25593,6 +25626,8 @@ class Tooltip {
|
|
|
25593
25626
|
!this.isHidden &&
|
|
25594
25627
|
!options.fixed &&
|
|
25595
25628
|
options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
|
|
25629
|
+
this.anchorX = anchorX;
|
|
25630
|
+
this.anchorY = anchorY;
|
|
25596
25631
|
if (!skipAnchor) {
|
|
25597
25632
|
attr.anchorX = anchorX;
|
|
25598
25633
|
attr.anchorY = anchorY;
|
|
@@ -26039,45 +26074,37 @@ class Tooltip {
|
|
|
26039
26074
|
*/
|
|
26040
26075
|
drawTracker() {
|
|
26041
26076
|
const tooltip = this;
|
|
26042
|
-
if (!
|
|
26043
|
-
|
|
26044
|
-
tooltip.tracker = tooltip.tracker.destroy();
|
|
26045
|
-
}
|
|
26077
|
+
if (!tooltip.shouldStickOnContact()) {
|
|
26078
|
+
tooltip.tracker = tooltip.tracker?.destroy();
|
|
26046
26079
|
return;
|
|
26047
26080
|
}
|
|
26048
|
-
const chart = tooltip.chart
|
|
26049
|
-
|
|
26050
|
-
|
|
26051
|
-
if (!
|
|
26081
|
+
const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
|
|
26082
|
+
// Split tooltips render into a plain group, with no box to trace
|
|
26083
|
+
box = label?.box;
|
|
26084
|
+
if (!box || !points) {
|
|
26052
26085
|
return;
|
|
26053
26086
|
}
|
|
26054
|
-
const
|
|
26055
|
-
|
|
26056
|
-
|
|
26057
|
-
|
|
26058
|
-
|
|
26059
|
-
|
|
26060
|
-
|
|
26061
|
-
|
|
26062
|
-
|
|
26063
|
-
|
|
26064
|
-
|
|
26065
|
-
//
|
|
26066
|
-
|
|
26067
|
-
|
|
26068
|
-
|
|
26069
|
-
|
|
26070
|
-
|
|
26071
|
-
|
|
26072
|
-
|
|
26073
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
|
|
26074
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height));
|
|
26075
|
-
if (tooltip.tracker) {
|
|
26076
|
-
tooltip.tracker.attr(box);
|
|
26077
|
-
}
|
|
26078
|
-
else {
|
|
26087
|
+
const { height, r, width, x, y } = box;
|
|
26088
|
+
let { anchorX, anchorY } = box;
|
|
26089
|
+
// Shared tooltips clear the label anchor (#22295), so fall back to the
|
|
26090
|
+
// anchor the position was calculated from
|
|
26091
|
+
if (!isNumber(anchorX)) {
|
|
26092
|
+
anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
|
|
26093
|
+
anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
|
|
26094
|
+
}
|
|
26095
|
+
// Match the tooltip shape, but stretch the connector all the way to the
|
|
26096
|
+
// point, so that the pointer can travel between the two without losing
|
|
26097
|
+
// contact. Only the side facing the anchor overshoots the box, so the
|
|
26098
|
+
// largest of the four distances is the one to cover. (#24255)
|
|
26099
|
+
const d = label.renderer.symbols.callout(x, y, width, height, {
|
|
26100
|
+
anchorX,
|
|
26101
|
+
anchorY,
|
|
26102
|
+
arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
|
|
26103
|
+
r
|
|
26104
|
+
});
|
|
26105
|
+
if (!tooltip.tracker) {
|
|
26079
26106
|
tooltip.tracker = label.renderer
|
|
26080
|
-
.
|
|
26107
|
+
.path()
|
|
26081
26108
|
.addClass('highcharts-tracker')
|
|
26082
26109
|
.add(label);
|
|
26083
26110
|
// For a rapid move going outside of the elements keeping the
|
|
@@ -26085,10 +26112,14 @@ class Tooltip {
|
|
|
26085
26112
|
addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
|
|
26086
26113
|
if (!chart.styledMode) {
|
|
26087
26114
|
tooltip.tracker.attr({
|
|
26088
|
-
fill: 'rgba(0,0,0,0)'
|
|
26115
|
+
fill: 'rgba(0,0,0,0)',
|
|
26116
|
+
stroke: 'rgba(0,0,0,0)',
|
|
26117
|
+
'stroke-linejoin': 'round',
|
|
26118
|
+
'stroke-width': 10
|
|
26089
26119
|
});
|
|
26090
26120
|
}
|
|
26091
26121
|
}
|
|
26122
|
+
tooltip.tracker.attr({ d });
|
|
26092
26123
|
}
|
|
26093
26124
|
/** @internal */
|
|
26094
26125
|
styledModeFormat(formatString) {
|
|
@@ -27035,7 +27066,8 @@ class Point {
|
|
|
27035
27066
|
/**
|
|
27036
27067
|
* Set a value in an object, on the property defined by key. The key
|
|
27037
27068
|
* supports nested properties using dot notation. The function modifies the
|
|
27038
|
-
* input object and does not make a copy.
|
|
27069
|
+
* input object and does not make a copy. Paths containing `__proto__` or
|
|
27070
|
+
* `constructor` are ignored.
|
|
27039
27071
|
*
|
|
27040
27072
|
* @function Highcharts.Point#setNestedProperty<T>
|
|
27041
27073
|
*
|
|
@@ -27053,11 +27085,18 @@ class Point {
|
|
|
27053
27085
|
*/
|
|
27054
27086
|
setNestedProperty(object, value, key) {
|
|
27055
27087
|
const nestedKeys = key.split('.');
|
|
27088
|
+
// Reject nested keys that would allow prototype pollution
|
|
27089
|
+
if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
|
|
27090
|
+
return object;
|
|
27091
|
+
}
|
|
27056
27092
|
nestedKeys.reduce(function (result, key, i, arr) {
|
|
27057
27093
|
const isLastKey = arr.length - 1 === i;
|
|
27058
27094
|
result[key] = (isLastKey ?
|
|
27059
27095
|
value :
|
|
27060
|
-
|
|
27096
|
+
// Inherited objects are shared with everything else on
|
|
27097
|
+
// that prototype, so start a fresh one instead
|
|
27098
|
+
isObject(result[key], true) &&
|
|
27099
|
+
Object.hasOwnProperty.call(result, key) ?
|
|
27061
27100
|
result[key] :
|
|
27062
27101
|
{});
|
|
27063
27102
|
return result[key];
|
|
@@ -27139,15 +27178,10 @@ class Point {
|
|
|
27139
27178
|
*/
|
|
27140
27179
|
function update() {
|
|
27141
27180
|
point.applyOptions(options);
|
|
27142
|
-
// Update visuals, #4146
|
|
27143
|
-
//
|
|
27144
|
-
|
|
27145
|
-
const shouldDestroyGraphic = point.y === null ?
|
|
27146
|
-
!hasMockGraphic :
|
|
27147
|
-
hasMockGraphic;
|
|
27148
|
-
if (graphic && shouldDestroyGraphic) {
|
|
27181
|
+
// Update visuals, #4146. The a11y mock graphic is exempt, it is
|
|
27182
|
+
// maintained by the accessibility module, #12718.
|
|
27183
|
+
if (graphic && point.y === null && !point.hasMockGraphic) {
|
|
27149
27184
|
point.graphic = graphic.destroy();
|
|
27150
|
-
delete point.hasMockGraphic;
|
|
27151
27185
|
}
|
|
27152
27186
|
if (isObject(options, true)) {
|
|
27153
27187
|
// Destroy so we can get new elements
|
|
@@ -27162,7 +27196,7 @@ class Point {
|
|
|
27162
27196
|
point.dataLabel = point.dataLabel.destroy(); // #2468
|
|
27163
27197
|
}
|
|
27164
27198
|
}
|
|
27165
|
-
const pointOptions = point.optionsToObject(options);
|
|
27199
|
+
const index = point.index, pointOptions = point.optionsToObject(options);
|
|
27166
27200
|
if (!series.hasProcessedDataTable) {
|
|
27167
27201
|
// Record changes in the data table (#24451)
|
|
27168
27202
|
series.dataTable.setRow(pointOptions, index);
|
|
@@ -29166,19 +29200,18 @@ class Pointer {
|
|
|
29166
29200
|
if (hasMoved ?? true) {
|
|
29167
29201
|
this.pinch(e);
|
|
29168
29202
|
}
|
|
29203
|
+
// If inside, capture touch-drag and display tooltip. If not
|
|
29204
|
+
// inside, allow dragging the finger to scroll the page
|
|
29205
|
+
if (this.hasPointerCapture && // #25095
|
|
29206
|
+
e.type === 'touchmove' &&
|
|
29207
|
+
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29208
|
+
e.preventDefault();
|
|
29209
|
+
}
|
|
29169
29210
|
}
|
|
29170
29211
|
else if (start) {
|
|
29171
29212
|
// Hide the tooltip on touching outside the plot area (#1203)
|
|
29172
29213
|
this.reset();
|
|
29173
29214
|
}
|
|
29174
|
-
// If inside, capture touch-drag and display tooltip. If not inside,
|
|
29175
|
-
// allow dragging the finger to scroll the page
|
|
29176
|
-
if ((chart.tooltip?.options.followTouchMove ?? true) &&
|
|
29177
|
-
isInside &&
|
|
29178
|
-
e.type === 'touchmove' &&
|
|
29179
|
-
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29180
|
-
e.preventDefault();
|
|
29181
|
-
}
|
|
29182
29215
|
}
|
|
29183
29216
|
else if (e.touches.length === 2) {
|
|
29184
29217
|
this.pinch(e);
|
|
@@ -29578,13 +29611,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
|
|
|
29578
29611
|
class DataTableCore {
|
|
29579
29612
|
constructor(options = {}) {
|
|
29580
29613
|
this.isDataTable = true;
|
|
29581
|
-
|
|
29614
|
+
// Reject IDs that would pollute the prototype of ID-keyed maps.
|
|
29615
|
+
const id = this.isPollutingKey(options.id) ? void 0 : options.id;
|
|
29616
|
+
this.autoId = !id;
|
|
29582
29617
|
this.columns = {};
|
|
29583
|
-
this.id = (
|
|
29618
|
+
this.id = (id || uniqueKey());
|
|
29584
29619
|
this.rowCount = 0;
|
|
29585
29620
|
this.versionTag = uniqueKey();
|
|
29586
29621
|
let rowCount = 0;
|
|
29587
29622
|
objectEach(options.columns || {}, (column, columnId) => {
|
|
29623
|
+
if (columnId === '__proto__' ||
|
|
29624
|
+
columnId === 'constructor') {
|
|
29625
|
+
return;
|
|
29626
|
+
}
|
|
29588
29627
|
this.columns[columnId] = column.slice();
|
|
29589
29628
|
rowCount = Math.max(rowCount, column.length);
|
|
29590
29629
|
});
|
|
@@ -29595,6 +29634,17 @@ class DataTableCore {
|
|
|
29595
29634
|
* Functions
|
|
29596
29635
|
*
|
|
29597
29636
|
* */
|
|
29637
|
+
/**
|
|
29638
|
+
* Checks whether a key would pollute the prototype if used to index a
|
|
29639
|
+
* plain object (e.g. as a column ID or table ID).
|
|
29640
|
+
*
|
|
29641
|
+
* @private
|
|
29642
|
+
* @param {string|undefined} key The key to check.
|
|
29643
|
+
* @return {boolean} True if the key is unsafe to use.
|
|
29644
|
+
*/
|
|
29645
|
+
isPollutingKey(key) {
|
|
29646
|
+
return key === '__proto__' || key === 'constructor';
|
|
29647
|
+
}
|
|
29598
29648
|
/**
|
|
29599
29649
|
* Applies a row count to the table by setting the `rowCount` property and
|
|
29600
29650
|
* adjusting the length of all columns.
|
|
@@ -29753,6 +29803,10 @@ class DataTableCore {
|
|
|
29753
29803
|
setColumns(columns, rowIndex, eventDetail) {
|
|
29754
29804
|
let rowCount = this.rowCount;
|
|
29755
29805
|
objectEach(columns, (column, columnId) => {
|
|
29806
|
+
if (columnId === '__proto__' ||
|
|
29807
|
+
columnId === 'constructor') {
|
|
29808
|
+
return;
|
|
29809
|
+
}
|
|
29756
29810
|
this.columns[columnId] = column.slice();
|
|
29757
29811
|
rowCount = column.length;
|
|
29758
29812
|
});
|
|
@@ -29791,11 +29845,14 @@ class DataTableCore {
|
|
|
29791
29845
|
* @emits #afterSetRows
|
|
29792
29846
|
*/
|
|
29793
29847
|
setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
|
|
29794
|
-
var _a;
|
|
29795
29848
|
const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
|
|
29796
29849
|
if (eventDetail?.addColumns !== false) {
|
|
29797
29850
|
for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
|
|
29798
|
-
|
|
29851
|
+
const rowKey = rowKeys[i];
|
|
29852
|
+
if (!this.isPollutingKey(rowKey) &&
|
|
29853
|
+
!Object.hasOwnProperty.call(columns, rowKey)) {
|
|
29854
|
+
columns[rowKey] = new Array(this.rowCount);
|
|
29855
|
+
}
|
|
29799
29856
|
}
|
|
29800
29857
|
}
|
|
29801
29858
|
objectEach(columns, (column, columnId) => {
|
|
@@ -33775,7 +33832,19 @@ class Series {
|
|
|
33775
33832
|
.optionsToObject
|
|
33776
33833
|
.call({ series: this }, data[i]);
|
|
33777
33834
|
for (const key of Object.keys(ptOptions)) {
|
|
33778
|
-
|
|
33835
|
+
// Assigning these would write through to
|
|
33836
|
+
// `Object.prototype` or the `Object` constructor instead
|
|
33837
|
+
// of creating a column, and thereby affect unrelated
|
|
33838
|
+
// objects on the page
|
|
33839
|
+
if (key === '__proto__' || key === 'constructor') {
|
|
33840
|
+
continue;
|
|
33841
|
+
}
|
|
33842
|
+
// Inherited keys like `toString` are truthy without being
|
|
33843
|
+
// columns of ours, so test for an own property rather
|
|
33844
|
+
// than for a value (#25321)
|
|
33845
|
+
if (!Object.hasOwnProperty.call(columns, key)) {
|
|
33846
|
+
columns[key] = new Array(dataLength);
|
|
33847
|
+
}
|
|
33779
33848
|
columns[key][i] = ptOptions[key];
|
|
33780
33849
|
}
|
|
33781
33850
|
}
|
|
@@ -34428,7 +34497,7 @@ class Series {
|
|
|
34428
34497
|
// Apply plotBorderRadius clipping
|
|
34429
34498
|
plotClipGroup?.clip(
|
|
34430
34499
|
// Navigator y-axis is not clippable
|
|
34431
|
-
clip && this.yAxis
|
|
34500
|
+
clip && this.yAxis?.clippable ?
|
|
34432
34501
|
chart.plotClipInner :
|
|
34433
34502
|
void 0);
|
|
34434
34503
|
}
|
|
@@ -34731,28 +34800,27 @@ class Series {
|
|
|
34731
34800
|
* @emits Highcharts.Series#event:destroy
|
|
34732
34801
|
*/
|
|
34733
34802
|
destroy(keepEventsForUpdate) {
|
|
34734
|
-
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent)
|
|
34735
|
-
let destroy,
|
|
34803
|
+
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
|
|
34804
|
+
let destroy, axis;
|
|
34736
34805
|
// Add event hook
|
|
34737
34806
|
fireEvent(series, 'destroy', { keepEventsForUpdate });
|
|
34738
34807
|
// Remove events
|
|
34739
34808
|
this.removeEvents(keepEventsForUpdate);
|
|
34740
34809
|
// Erase from axes
|
|
34741
|
-
(series.axisTypes || [])
|
|
34742
|
-
axis = series[
|
|
34810
|
+
for (const coll of (series.axisTypes || [])) {
|
|
34811
|
+
axis = series[coll];
|
|
34743
34812
|
if (axis?.series) {
|
|
34744
34813
|
erase(axis.series, series);
|
|
34745
34814
|
axis.isDirty = axis.forceRedraw = true;
|
|
34746
34815
|
}
|
|
34747
|
-
}
|
|
34816
|
+
}
|
|
34748
34817
|
// Remove legend items
|
|
34749
34818
|
if (series.legendItem) {
|
|
34750
34819
|
series.chart.legend.destroyItem(series);
|
|
34751
34820
|
}
|
|
34752
34821
|
// Destroy all points with their elements
|
|
34753
|
-
|
|
34754
|
-
|
|
34755
|
-
data[i]?.destroy?.(true);
|
|
34822
|
+
for (const point of series.points || []) {
|
|
34823
|
+
point?.destroy?.(true);
|
|
34756
34824
|
}
|
|
34757
34825
|
for (const zone of series.zones || []) {
|
|
34758
34826
|
// Destroy SVGElement's but preserve primitive props (#20426)
|
|
@@ -38891,7 +38959,10 @@ class Chart {
|
|
|
38891
38959
|
elem = this.renderer.text(options.text, 0, 0, options.useHTML)
|
|
38892
38960
|
.attr({
|
|
38893
38961
|
align: options.align,
|
|
38894
|
-
'class':
|
|
38962
|
+
'class': [
|
|
38963
|
+
options.className,
|
|
38964
|
+
'highcharts-' + key
|
|
38965
|
+
].filter(isString).join(' '),
|
|
38895
38966
|
zIndex: options.zIndex || 4
|
|
38896
38967
|
})
|
|
38897
38968
|
.css({
|
|
@@ -39896,7 +39967,7 @@ class Chart {
|
|
|
39896
39967
|
if (label &&
|
|
39897
39968
|
(labels.reserveSpace ?? !isNumber(options.crossing))) {
|
|
39898
39969
|
expectedSpace = label.getBBox().height +
|
|
39899
|
-
labels.distance +
|
|
39970
|
+
(labels.distance ?? 15) +
|
|
39900
39971
|
Math.max(isNumber(offset) ? offset : 0, 0);
|
|
39901
39972
|
}
|
|
39902
39973
|
if (expectedSpace) {
|
|
@@ -39984,6 +40055,12 @@ class Chart {
|
|
|
39984
40055
|
addCredits(credits) {
|
|
39985
40056
|
const chart = this, creds = merge(true, this.options.credits, credits);
|
|
39986
40057
|
if (creds.enabled && !this.credits) {
|
|
40058
|
+
// Run the user-supplied URL through the allow list, so that
|
|
40059
|
+
// references like `javascript:` can't be executed from the
|
|
40060
|
+
// credits label
|
|
40061
|
+
const href = creds.href ?
|
|
40062
|
+
HTML_AST.filterUserAttributes({ href: creds.href }).href :
|
|
40063
|
+
void 0;
|
|
39987
40064
|
/**
|
|
39988
40065
|
* The chart's credits label. The label has an `update` method that
|
|
39989
40066
|
* allows setting new options as per the
|
|
@@ -39997,8 +40074,8 @@ class Chart {
|
|
|
39997
40074
|
.on('click', function (e) {
|
|
39998
40075
|
// Fire the event with browser redirect as default function
|
|
39999
40076
|
fireEvent(chart, 'creditsClick', e, () => {
|
|
40000
|
-
if (
|
|
40001
|
-
Chart_win.location.href =
|
|
40077
|
+
if (href) {
|
|
40078
|
+
Chart_win.location.href = href;
|
|
40002
40079
|
}
|
|
40003
40080
|
});
|
|
40004
40081
|
})
|
|
@@ -41615,14 +41692,11 @@ class StackItem {
|
|
|
41615
41692
|
*
|
|
41616
41693
|
* */
|
|
41617
41694
|
/** @internal */
|
|
41618
|
-
constructor(axis,
|
|
41619
|
-
const inverted = axis.chart.inverted, reversed = axis.reversed;
|
|
41695
|
+
constructor(axis, negativeValue, x, stackOption) {
|
|
41620
41696
|
this.axis = axis;
|
|
41621
41697
|
// The stack goes to the left either if the stack has negative value
|
|
41622
41698
|
// or when axis is reversed. XOR operator.
|
|
41623
|
-
|
|
41624
|
-
// Save the options to be able to style the label
|
|
41625
|
-
this.options = options = options || {};
|
|
41699
|
+
this.negativeValue = negativeValue;
|
|
41626
41700
|
// Save the x value to be able to position the label later
|
|
41627
41701
|
this.x = x;
|
|
41628
41702
|
// Initialize total value
|
|
@@ -41637,20 +41711,6 @@ class StackItem {
|
|
|
41637
41711
|
this.stack = stackOption;
|
|
41638
41712
|
this.leftCliff = 0;
|
|
41639
41713
|
this.rightCliff = 0;
|
|
41640
|
-
// The align options and text align varies on whether the stack is
|
|
41641
|
-
// negative and if the chart is inverted or not.
|
|
41642
|
-
// First test the user supplied value, then use the dynamic.
|
|
41643
|
-
this.alignOptions = {
|
|
41644
|
-
align: options.align ||
|
|
41645
|
-
(inverted ? (isNegative ? 'left' : 'right') : 'center'),
|
|
41646
|
-
verticalAlign: options.verticalAlign ||
|
|
41647
|
-
(inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
|
|
41648
|
-
y: options.y,
|
|
41649
|
-
x: options.x
|
|
41650
|
-
};
|
|
41651
|
-
this.textAlign =
|
|
41652
|
-
options.textAlign ||
|
|
41653
|
-
(inverted ? (!isNegative ? 'left' : 'right') : 'center');
|
|
41654
41714
|
}
|
|
41655
41715
|
/* *
|
|
41656
41716
|
*
|
|
@@ -41666,39 +41726,34 @@ class StackItem {
|
|
|
41666
41726
|
* @internal
|
|
41667
41727
|
*/
|
|
41668
41728
|
render(group) {
|
|
41669
|
-
const
|
|
41729
|
+
const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
|
|
41670
41730
|
// Format the text in the label.
|
|
41671
|
-
|
|
41731
|
+
text = (formatOption ?
|
|
41672
41732
|
StackItem_format(formatOption, this, chart) :
|
|
41673
|
-
options.formatter?.call(this, this)) || '';
|
|
41674
|
-
//
|
|
41675
|
-
|
|
41676
|
-
|
|
41677
|
-
|
|
41733
|
+
options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
|
|
41734
|
+
// Create new label
|
|
41735
|
+
this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
|
|
41736
|
+
const label = this.label, animatableAttribs = {
|
|
41737
|
+
r: options.borderRadius || 0,
|
|
41738
|
+
// Set default padding to 5 as it is in dataLabels #12308
|
|
41739
|
+
padding: (options.padding ?? 5)
|
|
41740
|
+
};
|
|
41741
|
+
if (!chart.styledMode) {
|
|
41742
|
+
animatableAttribs.fill = options.backgroundColor;
|
|
41743
|
+
animatableAttribs.stroke = options.borderColor;
|
|
41744
|
+
animatableAttribs['stroke-width'] = options.borderWidth;
|
|
41745
|
+
label.css(options.style || {});
|
|
41678
41746
|
}
|
|
41679
|
-
|
|
41680
|
-
|
|
41681
|
-
|
|
41682
|
-
|
|
41683
|
-
|
|
41684
|
-
|
|
41685
|
-
|
|
41686
|
-
padding: (options.padding ?? 5),
|
|
41687
|
-
visibility: 'hidden' // Hidden until setOffset is called
|
|
41688
|
-
};
|
|
41689
|
-
if (!chart.styledMode) {
|
|
41690
|
-
attr.fill = options.backgroundColor;
|
|
41691
|
-
attr.stroke = options.borderColor;
|
|
41692
|
-
attr['stroke-width'] = options.borderWidth;
|
|
41693
|
-
this.label.css(options.style || {});
|
|
41694
|
-
}
|
|
41695
|
-
this.label.attr(attr);
|
|
41696
|
-
if (!this.label.added) {
|
|
41697
|
-
this.label.add(group); // Add to the labels-group
|
|
41698
|
-
}
|
|
41747
|
+
label
|
|
41748
|
+
.attr({
|
|
41749
|
+
text,
|
|
41750
|
+
visibility: 'hidden' // Hidden until setOffset is called
|
|
41751
|
+
})[verb](animatableAttribs);
|
|
41752
|
+
if (!label.added) {
|
|
41753
|
+
label.add(group); // Add to the labels-group
|
|
41699
41754
|
}
|
|
41700
41755
|
// Rank it higher than data labels (#8742)
|
|
41701
|
-
|
|
41756
|
+
label.labelrank = chart.plotSizeY;
|
|
41702
41757
|
fireEvent(this, 'afterRender');
|
|
41703
41758
|
}
|
|
41704
41759
|
/**
|
|
@@ -41707,35 +41762,38 @@ class StackItem {
|
|
|
41707
41762
|
* @internal
|
|
41708
41763
|
*/
|
|
41709
41764
|
setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
|
|
41710
|
-
const {
|
|
41711
|
-
xOffset,
|
|
41712
|
-
width,
|
|
41765
|
+
const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
|
|
41713
41766
|
boxBottom,
|
|
41714
41767
|
boxTop,
|
|
41715
41768
|
defaultX,
|
|
41716
|
-
|
|
41717
|
-
|
|
41769
|
+
isNegative,
|
|
41770
|
+
width,
|
|
41771
|
+
xAxis,
|
|
41772
|
+
xOffset
|
|
41773
|
+
}), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
|
|
41774
|
+
align,
|
|
41775
|
+
verticalAlign,
|
|
41776
|
+
x,
|
|
41777
|
+
y
|
|
41778
|
+
};
|
|
41718
41779
|
if (label && stackBox) {
|
|
41719
41780
|
const labelBox = label.getBBox(void 0, 0), padding = label.padding;
|
|
41720
41781
|
let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
|
|
41721
|
-
// Reset alignOptions property after justify #12337
|
|
41722
|
-
alignOptions.x = options.x || 0;
|
|
41723
|
-
alignOptions.y = options.y || 0;
|
|
41724
41782
|
// Calculate the adjusted Stack position, to take into consideration
|
|
41725
|
-
//
|
|
41726
|
-
//
|
|
41727
|
-
//
|
|
41728
|
-
const { x, y } = this.adjustStackPosition({
|
|
41783
|
+
// the size if the labelBox and vertical alignment as well as the
|
|
41784
|
+
// text alignment. It needs to be done to work with default
|
|
41785
|
+
// SVGLabel.align/justify methods.
|
|
41786
|
+
const { x: adjustX, y: adjustY } = this.adjustStackPosition({
|
|
41729
41787
|
labelBox,
|
|
41730
41788
|
verticalAlign,
|
|
41731
41789
|
textAlign
|
|
41732
41790
|
});
|
|
41733
|
-
stackBox.x -=
|
|
41734
|
-
stackBox.y -=
|
|
41791
|
+
stackBox.x -= adjustX;
|
|
41792
|
+
stackBox.y -= adjustY;
|
|
41735
41793
|
// Align the label to the adjusted box.
|
|
41736
41794
|
label.align(alignOptions, false, stackBox);
|
|
41737
|
-
// Check if label is inside the plotArea #12294
|
|
41738
|
-
visible = chart.isInsidePlot(label.alignAttr.x +
|
|
41795
|
+
// Check if the label is inside the plotArea #12294
|
|
41796
|
+
visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
|
|
41739
41797
|
if (!visible) {
|
|
41740
41798
|
isJustify = false;
|
|
41741
41799
|
}
|
|
@@ -41743,11 +41801,8 @@ class StackItem {
|
|
|
41743
41801
|
// Justify stackLabel into the alignBox
|
|
41744
41802
|
StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
|
|
41745
41803
|
}
|
|
41746
|
-
// Add
|
|
41747
|
-
// Also add correct rotation with its rotation origin. #15129
|
|
41804
|
+
// Add correct rotation with its rotation origin (#15129)
|
|
41748
41805
|
label.attr({
|
|
41749
|
-
x: label.alignAttr.x,
|
|
41750
|
-
y: label.alignAttr.y,
|
|
41751
41806
|
rotation: options.rotation,
|
|
41752
41807
|
rotationOriginX: labelBox.width *
|
|
41753
41808
|
getAlignFactor(options.textAlign || 'center'),
|
|
@@ -41786,22 +41841,22 @@ class StackItem {
|
|
|
41786
41841
|
* The x, y, height, width of the stack.
|
|
41787
41842
|
*/
|
|
41788
41843
|
getStackBox(stackBoxProps) {
|
|
41789
|
-
const
|
|
41844
|
+
const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
|
|
41790
41845
|
100 :
|
|
41791
41846
|
(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 ||
|
|
41792
41847
|
(isNumber(axis.min) &&
|
|
41793
41848
|
axis.logarithmic &&
|
|
41794
41849
|
axis.logarithmic.lin2log(axis.min)) ||
|
|
41795
|
-
0), height = Math.abs(y - yZero), inverted = chart.inverted
|
|
41850
|
+
0), height = Math.abs(y - yZero), inverted = chart.inverted;
|
|
41796
41851
|
return inverted ?
|
|
41797
41852
|
{
|
|
41798
|
-
x: (
|
|
41853
|
+
x: (isNegative ? y : y - height) - chart.plotLeft,
|
|
41799
41854
|
y: xAxis.height - x - width + xAxis.top - chart.plotTop,
|
|
41800
41855
|
width: height,
|
|
41801
41856
|
height: width
|
|
41802
41857
|
} : {
|
|
41803
41858
|
x: x + xAxis.transB - chart.plotLeft,
|
|
41804
|
-
y: (
|
|
41859
|
+
y: (isNegative ? y - height : y) - chart.plotTop,
|
|
41805
41860
|
width: width,
|
|
41806
41861
|
height: height
|
|
41807
41862
|
};
|
|
@@ -41837,10 +41892,6 @@ class StackItem {
|
|
|
41837
41892
|
* @name Highcharts.StackItemObject#cumulative
|
|
41838
41893
|
* @type {number}
|
|
41839
41894
|
*/ /**
|
|
41840
|
-
* True if on the negative side
|
|
41841
|
-
* @name Highcharts.StackItemObject#isNegative
|
|
41842
|
-
* @type {boolean}
|
|
41843
|
-
*/ /**
|
|
41844
41895
|
* Related SVG element
|
|
41845
41896
|
* @name Highcharts.StackItemObject#label
|
|
41846
41897
|
* @type {Highcharts.SVGElement}
|
|
@@ -42057,7 +42108,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
|
|
|
42057
42108
|
stacks[key][x].total = null;
|
|
42058
42109
|
}
|
|
42059
42110
|
else {
|
|
42060
|
-
stacks[key][x] = new Stacking_StackItem(axis,
|
|
42111
|
+
stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
|
|
42061
42112
|
}
|
|
42062
42113
|
}
|
|
42063
42114
|
// If the StackItem doesn't exist, create it first
|
|
@@ -42214,29 +42265,41 @@ class AxisAdditions {
|
|
|
42214
42265
|
});
|
|
42215
42266
|
});
|
|
42216
42267
|
}
|
|
42217
|
-
/**
|
|
42268
|
+
/**
|
|
42269
|
+
* Create the stack totals group and render the individual labels into it
|
|
42270
|
+
* @internal
|
|
42271
|
+
*/
|
|
42218
42272
|
renderStackTotals() {
|
|
42219
|
-
const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks,
|
|
42220
|
-
|
|
42221
|
-
|
|
42222
|
-
|
|
42223
|
-
|
|
42224
|
-
|
|
42225
|
-
|
|
42226
|
-
|
|
42227
|
-
|
|
42228
|
-
|
|
42229
|
-
|
|
42230
|
-
|
|
42231
|
-
|
|
42232
|
-
|
|
42233
|
-
|
|
42234
|
-
|
|
42273
|
+
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 ||
|
|
42274
|
+
(enabled ?
|
|
42275
|
+
renderer
|
|
42276
|
+
.g('stack-labels')
|
|
42277
|
+
.attr({
|
|
42278
|
+
zIndex: 6,
|
|
42279
|
+
opacity: 0
|
|
42280
|
+
})
|
|
42281
|
+
.add() :
|
|
42282
|
+
void 0));
|
|
42283
|
+
if (stackTotalGroup) {
|
|
42284
|
+
// The plotLeft/Top will change when y axis gets wider so we need to
|
|
42285
|
+
// translate the stackTotalGroup at every render call. See bug #506
|
|
42286
|
+
// and #516
|
|
42287
|
+
stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
|
|
42288
|
+
// Render each stack total
|
|
42289
|
+
objectEach(stacks, (type) => {
|
|
42290
|
+
objectEach(type, (stack) => {
|
|
42291
|
+
if (enabled) {
|
|
42292
|
+
stack.render(stackTotalGroup);
|
|
42293
|
+
}
|
|
42294
|
+
else {
|
|
42295
|
+
stack.label = stack.label?.destroy();
|
|
42296
|
+
}
|
|
42297
|
+
});
|
|
42235
42298
|
});
|
|
42236
|
-
|
|
42237
|
-
|
|
42238
|
-
|
|
42239
|
-
}
|
|
42299
|
+
stackTotalGroup.animate({
|
|
42300
|
+
opacity: 1
|
|
42301
|
+
}, animationConfig);
|
|
42302
|
+
}
|
|
42240
42303
|
}
|
|
42241
42304
|
}
|
|
42242
42305
|
/* *
|
|
@@ -42558,7 +42621,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
|
|
|
42558
42621
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42559
42622
|
*
|
|
42560
42623
|
* @extends series,plotOptions.line
|
|
42561
|
-
* @excluding dataParser,dataURL
|
|
42562
42624
|
* @product highcharts highstock
|
|
42563
42625
|
* @apioption series.line
|
|
42564
42626
|
*/
|
|
@@ -42932,7 +42994,7 @@ const AreaSeriesDefaults = {
|
|
|
42932
42994
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42933
42995
|
*
|
|
42934
42996
|
* @extends series,plotOptions.area
|
|
42935
|
-
* @excluding
|
|
42997
|
+
* @excluding useOhlcData
|
|
42936
42998
|
* @product highcharts highstock
|
|
42937
42999
|
* @apioption series.area
|
|
42938
43000
|
*/
|
|
@@ -43569,7 +43631,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
|
|
|
43569
43631
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
43570
43632
|
*
|
|
43571
43633
|
* @extends series,plotOptions.spline
|
|
43572
|
-
* @excluding
|
|
43634
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43573
43635
|
* @product highcharts highstock
|
|
43574
43636
|
* @apioption series.spline
|
|
43575
43637
|
*/
|
|
@@ -43731,7 +43793,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
|
|
|
43731
43793
|
*
|
|
43732
43794
|
*
|
|
43733
43795
|
* @extends series,plotOptions.areaspline
|
|
43734
|
-
* @excluding
|
|
43796
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43735
43797
|
* @product highcharts highstock
|
|
43736
43798
|
* @apioption series.areaspline
|
|
43737
43799
|
*/
|
|
@@ -44008,13 +44070,16 @@ const ColumnSeriesDefaults = {
|
|
|
44008
44070
|
* The minimal height for a column or width for a bar. By default,
|
|
44009
44071
|
* 0 values are not shown. To visualize a 0 (or close to zero) point,
|
|
44010
44072
|
* set the minimal point length to a pixel value like 3\. In stacked
|
|
44011
|
-
* column charts,
|
|
44012
|
-
* packed values.
|
|
44073
|
+
* column charts, the length is applied to each point in isolation, so
|
|
44074
|
+
* tightly packed values may overlap. See the stacked sample below for a
|
|
44075
|
+
* plugin that lays out the stack as a whole instead.
|
|
44013
44076
|
*
|
|
44014
44077
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength/
|
|
44015
44078
|
* Zero base value
|
|
44016
44079
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
|
|
44017
44080
|
* Positive and negative close to zero values
|
|
44081
|
+
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
|
|
44082
|
+
* Stack-aware minimum length
|
|
44018
44083
|
*
|
|
44019
44084
|
* @product highcharts highstock gantt
|
|
44020
44085
|
*/
|
|
@@ -44185,7 +44250,7 @@ const ColumnSeriesDefaults = {
|
|
|
44185
44250
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
44186
44251
|
*
|
|
44187
44252
|
* @extends series,plotOptions.column
|
|
44188
|
-
* @excluding connectNulls,
|
|
44253
|
+
* @excluding connectNulls, gapSize, gapUnit, linecap,
|
|
44189
44254
|
* lineWidth, marker, connectEnds, step
|
|
44190
44255
|
* @product highcharts highstock
|
|
44191
44256
|
* @apioption series.column
|
|
@@ -45829,7 +45894,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
|
|
|
45829
45894
|
* it is inherited from [chart.type](#chart.type).
|
|
45830
45895
|
*
|
|
45831
45896
|
* @extends series,plotOptions.bar
|
|
45832
|
-
* @excluding connectNulls, dashStyle,
|
|
45897
|
+
* @excluding connectNulls, dashStyle, gapSize, gapUnit,
|
|
45833
45898
|
* linecap, lineWidth, marker, connectEnds, step
|
|
45834
45899
|
* @product highcharts
|
|
45835
45900
|
* @apioption series.bar
|
|
@@ -46030,7 +46095,7 @@ const ScatterSeriesDefaults = {
|
|
|
46030
46095
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
46031
46096
|
*
|
|
46032
46097
|
* @extends series,plotOptions.scatter
|
|
46033
|
-
* @excluding cropThreshold,
|
|
46098
|
+
* @excluding cropThreshold, useOhlcData
|
|
46034
46099
|
* @product highcharts highstock
|
|
46035
46100
|
* @apioption series.scatter
|
|
46036
46101
|
*/
|
|
@@ -47132,7 +47197,7 @@ const PieSeriesDefaults = {
|
|
|
47132
47197
|
* it is inherited from [chart.type](#chart.type).
|
|
47133
47198
|
*
|
|
47134
47199
|
* @extends series,plotOptions.pie
|
|
47135
|
-
* @excluding cropThreshold,
|
|
47200
|
+
* @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
|
|
47136
47201
|
* dataSorting, step, boostThreshold, boostBlending
|
|
47137
47202
|
* @product highcharts highmaps
|
|
47138
47203
|
* @apioption series.pie
|
|
@@ -48233,6 +48298,7 @@ var GeometryUtilities;
|
|
|
48233
48298
|
* */
|
|
48234
48299
|
|
|
48235
48300
|
|
|
48301
|
+
|
|
48236
48302
|
const { pointInPolygon } = Geometry_GeometryUtilities;
|
|
48237
48303
|
|
|
48238
48304
|
/* *
|
|
@@ -48373,30 +48439,34 @@ function composeOverlappingDataLabels(ChartClass) {
|
|
|
48373
48439
|
* Whether label is affected
|
|
48374
48440
|
*/
|
|
48375
48441
|
function hideOrShow(label, chart) {
|
|
48376
|
-
let
|
|
48442
|
+
let isLabelAffected = false;
|
|
48377
48443
|
if (label) {
|
|
48378
|
-
newOpacity = label.newOpacity;
|
|
48444
|
+
const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
|
|
48445
|
+
// For tick labels, we need to stop running animations otherwise they
|
|
48446
|
+
// may continue to run after we set the new opacity
|
|
48447
|
+
if (!isDataLabel) {
|
|
48448
|
+
stop(label, 'opacity');
|
|
48449
|
+
}
|
|
48379
48450
|
if (label.oldOpacity !== newOpacity) {
|
|
48380
48451
|
// Toggle data labels
|
|
48381
|
-
if (
|
|
48452
|
+
if (isDataLabel) {
|
|
48382
48453
|
// Make sure the label is completely hidden to avoid catching
|
|
48383
48454
|
// clicks (#4362)
|
|
48384
48455
|
label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
|
|
48385
|
-
|
|
48456
|
+
isLabelAffected = true;
|
|
48457
|
+
// Animate or set the opacity
|
|
48458
|
+
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
|
|
48386
48459
|
if (!chart.styledMode) {
|
|
48387
48460
|
label.css({
|
|
48388
48461
|
pointerEvents: newOpacity ? 'auto' : 'none'
|
|
48389
48462
|
});
|
|
48390
48463
|
}
|
|
48391
|
-
};
|
|
48392
|
-
isLabelAffected = true;
|
|
48393
|
-
// Animate or set the opacity
|
|
48394
|
-
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
|
|
48464
|
+
});
|
|
48395
48465
|
fireEvent(chart, 'afterHideOverlappingLabel');
|
|
48396
|
-
// Toggle other labels
|
|
48466
|
+
// Toggle other labels - tick labels, stack labels
|
|
48397
48467
|
}
|
|
48398
48468
|
else {
|
|
48399
|
-
label.attr({
|
|
48469
|
+
label[label.placed ? 'animate' : 'attr']({
|
|
48400
48470
|
opacity: newOpacity
|
|
48401
48471
|
});
|
|
48402
48472
|
}
|
|
@@ -48412,25 +48482,37 @@ function hideOrShow(label, chart) {
|
|
|
48412
48482
|
* @internal
|
|
48413
48483
|
*/
|
|
48414
48484
|
function OverlappingDataLabels_onChartRender() {
|
|
48415
|
-
const chart = this
|
|
48485
|
+
const chart = this,
|
|
48486
|
+
// Helper function for data labels and stack labels when dynamicly
|
|
48487
|
+
// toggling the allowOverlap option
|
|
48488
|
+
toggle = (label, allowOverlap) => {
|
|
48489
|
+
// Allow overlap, reset opacity and show
|
|
48490
|
+
if (allowOverlap) {
|
|
48491
|
+
label.oldOpacity = label.opacity;
|
|
48492
|
+
label.newOpacity = 1;
|
|
48493
|
+
hideOrShow(label, chart);
|
|
48494
|
+
// Do not allow overlap
|
|
48495
|
+
}
|
|
48496
|
+
else {
|
|
48497
|
+
labels.push(label);
|
|
48498
|
+
}
|
|
48499
|
+
};
|
|
48416
48500
|
let labels = [];
|
|
48417
48501
|
// Consider external label collectors
|
|
48418
48502
|
for (const collector of (chart.labelCollectors || [])) {
|
|
48419
48503
|
labels = labels.concat(collector());
|
|
48420
48504
|
}
|
|
48421
|
-
|
|
48422
|
-
|
|
48423
|
-
|
|
48424
|
-
|
|
48425
|
-
|
|
48426
|
-
|
|
48427
|
-
|
|
48428
|
-
labels.push(stackItem.label);
|
|
48429
|
-
}
|
|
48430
|
-
});
|
|
48505
|
+
// Stack labels
|
|
48506
|
+
for (const { options, stacking } of (chart.yAxis || [])) {
|
|
48507
|
+
objectEach(stacking?.stacks, (stack) => {
|
|
48508
|
+
objectEach(stack, ({ label }) => {
|
|
48509
|
+
if (label) {
|
|
48510
|
+
toggle(label, options.stackLabels?.allowOverlap);
|
|
48511
|
+
}
|
|
48431
48512
|
});
|
|
48432
|
-
}
|
|
48513
|
+
});
|
|
48433
48514
|
}
|
|
48515
|
+
// Series data labels
|
|
48434
48516
|
for (const series of (chart.series || [])) {
|
|
48435
48517
|
if (series.visible && series.hasDataLabels?.()) { // #3866
|
|
48436
48518
|
const push = (points) => {
|
|
@@ -48459,21 +48541,13 @@ function OverlappingDataLabels_onChartRender() {
|
|
|
48459
48541
|
}
|
|
48460
48542
|
*/
|
|
48461
48543
|
// Allow overlap if the option is explicitly true
|
|
48462
|
-
|
|
48544
|
+
toggle(label, (
|
|
48463
48545
|
// #13449
|
|
48464
48546
|
options.allowOverlap ??
|
|
48465
48547
|
// Pie labels outside have a separate placement
|
|
48466
48548
|
// logic, skip the overlap logic
|
|
48467
48549
|
(series.is('pie') &&
|
|
48468
|
-
Number(options.distance) > 0))
|
|
48469
|
-
label.oldOpacity = label.opacity;
|
|
48470
|
-
label.newOpacity = 1;
|
|
48471
|
-
hideOrShow(label, chart);
|
|
48472
|
-
// Do not allow overlap
|
|
48473
|
-
}
|
|
48474
|
-
else {
|
|
48475
|
-
labels.push(label);
|
|
48476
|
-
}
|
|
48550
|
+
Number(options.distance) > 0)));
|
|
48477
48551
|
});
|
|
48478
48552
|
}
|
|
48479
48553
|
}
|
|
@@ -49149,7 +49223,7 @@ var Responsive;
|
|
|
49149
49223
|
;// ./code/es-modules/masters/highcharts.src.js
|
|
49150
49224
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
49151
49225
|
/**
|
|
49152
|
-
* @license Highcharts JS v13.0
|
|
49226
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
49153
49227
|
* @module highcharts/highcharts
|
|
49154
49228
|
*
|
|
49155
49229
|
* (c) 2009-2026 Highsoft AS
|
|
@@ -49361,7 +49435,8 @@ function compose(ChartClass, NavigatorClass) {
|
|
|
49361
49435
|
const chartProto = ChartClass.prototype;
|
|
49362
49436
|
NavigatorConstructor = NavigatorClass;
|
|
49363
49437
|
chartProto.callbacks.push(onChartCallback);
|
|
49364
|
-
addEvent(ChartClass, 'afterAddSeries',
|
|
49438
|
+
addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
|
|
49439
|
+
addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
|
|
49365
49440
|
addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
|
|
49366
49441
|
addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
|
|
49367
49442
|
addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
|
|
@@ -49370,13 +49445,12 @@ function compose(ChartClass, NavigatorClass) {
|
|
|
49370
49445
|
}
|
|
49371
49446
|
}
|
|
49372
49447
|
/**
|
|
49373
|
-
*
|
|
49448
|
+
* Reset the base series.
|
|
49374
49449
|
* @internal
|
|
49375
49450
|
*/
|
|
49376
|
-
function
|
|
49451
|
+
function resetBaseSeries() {
|
|
49377
49452
|
if (this.navigator) {
|
|
49378
|
-
|
|
49379
|
-
this.navigator.setBaseSeries(null, false);
|
|
49453
|
+
this.navigator.setBaseSeries(void 0, false);
|
|
49380
49454
|
}
|
|
49381
49455
|
}
|
|
49382
49456
|
/**
|
|
@@ -49525,7 +49599,7 @@ const ChartNavigatorComposition = {
|
|
|
49525
49599
|
* */
|
|
49526
49600
|
|
|
49527
49601
|
|
|
49528
|
-
const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
|
|
49602
|
+
const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
|
|
49529
49603
|
|
|
49530
49604
|
/* *
|
|
49531
49605
|
*
|
|
@@ -49591,8 +49665,7 @@ class NavigatorAxisAdditions {
|
|
|
49591
49665
|
*
|
|
49592
49666
|
* */
|
|
49593
49667
|
static compose(AxisClass) {
|
|
49594
|
-
if (
|
|
49595
|
-
AxisClass.keepProps.push('navigatorAxis');
|
|
49668
|
+
if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
|
|
49596
49669
|
addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
|
|
49597
49670
|
addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
|
|
49598
49671
|
}
|
|
@@ -50464,6 +50537,9 @@ var ScrollbarAxis;
|
|
|
50464
50537
|
}
|
|
50465
50538
|
});
|
|
50466
50539
|
}
|
|
50540
|
+
else if (axis.scrollbar) {
|
|
50541
|
+
axis.scrollbar = axis.scrollbar.destroy();
|
|
50542
|
+
}
|
|
50467
50543
|
}
|
|
50468
50544
|
/**
|
|
50469
50545
|
* Wrap rendering axis, and update scrollbar if one is created.
|
|
@@ -50601,14 +50677,12 @@ var ScrollbarAxis;
|
|
|
50601
50677
|
*/
|
|
50602
50678
|
const ScrollbarDefaults = {
|
|
50603
50679
|
/**
|
|
50604
|
-
* The height of the scrollbar. If `buttonsEnabled` is true
|
|
50680
|
+
* The height of the scrollbar. If `buttonsEnabled` is true, the height
|
|
50605
50681
|
* also applies to the width of the scroll arrows so that they are always
|
|
50606
50682
|
* squares.
|
|
50607
50683
|
*
|
|
50608
50684
|
* @sample stock/scrollbar/style/
|
|
50609
50685
|
* Non-default height
|
|
50610
|
-
*
|
|
50611
|
-
* @type {number}
|
|
50612
50686
|
*/
|
|
50613
50687
|
height: 10,
|
|
50614
50688
|
/**
|
|
@@ -52915,11 +52989,7 @@ class Navigator {
|
|
|
52915
52989
|
erase(this.chart.axes, this.yAxis);
|
|
52916
52990
|
}
|
|
52917
52991
|
// Destroy series
|
|
52918
|
-
(this.series || [])
|
|
52919
|
-
if (s.destroy) {
|
|
52920
|
-
s.destroy();
|
|
52921
|
-
}
|
|
52922
|
-
});
|
|
52992
|
+
destroyObjectProperties(this.series || []);
|
|
52923
52993
|
// Destroy properties
|
|
52924
52994
|
[
|
|
52925
52995
|
'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
|
|
@@ -53039,6 +53109,27 @@ const standaloneNavigatorDefaults = {
|
|
|
53039
53109
|
|
|
53040
53110
|
|
|
53041
53111
|
|
|
53112
|
+
|
|
53113
|
+
/* *
|
|
53114
|
+
*
|
|
53115
|
+
* Functions
|
|
53116
|
+
*
|
|
53117
|
+
* */
|
|
53118
|
+
/**
|
|
53119
|
+
* Support for the deprecated `chart` option, renamed to `chartOptions`.
|
|
53120
|
+
* The new option takes precedence. #24715
|
|
53121
|
+
*
|
|
53122
|
+
* @internal
|
|
53123
|
+
*/
|
|
53124
|
+
function compatChartOptions(options, chart) {
|
|
53125
|
+
if (options.chart) {
|
|
53126
|
+
error(32, false, chart, {
|
|
53127
|
+
'standaloneNavigator.chart': 'use standaloneNavigator.chartOptions'
|
|
53128
|
+
});
|
|
53129
|
+
return merge({ chartOptions: options.chart }, options);
|
|
53130
|
+
}
|
|
53131
|
+
return options;
|
|
53132
|
+
}
|
|
53042
53133
|
/* *
|
|
53043
53134
|
*
|
|
53044
53135
|
* Class
|
|
@@ -53095,9 +53186,15 @@ class StandaloneNavigator {
|
|
|
53095
53186
|
* */
|
|
53096
53187
|
constructor(element, userOptions) {
|
|
53097
53188
|
this.boundAxes = [];
|
|
53098
|
-
this.userOptions = userOptions;
|
|
53099
|
-
this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.
|
|
53100
|
-
|
|
53189
|
+
this.userOptions = userOptions = compatChartOptions(userOptions);
|
|
53190
|
+
this.chartOptions = merge(Core_Globals.getOptions(), StandaloneNavigatorDefaults, userOptions.chartOptions, { navigator: userOptions });
|
|
53191
|
+
// For a non-inverted navigator, the height option sets the chart
|
|
53192
|
+
// height unless it is set explicitly in chart options (#21268,
|
|
53193
|
+
// #24715).
|
|
53194
|
+
if (this.chartOptions.chart &&
|
|
53195
|
+
!this.chartOptions.chart.inverted &&
|
|
53196
|
+
!userOptions.chartOptions?.chart?.height &&
|
|
53197
|
+
userOptions.height) {
|
|
53101
53198
|
this.chartOptions.chart.height = userOptions.height;
|
|
53102
53199
|
}
|
|
53103
53200
|
const chart = new Chart_Chart(element, this.chartOptions);
|
|
@@ -53185,10 +53282,8 @@ class StandaloneNavigator {
|
|
|
53185
53282
|
// Set extremes to match the navigator's extremes
|
|
53186
53283
|
axis.setExtremes(min, max);
|
|
53187
53284
|
// Unbind the axis before it's destroyed
|
|
53188
|
-
addEvent(axis, 'destroy', (
|
|
53189
|
-
|
|
53190
|
-
this.unbind(axis);
|
|
53191
|
-
}
|
|
53285
|
+
addEvent(axis, 'destroy', () => {
|
|
53286
|
+
this.unbind(axis);
|
|
53192
53287
|
});
|
|
53193
53288
|
}
|
|
53194
53289
|
/**
|
|
@@ -53282,7 +53377,12 @@ class StandaloneNavigator {
|
|
|
53282
53377
|
* specified, the standalone navigator will be redrawn.
|
|
53283
53378
|
*/
|
|
53284
53379
|
update(newOptions, redraw) {
|
|
53285
|
-
|
|
53380
|
+
newOptions = compatChartOptions(newOptions, this.navigator.chart);
|
|
53381
|
+
this.userOptions = merge(this.userOptions, newOptions);
|
|
53382
|
+
const chartUserOptions = this.userOptions.chartOptions?.chart;
|
|
53383
|
+
this.chartOptions = merge(this.chartOptions, (newOptions.height &&
|
|
53384
|
+
!chartUserOptions?.inverted &&
|
|
53385
|
+
!chartUserOptions?.height) ? { chart: { height: newOptions.height } } : void 0, newOptions.chartOptions, { navigator: newOptions });
|
|
53286
53386
|
this.navigator.chart.update(this.chartOptions, redraw);
|
|
53287
53387
|
}
|
|
53288
53388
|
/**
|
|
@@ -53409,7 +53509,7 @@ class StandaloneNavigator {
|
|
|
53409
53509
|
/* unused harmony import specifier */ var Highcharts;
|
|
53410
53510
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
53411
53511
|
/**
|
|
53412
|
-
* @license Highcharts JS v13.0
|
|
53512
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
53413
53513
|
* @module highcharts/modules/navigator
|
|
53414
53514
|
* @requires highcharts
|
|
53415
53515
|
*
|