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
package/highstock.src.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
2
2
|
/**
|
|
3
|
-
* @license Highcharts Stock v13.0
|
|
3
|
+
* @license Highcharts Stock v13.1.0 (2026-09-18)
|
|
4
4
|
* @module highcharts/highstock
|
|
5
5
|
*
|
|
6
6
|
* (c) 2009-2026 Highsoft AS
|
|
@@ -25,36 +25,17 @@ return /******/ (() => { // webpackBootstrap
|
|
|
25
25
|
/******/
|
|
26
26
|
/************************************************************************/
|
|
27
27
|
/******/ /* webpack/runtime/define property getters */
|
|
28
|
-
/******/
|
|
29
|
-
/******/
|
|
30
|
-
/******/
|
|
31
|
-
/******/ if(
|
|
32
|
-
/******/
|
|
33
|
-
/******/ while(i < definition.length) {
|
|
34
|
-
/******/ var key = definition[i++];
|
|
35
|
-
/******/ var binding = definition[i++];
|
|
36
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
37
|
-
/******/ if(binding === 0) {
|
|
38
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
39
|
-
/******/ } else {
|
|
40
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
41
|
-
/******/ }
|
|
42
|
-
/******/ } else if(binding === 0) { i++; }
|
|
43
|
-
/******/ }
|
|
44
|
-
/******/ } else {
|
|
45
|
-
/******/ for(var key in definition) {
|
|
46
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
47
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
48
|
-
/******/ }
|
|
49
|
-
/******/ }
|
|
28
|
+
/******/ // define getter/value functions for harmony exports
|
|
29
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
30
|
+
/******/ for(var key in definition) {
|
|
31
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
32
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
50
33
|
/******/ }
|
|
51
|
-
/******/ }
|
|
52
|
-
/******/ }
|
|
34
|
+
/******/ }
|
|
35
|
+
/******/ };
|
|
53
36
|
/******/
|
|
54
37
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
55
|
-
/******/ (
|
|
56
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
57
|
-
/******/ })();
|
|
38
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));
|
|
58
39
|
/******/
|
|
59
40
|
/************************************************************************/
|
|
60
41
|
let __webpack_exports__ = {};
|
|
@@ -93,7 +74,7 @@ var Globals;
|
|
|
93
74
|
* Constants
|
|
94
75
|
*
|
|
95
76
|
* */
|
|
96
|
-
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.0
|
|
77
|
+
Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '13.1.0', Globals.win = (typeof window !== 'undefined' ?
|
|
97
78
|
window :
|
|
98
79
|
{}), // eslint-disable-line node/no-unsupported-features/es-builtins
|
|
99
80
|
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 = [
|
|
@@ -104,14 +85,16 @@ var Globals;
|
|
|
104
85
|
], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {
|
|
105
86
|
// Checks whether the browser supports passive events, (#11353).
|
|
106
87
|
let supportsPassive = false;
|
|
107
|
-
//
|
|
108
|
-
//
|
|
88
|
+
// Accessors don't work on IE as well as passive events - instead
|
|
89
|
+
// of using polyfill, we can exclude IE totally. The getter has to
|
|
90
|
+
// be enumerable, or wrappers that shallow-copy the options never
|
|
91
|
+
// read it (#25092).
|
|
109
92
|
if (!Globals.isMS) {
|
|
110
|
-
const opts =
|
|
111
|
-
get
|
|
112
|
-
supportsPassive = true;
|
|
93
|
+
const opts = {
|
|
94
|
+
get passive() {
|
|
95
|
+
return (supportsPassive = true);
|
|
113
96
|
}
|
|
114
|
-
}
|
|
97
|
+
};
|
|
115
98
|
if (Globals.win.addEventListener && Globals.win.removeEventListener) {
|
|
116
99
|
Globals.win.addEventListener('testPassive', Globals.noop, opts);
|
|
117
100
|
Globals.win.removeEventListener('testPassive', Globals.noop, opts);
|
|
@@ -2187,6 +2170,13 @@ function extend(a, b) {
|
|
|
2187
2170
|
a = {};
|
|
2188
2171
|
}
|
|
2189
2172
|
for (n in b) { // eslint-disable-line guard-for-in
|
|
2173
|
+
// Prototype pollution (#14883). Keys like `__proto__` may arrive as
|
|
2174
|
+
// own, enumerable properties through `JSON.parse`, in which case
|
|
2175
|
+
// assigning them would mutate the prototype of the target instead of
|
|
2176
|
+
// adding a property.
|
|
2177
|
+
if (n === '__proto__' || n === 'constructor') {
|
|
2178
|
+
continue;
|
|
2179
|
+
}
|
|
2190
2180
|
a[n] = b[n];
|
|
2191
2181
|
}
|
|
2192
2182
|
return a;
|
|
@@ -5448,6 +5438,13 @@ const defaultOptions = {
|
|
|
5448
5438
|
* @since 2.0
|
|
5449
5439
|
* @apioption title.align
|
|
5450
5440
|
*/
|
|
5441
|
+
/**
|
|
5442
|
+
* A CSS class name to apply to the title's container div,
|
|
5443
|
+
* allowing unique CSS styling for each chart.
|
|
5444
|
+
*
|
|
5445
|
+
* @type {string}
|
|
5446
|
+
* @apioption title.className
|
|
5447
|
+
*/
|
|
5451
5448
|
/**
|
|
5452
5449
|
* The margin between the title and the plot area, or if a subtitle
|
|
5453
5450
|
* is present, the margin between the subtitle and the plot area.
|
|
@@ -5510,6 +5507,13 @@ const defaultOptions = {
|
|
|
5510
5507
|
* @since 2.0
|
|
5511
5508
|
* @apioption subtitle.align
|
|
5512
5509
|
*/
|
|
5510
|
+
/**
|
|
5511
|
+
* A CSS class name to apply to the subtitle's container div,
|
|
5512
|
+
* allowing unique CSS styling for each chart.
|
|
5513
|
+
*
|
|
5514
|
+
* @type {string}
|
|
5515
|
+
* @apioption subtitle.className
|
|
5516
|
+
*/
|
|
5513
5517
|
/**
|
|
5514
5518
|
* When the subtitle is floating, the plot area will not move to make
|
|
5515
5519
|
* space for it.
|
|
@@ -7642,6 +7646,10 @@ const defaultOptions = {
|
|
|
7642
7646
|
/**
|
|
7643
7647
|
* The URL for the credits label.
|
|
7644
7648
|
*
|
|
7649
|
+
* URLs that do not start with one of the
|
|
7650
|
+
* [AST.allowedReferences](https://api.highcharts.com/class-reference/Highcharts.AST#.allowedReferences),
|
|
7651
|
+
* for example `javascript:` URLs, are ignored.
|
|
7652
|
+
*
|
|
7645
7653
|
* @sample {highcharts} highcharts/credits/href/
|
|
7646
7654
|
* Custom URL and text
|
|
7647
7655
|
* @sample {highmaps} maps/credits/customized/
|
|
@@ -8615,6 +8623,7 @@ class Fx {
|
|
|
8615
8623
|
* Prepare start and end values so that the path can be animated one to one.
|
|
8616
8624
|
*
|
|
8617
8625
|
* @function Highcharts.Fx#initPath
|
|
8626
|
+
* @internal
|
|
8618
8627
|
*
|
|
8619
8628
|
* @param {Highcharts.SVGElement} elem
|
|
8620
8629
|
* The SVGElement item.
|
|
@@ -8914,7 +8923,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8914
8923
|
if (el) {
|
|
8915
8924
|
stop(el, prop);
|
|
8916
8925
|
}
|
|
8917
|
-
const fx = new Animation_Fx(el, opt, prop), d = params.d
|
|
8926
|
+
const fx = new Animation_Fx(el, opt, prop), d = params.d,
|
|
8927
|
+
// Discrete value that doesn't animate, apply at once
|
|
8928
|
+
applyImmediately = prop === 'dashstyle';
|
|
8918
8929
|
let start = 0, end = void 0, unit = '';
|
|
8919
8930
|
if (prop === 'd' && isArray(d)) {
|
|
8920
8931
|
fx.paths = fx.initPath(el, el.pathArray, d);
|
|
@@ -8923,6 +8934,9 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8923
8934
|
}
|
|
8924
8935
|
else if (el?.attr) {
|
|
8925
8936
|
start = el.attr(prop);
|
|
8937
|
+
if (applyImmediately) {
|
|
8938
|
+
el.attr(prop, val);
|
|
8939
|
+
}
|
|
8926
8940
|
}
|
|
8927
8941
|
else if (el) {
|
|
8928
8942
|
start = +(getStyle(el, prop) || 0);
|
|
@@ -8937,7 +8951,7 @@ function animate(el, params = { pos: 1 }, opt) {
|
|
|
8937
8951
|
end = end.replace(/px/g, ''); // #4351
|
|
8938
8952
|
}
|
|
8939
8953
|
// Empty dashstyle animation crashes treemap on hover
|
|
8940
|
-
if (defined(end)) {
|
|
8954
|
+
if (defined(end) && !applyImmediately) {
|
|
8941
8955
|
fx.run(start, end, unit);
|
|
8942
8956
|
}
|
|
8943
8957
|
});
|
|
@@ -9259,17 +9273,25 @@ class AST {
|
|
|
9259
9273
|
markup, 'text/html');
|
|
9260
9274
|
}
|
|
9261
9275
|
catch {
|
|
9262
|
-
//
|
|
9263
|
-
//
|
|
9264
|
-
//
|
|
9265
|
-
//
|
|
9266
|
-
//
|
|
9267
|
-
//
|
|
9276
|
+
// Due to a Chromium issue where chart redraws are triggered by a
|
|
9277
|
+
// `beforeprint` event (#16931),
|
|
9278
|
+
// https://issues.chromium.org/issues/40222135, the Trusted
|
|
9279
|
+
// Types `createHTML` callback can throw "The provided callback
|
|
9280
|
+
// is no longer runnable" while the browser is mid-print. Retry
|
|
9281
|
+
// with the raw string - `DOMParser` itself is not a Trusted
|
|
9282
|
+
// Types sink, so parsing it directly is safe.
|
|
9283
|
+
try {
|
|
9284
|
+
doc = new DOMParser().parseFromString(markup, 'text/html');
|
|
9285
|
+
}
|
|
9286
|
+
catch {
|
|
9287
|
+
// Ignore, fall through to the inert-document fallback below.
|
|
9288
|
+
}
|
|
9268
9289
|
}
|
|
9269
9290
|
if (!doc) {
|
|
9270
|
-
|
|
9271
|
-
|
|
9272
|
-
doc =
|
|
9291
|
+
// Never assign untrusted markup to a live document's innerHTML.
|
|
9292
|
+
// Parse into a detached, inert document instead.
|
|
9293
|
+
doc = Core_Globals.doc.implementation.createHTMLDocument('');
|
|
9294
|
+
doc.body.innerHTML = markup;
|
|
9273
9295
|
}
|
|
9274
9296
|
const appendChildNodes = (node, addTo) => {
|
|
9275
9297
|
// Preserve the camelCase of SVG tags via localName (#24702).
|
|
@@ -9506,7 +9528,6 @@ AST.allowedTags = [
|
|
|
9506
9528
|
'span',
|
|
9507
9529
|
'stop',
|
|
9508
9530
|
'strong',
|
|
9509
|
-
'style',
|
|
9510
9531
|
'sub',
|
|
9511
9532
|
'sup',
|
|
9512
9533
|
'svg',
|
|
@@ -10286,6 +10307,7 @@ class SVGElement {
|
|
|
10286
10307
|
let ret = (this[key + 'Value'] ??
|
|
10287
10308
|
this[key] ??
|
|
10288
10309
|
(this.element ? this.element.getAttribute(key) : null) ??
|
|
10310
|
+
this.box?.[key] ?? // For labels, when animating border radius
|
|
10289
10311
|
0);
|
|
10290
10312
|
if (/^-?[\d\.]+$/.test(ret)) { // Is numerical
|
|
10291
10313
|
ret = parseFloat(ret);
|
|
@@ -12880,7 +12902,7 @@ function arc(cx, cy, w, h, options) {
|
|
|
12880
12902
|
* Path
|
|
12881
12903
|
*/
|
|
12882
12904
|
function callout(x, y, w, h, options) {
|
|
12883
|
-
const arrowLength = 6, halfDistance = 6, r = Math.min((options?.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options?.anchorX, anchorY = options?.anchorY || 0;
|
|
12905
|
+
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;
|
|
12884
12906
|
const path = roundedRect(x, y, w, h, { r });
|
|
12885
12907
|
if (!isNumber(anchorX)) {
|
|
12886
12908
|
return path;
|
|
@@ -13504,8 +13526,12 @@ class TextBuilder {
|
|
|
13504
13526
|
this.truncate(textNode, textNode.textContent || '', void 0, 0,
|
|
13505
13527
|
// Target width
|
|
13506
13528
|
width, ellipsisWidth, stringWithEllipsis);
|
|
13507
|
-
|
|
13508
|
-
|
|
13529
|
+
// If there is still text left, add an ellipsis to
|
|
13530
|
+
// the end of the line
|
|
13531
|
+
if (textNode.textContent) {
|
|
13532
|
+
textNode.textContent = textNode.textContent
|
|
13533
|
+
?.replace('\u2026', '') + '\u2026';
|
|
13534
|
+
}
|
|
13509
13535
|
}
|
|
13510
13536
|
break;
|
|
13511
13537
|
}
|
|
@@ -13931,7 +13957,7 @@ class SVGRenderer {
|
|
|
13931
13957
|
this.url = this.getReferenceURL();
|
|
13932
13958
|
// Add description
|
|
13933
13959
|
const desc = this.createElement('desc').add();
|
|
13934
|
-
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.0
|
|
13960
|
+
desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 13.1.0'));
|
|
13935
13961
|
this.defs = this.createElement('defs').add();
|
|
13936
13962
|
this.allowHTML = allowHTML;
|
|
13937
13963
|
this.forExport = forExport;
|
|
@@ -15770,7 +15796,11 @@ class HTMLElement extends SVG_SVGElement {
|
|
|
15770
15796
|
// Some properties require other properties to be set
|
|
15771
15797
|
if (styles?.textOverflow === 'ellipsis') {
|
|
15772
15798
|
styles.overflow = 'hidden';
|
|
15773
|
-
|
|
15799
|
+
// With a line clamp, the text should wrap and ellipsis at the
|
|
15800
|
+
// clamped line instead of staying on one line (#24724)
|
|
15801
|
+
if (!(styles.lineClamp ?? this.styles.lineClamp)) {
|
|
15802
|
+
styles.whiteSpace = 'nowrap';
|
|
15803
|
+
}
|
|
15774
15804
|
}
|
|
15775
15805
|
// Apply line clamp
|
|
15776
15806
|
if (styles?.lineClamp) {
|
|
@@ -16959,15 +16989,16 @@ var AxisDefaults;
|
|
|
16959
16989
|
/**
|
|
16960
16990
|
* The label's pixel distance from the perimeter of the plot area.
|
|
16961
16991
|
* On cartesian charts, this is overridden if the `labels.y` setting
|
|
16962
|
-
* is set.
|
|
16992
|
+
* is set. Defaults to 15 unless the labels are aligned inside the
|
|
16993
|
+
* plot area, in which case it defaults to 0.
|
|
16963
16994
|
*
|
|
16964
16995
|
* @sample {highcharts} highcharts/yaxis/labels-distance/
|
|
16965
16996
|
* Polar chart, labels centered under the arc
|
|
16966
16997
|
*
|
|
16967
16998
|
* @type {number}
|
|
16968
16999
|
* @product highcharts gantt
|
|
17000
|
+
* @apioption xAxis.labels.distance
|
|
16969
17001
|
*/
|
|
16970
|
-
distance: 15,
|
|
16971
17002
|
/**
|
|
16972
17003
|
* Enable or disable the axis labels.
|
|
16973
17004
|
*
|
|
@@ -17225,18 +17256,18 @@ var AxisDefaults;
|
|
|
17225
17256
|
* @apioption xAxis.top
|
|
17226
17257
|
*/
|
|
17227
17258
|
/**
|
|
17228
|
-
* Index of another axis that this axis is linked to.
|
|
17229
|
-
* linked to a master axis, it will take the same
|
|
17230
|
-
* the master, but as assigned by min or max or by
|
|
17231
|
-
* It can be used to show additional info, or to ease
|
|
17232
|
-
* chart by duplicating the scales.
|
|
17259
|
+
* Index or [id](#xAxis.id) of another axis that this axis is linked to.
|
|
17260
|
+
* When an axis is linked to a master axis, it will take the same
|
|
17261
|
+
* extremes as the master, but as assigned by min or max or by
|
|
17262
|
+
* `setExtremes`. It can be used to show additional info, or to ease
|
|
17263
|
+
* reading the chart by duplicating the scales.
|
|
17233
17264
|
*
|
|
17234
17265
|
* @sample {highcharts} highcharts/xaxis/linkedto/
|
|
17235
17266
|
* Different string formats of the same date
|
|
17236
17267
|
* @sample {highcharts} highcharts/yaxis/linkedto/
|
|
17237
17268
|
* Y values on both sides
|
|
17238
17269
|
*
|
|
17239
|
-
* @type {number}
|
|
17270
|
+
* @type {number|string}
|
|
17240
17271
|
* @since 2.0.2
|
|
17241
17272
|
* @product highcharts highstock gantt
|
|
17242
17273
|
* @apioption xAxis.linkedTo
|
|
@@ -19356,7 +19387,7 @@ class Tick {
|
|
|
19356
19387
|
*/
|
|
19357
19388
|
addLabel() {
|
|
19358
19389
|
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;
|
|
19359
|
-
let
|
|
19390
|
+
let dateTimeLabelFormat, dateTimeLabelFormats, i;
|
|
19360
19391
|
// The context value
|
|
19361
19392
|
let value = this.parameters.category || (categories ?
|
|
19362
19393
|
(categories[pos] ?? names[pos] ?? pos) :
|
|
@@ -19442,10 +19473,15 @@ class Tick {
|
|
|
19442
19473
|
}
|
|
19443
19474
|
return axis.defaultLabelFormatter.call(ctx);
|
|
19444
19475
|
};
|
|
19445
|
-
|
|
19476
|
+
/**
|
|
19477
|
+
* The rendered text label of the tick.
|
|
19478
|
+
* @name Highcharts.Tick#label
|
|
19479
|
+
* @type {Highcharts.SVGElement|undefined}
|
|
19480
|
+
*/
|
|
19481
|
+
tick.label = tick.createLabel(labelFormatter.call(ctx, ctx), labelOptions);
|
|
19446
19482
|
// Set up conditional formatting based on the format list if existing.
|
|
19447
|
-
const list = dateTimeLabelFormats?.list;
|
|
19448
|
-
if (list) {
|
|
19483
|
+
const list = dateTimeLabelFormats?.list, label = tick.label;
|
|
19484
|
+
if (list && label) {
|
|
19449
19485
|
tick.shortenLabel = function () {
|
|
19450
19486
|
for (i = 0; i < list.length; i++) {
|
|
19451
19487
|
extend(ctx, { dateTimeLabelFormat: list[i] });
|
|
@@ -19453,43 +19489,17 @@ class Tick {
|
|
|
19453
19489
|
text: labelFormatter.call(ctx, ctx)
|
|
19454
19490
|
});
|
|
19455
19491
|
if (label.getBBox().width <
|
|
19456
|
-
axis.getSlotWidth(tick) - 2 *
|
|
19457
|
-
(labelOptions.padding || 0)) {
|
|
19492
|
+
axis.getSlotWidth(tick) - 2 * (labelOptions.padding || 0)) {
|
|
19458
19493
|
return;
|
|
19459
19494
|
}
|
|
19460
19495
|
}
|
|
19461
|
-
label.attr({
|
|
19462
|
-
text: ''
|
|
19463
|
-
});
|
|
19496
|
+
label.attr({ text: '' });
|
|
19464
19497
|
};
|
|
19465
19498
|
}
|
|
19466
19499
|
else {
|
|
19467
19500
|
// #15692
|
|
19468
19501
|
tick.shortenLabel = void 0;
|
|
19469
19502
|
}
|
|
19470
|
-
// First call
|
|
19471
|
-
if (!label) {
|
|
19472
|
-
/**
|
|
19473
|
-
* The rendered text label of the tick.
|
|
19474
|
-
* @name Highcharts.Tick#label
|
|
19475
|
-
* @type {Highcharts.SVGElement|undefined}
|
|
19476
|
-
*/
|
|
19477
|
-
tick.label = label = tick.createLabel(text, labelOptions);
|
|
19478
|
-
// Base value to detect change for new calls to getBBox
|
|
19479
|
-
tick.rotation = 0;
|
|
19480
|
-
// Update
|
|
19481
|
-
}
|
|
19482
|
-
else if (label.textStr !== text) {
|
|
19483
|
-
// When resetting text, also reset the width if dynamically set
|
|
19484
|
-
// (#8809)
|
|
19485
|
-
if (label.textWidth &&
|
|
19486
|
-
!labelOptions.style.width &&
|
|
19487
|
-
!label.styles.width) {
|
|
19488
|
-
label.css({ width: void 0 });
|
|
19489
|
-
}
|
|
19490
|
-
label.attr({ text });
|
|
19491
|
-
label.textPxLength = label.getBBox().width;
|
|
19492
|
-
}
|
|
19493
19503
|
}
|
|
19494
19504
|
/**
|
|
19495
19505
|
* Render and return the label of the tick.
|
|
@@ -19497,18 +19507,33 @@ class Tick {
|
|
|
19497
19507
|
* @internal
|
|
19498
19508
|
* @function Highcharts.Tick#createLabel
|
|
19499
19509
|
*/
|
|
19500
|
-
createLabel(
|
|
19501
|
-
const axis = this.axis, { renderer, styledMode } = axis.chart,
|
|
19502
|
-
|
|
19503
|
-
|
|
19504
|
-
|
|
19505
|
-
|
|
19510
|
+
createLabel(text, labelOptions, xy) {
|
|
19511
|
+
const axis = this.axis, { renderer, styledMode } = axis.chart, style = labelOptions.style, whiteSpace = style.whiteSpace;
|
|
19512
|
+
let label = this.label;
|
|
19513
|
+
if (defined(text) && labelOptions.enabled) {
|
|
19514
|
+
label || (label = renderer
|
|
19515
|
+
.text(text, xy?.x, xy?.y, labelOptions.useHTML)
|
|
19516
|
+
.add(axis.labelGroup));
|
|
19517
|
+
}
|
|
19518
|
+
else if (label) {
|
|
19519
|
+
label = label.destroy();
|
|
19520
|
+
// Reset so it doesn't animate when re-enabled
|
|
19521
|
+
this.isNewLabel = true;
|
|
19522
|
+
}
|
|
19506
19523
|
// Un-rotated length
|
|
19507
|
-
if (label) {
|
|
19524
|
+
if (label && (label.labelStyle !== style || text !== label.textStr)) {
|
|
19525
|
+
// Store a reference to the current style object to avoid running
|
|
19526
|
+
// this block on every render call unless something actually
|
|
19527
|
+
// changes.
|
|
19528
|
+
label.labelStyle = style;
|
|
19529
|
+
if (text !== label.textStr) {
|
|
19530
|
+
label.attr({ text });
|
|
19531
|
+
delete label.textPxLength;
|
|
19532
|
+
}
|
|
19508
19533
|
if (!styledMode) {
|
|
19509
|
-
label.css(merge(
|
|
19534
|
+
label.css(merge(style));
|
|
19510
19535
|
}
|
|
19511
|
-
label.textPxLength = label.getBBox().width;
|
|
19536
|
+
label.textPxLength ?? (label.textPxLength = label.getBBox().width);
|
|
19512
19537
|
// Apply the white-space setting after we read the full text width
|
|
19513
19538
|
if (!styledMode && whiteSpace) {
|
|
19514
19539
|
label.css({ whiteSpace });
|
|
@@ -19580,19 +19605,27 @@ class Tick {
|
|
|
19580
19605
|
* @internal
|
|
19581
19606
|
*/
|
|
19582
19607
|
getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
|
|
19583
|
-
const axis = this.axis, transA = axis
|
|
19584
|
-
axis.
|
|
19608
|
+
const axis = this.axis, { labelAlign, side, staggerLines, transA } = axis, reversed = ( // #7911
|
|
19609
|
+
axis.linkedParent ?
|
|
19585
19610
|
axis.linkedParent.reversed :
|
|
19586
|
-
axis.reversed),
|
|
19611
|
+
axis.reversed), rotCorr = axis.tickRotCorr || { x: 0, y: 0 },
|
|
19587
19612
|
// Adjust for label alignment if we use reserveSpace: true (#5286)
|
|
19588
19613
|
labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?
|
|
19589
|
-
-axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19590
|
-
0), distance = labelOptions.distance
|
|
19614
|
+
-(axis.labelOffset || 0) * (axis.labelAlign === 'center' ? 0.5 : 1) :
|
|
19615
|
+
0), distance = labelOptions.distance ?? (
|
|
19616
|
+
// If the label is aligned inside the plot area, default to 0.
|
|
19617
|
+
// This is default behavior or Stock y-axis labels.
|
|
19618
|
+
(side === 1 &&
|
|
19619
|
+
labelAlign === 'right' &&
|
|
19620
|
+
!labelOptions.reserveSpace) ? 0 :
|
|
19621
|
+
(side === 3 &&
|
|
19622
|
+
labelAlign === 'left' &&
|
|
19623
|
+
!labelOptions.reserveSpace) ? 0 : 15), pos = {};
|
|
19591
19624
|
let yOffset, line;
|
|
19592
|
-
if (
|
|
19625
|
+
if (side === 0) {
|
|
19593
19626
|
yOffset = label.rotation ? -distance : -label.getBBox().height;
|
|
19594
19627
|
}
|
|
19595
|
-
else if (
|
|
19628
|
+
else if (side === 2) {
|
|
19596
19629
|
yOffset = rotCorr.y + distance;
|
|
19597
19630
|
}
|
|
19598
19631
|
else {
|
|
@@ -19601,12 +19634,12 @@ class Tick {
|
|
|
19601
19634
|
(rotCorr.y - label.getBBox(false, 0).height / 2);
|
|
19602
19635
|
}
|
|
19603
19636
|
if (defined(labelOptions.y)) {
|
|
19604
|
-
yOffset =
|
|
19637
|
+
yOffset = side === 0 && axis.horiz ?
|
|
19605
19638
|
labelOptions.y + yOffset :
|
|
19606
19639
|
labelOptions.y;
|
|
19607
19640
|
}
|
|
19608
19641
|
x = x +
|
|
19609
|
-
(labelOptions.x ?? [0, 1, 0, -1][
|
|
19642
|
+
(labelOptions.x ?? [0, 1, 0, -1][side] * distance) +
|
|
19610
19643
|
labelOffsetCorrection +
|
|
19611
19644
|
rotCorr.x -
|
|
19612
19645
|
(tickmarkOffset && horiz ?
|
|
@@ -19661,7 +19694,7 @@ class Tick {
|
|
|
19661
19694
|
* @function Highcharts.Tick#handleOverflow
|
|
19662
19695
|
*/
|
|
19663
19696
|
handleOverflow(xy) {
|
|
19664
|
-
const tick = this, axis = this
|
|
19697
|
+
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;
|
|
19665
19698
|
let modifiedSlotWidth = slotWidth, goRight = 1, leftPos, rightPos, textWidth;
|
|
19666
19699
|
// Check if the label overshoots the chart spacing box. If it does, move
|
|
19667
19700
|
// it. If it now overshoots the slotWidth, add ellipsis.
|
|
@@ -19709,10 +19742,10 @@ class Tick {
|
|
|
19709
19742
|
tick.shortenLabel();
|
|
19710
19743
|
}
|
|
19711
19744
|
else {
|
|
19712
|
-
label.css(
|
|
19745
|
+
label.css({
|
|
19713
19746
|
width: Math.floor(textWidth) + 'px',
|
|
19714
19747
|
lineClamp: axis.isRadial ? 0 : 1
|
|
19715
|
-
})
|
|
19748
|
+
});
|
|
19716
19749
|
}
|
|
19717
19750
|
}
|
|
19718
19751
|
}
|
|
@@ -19728,8 +19761,11 @@ class Tick {
|
|
|
19728
19761
|
* @param {number} [opacity]
|
|
19729
19762
|
*/
|
|
19730
19763
|
render(index, old, opacity) {
|
|
19731
|
-
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;
|
|
19732
|
-
|
|
19764
|
+
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;
|
|
19765
|
+
if (!axis.visible) {
|
|
19766
|
+
opacity = 0;
|
|
19767
|
+
}
|
|
19768
|
+
const labelOpacity = opacity ?? 1;
|
|
19733
19769
|
// Anything that is not between `axis.pos` and `axis.pos + axis.length`
|
|
19734
19770
|
// should not be visible (#20166). The `correctFloat` is for reversed
|
|
19735
19771
|
// axes in Safari.
|
|
@@ -19757,25 +19793,21 @@ class Tick {
|
|
|
19757
19793
|
* @param {number} opacity The opacity of the grid line
|
|
19758
19794
|
*/
|
|
19759
19795
|
renderGridLine(old, opacity) {
|
|
19760
|
-
const tick = this, axis = tick.axis, options = axis.options, attribs = {}, pos = tick.pos, type = tick.type, tickmarkOffset = (tick.tickmarkOffset ?? axis.tickmarkOffset), renderer = axis.chart
|
|
19761
|
-
let gridLine = tick.gridLine,
|
|
19796
|
+
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;
|
|
19797
|
+
let gridLine = tick.gridLine, gridLineWidth = options.gridLineWidth, gridLineColor = options.gridLineColor, dashStyle = options.gridLineDashStyle;
|
|
19762
19798
|
if (tick.type === 'minor') {
|
|
19763
19799
|
gridLineWidth = options.minorGridLineWidth;
|
|
19764
19800
|
gridLineColor = options.minorGridLineColor;
|
|
19765
19801
|
dashStyle = options.minorGridLineDashStyle;
|
|
19766
19802
|
}
|
|
19803
|
+
// Apply the stroke width initially so the crisping works
|
|
19804
|
+
if (!styledMode) {
|
|
19805
|
+
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19806
|
+
}
|
|
19767
19807
|
if (!gridLine) {
|
|
19768
|
-
if (!axis.chart.styledMode) {
|
|
19769
|
-
attribs.stroke = gridLineColor;
|
|
19770
|
-
attribs['stroke-width'] = gridLineWidth || 0;
|
|
19771
|
-
attribs.dashstyle = dashStyle;
|
|
19772
|
-
}
|
|
19773
19808
|
if (!type) {
|
|
19774
19809
|
attribs.zIndex = 1;
|
|
19775
19810
|
}
|
|
19776
|
-
if (old) {
|
|
19777
|
-
opacity = 0;
|
|
19778
|
-
}
|
|
19779
19811
|
/**
|
|
19780
19812
|
* The rendered grid line of the tick.
|
|
19781
19813
|
* @name Highcharts.Tick#gridLine
|
|
@@ -19786,22 +19818,24 @@ class Tick {
|
|
|
19786
19818
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')
|
|
19787
19819
|
.add(axis.gridGroup);
|
|
19788
19820
|
}
|
|
19789
|
-
|
|
19790
|
-
|
|
19791
|
-
|
|
19792
|
-
|
|
19793
|
-
|
|
19794
|
-
|
|
19795
|
-
|
|
19796
|
-
|
|
19821
|
+
// Grid line path
|
|
19822
|
+
const d = axis.getPlotLinePath({
|
|
19823
|
+
value: pos + tickmarkOffset,
|
|
19824
|
+
lineWidth: gridLine.strokeWidth(),
|
|
19825
|
+
force: 'pass',
|
|
19826
|
+
old: old,
|
|
19827
|
+
acrossPanes: false // #18025
|
|
19828
|
+
});
|
|
19829
|
+
if (d) {
|
|
19830
|
+
attribs.d = d;
|
|
19831
|
+
attribs.opacity = old ? 0 : opacity;
|
|
19832
|
+
if (!styledMode) {
|
|
19833
|
+
attribs.stroke = gridLineColor;
|
|
19834
|
+
attribs.dashstyle = dashStyle;
|
|
19835
|
+
}
|
|
19797
19836
|
// If the parameter 'old' is set, the current call will be followed
|
|
19798
19837
|
// by another call, therefore do not do any animations this time
|
|
19799
|
-
|
|
19800
|
-
gridLine[old || tick.isNew ? 'attr' : 'animate']({
|
|
19801
|
-
d: gridLinePath,
|
|
19802
|
-
opacity: opacity
|
|
19803
|
-
});
|
|
19804
|
-
}
|
|
19838
|
+
gridLine[old || tick.isNew ? 'attr' : 'animate'](attribs);
|
|
19805
19839
|
}
|
|
19806
19840
|
}
|
|
19807
19841
|
/**
|
|
@@ -19813,13 +19847,13 @@ class Tick {
|
|
|
19813
19847
|
* @param {number} opacity The opacity of the mark
|
|
19814
19848
|
*/
|
|
19815
19849
|
renderMark(xy, opacity) {
|
|
19816
|
-
const tick = this, axis = tick.axis, options = axis
|
|
19850
|
+
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
|
|
19817
19851
|
tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];
|
|
19818
19852
|
let mark = tick.mark;
|
|
19819
|
-
const
|
|
19820
|
-
if (tickSize) {
|
|
19853
|
+
const verb = mark ? 'animate' : 'attr';
|
|
19854
|
+
if (tickSize || mark) {
|
|
19821
19855
|
// Negate the length
|
|
19822
|
-
if (axis.opposite) {
|
|
19856
|
+
if (axis.opposite && tickSize) {
|
|
19823
19857
|
tickSize[0] = -tickSize[0];
|
|
19824
19858
|
}
|
|
19825
19859
|
// First time, create it
|
|
@@ -19832,16 +19866,16 @@ class Tick {
|
|
|
19832
19866
|
tick.mark = mark = renderer.path()
|
|
19833
19867
|
.addClass('highcharts-' + (type ? type + '-' : '') + 'tick')
|
|
19834
19868
|
.add(axis.axisGroup);
|
|
19835
|
-
if (!axis.chart.styledMode) {
|
|
19836
|
-
mark.attr({
|
|
19837
|
-
stroke: tickColor,
|
|
19838
|
-
'stroke-width': tickWidth
|
|
19839
|
-
});
|
|
19840
|
-
}
|
|
19841
19869
|
}
|
|
19842
|
-
|
|
19843
|
-
|
|
19844
|
-
|
|
19870
|
+
if (!chart.styledMode) {
|
|
19871
|
+
mark[verb]({
|
|
19872
|
+
stroke: tickColor,
|
|
19873
|
+
'stroke-width': tickWidth
|
|
19874
|
+
});
|
|
19875
|
+
}
|
|
19876
|
+
mark[verb]({
|
|
19877
|
+
d: tick.getMarkPath(x, y, tickSize?.[0] || 0, mark.strokeWidth(), axis.horiz, renderer),
|
|
19878
|
+
opacity: tickSize ? opacity : 0
|
|
19845
19879
|
});
|
|
19846
19880
|
}
|
|
19847
19881
|
}
|
|
@@ -20003,6 +20037,11 @@ extend(Axis_defaultOptions, { xAxis, yAxis: merge(xAxis, yAxis) });
|
|
|
20003
20037
|
* Axis options
|
|
20004
20038
|
*/
|
|
20005
20039
|
class Axis {
|
|
20040
|
+
/* *
|
|
20041
|
+
*
|
|
20042
|
+
* Static Properties
|
|
20043
|
+
*
|
|
20044
|
+
* */
|
|
20006
20045
|
/* *
|
|
20007
20046
|
*
|
|
20008
20047
|
* Constructors
|
|
@@ -20079,9 +20118,11 @@ class Axis {
|
|
|
20079
20118
|
* @name Highcharts.Axis#side
|
|
20080
20119
|
* @type {number}
|
|
20081
20120
|
*/
|
|
20082
|
-
axis.side =
|
|
20083
|
-
(
|
|
20084
|
-
|
|
20121
|
+
axis.side = userOptions.side ??
|
|
20122
|
+
(horiz ?
|
|
20123
|
+
(axis.opposite ? 0 : 2) : // Top : bottom
|
|
20124
|
+
(axis.opposite ? 1 : 3) // Right : left
|
|
20125
|
+
);
|
|
20085
20126
|
/**
|
|
20086
20127
|
* Current options for the axis after merge of defaults and user's
|
|
20087
20128
|
* options.
|
|
@@ -20092,8 +20133,8 @@ class Axis {
|
|
|
20092
20133
|
axis.setOptions(userOptions);
|
|
20093
20134
|
const options = axis.options, labelsOptions = options.labels;
|
|
20094
20135
|
// Set the type and fire an event
|
|
20095
|
-
axis.type
|
|
20096
|
-
axis.uniqueNames
|
|
20136
|
+
axis.type = options.type || 'linear';
|
|
20137
|
+
axis.uniqueNames = options.uniqueNames ?? true;
|
|
20097
20138
|
fireEvent(axis, 'afterSetType');
|
|
20098
20139
|
/**
|
|
20099
20140
|
* User's options for this axis without defaults.
|
|
@@ -20110,7 +20151,7 @@ class Axis {
|
|
|
20110
20151
|
* @name Highcharts.Axis#reversed
|
|
20111
20152
|
* @type {boolean}
|
|
20112
20153
|
*/
|
|
20113
|
-
axis.reversed =
|
|
20154
|
+
axis.reversed = options.reversed;
|
|
20114
20155
|
axis.visible = options.visible;
|
|
20115
20156
|
axis.zoomEnabled = options.zoomEnabled;
|
|
20116
20157
|
// Initial categories
|
|
@@ -20132,16 +20173,12 @@ class Axis {
|
|
|
20132
20173
|
*/
|
|
20133
20174
|
axis.categories = (isArray(options.categories) && options.categories) ||
|
|
20134
20175
|
(axis.hasNames ? [] : void 0);
|
|
20135
|
-
|
|
20136
|
-
// faster than array searching (#7725). Preserve on update (#3830)
|
|
20137
|
-
axis.names || (axis.names = []);
|
|
20176
|
+
axis.names || (axis.names = []); // Preserve on update (#3830)
|
|
20138
20177
|
axis.namesMap || (axis.namesMap = {});
|
|
20139
20178
|
// Placeholder for plotLines and plotBands groups
|
|
20140
|
-
axis.plotLinesAndBandsGroups = {};
|
|
20179
|
+
axis.plotLinesAndBandsGroups || (axis.plotLinesAndBandsGroups = {});
|
|
20141
20180
|
// Shorthand types
|
|
20142
20181
|
axis.positiveValuesOnly = !!axis.logarithmic;
|
|
20143
|
-
// Flag, if axis is linked to another axis
|
|
20144
|
-
axis.isLinked = defined(options.linkedTo);
|
|
20145
20182
|
/**
|
|
20146
20183
|
* List of major ticks mapped by position on axis.
|
|
20147
20184
|
*
|
|
@@ -20150,8 +20187,8 @@ class Axis {
|
|
|
20150
20187
|
* @name Highcharts.Axis#ticks
|
|
20151
20188
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20152
20189
|
*/
|
|
20153
|
-
axis.ticks = {};
|
|
20154
|
-
axis.labelEdge = [];
|
|
20190
|
+
axis.ticks || (axis.ticks = {});
|
|
20191
|
+
axis.labelEdge || (axis.labelEdge = []);
|
|
20155
20192
|
/**
|
|
20156
20193
|
* List of minor ticks mapped by position on the axis.
|
|
20157
20194
|
*
|
|
@@ -20160,11 +20197,9 @@ class Axis {
|
|
|
20160
20197
|
* @name Highcharts.Axis#minorTicks
|
|
20161
20198
|
* @type {Highcharts.Dictionary<Highcharts.Tick>}
|
|
20162
20199
|
*/
|
|
20163
|
-
axis.minorTicks = {};
|
|
20164
|
-
// List of plotLines/Bands
|
|
20165
|
-
axis.plotLinesAndBands = [];
|
|
20200
|
+
axis.minorTicks || (axis.minorTicks = {});
|
|
20166
20201
|
// Alternate bands
|
|
20167
|
-
axis.alternateBands = {};
|
|
20202
|
+
axis.alternateBands || (axis.alternateBands = {});
|
|
20168
20203
|
/**
|
|
20169
20204
|
* The length of the axis in terms of pixels.
|
|
20170
20205
|
*
|
|
@@ -20198,7 +20233,7 @@ class Axis {
|
|
|
20198
20233
|
* @name Highcharts.Axis#crosshair
|
|
20199
20234
|
* @type {boolean|Highcharts.AxisCrosshairOptions}
|
|
20200
20235
|
*/
|
|
20201
|
-
const crosshair = options.crosshair ?? splat(chart.options.tooltip
|
|
20236
|
+
const crosshair = options.crosshair ?? splat(chart.options.tooltip?.crosshairs)[isXAxis ? 0 : 1];
|
|
20202
20237
|
axis.crosshair = crosshair === true ? {} : crosshair;
|
|
20203
20238
|
// Register. Don't add it again on Axis.update().
|
|
20204
20239
|
if (chart.axes.indexOf(axis) === -1) { //
|
|
@@ -20253,14 +20288,14 @@ class Axis {
|
|
|
20253
20288
|
},
|
|
20254
20289
|
margin: 15
|
|
20255
20290
|
} :
|
|
20256
|
-
// Left and right axis, title rotated 90 or
|
|
20291
|
+
// Left and right axis, title rotated -90 or 90 degrees
|
|
20257
20292
|
// respectively
|
|
20258
20293
|
{
|
|
20259
20294
|
labels: {
|
|
20260
20295
|
padding: 1
|
|
20261
20296
|
},
|
|
20262
20297
|
title: {
|
|
20263
|
-
rotation: 90
|
|
20298
|
+
rotation: this.side === 1 ? 90 : -90
|
|
20264
20299
|
}
|
|
20265
20300
|
};
|
|
20266
20301
|
this.options = merge(sideSpecific,
|
|
@@ -20474,6 +20509,9 @@ class Axis {
|
|
|
20474
20509
|
if (!axis.isRadial) {
|
|
20475
20510
|
returnValue = correctFloat(returnValue);
|
|
20476
20511
|
}
|
|
20512
|
+
if (Math.abs(returnValue) < 1e-9) {
|
|
20513
|
+
returnValue = 0;
|
|
20514
|
+
}
|
|
20477
20515
|
}
|
|
20478
20516
|
return returnValue;
|
|
20479
20517
|
}
|
|
@@ -20529,7 +20567,7 @@ class Axis {
|
|
|
20529
20567
|
* The SVG path definition for the plot line.
|
|
20530
20568
|
*/
|
|
20531
20569
|
getPlotLinePath(options) {
|
|
20532
|
-
const axis = this,
|
|
20570
|
+
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;
|
|
20533
20571
|
let translatedValue = options.translatedValue, force = options.force, x1, y1, x2, y2, skip;
|
|
20534
20572
|
// eslint-disable-next-line valid-jsdoc
|
|
20535
20573
|
/**
|
|
@@ -20567,17 +20605,17 @@ class Axis {
|
|
|
20567
20605
|
skip = true;
|
|
20568
20606
|
force = false; // #7175, don't force it when path is invalid
|
|
20569
20607
|
}
|
|
20570
|
-
else if (
|
|
20571
|
-
y1 =
|
|
20608
|
+
else if (horiz) {
|
|
20609
|
+
y1 = top;
|
|
20572
20610
|
y2 = cHeight - axis.bottom + (axis.options.isInternal ?
|
|
20573
20611
|
0 :
|
|
20574
20612
|
(chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator
|
|
20575
|
-
x1 = x2 = between(x1,
|
|
20613
|
+
x1 = x2 = between(x1, left, left + axis.width);
|
|
20576
20614
|
}
|
|
20577
20615
|
else {
|
|
20578
|
-
x1 =
|
|
20616
|
+
x1 = left;
|
|
20579
20617
|
x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);
|
|
20580
|
-
y1 = y2 = between(y1,
|
|
20618
|
+
y1 = y2 = between(y1, top, top + axis.height);
|
|
20581
20619
|
}
|
|
20582
20620
|
e.path = skip && !force ?
|
|
20583
20621
|
void 0 :
|
|
@@ -21006,7 +21044,7 @@ class Axis {
|
|
|
21006
21044
|
* @emits Highcharts.Axis#event:foundExtremes
|
|
21007
21045
|
*/
|
|
21008
21046
|
setTickInterval(secondPass) {
|
|
21009
|
-
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,
|
|
21047
|
+
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;
|
|
21010
21048
|
let maxPadding = options.maxPadding, minPadding = options.minPadding, range = 0, linkedParentExtremes,
|
|
21011
21049
|
// Only non-negative tickInterval is valid, #12961
|
|
21012
21050
|
tickIntervalOption = isNumber(options.tickInterval) && options.tickInterval >= 0 ?
|
|
@@ -21019,7 +21057,6 @@ class Axis {
|
|
|
21019
21057
|
hardMax = (axis.userMax ?? time.parse(options.max));
|
|
21020
21058
|
// Linked axis gets the extremes from the parent axis
|
|
21021
21059
|
if (linkedParent) {
|
|
21022
|
-
axis.linkedParent = linkedParent;
|
|
21023
21060
|
linkedParentExtremes = linkedParent.getExtremes();
|
|
21024
21061
|
axis.min =
|
|
21025
21062
|
linkedParentExtremes.min ?? linkedParentExtremes.dataMin;
|
|
@@ -21329,7 +21366,7 @@ class Axis {
|
|
|
21329
21366
|
// Reset min/max or remove extremes based on start/end on tick
|
|
21330
21367
|
this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor
|
|
21331
21368
|
this.trimTicks(tickPositions, startOnTick, endOnTick);
|
|
21332
|
-
if (!this.
|
|
21369
|
+
if (!this.linkedParent && isNumber(this.min) && isNumber(this.max)) {
|
|
21333
21370
|
// Subtract half a unit (#2619, #2846, #2515, #3390), but not in
|
|
21334
21371
|
// case of multiple ticks (#6897)
|
|
21335
21372
|
if (this.single &&
|
|
@@ -21364,7 +21401,7 @@ class Axis {
|
|
|
21364
21401
|
trimTicks(tickPositions, startOnTick, endOnTick) {
|
|
21365
21402
|
const roundedMin = tickPositions[0], roundedMax = tickPositions[tickPositions.length - 1], minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)
|
|
21366
21403
|
fireEvent(this, 'trimTicks');
|
|
21367
|
-
if (!this.
|
|
21404
|
+
if (!this.linkedParent ||
|
|
21368
21405
|
// Linked non-grid axes should trim ticks, #21743.
|
|
21369
21406
|
// Grid axis has custom handling of ticks.
|
|
21370
21407
|
!this.grid) {
|
|
@@ -21638,7 +21675,15 @@ class Axis {
|
|
|
21638
21675
|
* @emits Highcharts.Axis#event:afterSetScale
|
|
21639
21676
|
*/
|
|
21640
21677
|
setScale() {
|
|
21641
|
-
const axis = this, { coll, stacking } = axis
|
|
21678
|
+
const axis = this, { chart, coll, options, stacking } = axis, { linkedTo } = options, axes = chart[coll] || [], index = axes.indexOf(axis), parent = isString(linkedTo) ?
|
|
21679
|
+
find(axes, (a) => a.options.id === linkedTo) :
|
|
21680
|
+
(isNumber(linkedTo) ? axes[linkedTo] : void 0), linkedParent = axis.linkedParent =
|
|
21681
|
+
parent === axis ? void 0 : parent;
|
|
21682
|
+
// Scale a later-ordered parent first so its extremes are ready. Skip
|
|
21683
|
+
// grid column axes, which live outside the collection (#24658).
|
|
21684
|
+
if (linkedParent && index > -1 && axes.indexOf(linkedParent) > index) {
|
|
21685
|
+
linkedParent.setScale();
|
|
21686
|
+
}
|
|
21642
21687
|
let isDirtyData = false, isXAxisDirty = false;
|
|
21643
21688
|
axis.series.forEach((series) => {
|
|
21644
21689
|
isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;
|
|
@@ -21655,7 +21700,7 @@ class Axis {
|
|
|
21655
21700
|
if (isDirtyAxisLength ||
|
|
21656
21701
|
isDirtyData ||
|
|
21657
21702
|
isXAxisDirty ||
|
|
21658
|
-
axis.
|
|
21703
|
+
axis.linkedParent ||
|
|
21659
21704
|
axis.forceRedraw ||
|
|
21660
21705
|
axis.userMin !== axis.old?.userMin ||
|
|
21661
21706
|
axis.userMax !== axis.old?.userMax ||
|
|
@@ -22017,7 +22062,7 @@ class Axis {
|
|
|
22017
22062
|
renderUnsquish() {
|
|
22018
22063
|
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 ?
|
|
22019
22064
|
2 * (labelOptions.padding || 0) :
|
|
22020
|
-
labelOptions.distance
|
|
22065
|
+
labelOptions.distance ?? 15 // #21172
|
|
22021
22066
|
))), attr = {}, labelMetrics = this.labelMetrics(), lineClampOption = labelStyleOptions.lineClamp;
|
|
22022
22067
|
let commonWidth, lineClamp = lineClampOption ?? (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1), maxLabelLength = 0;
|
|
22023
22068
|
// Set rotation option unless it is "auto", like in gauges
|
|
@@ -22097,7 +22142,6 @@ class Axis {
|
|
|
22097
22142
|
});
|
|
22098
22143
|
}
|
|
22099
22144
|
}
|
|
22100
|
-
tick.rotation = attr.rotation;
|
|
22101
22145
|
}
|
|
22102
22146
|
}, this);
|
|
22103
22147
|
// Note: Why is this not part of getLabelPosition?
|
|
@@ -22129,46 +22173,50 @@ class Axis {
|
|
|
22129
22173
|
* Whether or not to display the title.
|
|
22130
22174
|
*/
|
|
22131
22175
|
addTitle(display) {
|
|
22132
|
-
const axis = this, renderer = axis.chart.renderer, horiz = axis.horiz, opposite = axis.opposite, options = axis.options, axisTitleOptions = options.title, styledMode = axis.chart.styledMode
|
|
22133
|
-
|
|
22134
|
-
|
|
22135
|
-
|
|
22136
|
-
|
|
22137
|
-
|
|
22138
|
-
|
|
22139
|
-
|
|
22140
|
-
|
|
22141
|
-
|
|
22142
|
-
|
|
22143
|
-
|
|
22144
|
-
|
|
22145
|
-
|
|
22146
|
-
|
|
22147
|
-
|
|
22148
|
-
|
|
22149
|
-
|
|
22150
|
-
|
|
22151
|
-
|
|
22152
|
-
|
|
22153
|
-
})
|
|
22176
|
+
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 ||
|
|
22177
|
+
(horiz ? {
|
|
22178
|
+
low: 'left',
|
|
22179
|
+
middle: 'center',
|
|
22180
|
+
high: 'right'
|
|
22181
|
+
} : {
|
|
22182
|
+
low: opposite ? 'right' : 'left',
|
|
22183
|
+
middle: 'center',
|
|
22184
|
+
high: opposite ? 'left' : 'right'
|
|
22185
|
+
})[axisTitleOptions.align], attr = {
|
|
22186
|
+
text: axisTitleOptions.text || '',
|
|
22187
|
+
zIndex: 7,
|
|
22188
|
+
align: textAlign
|
|
22189
|
+
}, animatable = {
|
|
22190
|
+
rotation: axisTitleOptions.rotation || 0
|
|
22191
|
+
};
|
|
22192
|
+
let axisTitle = axis.axisTitle;
|
|
22193
|
+
if (!axisTitle) {
|
|
22194
|
+
axisTitle = renderer
|
|
22195
|
+
.text('', 0, 0, axisTitleOptions.useHTML)
|
|
22196
|
+
.attr(extend(attr, animatable))
|
|
22154
22197
|
.addClass('highcharts-axis-title');
|
|
22155
|
-
|
|
22156
|
-
|
|
22157
|
-
axis.axisTitle.css(merge(axisTitleOptions.style));
|
|
22158
|
-
}
|
|
22159
|
-
axis.axisTitle.add(axis.axisGroup);
|
|
22160
|
-
axis.axisTitle.isNew = true;
|
|
22198
|
+
axisTitle.add(axis.axisGroup);
|
|
22199
|
+
axisTitle.isNew = true;
|
|
22161
22200
|
}
|
|
22162
|
-
|
|
22163
|
-
|
|
22164
|
-
|
|
22165
|
-
|
|
22166
|
-
|
|
22167
|
-
|
|
22168
|
-
|
|
22201
|
+
else {
|
|
22202
|
+
axisTitle
|
|
22203
|
+
.attr(attr)
|
|
22204
|
+
.animate(animatable);
|
|
22205
|
+
}
|
|
22206
|
+
if (!styledMode) {
|
|
22207
|
+
// #7814, don't mutate the style option
|
|
22208
|
+
const css = merge(axisTitleOptions.style);
|
|
22209
|
+
// Max width defaults to the length of the axis
|
|
22210
|
+
if (!axisTitleOptions.style.width &&
|
|
22211
|
+
!axis.isRadial) {
|
|
22212
|
+
css.width = axis.len + 'px';
|
|
22213
|
+
}
|
|
22214
|
+
axisTitle.css(css);
|
|
22169
22215
|
}
|
|
22170
22216
|
// Hide or show the title depending on whether showEmpty is set
|
|
22171
|
-
|
|
22217
|
+
axisTitle[display ? 'show' : 'hide'](display);
|
|
22218
|
+
// Register
|
|
22219
|
+
axis.axisTitle = axisTitle;
|
|
22172
22220
|
}
|
|
22173
22221
|
/**
|
|
22174
22222
|
* Generates a tick for initial positioning.
|
|
@@ -22196,17 +22244,18 @@ class Axis {
|
|
|
22196
22244
|
createGroups() {
|
|
22197
22245
|
const { axisParent, // Used in color axis
|
|
22198
22246
|
chart, coll, options } = this, renderer = chart.renderer;
|
|
22199
|
-
const createGroup = (name, suffix
|
|
22200
|
-
.attr({ zIndex })
|
|
22247
|
+
const createGroup = (name, suffix) => renderer.g(name)
|
|
22201
22248
|
.addClass(`highcharts-${coll.toLowerCase()}${suffix} ` +
|
|
22202
22249
|
(this.isRadial ? `highcharts-radial-axis${suffix} ` : '') +
|
|
22203
22250
|
(options.className || ''))
|
|
22204
22251
|
.add(axisParent);
|
|
22205
|
-
|
|
22206
|
-
|
|
22207
|
-
|
|
22208
|
-
this.
|
|
22209
|
-
|
|
22252
|
+
(this.axisGroup || (this.axisGroup = createGroup('axis', '')))
|
|
22253
|
+
.attr({ zIndex: options.zIndex });
|
|
22254
|
+
(this.gridGroup || (this.gridGroup = createGroup('grid', '-grid')))
|
|
22255
|
+
.clip(this.clippable ? chart.plotClipInner : void 0)
|
|
22256
|
+
.attr({ zIndex: options.gridZIndex });
|
|
22257
|
+
(this.labelGroup || (this.labelGroup = createGroup('axis-labels', '-labels')))
|
|
22258
|
+
.attr({ zIndex: options.labels.zIndex });
|
|
22210
22259
|
}
|
|
22211
22260
|
/**
|
|
22212
22261
|
* Shuffle existing category ticks, like in bar race chart
|
|
@@ -22214,8 +22263,11 @@ class Axis {
|
|
|
22214
22263
|
* @internal
|
|
22215
22264
|
*/
|
|
22216
22265
|
shuffleTicks() {
|
|
22217
|
-
const ticks = this.ticks, oldNames = this.old?.names;
|
|
22218
|
-
if (this.type === 'category' &&
|
|
22266
|
+
const ticks = this.ticks, oldNames = this.old?.names, hasDuplicates = (arr) => new Set(arr).size !== arr.length;
|
|
22267
|
+
if (this.type === 'category' &&
|
|
22268
|
+
oldNames &&
|
|
22269
|
+
!hasDuplicates(oldNames) &&
|
|
22270
|
+
!hasDuplicates(this.names)) {
|
|
22219
22271
|
oldNames.forEach((name, oldPos) => {
|
|
22220
22272
|
const pos = this.namesMap[name];
|
|
22221
22273
|
if (defined(pos) && oldPos !== pos) {
|
|
@@ -22257,7 +22309,7 @@ class Axis {
|
|
|
22257
22309
|
* @emits Highcharts.Axis#event:afterGetOffset
|
|
22258
22310
|
*/
|
|
22259
22311
|
getOffset() {
|
|
22260
|
-
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];
|
|
22312
|
+
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;
|
|
22261
22313
|
let tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }, absTickRotCorrX = 0, showAxis, titleOffset = 0, titleOffsetOption, titleMargin = 0, labelOffset = 0, // Reset
|
|
22262
22314
|
labelOffsetPadded, lineHeightCorrection, reserveSpaceDefault;
|
|
22263
22315
|
// For reuse in Axis.render
|
|
@@ -22265,7 +22317,7 @@ class Axis {
|
|
|
22265
22317
|
// Set/reset staggerLines
|
|
22266
22318
|
axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;
|
|
22267
22319
|
axis.createGroups();
|
|
22268
|
-
if (hasData || axis.
|
|
22320
|
+
if (hasData || axis.linkedParent) {
|
|
22269
22321
|
// Shuffle existing category ticks
|
|
22270
22322
|
axis.shuffleTicks();
|
|
22271
22323
|
// Generate new ticks
|
|
@@ -22317,6 +22369,9 @@ class Axis {
|
|
|
22317
22369
|
axisTitleOptions.margin ?? (horiz ? 5 : 10);
|
|
22318
22370
|
}
|
|
22319
22371
|
}
|
|
22372
|
+
else {
|
|
22373
|
+
axis.axisTitle = axis.axisTitle?.destroy();
|
|
22374
|
+
}
|
|
22320
22375
|
// Render the axis line
|
|
22321
22376
|
axis.renderLine();
|
|
22322
22377
|
// Handle automatic or user set offset
|
|
@@ -22340,12 +22395,10 @@ class Axis {
|
|
|
22340
22395
|
labelOffsetPadded -= lineHeightCorrection;
|
|
22341
22396
|
labelOffsetPadded += directionFactor * (horiz ?
|
|
22342
22397
|
(labelOptions.y ??
|
|
22343
|
-
(tickRotCorr.y +
|
|
22344
|
-
directionFactor * labelOptions.distance)) :
|
|
22398
|
+
(tickRotCorr.y + directionFactor * distance)) :
|
|
22345
22399
|
(labelOptions.x ?? (reserveSpaceDefault ?
|
|
22346
|
-
directionFactor * (
|
|
22347
|
-
tickRotCorr.x +
|
|
22348
|
-
directionFactor * labelOptions.distance)));
|
|
22400
|
+
directionFactor * (distance - absTickRotCorrX) :
|
|
22401
|
+
tickRotCorr.x + directionFactor * distance)));
|
|
22349
22402
|
if (!horiz &&
|
|
22350
22403
|
!reserveSpaceDefault &&
|
|
22351
22404
|
axis.labelAlign === 'center' &&
|
|
@@ -22359,8 +22412,8 @@ class Axis {
|
|
|
22359
22412
|
// has rendered.
|
|
22360
22413
|
if (coll !== 'colorAxis' && clipOffset) {
|
|
22361
22414
|
const tickSize = this.tickSize('tick');
|
|
22362
|
-
axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +
|
|
22363
|
-
|
|
22415
|
+
axisOffset[side] = Math.max(axisOffset[side], Math.max((axis.axisTitleMargin || 0) + titleOffset, labelOffsetPadded) + directionFactor * axis.offset, // #6967
|
|
22416
|
+
labelOffsetPadded, // #3027
|
|
22364
22417
|
tickPositions?.length && tickSize ?
|
|
22365
22418
|
tickSize[0] + directionFactor * axis.offset :
|
|
22366
22419
|
0 // #4866
|
|
@@ -22422,18 +22475,20 @@ class Axis {
|
|
|
22422
22475
|
* @function Highcharts.Axis#renderLine
|
|
22423
22476
|
*/
|
|
22424
22477
|
renderLine() {
|
|
22425
|
-
const { chart, offset = 0, options } = this;
|
|
22478
|
+
const { chart, offset = 0, options } = this, verb = this.axisLine ? 'animate' : 'attr';
|
|
22426
22479
|
this.axisLine || (this.axisLine = chart.renderer.path()
|
|
22427
22480
|
.addClass('highcharts-axis-line')
|
|
22428
|
-
.attr(
|
|
22429
|
-
stroke: options.lineColor,
|
|
22430
|
-
'stroke-width': options.lineWidth,
|
|
22431
|
-
zIndex: 7
|
|
22432
|
-
})
|
|
22481
|
+
.attr({ zIndex: 7 })
|
|
22433
22482
|
.clip(this.clippable && offset <= 0 ?
|
|
22434
22483
|
chart.plotClipOuter :
|
|
22435
22484
|
void 0)
|
|
22436
22485
|
.add(this.axisGroup));
|
|
22486
|
+
if (!chart.styledMode) {
|
|
22487
|
+
this.axisLine[verb]({
|
|
22488
|
+
stroke: options.lineColor,
|
|
22489
|
+
'stroke-width': options.lineWidth
|
|
22490
|
+
});
|
|
22491
|
+
}
|
|
22437
22492
|
}
|
|
22438
22493
|
/**
|
|
22439
22494
|
* Position the axis title.
|
|
@@ -22518,9 +22573,9 @@ class Axis {
|
|
|
22518
22573
|
* Whether the tick should animate in from last computed position
|
|
22519
22574
|
*/
|
|
22520
22575
|
renderTick(pos, i, slideIn) {
|
|
22521
|
-
const axis = this,
|
|
22576
|
+
const axis = this, ticks = axis.ticks;
|
|
22522
22577
|
// Linked axes need an extra check to find out if
|
|
22523
|
-
if (!
|
|
22578
|
+
if (!axis.linkedParent ||
|
|
22524
22579
|
(pos >= axis.min && pos <= axis.max) ||
|
|
22525
22580
|
axis.grid?.isColumn) {
|
|
22526
22581
|
if (!ticks[pos]) {
|
|
@@ -22546,11 +22601,13 @@ class Axis {
|
|
|
22546
22601
|
* @emits Highcharts.Axis#event:afterRender
|
|
22547
22602
|
*/
|
|
22548
22603
|
render() {
|
|
22549
|
-
const axis = this, chart = axis.chart, log = axis.logarithmic, renderer = chart.renderer, options = axis.options,
|
|
22604
|
+
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);
|
|
22550
22605
|
let from, to;
|
|
22551
22606
|
// Reset
|
|
22552
22607
|
axis.labelEdge.length = 0;
|
|
22553
22608
|
axis.overlap = false;
|
|
22609
|
+
// Update z-indices
|
|
22610
|
+
this.createGroups();
|
|
22554
22611
|
// Mark all elements inActive before we go over and mark the active ones
|
|
22555
22612
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22556
22613
|
objectEach(coll, function (tick) {
|
|
@@ -22569,7 +22626,7 @@ class Axis {
|
|
|
22569
22626
|
}
|
|
22570
22627
|
}
|
|
22571
22628
|
// If the series has data draw the ticks. Else only the line and title
|
|
22572
|
-
if (axis.hasData() ||
|
|
22629
|
+
if (axis.hasData() || axis.linkedParent) {
|
|
22573
22630
|
const slideInTicks = axis.chart.hasRendered &&
|
|
22574
22631
|
axis.old && isNumber(axis.old.min);
|
|
22575
22632
|
// Minor ticks
|
|
@@ -22607,8 +22664,10 @@ class Axis {
|
|
|
22607
22664
|
tickmarkOffset)) { // #2248, #4660
|
|
22608
22665
|
if (!alternateBands[pos]) {
|
|
22609
22666
|
// Should be imported from PlotLineOrBand.js, but
|
|
22610
|
-
// the dependency cycle with axis is a problem
|
|
22611
|
-
|
|
22667
|
+
// the dependency cycle with axis is a problem. Try
|
|
22668
|
+
// moving it to the PlotLineOrBand axis composition
|
|
22669
|
+
// later.
|
|
22670
|
+
alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {}, 'plotBands');
|
|
22612
22671
|
}
|
|
22613
22672
|
from = pos + tickmarkOffset; // #949
|
|
22614
22673
|
alternateBands[pos].options = {
|
|
@@ -22622,17 +22681,13 @@ class Axis {
|
|
|
22622
22681
|
}
|
|
22623
22682
|
});
|
|
22624
22683
|
}
|
|
22625
|
-
// Custom plot lines and bands
|
|
22626
|
-
if (!axis._addedPlotLB) { // Only first time
|
|
22627
|
-
axis._addedPlotLB = true;
|
|
22628
|
-
(options.plotLines || [])
|
|
22629
|
-
.concat(options.plotBands || [])
|
|
22630
|
-
.forEach(function (plotLineOptions) {
|
|
22631
|
-
axis
|
|
22632
|
-
.addPlotBandOrLine(plotLineOptions);
|
|
22633
|
-
});
|
|
22634
|
-
}
|
|
22635
22684
|
} // End if hasData
|
|
22685
|
+
// Render or update rendering of plot lines and bands
|
|
22686
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
22687
|
+
for (const plotItem of this[coll]) {
|
|
22688
|
+
plotItem.render();
|
|
22689
|
+
}
|
|
22690
|
+
}
|
|
22636
22691
|
// Remove inactive ticks
|
|
22637
22692
|
[ticks, minorTicks, alternateBands].forEach(function (coll) {
|
|
22638
22693
|
const forDestruction = [], delay = animation.duration, destroyInactiveItems = function () {
|
|
@@ -22666,20 +22721,22 @@ class Axis {
|
|
|
22666
22721
|
// Set the axis line path
|
|
22667
22722
|
if (axisLine) {
|
|
22668
22723
|
axisLine[axisLine.isPlaced ? 'animate' : 'attr']({
|
|
22669
|
-
d: this.getLinePath(axisLine.strokeWidth())
|
|
22724
|
+
d: this.getLinePath(axisLine.strokeWidth()),
|
|
22725
|
+
opacity
|
|
22670
22726
|
});
|
|
22671
22727
|
axisLine.isPlaced = true;
|
|
22672
22728
|
// Show or hide the line depending on options.showEmpty
|
|
22673
22729
|
axisLine[showAxis ? 'show' : 'hide'](showAxis);
|
|
22674
22730
|
}
|
|
22675
22731
|
if (axisTitle && showAxis) {
|
|
22676
|
-
axisTitle[axisTitle.isNew ? 'attr' : 'animate'](
|
|
22732
|
+
axisTitle[axisTitle.isNew ? 'attr' : 'animate']({
|
|
22733
|
+
opacity,
|
|
22734
|
+
...axis.getTitlePosition(axisTitle)
|
|
22735
|
+
});
|
|
22677
22736
|
axisTitle.isNew = false;
|
|
22678
22737
|
}
|
|
22679
22738
|
// Stacked totals
|
|
22680
|
-
|
|
22681
|
-
axis.stacking.renderStackTotals();
|
|
22682
|
-
}
|
|
22739
|
+
axis.stacking?.renderStackTotals();
|
|
22683
22740
|
// First time, save the existing state
|
|
22684
22741
|
if (!this.old) {
|
|
22685
22742
|
this.saveOld();
|
|
@@ -22695,13 +22752,11 @@ class Axis {
|
|
|
22695
22752
|
* @function Highcharts.Axis#redraw
|
|
22696
22753
|
*/
|
|
22697
22754
|
redraw() {
|
|
22698
|
-
|
|
22755
|
+
// If it was initially visible, but dynamically hidden, `this.axisGroup`
|
|
22756
|
+
// exists. Then render with opacity 0.
|
|
22757
|
+
if (this.visible || this.axisGroup) {
|
|
22699
22758
|
// Render the axis
|
|
22700
22759
|
this.render();
|
|
22701
|
-
// Move plot lines and bands
|
|
22702
|
-
this.plotLinesAndBands.forEach(function (plotLine) {
|
|
22703
|
-
plotLine.render();
|
|
22704
|
-
});
|
|
22705
22760
|
}
|
|
22706
22761
|
// Mark associated series as dirty and ready for redraw
|
|
22707
22762
|
this.series.forEach(function (series) {
|
|
@@ -22715,6 +22770,7 @@ class Axis {
|
|
|
22715
22770
|
*/
|
|
22716
22771
|
saveOld() {
|
|
22717
22772
|
this.old = isNumber(this.min) ? {
|
|
22773
|
+
horiz: this.horiz,
|
|
22718
22774
|
len: this.len,
|
|
22719
22775
|
max: this.max,
|
|
22720
22776
|
min: this.min,
|
|
@@ -22724,64 +22780,37 @@ class Axis {
|
|
|
22724
22780
|
userMin: this.userMin
|
|
22725
22781
|
} : void 0;
|
|
22726
22782
|
}
|
|
22727
|
-
/**
|
|
22728
|
-
* Returns an array of axis properties, that should be untouched during
|
|
22729
|
-
* reinitialization.
|
|
22730
|
-
*
|
|
22731
|
-
* @internal
|
|
22732
|
-
* @function Highcharts.Axis#getKeepProps
|
|
22733
|
-
*/
|
|
22734
|
-
getKeepProps() {
|
|
22735
|
-
return (this.keepProps || Axis.keepProps);
|
|
22736
|
-
}
|
|
22737
22783
|
/**
|
|
22738
22784
|
* Destroys an Axis instance. See {@link Axis#remove} for the API endpoint
|
|
22739
22785
|
* to fully remove the axis.
|
|
22740
22786
|
*
|
|
22741
22787
|
* @internal
|
|
22742
22788
|
* @function Highcharts.Axis#destroy
|
|
22743
|
-
*
|
|
22744
|
-
* @param {boolean} [keepEvents]
|
|
22745
|
-
* Whether to preserve events, used internally in Axis.update.
|
|
22746
22789
|
*/
|
|
22747
|
-
destroy(
|
|
22748
|
-
|
|
22749
|
-
fireEvent(this, 'destroy', { keepEvents: keepEvents });
|
|
22790
|
+
destroy() {
|
|
22791
|
+
fireEvent(this, 'destroy');
|
|
22750
22792
|
// Remove the events
|
|
22751
|
-
|
|
22752
|
-
removeEvent(axis);
|
|
22753
|
-
}
|
|
22793
|
+
removeEvent(this);
|
|
22754
22794
|
// Destroy collections
|
|
22755
|
-
[
|
|
22756
|
-
|
|
22757
|
-
|
|
22758
|
-
|
|
22759
|
-
|
|
22760
|
-
|
|
22761
|
-
|
|
22762
|
-
|
|
22763
|
-
|
|
22764
|
-
// Destroy elements
|
|
22795
|
+
[
|
|
22796
|
+
this.ticks,
|
|
22797
|
+
this.minorTicks,
|
|
22798
|
+
this.alternateBands,
|
|
22799
|
+
this.plotBands,
|
|
22800
|
+
this.plotLines,
|
|
22801
|
+
this.plotLinesAndBandsGroups
|
|
22802
|
+
].forEach(destroyObjectProperties);
|
|
22803
|
+
// Destroy elements and clear reference
|
|
22765
22804
|
[
|
|
22766
22805
|
'axisLine', 'axisTitle', 'axisGroup',
|
|
22767
22806
|
'gridGroup', 'labelGroup', 'cross', 'scrollbar'
|
|
22768
|
-
].forEach(
|
|
22769
|
-
|
|
22770
|
-
axis[prop] = axis[prop].destroy();
|
|
22771
|
-
}
|
|
22807
|
+
].forEach((prop) => {
|
|
22808
|
+
this[prop] = this[prop]?.destroy();
|
|
22772
22809
|
});
|
|
22773
|
-
// Destroy each generated group for plotLines and plotBands
|
|
22774
|
-
for (const plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in
|
|
22775
|
-
axis.plotLinesAndBandsGroups[plotGroup] =
|
|
22776
|
-
axis.plotLinesAndBandsGroups[plotGroup].destroy();
|
|
22777
|
-
}
|
|
22778
22810
|
// Delete all properties and fall back to the prototype.
|
|
22779
|
-
objectEach(
|
|
22780
|
-
|
|
22781
|
-
delete axis[key];
|
|
22782
|
-
}
|
|
22811
|
+
objectEach(this, (_val, key) => {
|
|
22812
|
+
delete this[key];
|
|
22783
22813
|
});
|
|
22784
|
-
this.eventOptions = eventOptions;
|
|
22785
22814
|
}
|
|
22786
22815
|
/**
|
|
22787
22816
|
* Internal function to draw a crosshair.
|
|
@@ -22875,25 +22904,21 @@ class Axis {
|
|
|
22875
22904
|
void 0 :
|
|
22876
22905
|
chart.plotClipInner)
|
|
22877
22906
|
.add();
|
|
22878
|
-
|
|
22879
|
-
|
|
22880
|
-
|
|
22881
|
-
|
|
22882
|
-
|
|
22883
|
-
|
|
22884
|
-
|
|
22885
|
-
|
|
22886
|
-
|
|
22887
|
-
|
|
22888
|
-
|
|
22889
|
-
|
|
22890
|
-
|
|
22891
|
-
|
|
22892
|
-
|
|
22893
|
-
dashstyle: options.dashStyle
|
|
22894
|
-
});
|
|
22895
|
-
}
|
|
22896
|
-
}
|
|
22907
|
+
}
|
|
22908
|
+
// Presentational attributes
|
|
22909
|
+
if (!chart.styledMode) {
|
|
22910
|
+
cross
|
|
22911
|
+
.attr({
|
|
22912
|
+
stroke: options.color || (categorized ?
|
|
22913
|
+
Axis_color('var(--highcharts-highlight-color-20)').setOpacity(0.25).get() :
|
|
22914
|
+
'var(--highcharts-neutral-color-20)'),
|
|
22915
|
+
'stroke-width': options.width ?? 1,
|
|
22916
|
+
// Dash style must be after stroke-width
|
|
22917
|
+
dashstyle: options.dashStyle || 'Solid'
|
|
22918
|
+
})
|
|
22919
|
+
.css({
|
|
22920
|
+
'pointer-events': 'none'
|
|
22921
|
+
});
|
|
22897
22922
|
}
|
|
22898
22923
|
cross
|
|
22899
22924
|
.show()
|
|
@@ -22903,9 +22928,7 @@ class Axis {
|
|
|
22903
22928
|
'stroke-width': this.transA
|
|
22904
22929
|
});
|
|
22905
22930
|
}
|
|
22906
|
-
|
|
22907
|
-
this.cross.e = e;
|
|
22908
|
-
}
|
|
22931
|
+
cross.e = e;
|
|
22909
22932
|
},
|
|
22910
22933
|
// Only use delay if the crosshair is currently hidden
|
|
22911
22934
|
(!graphic || graphic.attr('visibility') === 'hidden') ?
|
|
@@ -22944,13 +22967,14 @@ class Axis {
|
|
|
22944
22967
|
* operations on the chart, it is a good idea to set redraw to false and
|
|
22945
22968
|
* call {@link Chart#redraw} after.
|
|
22946
22969
|
*/
|
|
22947
|
-
update(options, redraw) {
|
|
22970
|
+
update(options = {}, redraw = true) {
|
|
22948
22971
|
const chart = this.chart;
|
|
22972
|
+
fireEvent(this, 'update', { options });
|
|
22949
22973
|
options = merge(this.userOptions, options);
|
|
22950
|
-
this.
|
|
22974
|
+
this.isDirty = this.forceRedraw = true;
|
|
22951
22975
|
this.init(chart, options);
|
|
22952
22976
|
chart.isDirtyBox = true;
|
|
22953
|
-
if (redraw
|
|
22977
|
+
if (redraw) {
|
|
22954
22978
|
chart.redraw();
|
|
22955
22979
|
}
|
|
22956
22980
|
}
|
|
@@ -23019,26 +23043,6 @@ class Axis {
|
|
|
23019
23043
|
this.update({ categories: categories }, redraw);
|
|
23020
23044
|
}
|
|
23021
23045
|
}
|
|
23022
|
-
/* *
|
|
23023
|
-
*
|
|
23024
|
-
* Static Properties
|
|
23025
|
-
*
|
|
23026
|
-
* */
|
|
23027
|
-
/**
|
|
23028
|
-
* Properties to survive after destroy, needed for Axis.update (#4317,
|
|
23029
|
-
* #5773, #5881).
|
|
23030
|
-
* @internal
|
|
23031
|
-
*/
|
|
23032
|
-
Axis.keepProps = [
|
|
23033
|
-
'coll',
|
|
23034
|
-
'extKey',
|
|
23035
|
-
'hcEvents',
|
|
23036
|
-
'len',
|
|
23037
|
-
'names',
|
|
23038
|
-
'series',
|
|
23039
|
-
'userMax',
|
|
23040
|
-
'userMin'
|
|
23041
|
-
];
|
|
23042
23046
|
/* *
|
|
23043
23047
|
*
|
|
23044
23048
|
* Default Export
|
|
@@ -23309,6 +23313,8 @@ Axis.keepProps = [
|
|
|
23309
23313
|
* */
|
|
23310
23314
|
|
|
23311
23315
|
|
|
23316
|
+
const { composed: DateTimeAxis_composed } = Core_Globals;
|
|
23317
|
+
|
|
23312
23318
|
|
|
23313
23319
|
/* *
|
|
23314
23320
|
*
|
|
@@ -23332,8 +23338,7 @@ var DateTimeAxis;
|
|
|
23332
23338
|
* @internal
|
|
23333
23339
|
*/
|
|
23334
23340
|
function compose(AxisClass) {
|
|
23335
|
-
if (
|
|
23336
|
-
AxisClass.keepProps.push('dateTime');
|
|
23341
|
+
if (pushUnique(DateTimeAxis_composed, 'Axis.DateTime')) {
|
|
23337
23342
|
const axisProto = AxisClass.prototype;
|
|
23338
23343
|
axisProto.getTimeTicks = getTimeTicks;
|
|
23339
23344
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
@@ -23495,6 +23500,8 @@ var DateTimeAxis;
|
|
|
23495
23500
|
* */
|
|
23496
23501
|
|
|
23497
23502
|
|
|
23503
|
+
const { composed: LogarithmicAxis_composed } = Core_Globals;
|
|
23504
|
+
|
|
23498
23505
|
/* *
|
|
23499
23506
|
*
|
|
23500
23507
|
* Class
|
|
@@ -23518,8 +23525,7 @@ var LogarithmicAxis;
|
|
|
23518
23525
|
* @internal
|
|
23519
23526
|
*/
|
|
23520
23527
|
function compose(AxisClass) {
|
|
23521
|
-
if (
|
|
23522
|
-
AxisClass.keepProps.push('logarithmic');
|
|
23528
|
+
if (pushUnique(LogarithmicAxis_composed, 'Axis.Logarithmic')) {
|
|
23523
23529
|
addEvent(AxisClass, 'afterSetType', onAfterSetType);
|
|
23524
23530
|
addEvent(AxisClass, 'afterInit', onAfterInit);
|
|
23525
23531
|
}
|
|
@@ -23728,24 +23734,7 @@ var PlotLineOrBandAxis;
|
|
|
23728
23734
|
* Functions
|
|
23729
23735
|
*
|
|
23730
23736
|
* */
|
|
23731
|
-
|
|
23732
|
-
* Add a plot band after render time.
|
|
23733
|
-
*
|
|
23734
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23735
|
-
* Toggle the plot band from a button
|
|
23736
|
-
*
|
|
23737
|
-
* @function Highcharts.Axis#addPlotBand
|
|
23738
|
-
*
|
|
23739
|
-
* @param {Highcharts.AxisPlotBandsOptions} options
|
|
23740
|
-
* A configuration object for the plot band, as defined in
|
|
23741
|
-
* [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).
|
|
23742
|
-
*
|
|
23743
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23744
|
-
* The added plot band, or `undefined` if the options are not valid.
|
|
23745
|
-
*/
|
|
23746
|
-
function addPlotBand(options) {
|
|
23747
|
-
return this.addPlotBandOrLine(options, 'plotBands');
|
|
23748
|
-
}
|
|
23737
|
+
const getAdderFunction = (coll) =>
|
|
23749
23738
|
/**
|
|
23750
23739
|
* Add a plot band or plot line after render time. Called from
|
|
23751
23740
|
* addPlotBand and addPlotLine internally.
|
|
@@ -23753,65 +23742,85 @@ var PlotLineOrBandAxis;
|
|
|
23753
23742
|
* @internal
|
|
23754
23743
|
* @function Highcharts.Axis#addPlotBandOrLine
|
|
23755
23744
|
* @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options
|
|
23756
|
-
*
|
|
23745
|
+
* The `plotBand` or `plotLine` configuration object.
|
|
23757
23746
|
*/
|
|
23758
|
-
function
|
|
23759
|
-
|
|
23760
|
-
|
|
23747
|
+
function addPlotLineOrBand(options) {
|
|
23748
|
+
var _a;
|
|
23749
|
+
const plotItem = new PlotLineOrBandClass(this, options, coll);
|
|
23761
23750
|
if (this.visible) {
|
|
23762
|
-
|
|
23763
|
-
}
|
|
23764
|
-
if (obj) { // #2189
|
|
23765
|
-
if (!this._addedPlotLB) {
|
|
23766
|
-
this._addedPlotLB = true;
|
|
23767
|
-
(userOptions.plotLines || [])
|
|
23768
|
-
.concat(userOptions.plotBands || [])
|
|
23769
|
-
.forEach((plotLineOptions) => {
|
|
23770
|
-
this.addPlotBandOrLine(plotLineOptions);
|
|
23771
|
-
});
|
|
23772
|
-
}
|
|
23773
|
-
// Add it to the user options for exporting and Axis.update
|
|
23774
|
-
if (coll) {
|
|
23775
|
-
// Workaround Microsoft/TypeScript issue #32693
|
|
23776
|
-
const updatedOptions = (userOptions[coll] || []);
|
|
23777
|
-
updatedOptions.push(options);
|
|
23778
|
-
userOptions[coll] = updatedOptions;
|
|
23779
|
-
}
|
|
23780
|
-
this.plotLinesAndBands.push(obj);
|
|
23751
|
+
plotItem.render();
|
|
23781
23752
|
}
|
|
23782
|
-
|
|
23783
|
-
|
|
23784
|
-
|
|
23785
|
-
|
|
23786
|
-
|
|
23787
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23788
|
-
* Toggle the plot line from a button
|
|
23789
|
-
*
|
|
23790
|
-
* @function Highcharts.Axis#addPlotLine
|
|
23791
|
-
*
|
|
23792
|
-
* @param {Highcharts.AxisPlotLinesOptions} options
|
|
23793
|
-
* A configuration object for the plot line, as defined in
|
|
23794
|
-
* [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).
|
|
23795
|
-
*
|
|
23796
|
-
* @return {Highcharts.PlotLineOrBand|undefined}
|
|
23797
|
-
* The added plot line, or `undefined` if the options are not valid.
|
|
23798
|
-
*/
|
|
23799
|
-
function addPlotLine(options) {
|
|
23800
|
-
return this.addPlotBandOrLine(options, 'plotLines');
|
|
23801
|
-
}
|
|
23753
|
+
(_a = this.options)[coll] || (_a[coll] = this.userOptions[coll] = []);
|
|
23754
|
+
this.options[coll].push(options);
|
|
23755
|
+
this[coll].push(plotItem);
|
|
23756
|
+
return plotItem;
|
|
23757
|
+
};
|
|
23802
23758
|
/** @internal */
|
|
23803
23759
|
function compose(PlotLineOrBandType, AxisClass) {
|
|
23804
23760
|
const axisProto = AxisClass.prototype;
|
|
23805
23761
|
if (!axisProto.addPlotBand) {
|
|
23806
23762
|
PlotLineOrBandClass = PlotLineOrBandType;
|
|
23807
23763
|
extend(axisProto, {
|
|
23808
|
-
addPlotBand,
|
|
23809
|
-
addPlotLine,
|
|
23810
|
-
addPlotBandOrLine,
|
|
23764
|
+
addPlotBand: getAdderFunction('plotBands'),
|
|
23765
|
+
addPlotLine: getAdderFunction('plotLines'),
|
|
23811
23766
|
getPlotBandPath,
|
|
23812
|
-
removePlotBand,
|
|
23813
|
-
removePlotLine
|
|
23814
|
-
|
|
23767
|
+
removePlotBand: removePlotBandOrLine,
|
|
23768
|
+
removePlotLine: removePlotBandOrLine
|
|
23769
|
+
});
|
|
23770
|
+
addEvent(AxisClass, 'afterInit', function () {
|
|
23771
|
+
// First time only, not on Axis.update()
|
|
23772
|
+
if (!this.plotBands) {
|
|
23773
|
+
// Placeholder for plotlines and plotbands groups
|
|
23774
|
+
this.plotLinesAndBandsGroups = {};
|
|
23775
|
+
// Plot lines and bands from options
|
|
23776
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23777
|
+
this[coll] = [];
|
|
23778
|
+
for (const pOptions of splat(this.options[coll] || [])) {
|
|
23779
|
+
this[coll].push(new PlotLineOrBandClass(this, pOptions, coll));
|
|
23780
|
+
}
|
|
23781
|
+
}
|
|
23782
|
+
}
|
|
23783
|
+
});
|
|
23784
|
+
// Update plot bands and lines one to one
|
|
23785
|
+
addEvent(AxisClass, 'update', function ({ options }) {
|
|
23786
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23787
|
+
// Check if we have new options to process, otherwise do
|
|
23788
|
+
// nothing with existing plot lines and bands
|
|
23789
|
+
if (options[coll]) {
|
|
23790
|
+
const plotItems = this[coll];
|
|
23791
|
+
splat(options[coll]).forEach((pOptions = {}, i) => {
|
|
23792
|
+
// Match by id
|
|
23793
|
+
let pItem;
|
|
23794
|
+
if (pOptions?.id) {
|
|
23795
|
+
pItem = plotItems.find((p) => p.id === pOptions.id);
|
|
23796
|
+
}
|
|
23797
|
+
// Match by index
|
|
23798
|
+
pItem || (pItem = plotItems[i]);
|
|
23799
|
+
// Update
|
|
23800
|
+
if (pItem) {
|
|
23801
|
+
pItem.update(pOptions, false);
|
|
23802
|
+
options[coll][i] = pItem.options;
|
|
23803
|
+
// Add
|
|
23804
|
+
}
|
|
23805
|
+
else {
|
|
23806
|
+
pItem = this[coll === 'plotBands' ?
|
|
23807
|
+
'addPlotBand' :
|
|
23808
|
+
'addPlotLine'](pOptions);
|
|
23809
|
+
}
|
|
23810
|
+
pItem.isActive = true;
|
|
23811
|
+
});
|
|
23812
|
+
// Remove inactive items from end to start
|
|
23813
|
+
let i = plotItems.length;
|
|
23814
|
+
while (i--) {
|
|
23815
|
+
if (!plotItems[i].isActive) {
|
|
23816
|
+
plotItems[i].remove();
|
|
23817
|
+
}
|
|
23818
|
+
else {
|
|
23819
|
+
delete plotItems[i].isActive;
|
|
23820
|
+
}
|
|
23821
|
+
}
|
|
23822
|
+
}
|
|
23823
|
+
}
|
|
23815
23824
|
});
|
|
23816
23825
|
}
|
|
23817
23826
|
return AxisClass;
|
|
@@ -23882,23 +23891,6 @@ var PlotLineOrBandAxis;
|
|
|
23882
23891
|
}
|
|
23883
23892
|
return result;
|
|
23884
23893
|
}
|
|
23885
|
-
/**
|
|
23886
|
-
* Remove a plot band by its id.
|
|
23887
|
-
*
|
|
23888
|
-
* @sample highcharts/members/axis-removeplotband/
|
|
23889
|
-
* Remove plot band by id
|
|
23890
|
-
* @sample highcharts/members/axis-addplotband/
|
|
23891
|
-
* Toggle the plot band from a button
|
|
23892
|
-
*
|
|
23893
|
-
* @function Highcharts.Axis#removePlotBand
|
|
23894
|
-
*
|
|
23895
|
-
* @param {string} id
|
|
23896
|
-
* The plot band's `id` as given in the original configuration
|
|
23897
|
-
* object or in the `addPlotBand` option.
|
|
23898
|
-
*/
|
|
23899
|
-
function removePlotBand(id) {
|
|
23900
|
-
this.removePlotBandOrLine(id);
|
|
23901
|
-
}
|
|
23902
23894
|
/**
|
|
23903
23895
|
* Remove a plot band or plot line from the chart by id. Called
|
|
23904
23896
|
* internally from `removePlotBand` and `removePlotLine`.
|
|
@@ -23906,45 +23898,7 @@ var PlotLineOrBandAxis;
|
|
|
23906
23898
|
* @function Highcharts.Axis#removePlotBandOrLine
|
|
23907
23899
|
*/
|
|
23908
23900
|
function removePlotBandOrLine(id) {
|
|
23909
|
-
|
|
23910
|
-
if (plotLinesAndBands) { // #15639
|
|
23911
|
-
let i = plotLinesAndBands.length;
|
|
23912
|
-
while (i--) {
|
|
23913
|
-
if (plotLinesAndBands[i].id === id) {
|
|
23914
|
-
plotLinesAndBands[i].destroy();
|
|
23915
|
-
}
|
|
23916
|
-
}
|
|
23917
|
-
([
|
|
23918
|
-
options.plotLines || [],
|
|
23919
|
-
userOptions.plotLines || [],
|
|
23920
|
-
options.plotBands || [],
|
|
23921
|
-
userOptions.plotBands || []
|
|
23922
|
-
]).forEach(function (arr) {
|
|
23923
|
-
i = arr.length;
|
|
23924
|
-
while (i--) {
|
|
23925
|
-
if (arr[i]?.id === id) {
|
|
23926
|
-
erase(arr, arr[i]);
|
|
23927
|
-
}
|
|
23928
|
-
}
|
|
23929
|
-
});
|
|
23930
|
-
}
|
|
23931
|
-
}
|
|
23932
|
-
/**
|
|
23933
|
-
* Remove a plot line by its id.
|
|
23934
|
-
*
|
|
23935
|
-
* @sample highcharts/xaxis/plotlines-id/
|
|
23936
|
-
* Remove plot line by id
|
|
23937
|
-
* @sample highcharts/members/axis-addplotline/
|
|
23938
|
-
* Toggle the plot line from a button
|
|
23939
|
-
*
|
|
23940
|
-
* @function Highcharts.Axis#removePlotLine
|
|
23941
|
-
*
|
|
23942
|
-
* @param {string} id
|
|
23943
|
-
* The plot line's `id` as given in the original configuration
|
|
23944
|
-
* object or in the `addPlotLine` option.
|
|
23945
|
-
*/
|
|
23946
|
-
function removePlotLine(id) {
|
|
23947
|
-
this.removePlotBandOrLine(id);
|
|
23901
|
+
[...this.plotBands || [], ...this.plotLines || []].find((plotItem) => plotItem.id === id)?.remove();
|
|
23948
23902
|
}
|
|
23949
23903
|
})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));
|
|
23950
23904
|
/* *
|
|
@@ -24008,9 +23962,11 @@ class PlotLineOrBand {
|
|
|
24008
23962
|
this.labelCollectors.push(() => {
|
|
24009
23963
|
const labels = [];
|
|
24010
23964
|
for (const axis of this.axes) {
|
|
24011
|
-
for (const
|
|
24012
|
-
|
|
24013
|
-
|
|
23965
|
+
for (const coll of ['plotBands', 'plotLines']) {
|
|
23966
|
+
for (const { label, options } of axis[coll]) {
|
|
23967
|
+
if (label && !options?.label?.allowOverlap) {
|
|
23968
|
+
labels.push(label);
|
|
23969
|
+
}
|
|
24014
23970
|
}
|
|
24015
23971
|
}
|
|
24016
23972
|
}
|
|
@@ -24024,7 +23980,7 @@ class PlotLineOrBand {
|
|
|
24024
23980
|
* Constructor
|
|
24025
23981
|
*
|
|
24026
23982
|
* */
|
|
24027
|
-
constructor(axis, options) {
|
|
23983
|
+
constructor(axis, options, coll) {
|
|
24028
23984
|
/**
|
|
24029
23985
|
* Related axis.
|
|
24030
23986
|
*
|
|
@@ -24040,6 +23996,7 @@ class PlotLineOrBand {
|
|
|
24040
23996
|
*/
|
|
24041
23997
|
this.options = options;
|
|
24042
23998
|
this.id = options.id;
|
|
23999
|
+
this.coll = coll;
|
|
24043
24000
|
}
|
|
24044
24001
|
/* *
|
|
24045
24002
|
*
|
|
@@ -24055,43 +24012,28 @@ class PlotLineOrBand {
|
|
|
24055
24012
|
*/
|
|
24056
24013
|
render() {
|
|
24057
24014
|
fireEvent(this, 'render');
|
|
24058
|
-
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, time } = axis.chart,
|
|
24015
|
+
const { axis, options } = this, { chart, horiz, logarithmic } = axis, { color, events, zIndex = 0 } = options, { renderer, styledMode, time } = axis.chart,
|
|
24059
24016
|
// These properties only exist on either band or line
|
|
24060
24017
|
to = time.parse(options.to), from = time.parse(options.from), value = time.parse(options.value), borderWidth = options.borderWidth;
|
|
24061
|
-
let optionsLabel = options.label, { label, svgElem } = this,
|
|
24062
|
-
const isBand =
|
|
24063
|
-
'class':
|
|
24064
|
-
|
|
24065
|
-
|
|
24066
|
-
|
|
24067
|
-
// Set the
|
|
24068
|
-
if (!
|
|
24069
|
-
|
|
24070
|
-
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24071
|
-
attribs['stroke-width'] =
|
|
24072
|
-
options.width ?? 1;
|
|
24073
|
-
if (options.dashStyle) {
|
|
24074
|
-
attribs.dashstyle = options.dashStyle;
|
|
24075
|
-
}
|
|
24076
|
-
}
|
|
24077
|
-
else if (isBand) { // Plot band
|
|
24078
|
-
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24079
|
-
if (borderWidth) {
|
|
24080
|
-
attribs.stroke = options.borderColor;
|
|
24081
|
-
attribs['stroke-width'] = borderWidth;
|
|
24082
|
-
}
|
|
24083
|
-
}
|
|
24018
|
+
let optionsLabel = options.label, { label, svgElem } = this, group;
|
|
24019
|
+
const isBand = this.coll === 'plotBands', shortKey = isBand ? 'band' : 'line', groupName = `${shortKey}s-${zIndex}`, isNew = !svgElem, attribs = {
|
|
24020
|
+
'class': `highcharts-plot-${shortKey} ${options.className || ''}`
|
|
24021
|
+
}, strokeWidth = isBand ?
|
|
24022
|
+
(borderWidth || 0) :
|
|
24023
|
+
(options.width ?? 1);
|
|
24024
|
+
// Set the stroke width before the path is calculated
|
|
24025
|
+
if (!styledMode) {
|
|
24026
|
+
attribs['stroke-width'] = strokeWidth;
|
|
24084
24027
|
}
|
|
24085
24028
|
// Grouping and zIndex
|
|
24086
|
-
groupAttribs.zIndex = zIndex;
|
|
24087
|
-
groupName += '-' + zIndex;
|
|
24088
24029
|
group = axis.plotLinesAndBandsGroups[groupName];
|
|
24089
24030
|
if (!group) {
|
|
24090
24031
|
axis.plotLinesAndBandsGroups[groupName] = group =
|
|
24091
24032
|
renderer.g('plot-' + groupName)
|
|
24092
24033
|
.clip(chart.plotClipOuter)
|
|
24093
|
-
.attr(
|
|
24034
|
+
.attr({ zIndex }).add();
|
|
24094
24035
|
}
|
|
24036
|
+
group[isNew ? 'attr' : 'animate']({ opacity: +axis.visible });
|
|
24095
24037
|
// Create the path
|
|
24096
24038
|
if (!svgElem) {
|
|
24097
24039
|
/**
|
|
@@ -24102,40 +24044,58 @@ class PlotLineOrBand {
|
|
|
24102
24044
|
*/
|
|
24103
24045
|
this.svgElem = svgElem = renderer
|
|
24104
24046
|
.path()
|
|
24105
|
-
.attr(attribs)
|
|
24106
|
-
|
|
24047
|
+
.attr(attribs);
|
|
24048
|
+
}
|
|
24049
|
+
// Add it to the correct index while allowing dynamic z-index update
|
|
24050
|
+
if (svgElem.parentGroup !== group) {
|
|
24051
|
+
svgElem.add(group);
|
|
24107
24052
|
}
|
|
24108
24053
|
// Set the path or return
|
|
24109
|
-
|
|
24054
|
+
let path;
|
|
24055
|
+
if (!isBand && defined(value)) { // Plot line
|
|
24110
24056
|
path = axis.getPlotLinePath({
|
|
24111
24057
|
value: logarithmic?.log2lin(value) ?? value,
|
|
24112
24058
|
lineWidth: svgElem.strokeWidth(),
|
|
24113
24059
|
acrossPanes: options.acrossPanes
|
|
24114
24060
|
});
|
|
24115
24061
|
}
|
|
24116
|
-
else if (defined(from) && defined(to)) { // Plot band
|
|
24062
|
+
else if (isBand && defined(from) && defined(to)) { // Plot band
|
|
24117
24063
|
path = axis.getPlotBandPath(logarithmic?.log2lin(from) ?? from, logarithmic?.log2lin(to) ?? to, options);
|
|
24118
24064
|
}
|
|
24119
|
-
|
|
24120
|
-
|
|
24065
|
+
if (path) {
|
|
24066
|
+
attribs.d = path;
|
|
24067
|
+
}
|
|
24068
|
+
// Apply the styling
|
|
24069
|
+
if (!styledMode) {
|
|
24070
|
+
if (isBand) { // Plot band
|
|
24071
|
+
attribs.fill = color || 'var(--highcharts-highlight-color-10)';
|
|
24072
|
+
if (borderWidth) {
|
|
24073
|
+
attribs.stroke = options.borderColor;
|
|
24074
|
+
}
|
|
24075
|
+
}
|
|
24076
|
+
else {
|
|
24077
|
+
attribs.stroke = color || 'var(--highcharts-neutral-color-40)';
|
|
24078
|
+
if (options.dashStyle) {
|
|
24079
|
+
attribs.dashstyle = options.dashStyle;
|
|
24080
|
+
}
|
|
24081
|
+
}
|
|
24121
24082
|
}
|
|
24122
24083
|
// Common for lines and bands. Add events only if they were not added
|
|
24123
24084
|
// before.
|
|
24124
|
-
if (
|
|
24085
|
+
if (isNew && events) {
|
|
24125
24086
|
objectEach(events, (_event, eventType) => {
|
|
24126
24087
|
svgElem?.on(eventType, (e) => {
|
|
24127
24088
|
events[eventType].apply(this, [e, this]);
|
|
24128
24089
|
});
|
|
24129
24090
|
});
|
|
24130
|
-
this.eventsAdded = true;
|
|
24131
24091
|
}
|
|
24132
24092
|
if ((isNew || !svgElem.d) && path?.length) {
|
|
24133
|
-
svgElem.attr(
|
|
24093
|
+
svgElem.attr(attribs);
|
|
24134
24094
|
}
|
|
24135
24095
|
else if (svgElem) {
|
|
24136
24096
|
if (path) {
|
|
24137
24097
|
svgElem.show();
|
|
24138
|
-
svgElem.animate(
|
|
24098
|
+
svgElem.animate(attribs);
|
|
24139
24099
|
}
|
|
24140
24100
|
else if (svgElem.d) {
|
|
24141
24101
|
svgElem.hide();
|
|
@@ -24175,7 +24135,7 @@ class PlotLineOrBand {
|
|
|
24175
24135
|
* @function Highcharts.PlotLineOrBand#renderLabel
|
|
24176
24136
|
*/
|
|
24177
24137
|
renderLabel(optionsLabel, path, isBand, zIndex) {
|
|
24178
|
-
const plotLine = this, axis = plotLine.axis,
|
|
24138
|
+
const plotLine = this, axis = plotLine.axis, chart = axis.chart, renderer = chart.renderer, inside = optionsLabel.inside;
|
|
24179
24139
|
let label = plotLine.label;
|
|
24180
24140
|
// Add the SVG element
|
|
24181
24141
|
if (!label) {
|
|
@@ -24186,25 +24146,31 @@ class PlotLineOrBand {
|
|
|
24186
24146
|
* @type {Highcharts.SVGElement}
|
|
24187
24147
|
*/
|
|
24188
24148
|
plotLine.label = label = renderer
|
|
24189
|
-
.text(
|
|
24190
|
-
.attr({
|
|
24191
|
-
|
|
24192
|
-
|
|
24193
|
-
|
|
24194
|
-
|
|
24195
|
-
|
|
24196
|
-
|
|
24197
|
-
|
|
24198
|
-
|
|
24199
|
-
|
|
24200
|
-
|
|
24201
|
-
|
|
24202
|
-
|
|
24203
|
-
|
|
24204
|
-
|
|
24205
|
-
|
|
24206
|
-
|
|
24207
|
-
|
|
24149
|
+
.text('', 0, 0, optionsLabel.useHTML)
|
|
24150
|
+
.attr({ zIndex });
|
|
24151
|
+
}
|
|
24152
|
+
label
|
|
24153
|
+
.attr({
|
|
24154
|
+
text: this.getLabelText(optionsLabel),
|
|
24155
|
+
align: optionsLabel.textAlign || optionsLabel.align,
|
|
24156
|
+
'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +
|
|
24157
|
+
'-label ' + (optionsLabel.className || '')
|
|
24158
|
+
})[label.placed ? 'animate' : 'attr']({
|
|
24159
|
+
opacity: 1,
|
|
24160
|
+
rotation: optionsLabel.rotation
|
|
24161
|
+
});
|
|
24162
|
+
if (!chart.styledMode) {
|
|
24163
|
+
label.css(merge({
|
|
24164
|
+
// To allow theming, and in lack of a general place to set
|
|
24165
|
+
// default options for plot lines and bands, default to the
|
|
24166
|
+
// title color. If we expose the palette, we should use that
|
|
24167
|
+
// instead.
|
|
24168
|
+
color: chart.options.title?.style?.color,
|
|
24169
|
+
fontSize: '0.8em',
|
|
24170
|
+
textOverflow: (isBand && !inside) ? '' : 'ellipsis'
|
|
24171
|
+
}, optionsLabel.style));
|
|
24172
|
+
}
|
|
24173
|
+
if (!label.added) {
|
|
24208
24174
|
label.add();
|
|
24209
24175
|
}
|
|
24210
24176
|
// Get the bounding box and align the label
|
|
@@ -24228,12 +24194,31 @@ class PlotLineOrBand {
|
|
|
24228
24194
|
axis.height - (label.alignAttr.y -
|
|
24229
24195
|
axis.top) : (optionsLabel.clip ?
|
|
24230
24196
|
(axis.width + axis.left) :
|
|
24231
|
-
|
|
24197
|
+
chart.chartWidth) - label.alignAttr.x) :
|
|
24232
24198
|
bBoxWidth)) + 'px'
|
|
24233
24199
|
});
|
|
24234
24200
|
}
|
|
24201
|
+
else if (label.textWidth) {
|
|
24202
|
+
label.css({ width: 'auto' });
|
|
24203
|
+
}
|
|
24235
24204
|
label.show(true);
|
|
24236
24205
|
}
|
|
24206
|
+
/**
|
|
24207
|
+
* Update the plot line or band with new options.
|
|
24208
|
+
*
|
|
24209
|
+
* @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} options
|
|
24210
|
+
* The new options to apply
|
|
24211
|
+
* @param {boolean} [redraw=true]
|
|
24212
|
+
* Whether to redraw the plot guide immediately
|
|
24213
|
+
*
|
|
24214
|
+
* @function Highcharts.PlotLineOrBand#update
|
|
24215
|
+
*/
|
|
24216
|
+
update(options, redraw = true) {
|
|
24217
|
+
merge(true, this.options, options);
|
|
24218
|
+
if (redraw) {
|
|
24219
|
+
this.render();
|
|
24220
|
+
}
|
|
24221
|
+
}
|
|
24237
24222
|
/**
|
|
24238
24223
|
* Get label's text content.
|
|
24239
24224
|
* @internal
|
|
@@ -24245,15 +24230,22 @@ class PlotLineOrBand {
|
|
|
24245
24230
|
optionsLabel.text;
|
|
24246
24231
|
}
|
|
24247
24232
|
/**
|
|
24248
|
-
*
|
|
24249
|
-
*
|
|
24250
|
-
* @function Highcharts.PlotLineOrBand#destroy
|
|
24233
|
+
* Destroy the item's elements
|
|
24251
24234
|
*/
|
|
24252
24235
|
destroy() {
|
|
24236
|
+
destroyObjectProperties(this, this.axis);
|
|
24237
|
+
}
|
|
24238
|
+
/**
|
|
24239
|
+
* Remove the plot line or band and destroy its elements.
|
|
24240
|
+
*
|
|
24241
|
+
* @function Highcharts.PlotLineOrBand#remove
|
|
24242
|
+
*/
|
|
24243
|
+
remove() {
|
|
24253
24244
|
// Remove it from the lookup
|
|
24254
|
-
erase(this.axis.
|
|
24255
|
-
|
|
24256
|
-
|
|
24245
|
+
erase(this.axis[this.coll], this);
|
|
24246
|
+
// Remove from options
|
|
24247
|
+
erase(this.axis.options[this.coll] || [], this.options);
|
|
24248
|
+
this.destroy();
|
|
24257
24249
|
}
|
|
24258
24250
|
}
|
|
24259
24251
|
/* *
|
|
@@ -24300,10 +24292,24 @@ class PlotLineOrBand {
|
|
|
24300
24292
|
* In styled mode, the plot bands are styled by the `.highcharts-plot-band`
|
|
24301
24293
|
* class in addition to the `className` option.
|
|
24302
24294
|
*
|
|
24295
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot bands are updated
|
|
24296
|
+
* by index or id. The following merging rules apply:
|
|
24297
|
+
* - If `plotBands` are not defined in the new options, all existing plot bands
|
|
24298
|
+
* are kept.
|
|
24299
|
+
* - If `plotBands` are defined without ids, the existing plot bands are updated
|
|
24300
|
+
* by index. If the new array has fewer plot bands, the remaining existing
|
|
24301
|
+
* plot bands are removed. If the new array has more plot bands, the extra
|
|
24302
|
+
* ones are added. An empty array removes all existing plot bands.
|
|
24303
|
+
* - If `plotBands` are defined with ids, the existing plot bands are matched
|
|
24304
|
+
* by id, and remaining unmatched existing plot bands are removed.
|
|
24305
|
+
*
|
|
24303
24306
|
* @productdesc {highcharts}
|
|
24304
24307
|
* In a gauge, a plot band on the Y axis (value axis) will stretch along the
|
|
24305
24308
|
* perimeter of the gauge.
|
|
24306
24309
|
*
|
|
24310
|
+
* @sample {highcharts} highcharts/xaxis/plotbands-color/
|
|
24311
|
+
* Basic plot band
|
|
24312
|
+
*
|
|
24307
24313
|
* @type {Array<*>}
|
|
24308
24314
|
* @product highcharts highstock gantt
|
|
24309
24315
|
* @apioption xAxis.plotBands
|
|
@@ -24595,12 +24601,23 @@ class PlotLineOrBand {
|
|
|
24595
24601
|
* In styled mode, the plot lines are styled by the
|
|
24596
24602
|
* `.highcharts-plot-line` class in addition to the `className` option.
|
|
24597
24603
|
*
|
|
24604
|
+
* When doing `Chart.update()` or `Axis.update()`, the plot lines are updated
|
|
24605
|
+
* by index or id. The following merging rules apply:
|
|
24606
|
+
* - If `plotLines` are not defined in the new options, all existing plot lines
|
|
24607
|
+
* are kept.
|
|
24608
|
+
* - If `plotLines` are defined without ids, the existing plot lines are updated
|
|
24609
|
+
* by index. If the new array has fewer plot lines, the remaining existing
|
|
24610
|
+
* plot lines are removed. If the new array has more plot lines, the extra
|
|
24611
|
+
* ones are added. An empty array removes all existing plot lines.
|
|
24612
|
+
* - If `plotLines` are defined with ids, the existing plot lines are matched
|
|
24613
|
+
* by id, and remaining unmatched existing plot lines are removed.
|
|
24614
|
+
*
|
|
24598
24615
|
* @type {Array<*>}
|
|
24599
24616
|
* @product highcharts highstock gantt
|
|
24600
|
-
* @sample
|
|
24601
|
-
*
|
|
24602
|
-
* @sample
|
|
24603
|
-
*
|
|
24617
|
+
* @sample {highcharts} highcharts/xaxis/plotlines-color/
|
|
24618
|
+
* Basic plot line
|
|
24619
|
+
* @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/
|
|
24620
|
+
* Solid gauge plot line
|
|
24604
24621
|
* @apioption xAxis.plotLines
|
|
24605
24622
|
*/
|
|
24606
24623
|
/**
|
|
@@ -25109,14 +25126,11 @@ class Tooltip {
|
|
|
25109
25126
|
*/
|
|
25110
25127
|
destroy() {
|
|
25111
25128
|
// Destroy and clear local variables
|
|
25112
|
-
|
|
25113
|
-
|
|
25114
|
-
}
|
|
25129
|
+
this.tracker = this.tracker?.destroy();
|
|
25130
|
+
this.label = this.label?.destroy();
|
|
25115
25131
|
if (this.split) {
|
|
25116
25132
|
this.cleanSplit(true);
|
|
25117
|
-
|
|
25118
|
-
this.tt = this.tt.destroy();
|
|
25119
|
-
}
|
|
25133
|
+
this.tt = this.tt?.destroy();
|
|
25120
25134
|
}
|
|
25121
25135
|
if (this.renderer) {
|
|
25122
25136
|
this.renderer = this.renderer.destroy();
|
|
@@ -25646,6 +25660,8 @@ class Tooltip {
|
|
|
25646
25660
|
!this.isHidden &&
|
|
25647
25661
|
!options.fixed &&
|
|
25648
25662
|
options.animation), skipAnchor = followPointer || (this.len || 0) > 1, attr = { x, y };
|
|
25663
|
+
this.anchorX = anchorX;
|
|
25664
|
+
this.anchorY = anchorY;
|
|
25649
25665
|
if (!skipAnchor) {
|
|
25650
25666
|
attr.anchorX = anchorX;
|
|
25651
25667
|
attr.anchorY = anchorY;
|
|
@@ -26092,45 +26108,37 @@ class Tooltip {
|
|
|
26092
26108
|
*/
|
|
26093
26109
|
drawTracker() {
|
|
26094
26110
|
const tooltip = this;
|
|
26095
|
-
if (!
|
|
26096
|
-
|
|
26097
|
-
tooltip.tracker = tooltip.tracker.destroy();
|
|
26098
|
-
}
|
|
26111
|
+
if (!tooltip.shouldStickOnContact()) {
|
|
26112
|
+
tooltip.tracker = tooltip.tracker?.destroy();
|
|
26099
26113
|
return;
|
|
26100
26114
|
}
|
|
26101
|
-
const chart = tooltip.chart
|
|
26102
|
-
|
|
26103
|
-
|
|
26104
|
-
if (!
|
|
26115
|
+
const { chart, label } = tooltip, points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint,
|
|
26116
|
+
// Split tooltips render into a plain group, with no box to trace
|
|
26117
|
+
box = label?.box;
|
|
26118
|
+
if (!box || !points) {
|
|
26105
26119
|
return;
|
|
26106
26120
|
}
|
|
26107
|
-
const
|
|
26108
|
-
|
|
26109
|
-
|
|
26110
|
-
|
|
26111
|
-
|
|
26112
|
-
|
|
26113
|
-
|
|
26114
|
-
|
|
26115
|
-
|
|
26116
|
-
|
|
26117
|
-
|
|
26118
|
-
//
|
|
26119
|
-
|
|
26120
|
-
|
|
26121
|
-
|
|
26122
|
-
|
|
26123
|
-
|
|
26124
|
-
|
|
26125
|
-
|
|
26126
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :
|
|
26127
|
-
Math.max(Math.abs(anchorPos[1]), labelBBox.height));
|
|
26128
|
-
if (tooltip.tracker) {
|
|
26129
|
-
tooltip.tracker.attr(box);
|
|
26130
|
-
}
|
|
26131
|
-
else {
|
|
26121
|
+
const { height, r, width, x, y } = box;
|
|
26122
|
+
let { anchorX, anchorY } = box;
|
|
26123
|
+
// Shared tooltips clear the label anchor (#22295), so fall back to the
|
|
26124
|
+
// anchor the position was calculated from
|
|
26125
|
+
if (!isNumber(anchorX)) {
|
|
26126
|
+
anchorX = (tooltip.anchorX || 0) - (label.translateX || 0);
|
|
26127
|
+
anchorY = (tooltip.anchorY || 0) - (label.translateY || 0);
|
|
26128
|
+
}
|
|
26129
|
+
// Match the tooltip shape, but stretch the connector all the way to the
|
|
26130
|
+
// point, so that the pointer can travel between the two without losing
|
|
26131
|
+
// contact. Only the side facing the anchor overshoots the box, so the
|
|
26132
|
+
// largest of the four distances is the one to cover. (#24255)
|
|
26133
|
+
const d = label.renderer.symbols.callout(x, y, width, height, {
|
|
26134
|
+
anchorX,
|
|
26135
|
+
anchorY,
|
|
26136
|
+
arrowLength: Math.max(anchorX - width, -anchorX, anchorY - height, -anchorY, 0),
|
|
26137
|
+
r
|
|
26138
|
+
});
|
|
26139
|
+
if (!tooltip.tracker) {
|
|
26132
26140
|
tooltip.tracker = label.renderer
|
|
26133
|
-
.
|
|
26141
|
+
.path()
|
|
26134
26142
|
.addClass('highcharts-tracker')
|
|
26135
26143
|
.add(label);
|
|
26136
26144
|
// For a rapid move going outside of the elements keeping the
|
|
@@ -26138,10 +26146,14 @@ class Tooltip {
|
|
|
26138
26146
|
addEvent(tooltip.tracker.element, 'mouseenter', () => clearTimeouts(tooltip));
|
|
26139
26147
|
if (!chart.styledMode) {
|
|
26140
26148
|
tooltip.tracker.attr({
|
|
26141
|
-
fill: 'rgba(0,0,0,0)'
|
|
26149
|
+
fill: 'rgba(0,0,0,0)',
|
|
26150
|
+
stroke: 'rgba(0,0,0,0)',
|
|
26151
|
+
'stroke-linejoin': 'round',
|
|
26152
|
+
'stroke-width': 10
|
|
26142
26153
|
});
|
|
26143
26154
|
}
|
|
26144
26155
|
}
|
|
26156
|
+
tooltip.tracker.attr({ d });
|
|
26145
26157
|
}
|
|
26146
26158
|
/** @internal */
|
|
26147
26159
|
styledModeFormat(formatString) {
|
|
@@ -27088,7 +27100,8 @@ class Point {
|
|
|
27088
27100
|
/**
|
|
27089
27101
|
* Set a value in an object, on the property defined by key. The key
|
|
27090
27102
|
* supports nested properties using dot notation. The function modifies the
|
|
27091
|
-
* input object and does not make a copy.
|
|
27103
|
+
* input object and does not make a copy. Paths containing `__proto__` or
|
|
27104
|
+
* `constructor` are ignored.
|
|
27092
27105
|
*
|
|
27093
27106
|
* @function Highcharts.Point#setNestedProperty<T>
|
|
27094
27107
|
*
|
|
@@ -27106,11 +27119,18 @@ class Point {
|
|
|
27106
27119
|
*/
|
|
27107
27120
|
setNestedProperty(object, value, key) {
|
|
27108
27121
|
const nestedKeys = key.split('.');
|
|
27122
|
+
// Reject nested keys that would allow prototype pollution
|
|
27123
|
+
if (nestedKeys.some((nestedKey) => (nestedKey === '__proto__' || nestedKey === 'constructor'))) {
|
|
27124
|
+
return object;
|
|
27125
|
+
}
|
|
27109
27126
|
nestedKeys.reduce(function (result, key, i, arr) {
|
|
27110
27127
|
const isLastKey = arr.length - 1 === i;
|
|
27111
27128
|
result[key] = (isLastKey ?
|
|
27112
27129
|
value :
|
|
27113
|
-
|
|
27130
|
+
// Inherited objects are shared with everything else on
|
|
27131
|
+
// that prototype, so start a fresh one instead
|
|
27132
|
+
isObject(result[key], true) &&
|
|
27133
|
+
Object.hasOwnProperty.call(result, key) ?
|
|
27114
27134
|
result[key] :
|
|
27115
27135
|
{});
|
|
27116
27136
|
return result[key];
|
|
@@ -27192,15 +27212,10 @@ class Point {
|
|
|
27192
27212
|
*/
|
|
27193
27213
|
function update() {
|
|
27194
27214
|
point.applyOptions(options);
|
|
27195
|
-
// Update visuals, #4146
|
|
27196
|
-
//
|
|
27197
|
-
|
|
27198
|
-
const shouldDestroyGraphic = point.y === null ?
|
|
27199
|
-
!hasMockGraphic :
|
|
27200
|
-
hasMockGraphic;
|
|
27201
|
-
if (graphic && shouldDestroyGraphic) {
|
|
27215
|
+
// Update visuals, #4146. The a11y mock graphic is exempt, it is
|
|
27216
|
+
// maintained by the accessibility module, #12718.
|
|
27217
|
+
if (graphic && point.y === null && !point.hasMockGraphic) {
|
|
27202
27218
|
point.graphic = graphic.destroy();
|
|
27203
|
-
delete point.hasMockGraphic;
|
|
27204
27219
|
}
|
|
27205
27220
|
if (isObject(options, true)) {
|
|
27206
27221
|
// Destroy so we can get new elements
|
|
@@ -27215,7 +27230,7 @@ class Point {
|
|
|
27215
27230
|
point.dataLabel = point.dataLabel.destroy(); // #2468
|
|
27216
27231
|
}
|
|
27217
27232
|
}
|
|
27218
|
-
const pointOptions = point.optionsToObject(options);
|
|
27233
|
+
const index = point.index, pointOptions = point.optionsToObject(options);
|
|
27219
27234
|
if (!series.hasProcessedDataTable) {
|
|
27220
27235
|
// Record changes in the data table (#24451)
|
|
27221
27236
|
series.dataTable.setRow(pointOptions, index);
|
|
@@ -29219,19 +29234,18 @@ class Pointer {
|
|
|
29219
29234
|
if (hasMoved ?? true) {
|
|
29220
29235
|
this.pinch(e);
|
|
29221
29236
|
}
|
|
29237
|
+
// If inside, capture touch-drag and display tooltip. If not
|
|
29238
|
+
// inside, allow dragging the finger to scroll the page
|
|
29239
|
+
if (this.hasPointerCapture && // #25095
|
|
29240
|
+
e.type === 'touchmove' &&
|
|
29241
|
+
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29242
|
+
e.preventDefault();
|
|
29243
|
+
}
|
|
29222
29244
|
}
|
|
29223
29245
|
else if (start) {
|
|
29224
29246
|
// Hide the tooltip on touching outside the plot area (#1203)
|
|
29225
29247
|
this.reset();
|
|
29226
29248
|
}
|
|
29227
|
-
// If inside, capture touch-drag and display tooltip. If not inside,
|
|
29228
|
-
// allow dragging the finger to scroll the page
|
|
29229
|
-
if ((chart.tooltip?.options.followTouchMove ?? true) &&
|
|
29230
|
-
isInside &&
|
|
29231
|
-
e.type === 'touchmove' &&
|
|
29232
|
-
!(chart.scrollablePixelsX || chart.scrollablePixelsY)) {
|
|
29233
|
-
e.preventDefault();
|
|
29234
|
-
}
|
|
29235
29249
|
}
|
|
29236
29250
|
else if (e.touches.length === 2) {
|
|
29237
29251
|
this.pinch(e);
|
|
@@ -29631,13 +29645,19 @@ const { setLength: DataTableCore_setLength, splice: DataTableCore_splice } = Dat
|
|
|
29631
29645
|
class DataTableCore {
|
|
29632
29646
|
constructor(options = {}) {
|
|
29633
29647
|
this.isDataTable = true;
|
|
29634
|
-
|
|
29648
|
+
// Reject IDs that would pollute the prototype of ID-keyed maps.
|
|
29649
|
+
const id = this.isPollutingKey(options.id) ? void 0 : options.id;
|
|
29650
|
+
this.autoId = !id;
|
|
29635
29651
|
this.columns = {};
|
|
29636
|
-
this.id = (
|
|
29652
|
+
this.id = (id || uniqueKey());
|
|
29637
29653
|
this.rowCount = 0;
|
|
29638
29654
|
this.versionTag = uniqueKey();
|
|
29639
29655
|
let rowCount = 0;
|
|
29640
29656
|
objectEach(options.columns || {}, (column, columnId) => {
|
|
29657
|
+
if (columnId === '__proto__' ||
|
|
29658
|
+
columnId === 'constructor') {
|
|
29659
|
+
return;
|
|
29660
|
+
}
|
|
29641
29661
|
this.columns[columnId] = column.slice();
|
|
29642
29662
|
rowCount = Math.max(rowCount, column.length);
|
|
29643
29663
|
});
|
|
@@ -29648,6 +29668,17 @@ class DataTableCore {
|
|
|
29648
29668
|
* Functions
|
|
29649
29669
|
*
|
|
29650
29670
|
* */
|
|
29671
|
+
/**
|
|
29672
|
+
* Checks whether a key would pollute the prototype if used to index a
|
|
29673
|
+
* plain object (e.g. as a column ID or table ID).
|
|
29674
|
+
*
|
|
29675
|
+
* @private
|
|
29676
|
+
* @param {string|undefined} key The key to check.
|
|
29677
|
+
* @return {boolean} True if the key is unsafe to use.
|
|
29678
|
+
*/
|
|
29679
|
+
isPollutingKey(key) {
|
|
29680
|
+
return key === '__proto__' || key === 'constructor';
|
|
29681
|
+
}
|
|
29651
29682
|
/**
|
|
29652
29683
|
* Applies a row count to the table by setting the `rowCount` property and
|
|
29653
29684
|
* adjusting the length of all columns.
|
|
@@ -29806,6 +29837,10 @@ class DataTableCore {
|
|
|
29806
29837
|
setColumns(columns, rowIndex, eventDetail) {
|
|
29807
29838
|
let rowCount = this.rowCount;
|
|
29808
29839
|
objectEach(columns, (column, columnId) => {
|
|
29840
|
+
if (columnId === '__proto__' ||
|
|
29841
|
+
columnId === 'constructor') {
|
|
29842
|
+
return;
|
|
29843
|
+
}
|
|
29809
29844
|
this.columns[columnId] = column.slice();
|
|
29810
29845
|
rowCount = column.length;
|
|
29811
29846
|
});
|
|
@@ -29844,11 +29879,14 @@ class DataTableCore {
|
|
|
29844
29879
|
* @emits #afterSetRows
|
|
29845
29880
|
*/
|
|
29846
29881
|
setRow(row, rowIndex = this.rowCount, insert, eventDetail) {
|
|
29847
|
-
var _a;
|
|
29848
29882
|
const { columns } = this, indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1, rowKeys = Object.keys(row);
|
|
29849
29883
|
if (eventDetail?.addColumns !== false) {
|
|
29850
29884
|
for (let i = 0, iEnd = rowKeys.length; i < iEnd; i++) {
|
|
29851
|
-
|
|
29885
|
+
const rowKey = rowKeys[i];
|
|
29886
|
+
if (!this.isPollutingKey(rowKey) &&
|
|
29887
|
+
!Object.hasOwnProperty.call(columns, rowKey)) {
|
|
29888
|
+
columns[rowKey] = new Array(this.rowCount);
|
|
29889
|
+
}
|
|
29852
29890
|
}
|
|
29853
29891
|
}
|
|
29854
29892
|
objectEach(columns, (column, columnId) => {
|
|
@@ -33828,7 +33866,19 @@ class Series {
|
|
|
33828
33866
|
.optionsToObject
|
|
33829
33867
|
.call({ series: this }, data[i]);
|
|
33830
33868
|
for (const key of Object.keys(ptOptions)) {
|
|
33831
|
-
|
|
33869
|
+
// Assigning these would write through to
|
|
33870
|
+
// `Object.prototype` or the `Object` constructor instead
|
|
33871
|
+
// of creating a column, and thereby affect unrelated
|
|
33872
|
+
// objects on the page
|
|
33873
|
+
if (key === '__proto__' || key === 'constructor') {
|
|
33874
|
+
continue;
|
|
33875
|
+
}
|
|
33876
|
+
// Inherited keys like `toString` are truthy without being
|
|
33877
|
+
// columns of ours, so test for an own property rather
|
|
33878
|
+
// than for a value (#25321)
|
|
33879
|
+
if (!Object.hasOwnProperty.call(columns, key)) {
|
|
33880
|
+
columns[key] = new Array(dataLength);
|
|
33881
|
+
}
|
|
33832
33882
|
columns[key][i] = ptOptions[key];
|
|
33833
33883
|
}
|
|
33834
33884
|
}
|
|
@@ -34481,7 +34531,7 @@ class Series {
|
|
|
34481
34531
|
// Apply plotBorderRadius clipping
|
|
34482
34532
|
plotClipGroup?.clip(
|
|
34483
34533
|
// Navigator y-axis is not clippable
|
|
34484
|
-
clip && this.yAxis
|
|
34534
|
+
clip && this.yAxis?.clippable ?
|
|
34485
34535
|
chart.plotClipInner :
|
|
34486
34536
|
void 0);
|
|
34487
34537
|
}
|
|
@@ -34784,28 +34834,27 @@ class Series {
|
|
|
34784
34834
|
* @emits Highcharts.Series#event:destroy
|
|
34785
34835
|
*/
|
|
34786
34836
|
destroy(keepEventsForUpdate) {
|
|
34787
|
-
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent)
|
|
34788
|
-
let destroy,
|
|
34837
|
+
const series = this, chart = series.chart, issue134 = /AppleWebKit\/533/.test(Series_win.navigator.userAgent);
|
|
34838
|
+
let destroy, axis;
|
|
34789
34839
|
// Add event hook
|
|
34790
34840
|
fireEvent(series, 'destroy', { keepEventsForUpdate });
|
|
34791
34841
|
// Remove events
|
|
34792
34842
|
this.removeEvents(keepEventsForUpdate);
|
|
34793
34843
|
// Erase from axes
|
|
34794
|
-
(series.axisTypes || [])
|
|
34795
|
-
axis = series[
|
|
34844
|
+
for (const coll of (series.axisTypes || [])) {
|
|
34845
|
+
axis = series[coll];
|
|
34796
34846
|
if (axis?.series) {
|
|
34797
34847
|
erase(axis.series, series);
|
|
34798
34848
|
axis.isDirty = axis.forceRedraw = true;
|
|
34799
34849
|
}
|
|
34800
|
-
}
|
|
34850
|
+
}
|
|
34801
34851
|
// Remove legend items
|
|
34802
34852
|
if (series.legendItem) {
|
|
34803
34853
|
series.chart.legend.destroyItem(series);
|
|
34804
34854
|
}
|
|
34805
34855
|
// Destroy all points with their elements
|
|
34806
|
-
|
|
34807
|
-
|
|
34808
|
-
data[i]?.destroy?.(true);
|
|
34856
|
+
for (const point of series.points || []) {
|
|
34857
|
+
point?.destroy?.(true);
|
|
34809
34858
|
}
|
|
34810
34859
|
for (const zone of series.zones || []) {
|
|
34811
34860
|
// Destroy SVGElement's but preserve primitive props (#20426)
|
|
@@ -38944,7 +38993,10 @@ class Chart {
|
|
|
38944
38993
|
elem = this.renderer.text(options.text, 0, 0, options.useHTML)
|
|
38945
38994
|
.attr({
|
|
38946
38995
|
align: options.align,
|
|
38947
|
-
'class':
|
|
38996
|
+
'class': [
|
|
38997
|
+
options.className,
|
|
38998
|
+
'highcharts-' + key
|
|
38999
|
+
].filter(isString).join(' '),
|
|
38948
39000
|
zIndex: options.zIndex || 4
|
|
38949
39001
|
})
|
|
38950
39002
|
.css({
|
|
@@ -39949,7 +40001,7 @@ class Chart {
|
|
|
39949
40001
|
if (label &&
|
|
39950
40002
|
(labels.reserveSpace ?? !isNumber(options.crossing))) {
|
|
39951
40003
|
expectedSpace = label.getBBox().height +
|
|
39952
|
-
labels.distance +
|
|
40004
|
+
(labels.distance ?? 15) +
|
|
39953
40005
|
Math.max(isNumber(offset) ? offset : 0, 0);
|
|
39954
40006
|
}
|
|
39955
40007
|
if (expectedSpace) {
|
|
@@ -40037,6 +40089,12 @@ class Chart {
|
|
|
40037
40089
|
addCredits(credits) {
|
|
40038
40090
|
const chart = this, creds = merge(true, this.options.credits, credits);
|
|
40039
40091
|
if (creds.enabled && !this.credits) {
|
|
40092
|
+
// Run the user-supplied URL through the allow list, so that
|
|
40093
|
+
// references like `javascript:` can't be executed from the
|
|
40094
|
+
// credits label
|
|
40095
|
+
const href = creds.href ?
|
|
40096
|
+
HTML_AST.filterUserAttributes({ href: creds.href }).href :
|
|
40097
|
+
void 0;
|
|
40040
40098
|
/**
|
|
40041
40099
|
* The chart's credits label. The label has an `update` method that
|
|
40042
40100
|
* allows setting new options as per the
|
|
@@ -40050,8 +40108,8 @@ class Chart {
|
|
|
40050
40108
|
.on('click', function (e) {
|
|
40051
40109
|
// Fire the event with browser redirect as default function
|
|
40052
40110
|
fireEvent(chart, 'creditsClick', e, () => {
|
|
40053
|
-
if (
|
|
40054
|
-
Chart_win.location.href =
|
|
40111
|
+
if (href) {
|
|
40112
|
+
Chart_win.location.href = href;
|
|
40055
40113
|
}
|
|
40056
40114
|
});
|
|
40057
40115
|
})
|
|
@@ -41668,14 +41726,11 @@ class StackItem {
|
|
|
41668
41726
|
*
|
|
41669
41727
|
* */
|
|
41670
41728
|
/** @internal */
|
|
41671
|
-
constructor(axis,
|
|
41672
|
-
const inverted = axis.chart.inverted, reversed = axis.reversed;
|
|
41729
|
+
constructor(axis, negativeValue, x, stackOption) {
|
|
41673
41730
|
this.axis = axis;
|
|
41674
41731
|
// The stack goes to the left either if the stack has negative value
|
|
41675
41732
|
// or when axis is reversed. XOR operator.
|
|
41676
|
-
|
|
41677
|
-
// Save the options to be able to style the label
|
|
41678
|
-
this.options = options = options || {};
|
|
41733
|
+
this.negativeValue = negativeValue;
|
|
41679
41734
|
// Save the x value to be able to position the label later
|
|
41680
41735
|
this.x = x;
|
|
41681
41736
|
// Initialize total value
|
|
@@ -41690,20 +41745,6 @@ class StackItem {
|
|
|
41690
41745
|
this.stack = stackOption;
|
|
41691
41746
|
this.leftCliff = 0;
|
|
41692
41747
|
this.rightCliff = 0;
|
|
41693
|
-
// The align options and text align varies on whether the stack is
|
|
41694
|
-
// negative and if the chart is inverted or not.
|
|
41695
|
-
// First test the user supplied value, then use the dynamic.
|
|
41696
|
-
this.alignOptions = {
|
|
41697
|
-
align: options.align ||
|
|
41698
|
-
(inverted ? (isNegative ? 'left' : 'right') : 'center'),
|
|
41699
|
-
verticalAlign: options.verticalAlign ||
|
|
41700
|
-
(inverted ? 'middle' : isNegative ? 'bottom' : 'top'),
|
|
41701
|
-
y: options.y,
|
|
41702
|
-
x: options.x
|
|
41703
|
-
};
|
|
41704
|
-
this.textAlign =
|
|
41705
|
-
options.textAlign ||
|
|
41706
|
-
(inverted ? (!isNegative ? 'left' : 'right') : 'center');
|
|
41707
41748
|
}
|
|
41708
41749
|
/* *
|
|
41709
41750
|
*
|
|
@@ -41719,39 +41760,34 @@ class StackItem {
|
|
|
41719
41760
|
* @internal
|
|
41720
41761
|
*/
|
|
41721
41762
|
render(group) {
|
|
41722
|
-
const
|
|
41763
|
+
const axis = this.axis, chart = axis.chart, options = axis.options.stackLabels || {}, formatOption = options.format,
|
|
41723
41764
|
// Format the text in the label.
|
|
41724
|
-
|
|
41765
|
+
text = (formatOption ?
|
|
41725
41766
|
StackItem_format(formatOption, this, chart) :
|
|
41726
|
-
options.formatter?.call(this, this)) || '';
|
|
41727
|
-
//
|
|
41728
|
-
|
|
41729
|
-
|
|
41730
|
-
|
|
41767
|
+
options.formatter?.call(this, this)) || '', verb = this.label ? 'animate' : 'attr';
|
|
41768
|
+
// Create new label
|
|
41769
|
+
this.label || (this.label = chart.renderer.label(text, 0, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels'));
|
|
41770
|
+
const label = this.label, animatableAttribs = {
|
|
41771
|
+
r: options.borderRadius || 0,
|
|
41772
|
+
// Set default padding to 5 as it is in dataLabels #12308
|
|
41773
|
+
padding: (options.padding ?? 5)
|
|
41774
|
+
};
|
|
41775
|
+
if (!chart.styledMode) {
|
|
41776
|
+
animatableAttribs.fill = options.backgroundColor;
|
|
41777
|
+
animatableAttribs.stroke = options.borderColor;
|
|
41778
|
+
animatableAttribs['stroke-width'] = options.borderWidth;
|
|
41779
|
+
label.css(options.style || {});
|
|
41731
41780
|
}
|
|
41732
|
-
|
|
41733
|
-
|
|
41734
|
-
|
|
41735
|
-
|
|
41736
|
-
|
|
41737
|
-
|
|
41738
|
-
|
|
41739
|
-
padding: (options.padding ?? 5),
|
|
41740
|
-
visibility: 'hidden' // Hidden until setOffset is called
|
|
41741
|
-
};
|
|
41742
|
-
if (!chart.styledMode) {
|
|
41743
|
-
attr.fill = options.backgroundColor;
|
|
41744
|
-
attr.stroke = options.borderColor;
|
|
41745
|
-
attr['stroke-width'] = options.borderWidth;
|
|
41746
|
-
this.label.css(options.style || {});
|
|
41747
|
-
}
|
|
41748
|
-
this.label.attr(attr);
|
|
41749
|
-
if (!this.label.added) {
|
|
41750
|
-
this.label.add(group); // Add to the labels-group
|
|
41751
|
-
}
|
|
41781
|
+
label
|
|
41782
|
+
.attr({
|
|
41783
|
+
text,
|
|
41784
|
+
visibility: 'hidden' // Hidden until setOffset is called
|
|
41785
|
+
})[verb](animatableAttribs);
|
|
41786
|
+
if (!label.added) {
|
|
41787
|
+
label.add(group); // Add to the labels-group
|
|
41752
41788
|
}
|
|
41753
41789
|
// Rank it higher than data labels (#8742)
|
|
41754
|
-
|
|
41790
|
+
label.labelrank = chart.plotSizeY;
|
|
41755
41791
|
fireEvent(this, 'afterRender');
|
|
41756
41792
|
}
|
|
41757
41793
|
/**
|
|
@@ -41760,35 +41796,38 @@ class StackItem {
|
|
|
41760
41796
|
* @internal
|
|
41761
41797
|
*/
|
|
41762
41798
|
setOffset(xOffset, width, boxBottom, boxTop, defaultX, xAxis) {
|
|
41763
|
-
const {
|
|
41764
|
-
xOffset,
|
|
41765
|
-
width,
|
|
41799
|
+
const { axis, label } = this, chart = axis.chart, options = axis.options.stackLabels || {}, inverted = chart.inverted, isNegative = this.negativeValue !== !!axis.reversed, stackBox = this.getStackBox({
|
|
41766
41800
|
boxBottom,
|
|
41767
41801
|
boxTop,
|
|
41768
41802
|
defaultX,
|
|
41769
|
-
|
|
41770
|
-
|
|
41803
|
+
isNegative,
|
|
41804
|
+
width,
|
|
41805
|
+
xAxis,
|
|
41806
|
+
xOffset
|
|
41807
|
+
}), { align = (inverted ? (isNegative ? 'left' : 'right') : 'center'), verticalAlign = (inverted ? 'middle' : isNegative ? 'bottom' : 'top'), textAlign = (inverted ? (!isNegative ? 'left' : 'right') : 'center'), x = 0, y = 0 } = options, alignOptions = {
|
|
41808
|
+
align,
|
|
41809
|
+
verticalAlign,
|
|
41810
|
+
x,
|
|
41811
|
+
y
|
|
41812
|
+
};
|
|
41771
41813
|
if (label && stackBox) {
|
|
41772
41814
|
const labelBox = label.getBBox(void 0, 0), padding = label.padding;
|
|
41773
41815
|
let isJustify = (options.overflow ?? 'justify') === 'justify', visible;
|
|
41774
|
-
// Reset alignOptions property after justify #12337
|
|
41775
|
-
alignOptions.x = options.x || 0;
|
|
41776
|
-
alignOptions.y = options.y || 0;
|
|
41777
41816
|
// Calculate the adjusted Stack position, to take into consideration
|
|
41778
|
-
//
|
|
41779
|
-
//
|
|
41780
|
-
//
|
|
41781
|
-
const { x, y } = this.adjustStackPosition({
|
|
41817
|
+
// the size if the labelBox and vertical alignment as well as the
|
|
41818
|
+
// text alignment. It needs to be done to work with default
|
|
41819
|
+
// SVGLabel.align/justify methods.
|
|
41820
|
+
const { x: adjustX, y: adjustY } = this.adjustStackPosition({
|
|
41782
41821
|
labelBox,
|
|
41783
41822
|
verticalAlign,
|
|
41784
41823
|
textAlign
|
|
41785
41824
|
});
|
|
41786
|
-
stackBox.x -=
|
|
41787
|
-
stackBox.y -=
|
|
41825
|
+
stackBox.x -= adjustX;
|
|
41826
|
+
stackBox.y -= adjustY;
|
|
41788
41827
|
// Align the label to the adjusted box.
|
|
41789
41828
|
label.align(alignOptions, false, stackBox);
|
|
41790
|
-
// Check if label is inside the plotArea #12294
|
|
41791
|
-
visible = chart.isInsidePlot(label.alignAttr.x +
|
|
41829
|
+
// Check if the label is inside the plotArea #12294
|
|
41830
|
+
visible = chart.isInsidePlot(label.alignAttr.x + x + adjustX, label.alignAttr.y + y + adjustY);
|
|
41792
41831
|
if (!visible) {
|
|
41793
41832
|
isJustify = false;
|
|
41794
41833
|
}
|
|
@@ -41796,11 +41835,8 @@ class StackItem {
|
|
|
41796
41835
|
// Justify stackLabel into the alignBox
|
|
41797
41836
|
StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);
|
|
41798
41837
|
}
|
|
41799
|
-
// Add
|
|
41800
|
-
// Also add correct rotation with its rotation origin. #15129
|
|
41838
|
+
// Add correct rotation with its rotation origin (#15129)
|
|
41801
41839
|
label.attr({
|
|
41802
|
-
x: label.alignAttr.x,
|
|
41803
|
-
y: label.alignAttr.y,
|
|
41804
41840
|
rotation: options.rotation,
|
|
41805
41841
|
rotationOriginX: labelBox.width *
|
|
41806
41842
|
getAlignFactor(options.textAlign || 'center'),
|
|
@@ -41839,22 +41875,22 @@ class StackItem {
|
|
|
41839
41875
|
* The x, y, height, width of the stack.
|
|
41840
41876
|
*/
|
|
41841
41877
|
getStackBox(stackBoxProps) {
|
|
41842
|
-
const
|
|
41878
|
+
const axis = this.axis, chart = axis.chart, { boxBottom, boxTop, defaultX, isNegative, width, xOffset } = stackBoxProps, totalStackValue = axis.stacking.usePercentage ?
|
|
41843
41879
|
100 :
|
|
41844
41880
|
(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 ||
|
|
41845
41881
|
(isNumber(axis.min) &&
|
|
41846
41882
|
axis.logarithmic &&
|
|
41847
41883
|
axis.logarithmic.lin2log(axis.min)) ||
|
|
41848
|
-
0), height = Math.abs(y - yZero), inverted = chart.inverted
|
|
41884
|
+
0), height = Math.abs(y - yZero), inverted = chart.inverted;
|
|
41849
41885
|
return inverted ?
|
|
41850
41886
|
{
|
|
41851
|
-
x: (
|
|
41887
|
+
x: (isNegative ? y : y - height) - chart.plotLeft,
|
|
41852
41888
|
y: xAxis.height - x - width + xAxis.top - chart.plotTop,
|
|
41853
41889
|
width: height,
|
|
41854
41890
|
height: width
|
|
41855
41891
|
} : {
|
|
41856
41892
|
x: x + xAxis.transB - chart.plotLeft,
|
|
41857
|
-
y: (
|
|
41893
|
+
y: (isNegative ? y - height : y) - chart.plotTop,
|
|
41858
41894
|
width: width,
|
|
41859
41895
|
height: height
|
|
41860
41896
|
};
|
|
@@ -41890,10 +41926,6 @@ class StackItem {
|
|
|
41890
41926
|
* @name Highcharts.StackItemObject#cumulative
|
|
41891
41927
|
* @type {number}
|
|
41892
41928
|
*/ /**
|
|
41893
|
-
* True if on the negative side
|
|
41894
|
-
* @name Highcharts.StackItemObject#isNegative
|
|
41895
|
-
* @type {boolean}
|
|
41896
|
-
*/ /**
|
|
41897
41929
|
* Related SVG element
|
|
41898
41930
|
* @name Highcharts.StackItemObject#label
|
|
41899
41931
|
* @type {Highcharts.SVGElement}
|
|
@@ -42110,7 +42142,7 @@ function seriesSetStackedPoints(axis, stackingParam) {
|
|
|
42110
42142
|
stacks[key][x].total = null;
|
|
42111
42143
|
}
|
|
42112
42144
|
else {
|
|
42113
|
-
stacks[key][x] = new Stacking_StackItem(axis,
|
|
42145
|
+
stacks[key][x] = new Stacking_StackItem(axis, !!isNegative, x, stackOption);
|
|
42114
42146
|
}
|
|
42115
42147
|
}
|
|
42116
42148
|
// If the StackItem doesn't exist, create it first
|
|
@@ -42267,29 +42299,41 @@ class AxisAdditions {
|
|
|
42267
42299
|
});
|
|
42268
42300
|
});
|
|
42269
42301
|
}
|
|
42270
|
-
/**
|
|
42302
|
+
/**
|
|
42303
|
+
* Create the stack totals group and render the individual labels into it
|
|
42304
|
+
* @internal
|
|
42305
|
+
*/
|
|
42271
42306
|
renderStackTotals() {
|
|
42272
|
-
const stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks,
|
|
42273
|
-
|
|
42274
|
-
|
|
42275
|
-
|
|
42276
|
-
|
|
42277
|
-
|
|
42278
|
-
|
|
42279
|
-
|
|
42280
|
-
|
|
42281
|
-
|
|
42282
|
-
|
|
42283
|
-
|
|
42284
|
-
|
|
42285
|
-
|
|
42286
|
-
|
|
42287
|
-
|
|
42307
|
+
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 ||
|
|
42308
|
+
(enabled ?
|
|
42309
|
+
renderer
|
|
42310
|
+
.g('stack-labels')
|
|
42311
|
+
.attr({
|
|
42312
|
+
zIndex: 6,
|
|
42313
|
+
opacity: 0
|
|
42314
|
+
})
|
|
42315
|
+
.add() :
|
|
42316
|
+
void 0));
|
|
42317
|
+
if (stackTotalGroup) {
|
|
42318
|
+
// The plotLeft/Top will change when y axis gets wider so we need to
|
|
42319
|
+
// translate the stackTotalGroup at every render call. See bug #506
|
|
42320
|
+
// and #516
|
|
42321
|
+
stackTotalGroup.translate(chart.plotLeft, chart.plotTop);
|
|
42322
|
+
// Render each stack total
|
|
42323
|
+
objectEach(stacks, (type) => {
|
|
42324
|
+
objectEach(type, (stack) => {
|
|
42325
|
+
if (enabled) {
|
|
42326
|
+
stack.render(stackTotalGroup);
|
|
42327
|
+
}
|
|
42328
|
+
else {
|
|
42329
|
+
stack.label = stack.label?.destroy();
|
|
42330
|
+
}
|
|
42331
|
+
});
|
|
42288
42332
|
});
|
|
42289
|
-
|
|
42290
|
-
|
|
42291
|
-
|
|
42292
|
-
}
|
|
42333
|
+
stackTotalGroup.animate({
|
|
42334
|
+
opacity: 1
|
|
42335
|
+
}, animationConfig);
|
|
42336
|
+
}
|
|
42293
42337
|
}
|
|
42294
42338
|
}
|
|
42295
42339
|
/* *
|
|
@@ -42611,7 +42655,6 @@ Series_SeriesRegistry.registerSeriesType('line', LineSeries);
|
|
|
42611
42655
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42612
42656
|
*
|
|
42613
42657
|
* @extends series,plotOptions.line
|
|
42614
|
-
* @excluding dataParser,dataURL
|
|
42615
42658
|
* @product highcharts highstock
|
|
42616
42659
|
* @apioption series.line
|
|
42617
42660
|
*/
|
|
@@ -42985,7 +43028,7 @@ const AreaSeriesDefaults = {
|
|
|
42985
43028
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
42986
43029
|
*
|
|
42987
43030
|
* @extends series,plotOptions.area
|
|
42988
|
-
* @excluding
|
|
43031
|
+
* @excluding useOhlcData
|
|
42989
43032
|
* @product highcharts highstock
|
|
42990
43033
|
* @apioption series.area
|
|
42991
43034
|
*/
|
|
@@ -43622,7 +43665,7 @@ Series_SeriesRegistry.registerSeriesType('spline', SplineSeries);
|
|
|
43622
43665
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
43623
43666
|
*
|
|
43624
43667
|
* @extends series,plotOptions.spline
|
|
43625
|
-
* @excluding
|
|
43668
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43626
43669
|
* @product highcharts highstock
|
|
43627
43670
|
* @apioption series.spline
|
|
43628
43671
|
*/
|
|
@@ -43784,7 +43827,7 @@ Series_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);
|
|
|
43784
43827
|
*
|
|
43785
43828
|
*
|
|
43786
43829
|
* @extends series,plotOptions.areaspline
|
|
43787
|
-
* @excluding
|
|
43830
|
+
* @excluding step, boostThreshold, boostBlending
|
|
43788
43831
|
* @product highcharts highstock
|
|
43789
43832
|
* @apioption series.areaspline
|
|
43790
43833
|
*/
|
|
@@ -44061,13 +44104,16 @@ const ColumnSeriesDefaults = {
|
|
|
44061
44104
|
* The minimal height for a column or width for a bar. By default,
|
|
44062
44105
|
* 0 values are not shown. To visualize a 0 (or close to zero) point,
|
|
44063
44106
|
* set the minimal point length to a pixel value like 3\. In stacked
|
|
44064
|
-
* column charts,
|
|
44065
|
-
* packed values.
|
|
44107
|
+
* column charts, the length is applied to each point in isolation, so
|
|
44108
|
+
* tightly packed values may overlap. See the stacked sample below for a
|
|
44109
|
+
* plugin that lays out the stack as a whole instead.
|
|
44066
44110
|
*
|
|
44067
44111
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength/
|
|
44068
44112
|
* Zero base value
|
|
44069
44113
|
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/
|
|
44070
44114
|
* Positive and negative close to zero values
|
|
44115
|
+
* @sample {highcharts} highcharts/plotoptions/column-minpointlength-stacked/
|
|
44116
|
+
* Stack-aware minimum length
|
|
44071
44117
|
*
|
|
44072
44118
|
* @product highcharts highstock gantt
|
|
44073
44119
|
*/
|
|
@@ -44238,7 +44284,7 @@ const ColumnSeriesDefaults = {
|
|
|
44238
44284
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
44239
44285
|
*
|
|
44240
44286
|
* @extends series,plotOptions.column
|
|
44241
|
-
* @excluding connectNulls,
|
|
44287
|
+
* @excluding connectNulls, gapSize, gapUnit, linecap,
|
|
44242
44288
|
* lineWidth, marker, connectEnds, step
|
|
44243
44289
|
* @product highcharts highstock
|
|
44244
44290
|
* @apioption series.column
|
|
@@ -45882,7 +45928,7 @@ Series_SeriesRegistry.registerSeriesType('bar', BarSeries);
|
|
|
45882
45928
|
* it is inherited from [chart.type](#chart.type).
|
|
45883
45929
|
*
|
|
45884
45930
|
* @extends series,plotOptions.bar
|
|
45885
|
-
* @excluding connectNulls, dashStyle,
|
|
45931
|
+
* @excluding connectNulls, dashStyle, gapSize, gapUnit,
|
|
45886
45932
|
* linecap, lineWidth, marker, connectEnds, step
|
|
45887
45933
|
* @product highcharts
|
|
45888
45934
|
* @apioption series.bar
|
|
@@ -46083,7 +46129,7 @@ const ScatterSeriesDefaults = {
|
|
|
46083
46129
|
* not specified, it is inherited from [chart.type](#chart.type).
|
|
46084
46130
|
*
|
|
46085
46131
|
* @extends series,plotOptions.scatter
|
|
46086
|
-
* @excluding cropThreshold,
|
|
46132
|
+
* @excluding cropThreshold, useOhlcData
|
|
46087
46133
|
* @product highcharts highstock
|
|
46088
46134
|
* @apioption series.scatter
|
|
46089
46135
|
*/
|
|
@@ -47185,7 +47231,7 @@ const PieSeriesDefaults = {
|
|
|
47185
47231
|
* it is inherited from [chart.type](#chart.type).
|
|
47186
47232
|
*
|
|
47187
47233
|
* @extends series,plotOptions.pie
|
|
47188
|
-
* @excluding cropThreshold,
|
|
47234
|
+
* @excluding cropThreshold, linkedTo, stack, xAxis, yAxis,
|
|
47189
47235
|
* dataSorting, step, boostThreshold, boostBlending
|
|
47190
47236
|
* @product highcharts highmaps
|
|
47191
47237
|
* @apioption series.pie
|
|
@@ -48286,6 +48332,7 @@ var GeometryUtilities;
|
|
|
48286
48332
|
* */
|
|
48287
48333
|
|
|
48288
48334
|
|
|
48335
|
+
|
|
48289
48336
|
const { pointInPolygon } = Geometry_GeometryUtilities;
|
|
48290
48337
|
|
|
48291
48338
|
/* *
|
|
@@ -48426,30 +48473,34 @@ function composeOverlappingDataLabels(ChartClass) {
|
|
|
48426
48473
|
* Whether label is affected
|
|
48427
48474
|
*/
|
|
48428
48475
|
function hideOrShow(label, chart) {
|
|
48429
|
-
let
|
|
48476
|
+
let isLabelAffected = false;
|
|
48430
48477
|
if (label) {
|
|
48431
|
-
newOpacity = label.newOpacity;
|
|
48478
|
+
const newOpacity = label.newOpacity, isDataLabel = label.hasClass('highcharts-data-label');
|
|
48479
|
+
// For tick labels, we need to stop running animations otherwise they
|
|
48480
|
+
// may continue to run after we set the new opacity
|
|
48481
|
+
if (!isDataLabel) {
|
|
48482
|
+
stop(label, 'opacity');
|
|
48483
|
+
}
|
|
48432
48484
|
if (label.oldOpacity !== newOpacity) {
|
|
48433
48485
|
// Toggle data labels
|
|
48434
|
-
if (
|
|
48486
|
+
if (isDataLabel) {
|
|
48435
48487
|
// Make sure the label is completely hidden to avoid catching
|
|
48436
48488
|
// clicks (#4362)
|
|
48437
48489
|
label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');
|
|
48438
|
-
|
|
48490
|
+
isLabelAffected = true;
|
|
48491
|
+
// Animate or set the opacity
|
|
48492
|
+
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, () => {
|
|
48439
48493
|
if (!chart.styledMode) {
|
|
48440
48494
|
label.css({
|
|
48441
48495
|
pointerEvents: newOpacity ? 'auto' : 'none'
|
|
48442
48496
|
});
|
|
48443
48497
|
}
|
|
48444
|
-
};
|
|
48445
|
-
isLabelAffected = true;
|
|
48446
|
-
// Animate or set the opacity
|
|
48447
|
-
label[label.isOld || label.placed ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);
|
|
48498
|
+
});
|
|
48448
48499
|
fireEvent(chart, 'afterHideOverlappingLabel');
|
|
48449
|
-
// Toggle other labels
|
|
48500
|
+
// Toggle other labels - tick labels, stack labels
|
|
48450
48501
|
}
|
|
48451
48502
|
else {
|
|
48452
|
-
label.attr({
|
|
48503
|
+
label[label.placed ? 'animate' : 'attr']({
|
|
48453
48504
|
opacity: newOpacity
|
|
48454
48505
|
});
|
|
48455
48506
|
}
|
|
@@ -48465,25 +48516,37 @@ function hideOrShow(label, chart) {
|
|
|
48465
48516
|
* @internal
|
|
48466
48517
|
*/
|
|
48467
48518
|
function OverlappingDataLabels_onChartRender() {
|
|
48468
|
-
const chart = this
|
|
48519
|
+
const chart = this,
|
|
48520
|
+
// Helper function for data labels and stack labels when dynamicly
|
|
48521
|
+
// toggling the allowOverlap option
|
|
48522
|
+
toggle = (label, allowOverlap) => {
|
|
48523
|
+
// Allow overlap, reset opacity and show
|
|
48524
|
+
if (allowOverlap) {
|
|
48525
|
+
label.oldOpacity = label.opacity;
|
|
48526
|
+
label.newOpacity = 1;
|
|
48527
|
+
hideOrShow(label, chart);
|
|
48528
|
+
// Do not allow overlap
|
|
48529
|
+
}
|
|
48530
|
+
else {
|
|
48531
|
+
labels.push(label);
|
|
48532
|
+
}
|
|
48533
|
+
};
|
|
48469
48534
|
let labels = [];
|
|
48470
48535
|
// Consider external label collectors
|
|
48471
48536
|
for (const collector of (chart.labelCollectors || [])) {
|
|
48472
48537
|
labels = labels.concat(collector());
|
|
48473
48538
|
}
|
|
48474
|
-
|
|
48475
|
-
|
|
48476
|
-
|
|
48477
|
-
|
|
48478
|
-
|
|
48479
|
-
|
|
48480
|
-
|
|
48481
|
-
labels.push(stackItem.label);
|
|
48482
|
-
}
|
|
48483
|
-
});
|
|
48539
|
+
// Stack labels
|
|
48540
|
+
for (const { options, stacking } of (chart.yAxis || [])) {
|
|
48541
|
+
objectEach(stacking?.stacks, (stack) => {
|
|
48542
|
+
objectEach(stack, ({ label }) => {
|
|
48543
|
+
if (label) {
|
|
48544
|
+
toggle(label, options.stackLabels?.allowOverlap);
|
|
48545
|
+
}
|
|
48484
48546
|
});
|
|
48485
|
-
}
|
|
48547
|
+
});
|
|
48486
48548
|
}
|
|
48549
|
+
// Series data labels
|
|
48487
48550
|
for (const series of (chart.series || [])) {
|
|
48488
48551
|
if (series.visible && series.hasDataLabels?.()) { // #3866
|
|
48489
48552
|
const push = (points) => {
|
|
@@ -48512,21 +48575,13 @@ function OverlappingDataLabels_onChartRender() {
|
|
|
48512
48575
|
}
|
|
48513
48576
|
*/
|
|
48514
48577
|
// Allow overlap if the option is explicitly true
|
|
48515
|
-
|
|
48578
|
+
toggle(label, (
|
|
48516
48579
|
// #13449
|
|
48517
48580
|
options.allowOverlap ??
|
|
48518
48581
|
// Pie labels outside have a separate placement
|
|
48519
48582
|
// logic, skip the overlap logic
|
|
48520
48583
|
(series.is('pie') &&
|
|
48521
|
-
Number(options.distance) > 0))
|
|
48522
|
-
label.oldOpacity = label.opacity;
|
|
48523
|
-
label.newOpacity = 1;
|
|
48524
|
-
hideOrShow(label, chart);
|
|
48525
|
-
// Do not allow overlap
|
|
48526
|
-
}
|
|
48527
|
-
else {
|
|
48528
|
-
labels.push(label);
|
|
48529
|
-
}
|
|
48584
|
+
Number(options.distance) > 0)));
|
|
48530
48585
|
});
|
|
48531
48586
|
}
|
|
48532
48587
|
}
|
|
@@ -49202,7 +49257,7 @@ var Responsive;
|
|
|
49202
49257
|
;// ./code/es-modules/masters/highcharts.src.js
|
|
49203
49258
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
49204
49259
|
/**
|
|
49205
|
-
* @license Highcharts JS v13.0
|
|
49260
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
49206
49261
|
* @module highcharts/highcharts
|
|
49207
49262
|
*
|
|
49208
49263
|
* (c) 2009-2026 Highsoft AS
|
|
@@ -49969,7 +50024,8 @@ function compose(ChartClass, NavigatorClass) {
|
|
|
49969
50024
|
const chartProto = ChartClass.prototype;
|
|
49970
50025
|
NavigatorConstructor = NavigatorClass;
|
|
49971
50026
|
chartProto.callbacks.push(onChartCallback);
|
|
49972
|
-
addEvent(ChartClass, 'afterAddSeries',
|
|
50027
|
+
addEvent(ChartClass, 'afterAddSeries', resetBaseSeries);
|
|
50028
|
+
addEvent(ChartClass, 'afterDrillUp', resetBaseSeries);
|
|
49973
50029
|
addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);
|
|
49974
50030
|
addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);
|
|
49975
50031
|
addEvent(ChartClass, 'beforeRender', onChartBeforeRender);
|
|
@@ -49978,13 +50034,12 @@ function compose(ChartClass, NavigatorClass) {
|
|
|
49978
50034
|
}
|
|
49979
50035
|
}
|
|
49980
50036
|
/**
|
|
49981
|
-
*
|
|
50037
|
+
* Reset the base series.
|
|
49982
50038
|
* @internal
|
|
49983
50039
|
*/
|
|
49984
|
-
function
|
|
50040
|
+
function resetBaseSeries() {
|
|
49985
50041
|
if (this.navigator) {
|
|
49986
|
-
|
|
49987
|
-
this.navigator.setBaseSeries(null, false);
|
|
50042
|
+
this.navigator.setBaseSeries(void 0, false);
|
|
49988
50043
|
}
|
|
49989
50044
|
}
|
|
49990
50045
|
/**
|
|
@@ -50133,7 +50188,7 @@ const ChartNavigatorComposition = {
|
|
|
50133
50188
|
* */
|
|
50134
50189
|
|
|
50135
50190
|
|
|
50136
|
-
const { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
|
|
50191
|
+
const { composed: NavigatorAxisComposition_composed, isTouchDevice: NavigatorAxisComposition_isTouchDevice } = Core_Globals;
|
|
50137
50192
|
|
|
50138
50193
|
/* *
|
|
50139
50194
|
*
|
|
@@ -50199,8 +50254,7 @@ class NavigatorAxisAdditions {
|
|
|
50199
50254
|
*
|
|
50200
50255
|
* */
|
|
50201
50256
|
static compose(AxisClass) {
|
|
50202
|
-
if (
|
|
50203
|
-
AxisClass.keepProps.push('navigatorAxis');
|
|
50257
|
+
if (pushUnique(NavigatorAxisComposition_composed, 'Axis.Navigator')) {
|
|
50204
50258
|
addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);
|
|
50205
50259
|
addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);
|
|
50206
50260
|
}
|
|
@@ -51072,6 +51126,9 @@ var ScrollbarAxis;
|
|
|
51072
51126
|
}
|
|
51073
51127
|
});
|
|
51074
51128
|
}
|
|
51129
|
+
else if (axis.scrollbar) {
|
|
51130
|
+
axis.scrollbar = axis.scrollbar.destroy();
|
|
51131
|
+
}
|
|
51075
51132
|
}
|
|
51076
51133
|
/**
|
|
51077
51134
|
* Wrap rendering axis, and update scrollbar if one is created.
|
|
@@ -51209,14 +51266,12 @@ var ScrollbarAxis;
|
|
|
51209
51266
|
*/
|
|
51210
51267
|
const ScrollbarDefaults = {
|
|
51211
51268
|
/**
|
|
51212
|
-
* The height of the scrollbar. If `buttonsEnabled` is true
|
|
51269
|
+
* The height of the scrollbar. If `buttonsEnabled` is true, the height
|
|
51213
51270
|
* also applies to the width of the scroll arrows so that they are always
|
|
51214
51271
|
* squares.
|
|
51215
51272
|
*
|
|
51216
51273
|
* @sample stock/scrollbar/style/
|
|
51217
51274
|
* Non-default height
|
|
51218
|
-
*
|
|
51219
|
-
* @type {number}
|
|
51220
51275
|
*/
|
|
51221
51276
|
height: 10,
|
|
51222
51277
|
/**
|
|
@@ -53523,11 +53578,7 @@ class Navigator {
|
|
|
53523
53578
|
erase(this.chart.axes, this.yAxis);
|
|
53524
53579
|
}
|
|
53525
53580
|
// Destroy series
|
|
53526
|
-
(this.series || [])
|
|
53527
|
-
if (s.destroy) {
|
|
53528
|
-
s.destroy();
|
|
53529
|
-
}
|
|
53530
|
-
});
|
|
53581
|
+
destroyObjectProperties(this.series || []);
|
|
53531
53582
|
// Destroy properties
|
|
53532
53583
|
[
|
|
53533
53584
|
'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
|
|
@@ -53612,7 +53663,6 @@ var OrdinalAxis;
|
|
|
53612
53663
|
axisProto.ordinal2lin = axisProto.val2lin;
|
|
53613
53664
|
addEvent(AxisClass, 'afterInit', onAxisAfterInit);
|
|
53614
53665
|
addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);
|
|
53615
|
-
addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);
|
|
53616
53666
|
addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);
|
|
53617
53667
|
addEvent(ChartClass, 'pan', onChartPan);
|
|
53618
53668
|
addEvent(ChartClass, 'touchpan', onChartPan);
|
|
@@ -53890,20 +53940,6 @@ var OrdinalAxis;
|
|
|
53890
53940
|
}
|
|
53891
53941
|
}
|
|
53892
53942
|
}
|
|
53893
|
-
/**
|
|
53894
|
-
* For ordinal axis, that loads data async, redraw axis after data is
|
|
53895
|
-
* loaded. If we don't do that, axis will have the same extremes as
|
|
53896
|
-
* previously, but ordinal positions won't be calculated. See #10290
|
|
53897
|
-
* @internal
|
|
53898
|
-
*/
|
|
53899
|
-
function onAxisAfterSetScale() {
|
|
53900
|
-
const axis = this;
|
|
53901
|
-
if (axis.horiz && !axis.isDirty) {
|
|
53902
|
-
axis.isDirty = axis.isOrdinal &&
|
|
53903
|
-
axis.chart.navigator &&
|
|
53904
|
-
!axis.chart.navigator.adaptToUpdatedData;
|
|
53905
|
-
}
|
|
53906
|
-
}
|
|
53907
53943
|
/** @internal */
|
|
53908
53944
|
function onAxisInitialAxisTranslation() {
|
|
53909
53945
|
const axis = this;
|
|
@@ -55405,8 +55441,8 @@ function RangeSelectorComposition_onChartUpdate(e) {
|
|
|
55405
55441
|
this.options.rangeSelector.enabled = true;
|
|
55406
55442
|
this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);
|
|
55407
55443
|
}
|
|
55408
|
-
this.extraBottomMargin =
|
|
55409
|
-
this.extraTopMargin =
|
|
55444
|
+
this.extraBottomMargin = void 0;
|
|
55445
|
+
this.extraTopMargin = void 0;
|
|
55410
55446
|
if (rangeSelector) {
|
|
55411
55447
|
const verticalAlign = (optionsRangeSelector &&
|
|
55412
55448
|
optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
|
|
@@ -57272,7 +57308,6 @@ addEvent(Chart_Chart, 'update', function (e) {
|
|
|
57272
57308
|
addEvent(AxisClass, 'afterDrawCrosshair', onAxisAfterDrawCrosshair);
|
|
57273
57309
|
addEvent(AxisClass, 'afterHideCrosshair', onAxisAfterHideCrosshair);
|
|
57274
57310
|
addEvent(AxisClass, 'autoLabelAlign', onAxisAutoLabelAlign);
|
|
57275
|
-
addEvent(AxisClass, 'destroy', onAxisDestroy);
|
|
57276
57311
|
addEvent(AxisClass, 'getPlotLinePath', onAxisGetPlotLinePath);
|
|
57277
57312
|
ChartClass.prototype.setFixedRange = StockChart_setFixedRange;
|
|
57278
57313
|
seriesProto.forceCropping = seriesForceCropping;
|
|
@@ -57449,33 +57484,28 @@ addEvent(Chart_Chart, 'update', function (e) {
|
|
|
57449
57484
|
* @internal
|
|
57450
57485
|
*/
|
|
57451
57486
|
function onAxisAutoLabelAlign(e) {
|
|
57452
|
-
const axis = this, chart = axis.chart, options = axis.options,
|
|
57453
|
-
if
|
|
57454
|
-
|
|
57455
|
-
|
|
57456
|
-
|
|
57457
|
-
if (
|
|
57458
|
-
|
|
57459
|
-
|
|
57460
|
-
|
|
57461
|
-
|
|
57462
|
-
|
|
57463
|
-
|
|
57464
|
-
|
|
57465
|
-
e.align = 'right';
|
|
57466
|
-
e.preventDefault();
|
|
57487
|
+
const axis = this, chart = axis.chart, options = axis.options, labelOptions = options.labels;
|
|
57488
|
+
// Returns true if this is the first yAxis in the pane
|
|
57489
|
+
const isFirstYAxisInPane = () => {
|
|
57490
|
+
let foundOther = false;
|
|
57491
|
+
for (const otherAxis of chart.yAxis) {
|
|
57492
|
+
if (otherAxis === axis && !foundOther) {
|
|
57493
|
+
return true;
|
|
57494
|
+
}
|
|
57495
|
+
if (otherAxis !== axis &&
|
|
57496
|
+
otherAxis.options.top === options.top &&
|
|
57497
|
+
otherAxis.options.height === options.height) {
|
|
57498
|
+
foundOther = true;
|
|
57499
|
+
}
|
|
57467
57500
|
}
|
|
57468
|
-
|
|
57469
|
-
|
|
57470
|
-
|
|
57471
|
-
|
|
57472
|
-
|
|
57473
|
-
|
|
57474
|
-
|
|
57475
|
-
|
|
57476
|
-
(axis.options.top + ',' + axis.options.height));
|
|
57477
|
-
if (key && chart._labelPanes && chart._labelPanes[key] === axis) {
|
|
57478
|
-
delete chart._labelPanes[key];
|
|
57501
|
+
return false;
|
|
57502
|
+
};
|
|
57503
|
+
if (chart.options.isStock &&
|
|
57504
|
+
axis.coll === 'yAxis' &&
|
|
57505
|
+
isFirstYAxisInPane() &&
|
|
57506
|
+
labelOptions.enabled) {
|
|
57507
|
+
e.align = 'right';
|
|
57508
|
+
e.preventDefault();
|
|
57479
57509
|
}
|
|
57480
57510
|
}
|
|
57481
57511
|
/**
|
|
@@ -57483,7 +57513,7 @@ addEvent(Chart_Chart, 'update', function (e) {
|
|
|
57483
57513
|
* @internal
|
|
57484
57514
|
*/
|
|
57485
57515
|
function onAxisGetPlotLinePath(e) {
|
|
57486
|
-
const axis = this, axisOptions = axis.options, series = (
|
|
57516
|
+
const axis = this, axisOptions = axis.options, series = (!axis.series && axis.linkedParent ?
|
|
57487
57517
|
axis.linkedParent.series :
|
|
57488
57518
|
axis.series), { chart, horiz } = axis, renderer = chart.renderer, result = [], { acrossPanes = true, force, translatedValue, value } = e, allPerpendicularAxes = (axis.isXAxis ? chart.yAxis : chart.xAxis) || [], crossingPosName = horiz ? 'top' : 'left', crossingLenName = horiz ? 'height' : 'width', hasCrossingBounds = defined(axisOptions[crossingPosName]) ||
|
|
57489
57519
|
defined(axisOptions[crossingLenName]),
|
|
@@ -57769,8 +57799,7 @@ class HLCPoint extends ColumnPoint {
|
|
|
57769
57799
|
* HLC chart
|
|
57770
57800
|
*
|
|
57771
57801
|
* @extends plotOptions.column
|
|
57772
|
-
* @excluding borderColor, borderRadius, borderWidth, crisp, stacking
|
|
57773
|
-
* stack
|
|
57802
|
+
* @excluding borderColor, borderRadius, borderWidth, crisp, stack, stacking
|
|
57774
57803
|
* @product highstock
|
|
57775
57804
|
* @optionparent plotOptions.hlc
|
|
57776
57805
|
*/
|
|
@@ -57794,10 +57823,6 @@ const HLCSeriesDefaults = {
|
|
|
57794
57823
|
* @product highstock
|
|
57795
57824
|
* @apioption plotOptions.hlc.dataGrouping.approximation
|
|
57796
57825
|
*/
|
|
57797
|
-
/**
|
|
57798
|
-
* @default close
|
|
57799
|
-
* @apioption plotOptions.hlc.colorKey
|
|
57800
|
-
*/
|
|
57801
57826
|
/**
|
|
57802
57827
|
* What type of legend symbol to render for this series. For HLC series,
|
|
57803
57828
|
* the default is `hlc`, a vertical stem with a tick on the right
|
|
@@ -57874,7 +57899,6 @@ const HLCSeriesDefaults = {
|
|
|
57874
57899
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
57875
57900
|
*
|
|
57876
57901
|
* @extends series,plotOptions.hlc
|
|
57877
|
-
* @excluding dataParser, dataURL
|
|
57878
57902
|
* @product highstock
|
|
57879
57903
|
* @apioption series.hlc
|
|
57880
57904
|
*/
|
|
@@ -58351,7 +58375,6 @@ const OHLCSeriesDefaults = {
|
|
|
58351
58375
|
* specified, it is inherited from [chart.type](#chart.type).
|
|
58352
58376
|
*
|
|
58353
58377
|
* @extends series,plotOptions.ohlc
|
|
58354
|
-
* @excluding dataParser, dataURL
|
|
58355
58378
|
* @product highstock
|
|
58356
58379
|
* @apioption series.ohlc
|
|
58357
58380
|
*/
|
|
@@ -58686,7 +58709,7 @@ const CandlestickSeriesDefaults = {
|
|
|
58686
58709
|
*
|
|
58687
58710
|
* @type {*}
|
|
58688
58711
|
* @extends series,plotOptions.candlestick
|
|
58689
|
-
* @excluding
|
|
58712
|
+
* @excluding marker
|
|
58690
58713
|
* @product highstock
|
|
58691
58714
|
* @apioption series.candlestick
|
|
58692
58715
|
*/
|
|
@@ -58888,6 +58911,7 @@ const { column: { prototype: { pointClass: FlagsPoint_ColumnPoint } } } = Series
|
|
|
58888
58911
|
* Class
|
|
58889
58912
|
*
|
|
58890
58913
|
* */
|
|
58914
|
+
/** @internal */
|
|
58891
58915
|
class FlagsPoint extends FlagsPoint_ColumnPoint {
|
|
58892
58916
|
constructor() {
|
|
58893
58917
|
/* *
|
|
@@ -58904,7 +58928,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
|
|
|
58904
58928
|
*
|
|
58905
58929
|
* */
|
|
58906
58930
|
/**
|
|
58907
|
-
* @
|
|
58931
|
+
* @internal
|
|
58908
58932
|
*/
|
|
58909
58933
|
isValid() {
|
|
58910
58934
|
// #9233 - Prevent from treating flags as null points (even if
|
|
@@ -58912,7 +58936,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
|
|
|
58912
58936
|
return isNumber(this.y) || typeof this.y === 'undefined';
|
|
58913
58937
|
}
|
|
58914
58938
|
/**
|
|
58915
|
-
* @
|
|
58939
|
+
* @internal
|
|
58916
58940
|
*/
|
|
58917
58941
|
hasNewShapeType() {
|
|
58918
58942
|
const shape = this.options.shape || this.series.options.shape;
|
|
@@ -58924,6 +58948,7 @@ class FlagsPoint extends FlagsPoint_ColumnPoint {
|
|
|
58924
58948
|
* Default Export
|
|
58925
58949
|
*
|
|
58926
58950
|
* */
|
|
58951
|
+
/** @internal */
|
|
58927
58952
|
/* harmony default export */ const Flags_FlagsPoint = (FlagsPoint);
|
|
58928
58953
|
|
|
58929
58954
|
;// ./code/es-modules/Series/Flags/FlagsSeriesDefaults.js
|
|
@@ -58982,9 +59007,9 @@ const FlagsSeriesDefaults = {
|
|
|
58982
59007
|
* @apioption plotOptions.flags.onKey
|
|
58983
59008
|
*/
|
|
58984
59009
|
/**
|
|
58985
|
-
|
|
58986
|
-
|
|
58987
|
-
|
|
59010
|
+
* What type of legend symbol to render for this series. For flags
|
|
59011
|
+
* series, the default is `flag-icon`, a pole with a pennant.
|
|
59012
|
+
*
|
|
58988
59013
|
* @default flag-icon
|
|
58989
59014
|
* @product highstock
|
|
58990
59015
|
* @apioption plotOptions.flags.legendSymbol
|
|
@@ -59162,7 +59187,7 @@ const FlagsSeriesDefaults = {
|
|
|
59162
59187
|
* `.highcharts-flag-series .highcharts-point` rule.
|
|
59163
59188
|
*
|
|
59164
59189
|
* @type {Highcharts.CSSObject}
|
|
59165
|
-
* @default {"fontSize": "
|
|
59190
|
+
* @default { "color": "var(--highcharts-neutral-color-100)", "fontSize": "0.7em", "fontWeight": "bold" }
|
|
59166
59191
|
* @product highstock
|
|
59167
59192
|
*/
|
|
59168
59193
|
style: {
|
|
@@ -59180,9 +59205,9 @@ const FlagsSeriesDefaults = {
|
|
|
59180
59205
|
*
|
|
59181
59206
|
* @extends series,plotOptions.flags
|
|
59182
59207
|
* @excluding animation, borderColor, borderRadius, borderWidth, colorByPoint,
|
|
59183
|
-
* connectNulls, cropThreshold, dashStyle, dataGrouping,
|
|
59184
|
-
*
|
|
59185
|
-
*
|
|
59208
|
+
* connectNulls, cropThreshold, dashStyle, dataGrouping, gapSize,
|
|
59209
|
+
* gapUnit, linecap, lineWidth, marker, pointPadding, pointWidth,
|
|
59210
|
+
* step, turboThreshold, useOhlcData
|
|
59186
59211
|
* @product highstock
|
|
59187
59212
|
* @apioption series.flags
|
|
59188
59213
|
*/
|
|
@@ -59258,6 +59283,7 @@ const { composed: FlagsSymbols_composed } = Core_Globals;
|
|
|
59258
59283
|
* Composition
|
|
59259
59284
|
*
|
|
59260
59285
|
* */
|
|
59286
|
+
/** @internal */
|
|
59261
59287
|
var FlagsSymbols;
|
|
59262
59288
|
(function (FlagsSymbols) {
|
|
59263
59289
|
/* *
|
|
@@ -59266,7 +59292,7 @@ var FlagsSymbols;
|
|
|
59266
59292
|
*
|
|
59267
59293
|
* */
|
|
59268
59294
|
/**
|
|
59269
|
-
* @
|
|
59295
|
+
* @internal
|
|
59270
59296
|
*/
|
|
59271
59297
|
function compose(SVGRendererClass) {
|
|
59272
59298
|
if (pushUnique(FlagsSymbols_composed, 'Series.Flags')) {
|
|
@@ -59285,7 +59311,7 @@ var FlagsSymbols;
|
|
|
59285
59311
|
FlagsSymbols.compose = compose;
|
|
59286
59312
|
/**
|
|
59287
59313
|
* Create the flag icon with anchor.
|
|
59288
|
-
* @
|
|
59314
|
+
* @internal
|
|
59289
59315
|
*/
|
|
59290
59316
|
function flag(x, y, w, h, options) {
|
|
59291
59317
|
const anchorX = (options && options.anchorX) || x, anchorY = (options && options.anchorY) || y;
|
|
@@ -59295,7 +59321,7 @@ var FlagsSymbols;
|
|
|
59295
59321
|
}
|
|
59296
59322
|
/**
|
|
59297
59323
|
* Create the circlepin and squarepin icons with anchor.
|
|
59298
|
-
* @
|
|
59324
|
+
* @internal
|
|
59299
59325
|
*/
|
|
59300
59326
|
function createPinSymbol(symbols, shape) {
|
|
59301
59327
|
symbols[(shape + 'pin')] = function (x, y, w, h, options) {
|
|
@@ -59346,6 +59372,7 @@ var FlagsSymbols;
|
|
|
59346
59372
|
* Default Export
|
|
59347
59373
|
*
|
|
59348
59374
|
* */
|
|
59375
|
+
/** @internal */
|
|
59349
59376
|
/* harmony default export */ const Flags_FlagsSymbols = (FlagsSymbols);
|
|
59350
59377
|
|
|
59351
59378
|
;// ./code/es-modules/Series/OnSeriesComposition.js
|
|
@@ -59596,7 +59623,7 @@ const { series: FlagsSeries_Series, seriesTypes: { column: FlagsSeries_ColumnSer
|
|
|
59596
59623
|
/**
|
|
59597
59624
|
* The Flags series.
|
|
59598
59625
|
*
|
|
59599
|
-
* @
|
|
59626
|
+
* @internal
|
|
59600
59627
|
* @class
|
|
59601
59628
|
* @name Highcharts.seriesTypes.flags
|
|
59602
59629
|
*
|
|
@@ -59610,7 +59637,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
|
|
|
59610
59637
|
* */
|
|
59611
59638
|
/**
|
|
59612
59639
|
* Disable animation, but keep clipping (#8546).
|
|
59613
|
-
* @
|
|
59640
|
+
* @internal
|
|
59614
59641
|
*/
|
|
59615
59642
|
animate(init) {
|
|
59616
59643
|
if (init) {
|
|
@@ -59619,7 +59646,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
|
|
|
59619
59646
|
}
|
|
59620
59647
|
/**
|
|
59621
59648
|
* Draw the markers.
|
|
59622
|
-
* @
|
|
59649
|
+
* @internal
|
|
59623
59650
|
*/
|
|
59624
59651
|
drawPoints() {
|
|
59625
59652
|
const series = this, points = series.points, chart = series.chart, renderer = chart.renderer, inverted = chart.inverted, options = series.options, optionsY = options.y, yAxis = series.yAxis, boxesMap = {}, boxes = [], borderRadius = isNumber(options.borderRadius) ?
|
|
@@ -59761,7 +59788,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
|
|
|
59761
59788
|
/**
|
|
59762
59789
|
* Extend the column trackers with listeners to expand and contract
|
|
59763
59790
|
* stacks.
|
|
59764
|
-
* @
|
|
59791
|
+
* @internal
|
|
59765
59792
|
*/
|
|
59766
59793
|
drawTracker() {
|
|
59767
59794
|
const series = this, points = series.points;
|
|
@@ -59804,7 +59831,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
|
|
|
59804
59831
|
}
|
|
59805
59832
|
/**
|
|
59806
59833
|
* Get presentational attributes
|
|
59807
|
-
* @
|
|
59834
|
+
* @internal
|
|
59808
59835
|
*/
|
|
59809
59836
|
pointAttribs(point, state) {
|
|
59810
59837
|
const options = this.options, color = point?.color || this.color;
|
|
@@ -59821,7 +59848,7 @@ class FlagsSeries extends FlagsSeries_ColumnSeries {
|
|
|
59821
59848
|
};
|
|
59822
59849
|
}
|
|
59823
59850
|
/**
|
|
59824
|
-
* @
|
|
59851
|
+
* @internal
|
|
59825
59852
|
*/
|
|
59826
59853
|
setClip() {
|
|
59827
59854
|
FlagsSeries_Series.prototype.setClip.apply(this, arguments);
|
|
@@ -59852,7 +59879,7 @@ extend(FlagsSeries.prototype, {
|
|
|
59852
59879
|
buildKDTree: FlagsSeries_noop,
|
|
59853
59880
|
/**
|
|
59854
59881
|
* Inherit the initialization from base Series.
|
|
59855
|
-
* @
|
|
59882
|
+
* @internal
|
|
59856
59883
|
*/
|
|
59857
59884
|
init: FlagsSeries_Series.prototype.init
|
|
59858
59885
|
});
|
|
@@ -59862,6 +59889,7 @@ Series_SeriesRegistry.registerSeriesType('flags', FlagsSeries);
|
|
|
59862
59889
|
* Default Export
|
|
59863
59890
|
*
|
|
59864
59891
|
* */
|
|
59892
|
+
/** @internal */
|
|
59865
59893
|
/* harmony default export */ const Flags_FlagsSeries = (FlagsSeries);
|
|
59866
59894
|
|
|
59867
59895
|
;// ./code/es-modules/Core/Axis/BrokenAxis.js
|
|
@@ -59878,6 +59906,8 @@ Series_SeriesRegistry.registerSeriesType('flags', FlagsSeries);
|
|
|
59878
59906
|
* */
|
|
59879
59907
|
|
|
59880
59908
|
|
|
59909
|
+
const { composed: BrokenAxis_composed } = Core_Globals;
|
|
59910
|
+
|
|
59881
59911
|
|
|
59882
59912
|
/* *
|
|
59883
59913
|
*
|
|
@@ -59905,8 +59935,7 @@ var BrokenAxis;
|
|
|
59905
59935
|
* @internal
|
|
59906
59936
|
*/
|
|
59907
59937
|
function compose(AxisClass, SeriesClass) {
|
|
59908
|
-
if (
|
|
59909
|
-
AxisClass.keepProps.push('brokenAxis');
|
|
59938
|
+
if (pushUnique(BrokenAxis_composed, 'Axis.Broken')) {
|
|
59910
59939
|
addEvent(AxisClass, 'init', onAxisInit);
|
|
59911
59940
|
addEvent(AxisClass, 'afterInit', onAxisAfterInit);
|
|
59912
59941
|
addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);
|
|
@@ -60124,7 +60153,7 @@ var BrokenAxis;
|
|
|
60124
60153
|
});
|
|
60125
60154
|
// For stacked chart generate empty stack items, #6546
|
|
60126
60155
|
if (yAxis.stacking && this.options.stacking) {
|
|
60127
|
-
stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis,
|
|
60156
|
+
stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, false, xRange, this.stack ?? '');
|
|
60128
60157
|
stack.total = 0;
|
|
60129
60158
|
}
|
|
60130
60159
|
}
|
|
@@ -60490,7 +60519,7 @@ var BrokenAxis;
|
|
|
60490
60519
|
/* unused harmony import specifier */ var Highcharts;
|
|
60491
60520
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
60492
60521
|
/**
|
|
60493
|
-
* @license Highcharts JS v13.0
|
|
60522
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
60494
60523
|
* @module highcharts/modules/broken-axis
|
|
60495
60524
|
* @requires highcharts
|
|
60496
60525
|
*
|
|
@@ -61977,7 +62006,7 @@ const DataGroupingComposition = {
|
|
|
61977
62006
|
/* unused harmony import specifier */ var datagrouping_src_Highcharts;
|
|
61978
62007
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
61979
62008
|
/**
|
|
61980
|
-
* @license Highstock JS v13.0
|
|
62009
|
+
* @license Highstock JS v13.1.0 (2026-09-18)
|
|
61981
62010
|
* @module highcharts/modules/datagrouping
|
|
61982
62011
|
* @requires highcharts
|
|
61983
62012
|
*
|
|
@@ -62342,7 +62371,7 @@ const MouseWheelZoomComposition = {
|
|
|
62342
62371
|
/* unused harmony import specifier */ var mouse_wheel_zoom_src_Highcharts;
|
|
62343
62372
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
62344
62373
|
/**
|
|
62345
|
-
* @license Highcharts JS v13.0
|
|
62374
|
+
* @license Highcharts JS v13.1.0 (2026-09-18)
|
|
62346
62375
|
* @module highcharts/modules/mouse-wheel-zoom
|
|
62347
62376
|
* @requires highcharts
|
|
62348
62377
|
*
|
|
@@ -62366,7 +62395,7 @@ mouse_wheel_zoom_src_G.MouseWheelZoom.compose(mouse_wheel_zoom_src_G.Chart);
|
|
|
62366
62395
|
/* unused harmony import specifier */ var stock_src_Highcharts;
|
|
62367
62396
|
// SPDX-License-Identifier: LicenseRef-Highcharts
|
|
62368
62397
|
/**
|
|
62369
|
-
* @license Highstock JS v13.0
|
|
62398
|
+
* @license Highstock JS v13.1.0 (2026-09-18)
|
|
62370
62399
|
* @module highcharts/modules/stock
|
|
62371
62400
|
* @requires highcharts
|
|
62372
62401
|
*
|