highcharts 9.3.3 → 10.0.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 +19 -2
- package/css/highcharts.scss +17 -2
- package/css/themes/dark-unica.css +19 -2
- package/css/themes/grid-light.css +19 -2
- package/css/themes/sand-signika.css +19 -2
- package/es-modules/Accessibility/Accessibility.js +1 -1
- package/es-modules/Accessibility/Components/LegendComponent.js +31 -23
- package/es-modules/Accessibility/Components/MenuComponent.js +4 -5
- package/es-modules/Accessibility/Components/RangeSelectorComponent.js +2 -2
- package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +7 -6
- package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +1 -1
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +0 -1
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -3
- package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +61 -29
- package/es-modules/Accessibility/Components/ZoomComponent.js +13 -10
- package/es-modules/Accessibility/HighContrastMode.js +2 -2
- package/es-modules/Accessibility/KeyboardNavigation.js +113 -98
- package/es-modules/Accessibility/ProxyElement.js +14 -6
- package/es-modules/Accessibility/ProxyProvider.js +10 -2
- package/es-modules/Core/Axis/Axis.js +150 -46
- package/es-modules/Core/Axis/Color/ColorAxis.js +22 -5
- package/es-modules/Core/Axis/GridAxis.js +10 -9
- package/es-modules/Core/Axis/TreeGridTick.js +11 -0
- package/es-modules/Core/Chart/Chart3D.js +1 -11
- package/es-modules/Core/Chart/ChartDefaults.js +32 -11
- package/es-modules/Core/Chart/MapChart.js +1 -6
- package/es-modules/Core/DefaultOptions.js +2 -0
- package/es-modules/Core/Geometry/PolygonClip.js +84 -0
- package/es-modules/Core/Globals.js +4 -18
- package/es-modules/Core/HttpUtilities.js +13 -8
- package/es-modules/Core/Legend/Legend.js +10 -8
- package/es-modules/Core/Navigator.js +9 -6
- package/es-modules/Core/Pointer.js +15 -11
- package/es-modules/Core/Renderer/HTML/AST.js +62 -5
- package/es-modules/Core/Renderer/SVG/SVGElement.js +25 -41
- package/es-modules/Core/Renderer/SVG/SVGElement3D.js +17 -5
- package/es-modules/Core/Renderer/SVG/SVGRenderer.js +17 -17
- package/es-modules/Core/Renderer/SVG/TextBuilder.js +12 -10
- package/es-modules/Core/Series/DataLabel.js +11 -3
- package/es-modules/Core/Series/Point.js +2 -2
- package/es-modules/Core/Series/Series.js +33 -15
- package/es-modules/Core/Series/SeriesDefaults.js +4 -1
- package/es-modules/Core/Tooltip.js +14 -31
- package/es-modules/Core/Utilities.js +28 -28
- package/es-modules/Extensions/Annotations/Annotations.js +7 -0
- package/es-modules/Extensions/Annotations/MockPoint.js +1 -1
- package/es-modules/Extensions/Annotations/NavigationBindings.js +1 -1
- package/es-modules/Extensions/Annotations/Popup.js +1 -1
- package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +5 -3
- package/es-modules/Extensions/Boost/BoostInit.js +6 -1
- package/es-modules/Extensions/Boost/BoostOptions.js +26 -0
- package/es-modules/Extensions/Boost/Boostables.js +1 -0
- package/es-modules/Extensions/Boost/WGLRenderer.js +48 -37
- package/es-modules/Extensions/Boost/WGLShader.js +4 -3
- package/es-modules/Extensions/Breadcrumbs.js +874 -0
- package/es-modules/Extensions/Data.js +26 -14
- package/es-modules/Extensions/DataGrouping.js +5 -2
- package/es-modules/Extensions/DraggablePoints.js +9 -7
- package/es-modules/Extensions/Drilldown.js +147 -94
- package/es-modules/Extensions/Exporting/Exporting.js +9 -7
- package/es-modules/Extensions/Exporting/ExportingDefaults.js +49 -1
- package/es-modules/Extensions/GeoJSON.js +149 -124
- package/es-modules/Extensions/MarkerClusters.js +34 -20
- package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +110 -22
- package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
- package/es-modules/Extensions/Oldie/Oldie.js +1 -1
- package/es-modules/Extensions/ScrollablePlotArea.js +5 -1
- package/es-modules/Extensions/Stacking.js +3 -2
- package/es-modules/Extensions/Themes/HighContrastDark.js +10 -10
- package/es-modules/Extensions/Themes/HighContrastLight.js +10 -10
- package/es-modules/Maps/MapNavigation.js +49 -8
- package/es-modules/Maps/MapPointer.js +16 -0
- package/es-modules/Maps/MapUtilities.js +56 -0
- package/es-modules/Maps/MapView.js +606 -135
- package/es-modules/Maps/MapViewInsetsOptionsDefault.js +148 -0
- package/es-modules/Maps/MapViewOptionsDefault.js +58 -20
- package/es-modules/Maps/Projection.js +169 -77
- package/es-modules/Maps/Projections/EqualEarth.js +15 -6
- package/es-modules/Maps/Projections/LambertConformalConic.js +27 -19
- package/es-modules/Maps/Projections/Miller.js +23 -10
- package/es-modules/Maps/Projections/Orthographic.js +21 -10
- package/es-modules/Maps/Projections/WebMercator.js +25 -13
- package/es-modules/Series/ArcDiagram/ArcDiagramPoint.js +77 -0
- package/es-modules/Series/ArcDiagram/ArcDiagramSeries.js +581 -0
- package/es-modules/Series/Column/ColumnSeries.js +4 -3
- package/es-modules/Series/DataModifyComposition.js +1 -0
- package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +2 -2
- package/es-modules/Series/DrawPointComposition.js +7 -4
- package/es-modules/Series/Lollipop/LollipopSeries.js +1 -1
- package/es-modules/Series/Map/MapPoint.js +24 -1
- package/es-modules/Series/Map/MapSeries.js +196 -169
- package/es-modules/Series/MapBubble/MapBubblePoint.js +16 -24
- package/es-modules/Series/MapBubble/MapBubbleSeries.js +11 -0
- package/es-modules/Series/MapPoint/MapPointPoint.js +2 -8
- package/es-modules/Series/MapPoint/MapPointSeries.js +36 -14
- package/es-modules/Series/NodesComposition.js +60 -13
- package/es-modules/Series/OHLC/OHLCSeries.js +7 -0
- package/es-modules/Series/Organization/OrganizationPoint.js +68 -2
- package/es-modules/Series/Organization/OrganizationSeries.js +79 -25
- package/es-modules/Series/Pie/PiePoint.js +12 -5
- package/es-modules/Series/Pie3D/Pie3DSeries.js +19 -0
- package/es-modules/Series/Sankey/SankeyColumnComposition.js +193 -0
- package/es-modules/Series/Sankey/SankeyPoint.js +37 -1
- package/es-modules/Series/Sankey/SankeySeries.js +10 -127
- package/es-modules/Series/Scatter/ScatterSeries.js +1 -1
- package/es-modules/Series/Sunburst/SunburstSeries.js +13 -2
- package/es-modules/Series/Treemap/TreemapSeries.js +88 -80
- package/es-modules/Series/Waterfall/WaterfallSeries.js +2 -0
- package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +9 -2
- package/es-modules/Stock/StockToolsGui.js +1 -1
- package/es-modules/masters/highcharts-3d.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/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 +14 -0
- 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/current-date-indicator.src.js +1 -1
- package/es-modules/masters/modules/cylinder.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 +2 -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/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/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 +5 -1
- package/es-modules/masters/modules/marker-clusters.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/offline-exporting.src.js +1 -1
- package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
- package/es-modules/masters/modules/oldie.src.js +1 -1
- package/es-modules/masters/modules/organization.src.js +1 -1
- package/es-modules/masters/modules/overlapping-datalabels.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/price-indicator.src.js +1 -1
- package/es-modules/masters/modules/pyramid3d.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/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/tilemap.src.js +1 -1
- package/es-modules/masters/modules/timeline.src.js +1 -1
- package/es-modules/masters/modules/treegrid.src.js +1 -1
- package/es-modules/masters/modules/treemap.src.js +5 -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/themes/avocado.src.js +1 -1
- package/es-modules/masters/themes/brand-dark.src.js +1 -1
- package/es-modules/masters/themes/brand-light.src.js +1 -1
- package/es-modules/masters/themes/dark-blue.src.js +1 -1
- package/es-modules/masters/themes/dark-green.src.js +1 -1
- package/es-modules/masters/themes/dark-unica.src.js +1 -1
- package/es-modules/masters/themes/gray.src.js +1 -1
- package/es-modules/masters/themes/grid-light.src.js +1 -1
- package/es-modules/masters/themes/grid.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
- package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
- package/es-modules/masters/themes/sand-signika.src.js +1 -1
- package/es-modules/masters/themes/skies.src.js +1 -1
- package/es-modules/masters/themes/sunset.src.js +1 -1
- package/highcharts-3d.js +99 -98
- package/highcharts-3d.js.map +1 -1
- package/highcharts-3d.src.js +50 -20
- package/highcharts-gantt.js +800 -795
- package/highcharts-gantt.js.map +1 -1
- package/highcharts-gantt.src.js +528 -290
- package/highcharts-more.js +195 -194
- package/highcharts-more.js.map +1 -1
- package/highcharts-more.src.js +13 -2
- package/highcharts.d.ts +2162 -504
- package/highcharts.js +586 -581
- package/highcharts.js.map +1 -1
- package/highcharts.src.d.ts +2162 -504
- package/highcharts.src.js +494 -272
- package/highmaps.js +753 -723
- package/highmaps.js.map +1 -1
- package/highmaps.src.js +3603 -2117
- package/highstock.js +790 -786
- package/highstock.js.map +1 -1
- package/highstock.src.js +519 -283
- package/indicators/acceleration-bands.js +12 -11
- package/indicators/acceleration-bands.js.map +1 -1
- package/indicators/acceleration-bands.src.js +11 -2
- package/indicators/accumulation-distribution.js +5 -5
- package/indicators/accumulation-distribution.js.map +1 -1
- package/indicators/accumulation-distribution.src.js +11 -2
- package/indicators/ao.js +6 -6
- package/indicators/ao.js.map +1 -1
- package/indicators/ao.src.js +11 -2
- package/indicators/apo.js +5 -5
- package/indicators/apo.js.map +1 -1
- package/indicators/apo.src.js +11 -2
- package/indicators/aroon-oscillator.js +10 -10
- package/indicators/aroon-oscillator.js.map +1 -1
- package/indicators/aroon-oscillator.src.js +11 -2
- package/indicators/aroon.js +11 -11
- package/indicators/aroon.js.map +1 -1
- package/indicators/aroon.src.js +11 -2
- package/indicators/atr.js +5 -5
- package/indicators/atr.js.map +1 -1
- package/indicators/atr.src.js +11 -2
- package/indicators/bollinger-bands.js +12 -12
- package/indicators/bollinger-bands.js.map +1 -1
- package/indicators/bollinger-bands.src.js +11 -2
- package/indicators/cci.js +5 -5
- package/indicators/cci.js.map +1 -1
- package/indicators/cci.src.js +11 -2
- package/indicators/chaikin.js +8 -8
- package/indicators/chaikin.js.map +1 -1
- package/indicators/chaikin.src.js +11 -2
- package/indicators/cmf.js +6 -6
- package/indicators/cmf.js.map +1 -1
- package/indicators/cmf.src.js +11 -2
- package/indicators/cmo.js +5 -5
- package/indicators/cmo.js.map +1 -1
- package/indicators/cmo.src.js +11 -2
- package/indicators/dema.js +5 -5
- package/indicators/dema.js.map +1 -1
- package/indicators/dema.src.js +11 -2
- package/indicators/disparity-index.js +6 -6
- package/indicators/disparity-index.js.map +1 -1
- package/indicators/disparity-index.src.js +11 -2
- package/indicators/dmi.js +12 -12
- package/indicators/dmi.js.map +1 -1
- package/indicators/dmi.src.js +11 -2
- package/indicators/dpo.js +5 -5
- package/indicators/dpo.js.map +1 -1
- package/indicators/dpo.src.js +11 -2
- package/indicators/ema.js +2 -1
- package/indicators/ema.js.map +1 -1
- package/indicators/ema.src.js +10 -1
- package/indicators/ichimoku-kinko-hyo.js +16 -16
- package/indicators/ichimoku-kinko-hyo.js.map +1 -1
- package/indicators/ichimoku-kinko-hyo.src.js +11 -2
- package/indicators/indicators-all.js +195 -194
- package/indicators/indicators-all.js.map +1 -1
- package/indicators/indicators-all.src.js +21 -5
- package/indicators/indicators.js +13 -12
- package/indicators/indicators.js.map +1 -1
- package/indicators/indicators.src.js +21 -5
- package/indicators/keltner-channels.js +12 -11
- package/indicators/keltner-channels.js.map +1 -1
- package/indicators/keltner-channels.src.js +11 -2
- package/indicators/klinger.js +13 -13
- package/indicators/klinger.js.map +1 -1
- package/indicators/klinger.src.js +11 -2
- package/indicators/macd.js +12 -11
- package/indicators/macd.js.map +1 -1
- package/indicators/macd.src.js +11 -2
- package/indicators/mfi.js +6 -6
- package/indicators/mfi.js.map +1 -1
- package/indicators/mfi.src.js +11 -2
- package/indicators/momentum.js +5 -5
- package/indicators/momentum.js.map +1 -1
- package/indicators/momentum.src.js +11 -2
- package/indicators/natr.js +5 -4
- package/indicators/natr.js.map +1 -1
- package/indicators/natr.src.js +11 -2
- package/indicators/obv.js +5 -5
- package/indicators/obv.js.map +1 -1
- package/indicators/obv.src.js +11 -2
- package/indicators/pivot-points.js +11 -11
- package/indicators/pivot-points.js.map +1 -1
- package/indicators/pivot-points.src.js +11 -2
- package/indicators/ppo.js +5 -5
- package/indicators/ppo.js.map +1 -1
- package/indicators/ppo.src.js +11 -2
- package/indicators/price-channel.js +11 -11
- package/indicators/price-channel.js.map +1 -1
- package/indicators/price-channel.src.js +11 -2
- package/indicators/price-envelopes.js +8 -8
- package/indicators/price-envelopes.js.map +1 -1
- package/indicators/price-envelopes.src.js +11 -2
- package/indicators/psar.js +7 -6
- package/indicators/psar.js.map +1 -1
- package/indicators/psar.src.js +11 -2
- package/indicators/regressions.js +12 -12
- package/indicators/regressions.js.map +1 -1
- package/indicators/regressions.src.js +11 -2
- package/indicators/roc.js +5 -5
- package/indicators/roc.js.map +1 -1
- package/indicators/roc.src.js +11 -2
- package/indicators/rsi.js +6 -5
- package/indicators/rsi.js.map +1 -1
- package/indicators/rsi.src.js +11 -2
- package/indicators/slow-stochastic.js +5 -5
- package/indicators/slow-stochastic.js.map +1 -1
- package/indicators/slow-stochastic.src.js +11 -2
- package/indicators/stochastic.js +12 -12
- package/indicators/stochastic.js.map +1 -1
- package/indicators/stochastic.src.js +11 -2
- package/indicators/supertrend.js +10 -10
- package/indicators/supertrend.js.map +1 -1
- package/indicators/supertrend.src.js +11 -2
- package/indicators/tema.js +6 -6
- package/indicators/tema.js.map +1 -1
- package/indicators/tema.src.js +11 -2
- package/indicators/trendline.js +5 -5
- package/indicators/trendline.js.map +1 -1
- package/indicators/trendline.src.js +11 -2
- package/indicators/trix.js +4 -4
- package/indicators/trix.js.map +1 -1
- package/indicators/trix.src.js +11 -2
- package/indicators/volume-by-price.js +17 -17
- package/indicators/volume-by-price.js.map +1 -1
- package/indicators/volume-by-price.src.js +11 -2
- package/indicators/vwap.js +5 -5
- package/indicators/vwap.js.map +1 -1
- package/indicators/vwap.src.js +11 -2
- package/indicators/williams-r.js +6 -5
- package/indicators/williams-r.js.map +1 -1
- package/indicators/williams-r.src.js +11 -2
- package/indicators/wma.js +5 -5
- package/indicators/wma.js.map +1 -1
- package/indicators/wma.src.js +11 -2
- package/indicators/zigzag.js +6 -6
- package/indicators/zigzag.js.map +1 -1
- package/indicators/zigzag.src.js +11 -2
- package/lib/jspdf.js +299 -184
- package/lib/jspdf.src.js +25266 -18067
- package/lib/svg2pdf.js +35 -31
- package/lib/svg2pdf.src.js +5721 -4179
- package/modules/accessibility.js +231 -229
- package/modules/accessibility.js.map +1 -1
- package/modules/accessibility.src.js +278 -197
- package/modules/annotations-advanced.js +144 -144
- package/modules/annotations-advanced.js.map +1 -1
- package/modules/annotations-advanced.src.js +26 -8
- package/modules/annotations.js +79 -79
- package/modules/annotations.js.map +1 -1
- package/modules/annotations.src.js +21 -5
- package/modules/arc-diagram.js +25 -0
- package/modules/arc-diagram.js.map +1 -0
- package/modules/arc-diagram.src.js +770 -0
- package/modules/arrow-symbols.js +4 -3
- package/modules/arrow-symbols.js.map +1 -1
- package/modules/arrow-symbols.src.js +11 -2
- package/modules/boost-canvas.js +15 -15
- package/modules/boost-canvas.js.map +1 -1
- package/modules/boost-canvas.src.js +11 -2
- package/modules/boost.js +80 -79
- package/modules/boost.js.map +1 -1
- package/modules/boost.src.js +71 -43
- package/modules/broken-axis.js +13 -13
- package/modules/broken-axis.js.map +1 -1
- package/modules/broken-axis.src.js +11 -2
- package/modules/bullet.js +9 -9
- package/modules/bullet.js.map +1 -1
- package/modules/bullet.src.js +11 -2
- package/modules/coloraxis.js +24 -24
- package/modules/coloraxis.js.map +1 -1
- package/modules/coloraxis.src.js +33 -7
- package/modules/current-date-indicator.js +5 -4
- package/modules/current-date-indicator.js.map +1 -1
- package/modules/current-date-indicator.src.js +11 -2
- package/modules/cylinder.js +11 -11
- package/modules/cylinder.js.map +1 -1
- package/modules/cylinder.src.js +11 -2
- package/modules/data.js +34 -33
- package/modules/data.js.map +1 -1
- package/modules/data.src.js +59 -32
- package/modules/datagrouping.js +21 -20
- package/modules/datagrouping.js.map +1 -1
- package/modules/datagrouping.src.js +16 -4
- package/modules/debugger.js +6 -6
- package/modules/debugger.js.map +1 -1
- package/modules/debugger.src.js +11 -2
- package/modules/dependency-wheel.js +12 -11
- package/modules/dependency-wheel.js.map +1 -1
- package/modules/dependency-wheel.src.js +14 -5
- package/modules/dotplot.js +6 -6
- package/modules/dotplot.js.map +1 -1
- package/modules/dotplot.src.js +11 -2
- package/modules/drag-panes.js +10 -10
- package/modules/drag-panes.js.map +1 -1
- package/modules/drag-panes.src.js +11 -2
- package/modules/draggable-points.js +35 -34
- package/modules/draggable-points.js.map +1 -1
- package/modules/draggable-points.src.js +20 -9
- package/modules/drilldown.d.ts +19 -0
- package/modules/drilldown.js +37 -25
- package/modules/drilldown.js.map +1 -1
- package/modules/drilldown.src.d.ts +19 -0
- package/modules/drilldown.src.js +1090 -105
- package/modules/dumbbell.js +17 -17
- package/modules/dumbbell.js.map +1 -1
- package/modules/dumbbell.src.js +11 -2
- package/modules/export-data.js +21 -20
- package/modules/export-data.js.map +1 -1
- package/modules/export-data.src.js +11 -2
- package/modules/exporting.js +39 -39
- package/modules/exporting.js.map +1 -1
- package/modules/exporting.src.js +82 -18
- package/modules/full-screen.js +8 -7
- package/modules/full-screen.js.map +1 -1
- package/modules/full-screen.src.js +11 -2
- package/modules/funnel.js +12 -12
- package/modules/funnel.js.map +1 -1
- package/modules/funnel.src.js +11 -2
- package/modules/funnel3d.js +21 -21
- package/modules/funnel3d.js.map +1 -1
- package/modules/funnel3d.src.js +11 -2
- package/modules/gantt.js +217 -217
- package/modules/gantt.js.map +1 -1
- package/modules/gantt.src.js +45 -20
- package/modules/grid-axis.js +23 -23
- package/modules/grid-axis.js.map +1 -1
- package/modules/grid-axis.src.js +22 -11
- package/modules/heatmap.js +40 -39
- package/modules/heatmap.js.map +1 -1
- package/modules/heatmap.src.js +33 -7
- package/modules/heikinashi.js +8 -8
- package/modules/heikinashi.js.map +1 -1
- package/modules/heikinashi.src.js +11 -2
- package/modules/histogram-bellcurve.js +13 -13
- package/modules/histogram-bellcurve.js.map +1 -1
- package/modules/histogram-bellcurve.src.js +11 -2
- package/modules/hollowcandlestick.js +9 -9
- package/modules/hollowcandlestick.js.map +1 -1
- package/modules/hollowcandlestick.src.js +11 -2
- package/modules/item-series.js +12 -12
- package/modules/item-series.js.map +1 -1
- package/modules/item-series.src.js +11 -2
- package/modules/lollipop.js +7 -7
- package/modules/lollipop.js.map +1 -1
- package/modules/lollipop.src.js +12 -3
- package/modules/map.d.ts +80 -43
- package/modules/map.js +169 -144
- package/modules/map.js.map +1 -1
- package/modules/map.src.d.ts +80 -43
- package/modules/map.src.js +7960 -6687
- package/modules/marker-clusters.js +36 -36
- package/modules/marker-clusters.js.map +1 -1
- package/modules/marker-clusters.src.js +47 -23
- package/modules/networkgraph.d.ts +5 -0
- package/modules/networkgraph.js +49 -48
- package/modules/networkgraph.js.map +1 -1
- package/modules/networkgraph.src.d.ts +5 -0
- package/modules/networkgraph.src.js +77 -15
- package/modules/no-data-to-display.js +5 -5
- package/modules/no-data-to-display.js.map +1 -1
- package/modules/no-data-to-display.src.js +11 -2
- package/modules/offline-exporting.js +20 -18
- package/modules/offline-exporting.js.map +1 -1
- package/modules/offline-exporting.src.js +126 -25
- package/modules/oldie-polyfills.js +7 -7
- package/modules/oldie-polyfills.js.map +1 -1
- package/modules/oldie-polyfills.src.js +11 -2
- package/modules/oldie.js +30 -30
- package/modules/oldie.js.map +1 -1
- package/modules/oldie.src.js +12 -3
- package/modules/organization.js +16 -14
- package/modules/organization.js.map +1 -1
- package/modules/organization.src.js +166 -32
- package/modules/overlapping-datalabels.js +3 -2
- package/modules/overlapping-datalabels.js.map +1 -1
- package/modules/overlapping-datalabels.src.js +11 -2
- package/modules/parallel-coordinates.js +11 -11
- package/modules/parallel-coordinates.js.map +1 -1
- package/modules/parallel-coordinates.src.js +11 -2
- package/modules/pareto.js +7 -7
- package/modules/pareto.js.map +1 -1
- package/modules/pareto.src.js +11 -2
- package/modules/pathfinder.js +31 -31
- package/modules/pathfinder.js.map +1 -1
- package/modules/pathfinder.src.js +11 -2
- package/modules/pattern-fill.js +14 -14
- package/modules/pattern-fill.js.map +1 -1
- package/modules/pattern-fill.src.js +11 -2
- package/modules/price-indicator.js +5 -5
- package/modules/price-indicator.js.map +1 -1
- package/modules/price-indicator.src.js +11 -2
- package/modules/pyramid3d.js +4 -4
- package/modules/pyramid3d.js.map +1 -1
- package/modules/pyramid3d.src.js +11 -2
- package/modules/sankey.d.ts +5 -0
- package/modules/sankey.js +32 -29
- package/modules/sankey.js.map +1 -1
- package/modules/sankey.src.d.ts +5 -0
- package/modules/sankey.src.js +338 -156
- package/modules/series-label.js +18 -17
- package/modules/series-label.js.map +1 -1
- package/modules/series-label.src.js +11 -2
- package/modules/solid-gauge.js +10 -10
- package/modules/solid-gauge.js.map +1 -1
- package/modules/solid-gauge.src.js +11 -2
- package/modules/sonification.js +59 -59
- package/modules/sonification.js.map +1 -1
- package/modules/sonification.src.js +11 -2
- package/modules/static-scale.js +5 -4
- package/modules/static-scale.js.map +1 -1
- package/modules/static-scale.src.js +11 -2
- package/modules/stock-tools.js +78 -78
- package/modules/stock-tools.js.map +1 -1
- package/modules/stock-tools.src.js +21 -5
- package/modules/stock.js +162 -162
- package/modules/stock.js.map +1 -1
- package/modules/stock.src.js +36 -13
- package/modules/streamgraph.js +5 -4
- package/modules/streamgraph.js.map +1 -1
- package/modules/streamgraph.src.js +11 -2
- package/modules/sunburst.d.ts +3 -0
- package/modules/sunburst.js +73 -60
- package/modules/sunburst.js.map +1 -1
- package/modules/sunburst.src.d.ts +3 -0
- package/modules/sunburst.src.js +1049 -96
- package/modules/tilemap.js +17 -17
- package/modules/tilemap.js.map +1 -1
- package/modules/tilemap.src.js +11 -2
- package/modules/timeline.js +18 -18
- package/modules/timeline.js.map +1 -1
- package/modules/timeline.src.js +11 -2
- package/modules/treegrid.js +57 -56
- package/modules/treegrid.js.map +1 -1
- package/modules/treegrid.src.js +33 -11
- package/modules/treemap.d.ts +3 -0
- package/modules/treemap.js +53 -41
- package/modules/treemap.js.map +1 -1
- package/modules/treemap.src.d.ts +3 -0
- package/modules/treemap.src.js +1039 -95
- package/modules/variable-pie.js +9 -9
- package/modules/variable-pie.js.map +1 -1
- package/modules/variable-pie.src.js +11 -2
- package/modules/variwide.js +12 -12
- package/modules/variwide.js.map +1 -1
- package/modules/variwide.src.js +11 -2
- package/modules/vector.js +8 -7
- package/modules/vector.js.map +1 -1
- package/modules/vector.src.js +11 -2
- package/modules/venn.js +31 -31
- package/modules/venn.js.map +1 -1
- package/modules/venn.src.js +18 -6
- package/modules/windbarb.js +15 -15
- package/modules/windbarb.js.map +1 -1
- package/modules/windbarb.src.js +11 -2
- package/modules/wordcloud.js +23 -23
- package/modules/wordcloud.js.map +1 -1
- package/modules/wordcloud.src.js +18 -6
- package/modules/xrange.js +16 -16
- package/modules/xrange.js.map +1 -1
- package/modules/xrange.src.js +11 -2
- package/package.json +1 -1
- package/themes/avocado.js +4 -3
- package/themes/avocado.js.map +1 -1
- package/themes/avocado.src.js +11 -2
- package/themes/brand-dark.js +9 -8
- package/themes/brand-dark.js.map +1 -1
- package/themes/brand-dark.src.js +11 -2
- package/themes/brand-light.js +8 -8
- package/themes/brand-light.js.map +1 -1
- package/themes/brand-light.src.js +11 -2
- package/themes/dark-blue.js +9 -8
- package/themes/dark-blue.js.map +1 -1
- package/themes/dark-blue.src.js +11 -2
- package/themes/dark-green.js +9 -8
- package/themes/dark-green.js.map +1 -1
- package/themes/dark-green.src.js +11 -2
- package/themes/dark-unica.js +8 -7
- package/themes/dark-unica.js.map +1 -1
- package/themes/dark-unica.src.js +11 -2
- package/themes/gray.js +9 -8
- package/themes/gray.js.map +1 -1
- package/themes/gray.src.js +11 -2
- package/themes/grid-light.js +5 -4
- package/themes/grid-light.js.map +1 -1
- package/themes/grid-light.src.js +11 -2
- package/themes/grid.js +5 -5
- package/themes/grid.js.map +1 -1
- package/themes/grid.src.js +11 -2
- package/themes/high-contrast-dark.js +7 -7
- package/themes/high-contrast-dark.js.map +1 -1
- package/themes/high-contrast-dark.src.js +21 -12
- package/themes/high-contrast-light.js +3 -3
- package/themes/high-contrast-light.js.map +1 -1
- package/themes/high-contrast-light.src.js +21 -12
- package/themes/sand-signika.js +5 -5
- package/themes/sand-signika.js.map +1 -1
- package/themes/sand-signika.src.js +11 -2
- package/themes/skies.js +5 -5
- package/themes/skies.js.map +1 -1
- package/themes/skies.src.js +11 -2
- package/themes/sunset.js +3 -3
- package/themes/sunset.js.map +1 -1
- package/themes/sunset.src.js +11 -2
- package/es-modules/Maps/ProjectionDefinition.js +0 -9
|
@@ -8,16 +8,72 @@
|
|
|
8
8
|
*
|
|
9
9
|
* */
|
|
10
10
|
'use strict';
|
|
11
|
+
var __extends = (this && this.__extends) || (function () {
|
|
12
|
+
var extendStatics = function (d, b) {
|
|
13
|
+
extendStatics = Object.setPrototypeOf ||
|
|
14
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
15
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
16
|
+
return extendStatics(d, b);
|
|
17
|
+
};
|
|
18
|
+
return function (d, b) {
|
|
19
|
+
extendStatics(d, b);
|
|
20
|
+
function __() { this.constructor = d; }
|
|
21
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
25
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
26
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
27
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
28
|
+
r[k] = a[j];
|
|
29
|
+
return r;
|
|
30
|
+
};
|
|
11
31
|
import defaultOptions from './MapViewOptionsDefault.js';
|
|
32
|
+
import defaultInsetsOptions from './MapViewInsetsOptionsDefault.js';
|
|
33
|
+
import GeoJSONModule from '../Extensions/GeoJSON.js';
|
|
34
|
+
var topo2geo = GeoJSONModule.topo2geo;
|
|
35
|
+
import MapChart from '../Core/Chart/MapChart.js';
|
|
36
|
+
var maps = MapChart.maps;
|
|
37
|
+
import MU from './MapUtilities.js';
|
|
38
|
+
var boundsFromPath = MU.boundsFromPath, pointInPolygon = MU.pointInPolygon;
|
|
12
39
|
import Projection from './Projection.js';
|
|
13
40
|
import U from '../Core/Utilities.js';
|
|
14
|
-
var addEvent = U.addEvent, clamp = U.clamp, fireEvent = U.fireEvent, isNumber = U.isNumber, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength;
|
|
41
|
+
var addEvent = U.addEvent, clamp = U.clamp, defined = U.defined, fireEvent = U.fireEvent, isArray = U.isArray, isNumber = U.isNumber, isObject = U.isObject, isString = U.isString, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength;
|
|
15
42
|
/**
|
|
16
43
|
* The world size in terms of 10k meters in the Web Mercator projection, to
|
|
17
44
|
* match a 256 square tile to zoom level 0
|
|
18
45
|
*/
|
|
19
46
|
var worldSize = 400.979322;
|
|
20
47
|
var tileSize = 256;
|
|
48
|
+
// Compute the zoom from given bounds and the size of the playing field. Used in
|
|
49
|
+
// two places, hence the local function.
|
|
50
|
+
var zoomFromBounds = function (b, playingField) {
|
|
51
|
+
var width = playingField.width, height = playingField.height, scaleToField = Math.max((b.x2 - b.x1) / (width / tileSize), (b.y2 - b.y1) / (height / tileSize));
|
|
52
|
+
return Math.log(worldSize / scaleToField) / Math.log(2);
|
|
53
|
+
};
|
|
54
|
+
/*
|
|
55
|
+
const mergeCollections = <
|
|
56
|
+
T extends Array<AnyRecord|undefined>
|
|
57
|
+
>(a: T, b: T): T => {
|
|
58
|
+
b.forEach((newer, i): void => {
|
|
59
|
+
// Only merge by id supported for now. We may consider later to support
|
|
60
|
+
// more complex rules like those of `Chart.update` with `oneToOne`, but
|
|
61
|
+
// it is probably not needed. Existing insets can be disabled by
|
|
62
|
+
// overwriting the `geoBounds` with empty data.
|
|
63
|
+
if (newer && isString(newer.id)) {
|
|
64
|
+
const older = U.find(
|
|
65
|
+
a,
|
|
66
|
+
(aItem): boolean => (aItem && aItem.id) === newer.id
|
|
67
|
+
);
|
|
68
|
+
if (older) {
|
|
69
|
+
const aIndex = a.indexOf(older);
|
|
70
|
+
a[aIndex] = merge(older, newer);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return a;
|
|
75
|
+
};
|
|
76
|
+
*/
|
|
21
77
|
/**
|
|
22
78
|
* The map view handles zooming and centering on the map, and various
|
|
23
79
|
* client-side projection capabilities.
|
|
@@ -35,8 +91,60 @@ var tileSize = 256;
|
|
|
35
91
|
var MapView = /** @class */ (function () {
|
|
36
92
|
function MapView(chart, options) {
|
|
37
93
|
var _this = this;
|
|
94
|
+
this.insets = [];
|
|
95
|
+
this.padding = [0, 0, 0, 0];
|
|
96
|
+
this.eventsToUnbind = [];
|
|
97
|
+
var recommendedMapView;
|
|
98
|
+
var recommendedProjection;
|
|
99
|
+
if (!(this instanceof MapViewInset)) {
|
|
100
|
+
// Handle the global map and series-level mapData
|
|
101
|
+
var geoMaps = __spreadArrays([
|
|
102
|
+
chart.options.chart.map
|
|
103
|
+
], (chart.options.series || []).map(function (s) { return s.mapData; })).map(function (mapData) { return _this.getGeoMap(mapData); });
|
|
104
|
+
var allGeoBounds_1 = [];
|
|
105
|
+
geoMaps.forEach(function (geoMap) {
|
|
106
|
+
if (geoMap) {
|
|
107
|
+
// Use the first geo map as main
|
|
108
|
+
if (!recommendedMapView) {
|
|
109
|
+
recommendedMapView = geoMap['hc-recommended-mapview'];
|
|
110
|
+
}
|
|
111
|
+
// Combine the bounding boxes of all loaded maps
|
|
112
|
+
if (geoMap.bbox) {
|
|
113
|
+
var _a = geoMap.bbox, x1 = _a[0], y1 = _a[1], x2 = _a[2], y2 = _a[3];
|
|
114
|
+
allGeoBounds_1.push({ x1: x1, y1: y1, x2: x2, y2: y2 });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// Get the composite bounds
|
|
119
|
+
var geoBounds = (allGeoBounds_1.length &&
|
|
120
|
+
MapView.compositeBounds(allGeoBounds_1));
|
|
121
|
+
// Provide a best-guess recommended projection if not set in the map
|
|
122
|
+
// or in user options
|
|
123
|
+
if (geoBounds) {
|
|
124
|
+
var x1 = geoBounds.x1, y1 = geoBounds.y1, x2 = geoBounds.x2, y2 = geoBounds.y2;
|
|
125
|
+
recommendedProjection = (x2 - x1 > 180 && y2 - y1 > 90) ?
|
|
126
|
+
// Wide angle, go for the world view
|
|
127
|
+
{
|
|
128
|
+
name: 'EqualEarth'
|
|
129
|
+
} :
|
|
130
|
+
// Narrower angle, use a projection better suited for local
|
|
131
|
+
// view
|
|
132
|
+
{
|
|
133
|
+
name: 'LambertConformalConic',
|
|
134
|
+
parallels: [y1, y2],
|
|
135
|
+
rotation: [-(x1 + x2) / 2]
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Register the main geo map (from options.chart.map) if set
|
|
139
|
+
this.geoMap = geoMaps[0];
|
|
140
|
+
}
|
|
38
141
|
this.userOptions = options || {};
|
|
39
|
-
var o = merge(defaultOptions, options);
|
|
142
|
+
var o = merge(defaultOptions, { projection: recommendedProjection }, recommendedMapView, options);
|
|
143
|
+
// Merge the inset collections by id, or index if id missing
|
|
144
|
+
var recInsets = recommendedMapView && recommendedMapView.insets, optInsets = options && options.insets;
|
|
145
|
+
if (recInsets && optInsets) {
|
|
146
|
+
o.insets = MapView.mergeInsets(recInsets, optInsets);
|
|
147
|
+
}
|
|
40
148
|
this.chart = chart;
|
|
41
149
|
/**
|
|
42
150
|
* The current center of the view in terms of `[longitude, latitude]`.
|
|
@@ -47,6 +155,9 @@ var MapView = /** @class */ (function () {
|
|
|
47
155
|
this.center = o.center;
|
|
48
156
|
this.options = o;
|
|
49
157
|
this.projection = new Projection(o.projection);
|
|
158
|
+
// Initialize with full plot box so we don't have to check for undefined
|
|
159
|
+
// every time we use it
|
|
160
|
+
this.playingField = chart.plotBox;
|
|
50
161
|
/**
|
|
51
162
|
* The current zoom level of the view.
|
|
52
163
|
* @name Highcharts.MapView#zoom
|
|
@@ -54,8 +165,11 @@ var MapView = /** @class */ (function () {
|
|
|
54
165
|
* @type {number}
|
|
55
166
|
*/
|
|
56
167
|
this.zoom = o.zoom || 0;
|
|
168
|
+
// Create the insets
|
|
169
|
+
this.createInsets();
|
|
57
170
|
// Initialize and respond to chart size changes
|
|
58
|
-
addEvent(chart, 'afterSetChartSize', function () {
|
|
171
|
+
this.eventsToUnbind.push(addEvent(chart, 'afterSetChartSize', function () {
|
|
172
|
+
_this.playingField = _this.getField();
|
|
59
173
|
if (_this.minZoom === void 0 || // When initializing the chart
|
|
60
174
|
_this.minZoom === _this.zoom // When resizing the chart
|
|
61
175
|
) {
|
|
@@ -67,93 +181,34 @@ var MapView = /** @class */ (function () {
|
|
|
67
181
|
merge(true, _this.center, _this.userOptions.center);
|
|
68
182
|
}
|
|
69
183
|
}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// rotate, otherwise adjust the map center.
|
|
73
|
-
var mouseDownCenterProjected;
|
|
74
|
-
var mouseDownKey;
|
|
75
|
-
var mouseDownRotation;
|
|
76
|
-
var onPan = function (e) {
|
|
77
|
-
var pinchDown = chart.pointer.pinchDown;
|
|
78
|
-
var mouseDownX = chart.mouseDownX, mouseDownY = chart.mouseDownY;
|
|
79
|
-
if (pinchDown.length === 1) {
|
|
80
|
-
mouseDownX = pinchDown[0].chartX;
|
|
81
|
-
mouseDownY = pinchDown[0].chartY;
|
|
82
|
-
}
|
|
83
|
-
if (typeof mouseDownX === 'number' &&
|
|
84
|
-
typeof mouseDownY === 'number') {
|
|
85
|
-
var key = mouseDownX + "," + mouseDownY, _a = e.originalEvent, chartX = _a.chartX, chartY = _a.chartY;
|
|
86
|
-
// Reset starting position
|
|
87
|
-
if (key !== mouseDownKey) {
|
|
88
|
-
mouseDownKey = key;
|
|
89
|
-
mouseDownCenterProjected = _this.projection
|
|
90
|
-
.forward(_this.center);
|
|
91
|
-
mouseDownRotation = (_this.projection.options.rotation || [0, 0]).slice();
|
|
92
|
-
}
|
|
93
|
-
// Panning rotates the globe
|
|
94
|
-
if (_this.projection.options.name === 'Orthographic' &&
|
|
95
|
-
// ... but don't rotate if we're loading only a part of the
|
|
96
|
-
// world
|
|
97
|
-
(_this.minZoom || Infinity) < 3) {
|
|
98
|
-
// Empirical ratio where the globe rotates roughly the same
|
|
99
|
-
// speed as moving the pointer across the center of the
|
|
100
|
-
// projection
|
|
101
|
-
var ratio = 440 / (_this.getScale() * Math.min(chart.plotWidth, chart.plotHeight));
|
|
102
|
-
if (mouseDownRotation) {
|
|
103
|
-
var lon = (mouseDownX - chartX) * ratio -
|
|
104
|
-
mouseDownRotation[0];
|
|
105
|
-
var lat = clamp(-mouseDownRotation[1] -
|
|
106
|
-
(mouseDownY - chartY) * ratio, -80, 80);
|
|
107
|
-
_this.update({
|
|
108
|
-
projection: {
|
|
109
|
-
rotation: [-lon, -lat]
|
|
110
|
-
},
|
|
111
|
-
center: [lon, lat],
|
|
112
|
-
zoom: _this.zoom
|
|
113
|
-
}, true, false);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
var scale = _this.getScale();
|
|
118
|
-
var newCenter = _this.projection.inverse([
|
|
119
|
-
mouseDownCenterProjected[0] +
|
|
120
|
-
(mouseDownX - chartX) / scale,
|
|
121
|
-
mouseDownCenterProjected[1] -
|
|
122
|
-
(mouseDownY - chartY) / scale
|
|
123
|
-
]);
|
|
124
|
-
_this.setView(newCenter, void 0, true, false);
|
|
125
|
-
}
|
|
126
|
-
e.preventDefault();
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
addEvent(chart, 'pan', onPan);
|
|
130
|
-
addEvent(chart, 'touchpan', onPan);
|
|
131
|
-
// Perform the map zoom by selection
|
|
132
|
-
addEvent(chart, 'selection', function (evt) {
|
|
133
|
-
// Zoom in
|
|
134
|
-
if (!evt.resetSelection) {
|
|
135
|
-
var x = evt.x - chart.plotLeft;
|
|
136
|
-
var y = evt.y - chart.plotTop;
|
|
137
|
-
var _a = _this.pixelsToProjectedUnits({ x: x, y: y }), y1 = _a.y, x1 = _a.x;
|
|
138
|
-
var _b = _this.pixelsToProjectedUnits({ x: x + evt.width, y: y + evt.height }), y2 = _b.y, x2 = _b.x;
|
|
139
|
-
_this.fitToBounds({ x1: x1, y1: y1, x2: x2, y2: y2 }, void 0, true, evt.originalEvent.touches ?
|
|
140
|
-
// On touch zoom, don't animate, since we're already in
|
|
141
|
-
// transformed zoom preview
|
|
142
|
-
false :
|
|
143
|
-
// On mouse zoom, obey the chart-level animation
|
|
144
|
-
void 0);
|
|
145
|
-
// Only for mouse. Touch users can pinch out.
|
|
146
|
-
if (!/^touch/.test((evt.originalEvent.type))) {
|
|
147
|
-
chart.showResetZoom();
|
|
148
|
-
}
|
|
149
|
-
evt.preventDefault();
|
|
150
|
-
// Reset zoom
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
_this.zoomBy();
|
|
154
|
-
}
|
|
155
|
-
});
|
|
184
|
+
}));
|
|
185
|
+
this.setUpEvents();
|
|
156
186
|
}
|
|
187
|
+
// Merge two collections of insets by the id
|
|
188
|
+
MapView.mergeInsets = function (a, b) {
|
|
189
|
+
var toObject = function (insets) {
|
|
190
|
+
var ob = {};
|
|
191
|
+
insets.forEach(function (inset, i) {
|
|
192
|
+
ob[inset && inset.id || "i" + i] = inset;
|
|
193
|
+
});
|
|
194
|
+
return ob;
|
|
195
|
+
};
|
|
196
|
+
var insetsObj = merge(toObject(a), toObject(b)), insets = Object
|
|
197
|
+
.keys(insetsObj)
|
|
198
|
+
.map(function (key) { return insetsObj[key]; });
|
|
199
|
+
return insets;
|
|
200
|
+
};
|
|
201
|
+
// Create MapViewInset instances from insets options
|
|
202
|
+
MapView.prototype.createInsets = function () {
|
|
203
|
+
var _this = this;
|
|
204
|
+
var options = this.options, insets = options.insets;
|
|
205
|
+
if (insets) {
|
|
206
|
+
insets.forEach(function (item) {
|
|
207
|
+
var inset = new MapViewInset(_this, merge(options.insetOptions, item));
|
|
208
|
+
_this.insets.push(inset);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
};
|
|
157
212
|
/**
|
|
158
213
|
* Fit the view to given bounds
|
|
159
214
|
*
|
|
@@ -174,9 +229,16 @@ var MapView = /** @class */ (function () {
|
|
|
174
229
|
if (redraw === void 0) { redraw = true; }
|
|
175
230
|
var b = bounds || this.getProjectedBounds();
|
|
176
231
|
if (b) {
|
|
177
|
-
var
|
|
178
|
-
|
|
179
|
-
|
|
232
|
+
var pad = pick(padding, bounds ? 0 : this.options.padding), fullField = this.getField(false), padArr = isArray(pad) ? pad : [pad, pad, pad, pad];
|
|
233
|
+
this.padding = [
|
|
234
|
+
relativeLength(padArr[0], fullField.height),
|
|
235
|
+
relativeLength(padArr[1], fullField.width),
|
|
236
|
+
relativeLength(padArr[2], fullField.height),
|
|
237
|
+
relativeLength(padArr[3], fullField.width)
|
|
238
|
+
];
|
|
239
|
+
// Apply the playing field, corrected with padding
|
|
240
|
+
this.playingField = this.getField();
|
|
241
|
+
var zoom = zoomFromBounds(b, this.playingField);
|
|
180
242
|
// Reset minZoom when fitting to natural bounds
|
|
181
243
|
if (!bounds) {
|
|
182
244
|
this.minZoom = zoom;
|
|
@@ -188,21 +250,176 @@ var MapView = /** @class */ (function () {
|
|
|
188
250
|
this.setView(center, zoom, redraw, animation);
|
|
189
251
|
}
|
|
190
252
|
};
|
|
253
|
+
MapView.prototype.getField = function (padded) {
|
|
254
|
+
if (padded === void 0) { padded = true; }
|
|
255
|
+
var padding = padded ? this.padding : [0, 0, 0, 0];
|
|
256
|
+
return {
|
|
257
|
+
x: padding[3],
|
|
258
|
+
y: padding[0],
|
|
259
|
+
width: this.chart.plotWidth - padding[1] - padding[3],
|
|
260
|
+
height: this.chart.plotHeight - padding[0] - padding[2]
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
MapView.prototype.getGeoMap = function (map) {
|
|
264
|
+
if (isString(map)) {
|
|
265
|
+
return maps[map];
|
|
266
|
+
}
|
|
267
|
+
if (isObject(map, true)) {
|
|
268
|
+
if (map.type === 'FeatureCollection') {
|
|
269
|
+
return map;
|
|
270
|
+
}
|
|
271
|
+
if (map.type === 'Topology') {
|
|
272
|
+
return topo2geo(map);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
MapView.prototype.getMapBBox = function () {
|
|
277
|
+
var bounds = this.getProjectedBounds(), scale = this.getScale();
|
|
278
|
+
if (bounds) {
|
|
279
|
+
var padding = this.padding, p1 = this.projectedUnitsToPixels({
|
|
280
|
+
x: bounds.x1,
|
|
281
|
+
y: bounds.y2
|
|
282
|
+
}), width = ((bounds.x2 - bounds.x1) * scale +
|
|
283
|
+
padding[1] + padding[3]), height = ((bounds.y2 - bounds.y1) * scale +
|
|
284
|
+
padding[0] + padding[2]);
|
|
285
|
+
return {
|
|
286
|
+
width: width,
|
|
287
|
+
height: height,
|
|
288
|
+
x: p1.x - padding[3],
|
|
289
|
+
y: p1.y - padding[0]
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
};
|
|
191
293
|
MapView.prototype.getProjectedBounds = function () {
|
|
192
294
|
var allBounds = this.chart.series.reduce(function (acc, s) {
|
|
193
295
|
var bounds = s.getProjectedBounds && s.getProjectedBounds();
|
|
194
|
-
if (bounds
|
|
296
|
+
if (bounds &&
|
|
297
|
+
s.options.affectsMapView !== false) {
|
|
195
298
|
acc.push(bounds);
|
|
196
299
|
}
|
|
197
300
|
return acc;
|
|
198
301
|
}, []);
|
|
199
|
-
return MapView.compositeBounds(allBounds);
|
|
302
|
+
return this.projection.bounds || MapView.compositeBounds(allBounds);
|
|
200
303
|
};
|
|
201
304
|
MapView.prototype.getScale = function () {
|
|
202
305
|
// A zoom of 0 means the world (360x360 degrees) fits in a 256x256 px
|
|
203
306
|
// tile
|
|
204
307
|
return (tileSize / worldSize) * Math.pow(2, this.zoom);
|
|
205
308
|
};
|
|
309
|
+
// Calculate the SVG transform to be applied to series groups
|
|
310
|
+
MapView.prototype.getSVGTransform = function () {
|
|
311
|
+
var _a = this.playingField, x = _a.x, y = _a.y, width = _a.width, height = _a.height, projectedCenter = this.projection.forward(this.center), flipFactor = this.projection.hasCoordinates ? -1 : 1, scaleX = this.getScale(), scaleY = scaleX * flipFactor, translateX = x + width / 2 - projectedCenter[0] * scaleX, translateY = y + height / 2 - projectedCenter[1] * scaleY;
|
|
312
|
+
return { scaleX: scaleX, scaleY: scaleY, translateX: translateX, translateY: translateY };
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
315
|
+
* Convert map coordinates in longitude/latitude to pixels
|
|
316
|
+
*
|
|
317
|
+
* @function Highcharts.MapView#lonLatToPixels
|
|
318
|
+
* @since 10.0.0
|
|
319
|
+
* @param {Highcharts.MapLonLatObject} lonLat
|
|
320
|
+
* The map coordinates
|
|
321
|
+
* @return {Highcharts.PositionObject|undefined}
|
|
322
|
+
* The pixel position
|
|
323
|
+
*/
|
|
324
|
+
MapView.prototype.lonLatToPixels = function (lonLat) {
|
|
325
|
+
var pos = this.lonLatToProjectedUnits(lonLat);
|
|
326
|
+
if (pos) {
|
|
327
|
+
return this.projectedUnitsToPixels(pos);
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
/**
|
|
331
|
+
* Get projected units from longitude/latitude. Insets are accounted for.
|
|
332
|
+
* Returns an object with x and y values corresponding to positions on the
|
|
333
|
+
* projected plane.
|
|
334
|
+
*
|
|
335
|
+
* @requires modules/map
|
|
336
|
+
*
|
|
337
|
+
* @function Highcharts.MapView#lonLatToProjectedUnits
|
|
338
|
+
*
|
|
339
|
+
* @since 10.0.0
|
|
340
|
+
* @sample maps/series/latlon-to-point/ Find a point from lon/lat
|
|
341
|
+
*
|
|
342
|
+
* @param {Highcharts.MapLonLatObject} lonLat Coordinates.
|
|
343
|
+
*
|
|
344
|
+
* @return {Highcharts.ProjectedXY} X and Y coordinates in terms of
|
|
345
|
+
* projected values
|
|
346
|
+
*/
|
|
347
|
+
MapView.prototype.lonLatToProjectedUnits = function (lonLat) {
|
|
348
|
+
var chart = this.chart, mapTransforms = chart.mapTransforms;
|
|
349
|
+
// Legacy, built-in transforms
|
|
350
|
+
if (mapTransforms) {
|
|
351
|
+
for (var transform in mapTransforms) {
|
|
352
|
+
if (Object.hasOwnProperty.call(mapTransforms, transform) &&
|
|
353
|
+
mapTransforms[transform].hitZone) {
|
|
354
|
+
var coords = chart.transformFromLatLon(lonLat, mapTransforms[transform]);
|
|
355
|
+
if (coords && pointInPolygon(coords, mapTransforms[transform].hitZone.coordinates[0])) {
|
|
356
|
+
return coords;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return chart.transformFromLatLon(lonLat, mapTransforms['default'] // eslint-disable-line dot-notation
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
// Handle insets
|
|
364
|
+
for (var _i = 0, _a = this.insets; _i < _a.length; _i++) {
|
|
365
|
+
var inset = _a[_i];
|
|
366
|
+
if (inset.options.geoBounds &&
|
|
367
|
+
pointInPolygon({ x: lonLat.lon, y: lonLat.lat }, inset.options.geoBounds.coordinates[0])) {
|
|
368
|
+
var insetProjectedPoint = inset.projection.forward([lonLat.lon, lonLat.lat]), pxPoint = inset.projectedUnitsToPixels({ x: insetProjectedPoint[0], y: insetProjectedPoint[1] });
|
|
369
|
+
return this.pixelsToProjectedUnits(pxPoint);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
var point = this.projection.forward([lonLat.lon, lonLat.lat]);
|
|
373
|
+
if (!point.outside) {
|
|
374
|
+
return { x: point[0], y: point[1] };
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
/**
|
|
378
|
+
* Calculate longitude/latitude values for a point or position. Returns an
|
|
379
|
+
* object with the numeric properties `lon` and `lat`.
|
|
380
|
+
*
|
|
381
|
+
* @requires modules/map
|
|
382
|
+
*
|
|
383
|
+
* @function Highcharts.MapView#projectedUnitsToLonLat
|
|
384
|
+
*
|
|
385
|
+
* @since 10.0.0
|
|
386
|
+
*
|
|
387
|
+
* @sample maps/demo/latlon-advanced/ Advanced lat/lon demo
|
|
388
|
+
*
|
|
389
|
+
* @param {Highcharts.Point|Highcharts.ProjectedXY} point
|
|
390
|
+
* A `Point` instance or anything containing `x` and `y` properties
|
|
391
|
+
* with numeric values.
|
|
392
|
+
*
|
|
393
|
+
* @return {Highcharts.MapLonLatObject|undefined} An object with `lat` and
|
|
394
|
+
* `lon` properties.
|
|
395
|
+
*/
|
|
396
|
+
MapView.prototype.projectedUnitsToLonLat = function (point) {
|
|
397
|
+
var chart = this.chart, mapTransforms = chart.mapTransforms;
|
|
398
|
+
// Legacy, built-in transforms
|
|
399
|
+
if (mapTransforms) {
|
|
400
|
+
for (var transform in mapTransforms) {
|
|
401
|
+
if (Object.hasOwnProperty.call(mapTransforms, transform) &&
|
|
402
|
+
mapTransforms[transform].hitZone &&
|
|
403
|
+
pointInPolygon(point, mapTransforms[transform].hitZone.coordinates[0])) {
|
|
404
|
+
return chart.transformToLatLon(point, mapTransforms[transform]);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return chart.transformToLatLon(point, mapTransforms['default'] // eslint-disable-line dot-notation
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
var pxPoint = this.projectedUnitsToPixels(point);
|
|
411
|
+
for (var _i = 0, _a = this.insets; _i < _a.length; _i++) {
|
|
412
|
+
var inset = _a[_i];
|
|
413
|
+
if (inset.hitZone &&
|
|
414
|
+
pointInPolygon(pxPoint, inset.hitZone.coordinates[0])) {
|
|
415
|
+
var insetProjectedPoint = inset
|
|
416
|
+
.pixelsToProjectedUnits(pxPoint), coordinates_1 = inset.projection.inverse([insetProjectedPoint.x, insetProjectedPoint.y]);
|
|
417
|
+
return { lon: coordinates_1[0], lat: coordinates_1[1] };
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
var coordinates = this.projection.inverse([point.x, point.y]);
|
|
421
|
+
return { lon: coordinates[0], lat: coordinates[1] };
|
|
422
|
+
};
|
|
206
423
|
MapView.prototype.redraw = function (animation) {
|
|
207
424
|
this.chart.series.forEach(function (s) {
|
|
208
425
|
if (s.useMapGeometry) {
|
|
@@ -228,7 +445,6 @@ var MapView = /** @class */ (function () {
|
|
|
228
445
|
*/
|
|
229
446
|
MapView.prototype.setView = function (center, zoom, redraw, animation) {
|
|
230
447
|
if (redraw === void 0) { redraw = true; }
|
|
231
|
-
var zoomingIn = false;
|
|
232
448
|
if (center) {
|
|
233
449
|
this.center = center;
|
|
234
450
|
}
|
|
@@ -239,64 +455,59 @@ var MapView = /** @class */ (function () {
|
|
|
239
455
|
if (typeof this.options.maxZoom === 'number') {
|
|
240
456
|
zoom = Math.min(zoom, this.options.maxZoom);
|
|
241
457
|
}
|
|
242
|
-
zoomingIn = zoom > this.zoom;
|
|
243
458
|
this.zoom = zoom;
|
|
244
459
|
}
|
|
245
|
-
// Stay within the data bounds
|
|
246
460
|
var bounds = this.getProjectedBounds();
|
|
247
|
-
if (bounds
|
|
248
|
-
|
|
249
|
-
// could shift the location under the mouse
|
|
250
|
-
!zoomingIn) {
|
|
251
|
-
var projectedCenter = this.projection.forward(this.center);
|
|
252
|
-
var _a = this.chart, plotWidth = _a.plotWidth, plotHeight = _a.plotHeight;
|
|
253
|
-
var scale = this.getScale();
|
|
254
|
-
var bottomLeft = this.projectedUnitsToPixels({
|
|
461
|
+
if (bounds) {
|
|
462
|
+
var projectedCenter = this.projection.forward(this.center), _a = this.playingField, x = _a.x, y = _a.y, width = _a.width, height = _a.height, scale = this.getScale(), bottomLeft = this.projectedUnitsToPixels({
|
|
255
463
|
x: bounds.x1,
|
|
256
464
|
y: bounds.y1
|
|
257
|
-
})
|
|
258
|
-
var topRight = this.projectedUnitsToPixels({
|
|
465
|
+
}), topRight = this.projectedUnitsToPixels({
|
|
259
466
|
x: bounds.x2,
|
|
260
467
|
y: bounds.y2
|
|
261
|
-
})
|
|
262
|
-
var boundsCenterProjected = [
|
|
468
|
+
}), boundsCenterProjected = [
|
|
263
469
|
(bounds.x1 + bounds.x2) / 2,
|
|
264
470
|
(bounds.y1 + bounds.y2) / 2
|
|
265
471
|
];
|
|
472
|
+
// Constrain to data bounds
|
|
266
473
|
// Pixel coordinate system is reversed vs projected
|
|
267
|
-
var x1 = bottomLeft.x;
|
|
268
|
-
var y1 = topRight.y;
|
|
269
|
-
var x2 = topRight.x;
|
|
270
|
-
var y2 = bottomLeft.y;
|
|
474
|
+
var x1 = bottomLeft.x, y1 = topRight.y, x2 = topRight.x, y2 = bottomLeft.y;
|
|
271
475
|
// Map smaller than plot area, center it
|
|
272
|
-
if (x2 - x1 <
|
|
476
|
+
if (x2 - x1 < width) {
|
|
273
477
|
projectedCenter[0] = boundsCenterProjected[0];
|
|
274
478
|
// Off west
|
|
275
479
|
}
|
|
276
|
-
else if (x1 <
|
|
480
|
+
else if (x1 < x && x2 < x + width) {
|
|
277
481
|
// Adjust eastwards
|
|
278
|
-
projectedCenter[0] += Math.max(x1, x2 -
|
|
482
|
+
projectedCenter[0] += Math.max(x1 - x, x2 - width - x) / scale;
|
|
279
483
|
// Off east
|
|
280
484
|
}
|
|
281
|
-
else if (x2 >
|
|
485
|
+
else if (x2 > x + width && x1 > x) {
|
|
282
486
|
// Adjust westwards
|
|
283
|
-
projectedCenter[0] += Math.min(x2 -
|
|
487
|
+
projectedCenter[0] += Math.min(x2 - width - x, x1 - x) / scale;
|
|
284
488
|
}
|
|
285
489
|
// Map smaller than plot area, center it
|
|
286
|
-
if (y2 - y1 <
|
|
490
|
+
if (y2 - y1 < height) {
|
|
287
491
|
projectedCenter[1] = boundsCenterProjected[1];
|
|
288
492
|
// Off north
|
|
289
493
|
}
|
|
290
|
-
else if (y1 <
|
|
494
|
+
else if (y1 < y && y2 < y + height) {
|
|
291
495
|
// Adjust southwards
|
|
292
|
-
projectedCenter[1] -= Math.max(y1, y2 -
|
|
496
|
+
projectedCenter[1] -= Math.max(y1 - y, y2 - height - y) / scale;
|
|
293
497
|
// Off south
|
|
294
498
|
}
|
|
295
|
-
else if (y2 >
|
|
499
|
+
else if (y2 > y + height && y1 > y) {
|
|
296
500
|
// Adjust northwards
|
|
297
|
-
projectedCenter[1] -= Math.min(y2 -
|
|
501
|
+
projectedCenter[1] -= Math.min(y2 - height - y, y1 - y) / scale;
|
|
298
502
|
}
|
|
299
503
|
this.center = this.projection.inverse(projectedCenter);
|
|
504
|
+
this.insets.forEach(function (inset) {
|
|
505
|
+
if (inset.options.field) {
|
|
506
|
+
inset.hitZone = inset.getHitZone();
|
|
507
|
+
inset.playingField = inset.getField();
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
this.render();
|
|
300
511
|
}
|
|
301
512
|
fireEvent(this, 'afterSetView');
|
|
302
513
|
if (redraw) {
|
|
@@ -312,14 +523,24 @@ var MapView = /** @class */ (function () {
|
|
|
312
523
|
* @return {Highcharts.PositionObject} The position in pixels
|
|
313
524
|
*/
|
|
314
525
|
MapView.prototype.projectedUnitsToPixels = function (pos) {
|
|
315
|
-
var scale = this.getScale();
|
|
316
|
-
var projectedCenter = this.projection.forward(this.center);
|
|
317
|
-
var centerPxX = this.chart.plotWidth / 2;
|
|
318
|
-
var centerPxY = this.chart.plotHeight / 2;
|
|
526
|
+
var scale = this.getScale(), projectedCenter = this.projection.forward(this.center), field = this.playingField, centerPxX = field.x + field.width / 2, centerPxY = field.y + field.height / 2;
|
|
319
527
|
var x = centerPxX - scale * (projectedCenter[0] - pos.x);
|
|
320
528
|
var y = centerPxY + scale * (projectedCenter[1] - pos.y);
|
|
321
529
|
return { x: x, y: y };
|
|
322
530
|
};
|
|
531
|
+
/**
|
|
532
|
+
* Convert pixel position to longitude and latitude.
|
|
533
|
+
*
|
|
534
|
+
* @function Highcharts.MapView#pixelsToLonLat
|
|
535
|
+
* @since 10.0.0
|
|
536
|
+
* @param {Highcharts.PositionObject} pos
|
|
537
|
+
* The position in pixels
|
|
538
|
+
* @return {Highcharts.MapLonLatObject|undefined}
|
|
539
|
+
* The map coordinates
|
|
540
|
+
*/
|
|
541
|
+
MapView.prototype.pixelsToLonLat = function (pos) {
|
|
542
|
+
return this.projectedUnitsToLonLat(this.pixelsToProjectedUnits(pos));
|
|
543
|
+
};
|
|
323
544
|
/**
|
|
324
545
|
* Convert pixel position to projected units
|
|
325
546
|
*
|
|
@@ -329,15 +550,111 @@ var MapView = /** @class */ (function () {
|
|
|
329
550
|
* @return {Highcharts.PositionObject} The position in projected units
|
|
330
551
|
*/
|
|
331
552
|
MapView.prototype.pixelsToProjectedUnits = function (pos) {
|
|
332
|
-
var x = pos.x, y = pos.y;
|
|
333
|
-
var scale = this.getScale();
|
|
334
|
-
var projectedCenter = this.projection.forward(this.center);
|
|
335
|
-
var centerPxX = this.chart.plotWidth / 2;
|
|
336
|
-
var centerPxY = this.chart.plotHeight / 2;
|
|
553
|
+
var x = pos.x, y = pos.y, scale = this.getScale(), projectedCenter = this.projection.forward(this.center), field = this.playingField, centerPxX = field.x + field.width / 2, centerPxY = field.y + field.height / 2;
|
|
337
554
|
var projectedX = projectedCenter[0] + (x - centerPxX) / scale;
|
|
338
555
|
var projectedY = projectedCenter[1] - (y - centerPxY) / scale;
|
|
339
556
|
return { x: projectedX, y: projectedY };
|
|
340
557
|
};
|
|
558
|
+
MapView.prototype.setUpEvents = function () {
|
|
559
|
+
var _this = this;
|
|
560
|
+
var chart = this.chart;
|
|
561
|
+
// Set up panning for maps. In orthographic projections the globe will
|
|
562
|
+
// rotate, otherwise adjust the map center.
|
|
563
|
+
var mouseDownCenterProjected;
|
|
564
|
+
var mouseDownKey;
|
|
565
|
+
var mouseDownRotation;
|
|
566
|
+
var onPan = function (e) {
|
|
567
|
+
var pinchDown = chart.pointer.pinchDown, projection = _this.projection;
|
|
568
|
+
var mouseDownX = chart.mouseDownX, mouseDownY = chart.mouseDownY;
|
|
569
|
+
if (pinchDown.length === 1) {
|
|
570
|
+
mouseDownX = pinchDown[0].chartX;
|
|
571
|
+
mouseDownY = pinchDown[0].chartY;
|
|
572
|
+
}
|
|
573
|
+
if (typeof mouseDownX === 'number' &&
|
|
574
|
+
typeof mouseDownY === 'number') {
|
|
575
|
+
var key = mouseDownX + "," + mouseDownY, _a = e.originalEvent, chartX = _a.chartX, chartY = _a.chartY;
|
|
576
|
+
// Reset starting position
|
|
577
|
+
if (key !== mouseDownKey) {
|
|
578
|
+
mouseDownKey = key;
|
|
579
|
+
mouseDownCenterProjected = _this.projection
|
|
580
|
+
.forward(_this.center);
|
|
581
|
+
mouseDownRotation = (_this.projection.options.rotation || [0, 0]).slice();
|
|
582
|
+
}
|
|
583
|
+
// Get the natural zoom level of the projection itself when
|
|
584
|
+
// zoomed to view the full world
|
|
585
|
+
var worldBounds = projection.def && projection.def.bounds, worldZoom = (worldBounds &&
|
|
586
|
+
zoomFromBounds(worldBounds, _this.playingField)) || -Infinity;
|
|
587
|
+
// Panning rotates the globe
|
|
588
|
+
if (projection.options.name === 'Orthographic' &&
|
|
589
|
+
// ... but don't rotate if we're loading only a part of the
|
|
590
|
+
// world
|
|
591
|
+
(_this.minZoom || Infinity) < worldZoom * 1.1) {
|
|
592
|
+
// Empirical ratio where the globe rotates roughly the same
|
|
593
|
+
// speed as moving the pointer across the center of the
|
|
594
|
+
// projection
|
|
595
|
+
var ratio = 440 / (_this.getScale() * Math.min(chart.plotWidth, chart.plotHeight));
|
|
596
|
+
if (mouseDownRotation) {
|
|
597
|
+
var lon = (mouseDownX - chartX) * ratio -
|
|
598
|
+
mouseDownRotation[0], lat = clamp(-mouseDownRotation[1] -
|
|
599
|
+
(mouseDownY - chartY) * ratio, -80, 80), zoom = _this.zoom;
|
|
600
|
+
_this.update({
|
|
601
|
+
projection: {
|
|
602
|
+
rotation: [-lon, -lat]
|
|
603
|
+
}
|
|
604
|
+
}, false);
|
|
605
|
+
_this.zoom = zoom;
|
|
606
|
+
chart.redraw(false);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
var scale = _this.getScale();
|
|
611
|
+
var newCenter = _this.projection.inverse([
|
|
612
|
+
mouseDownCenterProjected[0] +
|
|
613
|
+
(mouseDownX - chartX) / scale,
|
|
614
|
+
mouseDownCenterProjected[1] -
|
|
615
|
+
(mouseDownY - chartY) / scale
|
|
616
|
+
]);
|
|
617
|
+
_this.setView(newCenter, void 0, true, false);
|
|
618
|
+
}
|
|
619
|
+
e.preventDefault();
|
|
620
|
+
}
|
|
621
|
+
};
|
|
622
|
+
addEvent(chart, 'pan', onPan);
|
|
623
|
+
addEvent(chart, 'touchpan', onPan);
|
|
624
|
+
// Perform the map zoom by selection
|
|
625
|
+
addEvent(chart, 'selection', function (evt) {
|
|
626
|
+
// Zoom in
|
|
627
|
+
if (!evt.resetSelection) {
|
|
628
|
+
var x = evt.x - chart.plotLeft;
|
|
629
|
+
var y = evt.y - chart.plotTop;
|
|
630
|
+
var _a = _this.pixelsToProjectedUnits({ x: x, y: y }), y1 = _a.y, x1 = _a.x;
|
|
631
|
+
var _b = _this.pixelsToProjectedUnits({ x: x + evt.width, y: y + evt.height }), y2 = _b.y, x2 = _b.x;
|
|
632
|
+
_this.fitToBounds({ x1: x1, y1: y1, x2: x2, y2: y2 }, void 0, true, evt.originalEvent.touches ?
|
|
633
|
+
// On touch zoom, don't animate, since we're already in
|
|
634
|
+
// transformed zoom preview
|
|
635
|
+
false :
|
|
636
|
+
// On mouse zoom, obey the chart-level animation
|
|
637
|
+
void 0);
|
|
638
|
+
// Only for mouse. Touch users can pinch out.
|
|
639
|
+
if (!/^touch/.test((evt.originalEvent.type))) {
|
|
640
|
+
chart.showResetZoom();
|
|
641
|
+
}
|
|
642
|
+
evt.preventDefault();
|
|
643
|
+
// Reset zoom
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
_this.zoomBy();
|
|
647
|
+
}
|
|
648
|
+
});
|
|
649
|
+
};
|
|
650
|
+
MapView.prototype.render = function () {
|
|
651
|
+
// We need a group for the insets
|
|
652
|
+
if (!this.group) {
|
|
653
|
+
this.group = this.chart.renderer.g('map-view')
|
|
654
|
+
.attr({ zIndex: 4 })
|
|
655
|
+
.add();
|
|
656
|
+
}
|
|
657
|
+
};
|
|
341
658
|
/**
|
|
342
659
|
* Update the view with given options
|
|
343
660
|
*
|
|
@@ -354,18 +671,41 @@ var MapView = /** @class */ (function () {
|
|
|
354
671
|
if (redraw === void 0) { redraw = true; }
|
|
355
672
|
var newProjection = options.projection;
|
|
356
673
|
var isDirtyProjection = newProjection && ((Projection.toString(newProjection) !==
|
|
357
|
-
Projection.toString(this.options.projection)));
|
|
674
|
+
Projection.toString(this.options.projection))), isDirtyInsets = false;
|
|
358
675
|
merge(true, this.userOptions, options);
|
|
359
676
|
merge(true, this.options, options);
|
|
360
|
-
|
|
677
|
+
// If anything changed with the insets, destroy them all and create
|
|
678
|
+
// again below
|
|
679
|
+
if ('insets' in options) {
|
|
680
|
+
this.insets.forEach(function (inset) { return inset.destroy(); });
|
|
681
|
+
this.insets.length = 0;
|
|
682
|
+
isDirtyInsets = true;
|
|
683
|
+
}
|
|
684
|
+
if (isDirtyProjection || isDirtyInsets) {
|
|
361
685
|
this.chart.series.forEach(function (series) {
|
|
686
|
+
var groups = series.transformGroups;
|
|
362
687
|
if (series.clearBounds) {
|
|
363
688
|
series.clearBounds();
|
|
364
689
|
}
|
|
365
690
|
series.isDirty = true;
|
|
366
691
|
series.isDirtyData = true;
|
|
692
|
+
// Destroy inset transform groups
|
|
693
|
+
if (isDirtyInsets && groups) {
|
|
694
|
+
while (groups.length > 1) {
|
|
695
|
+
var group = groups.pop();
|
|
696
|
+
if (group) {
|
|
697
|
+
group.destroy();
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
367
701
|
});
|
|
368
|
-
|
|
702
|
+
if (isDirtyProjection) {
|
|
703
|
+
this.projection = new Projection(this.options.projection);
|
|
704
|
+
}
|
|
705
|
+
// Create new insets
|
|
706
|
+
if (isDirtyInsets) {
|
|
707
|
+
this.createInsets();
|
|
708
|
+
}
|
|
369
709
|
// Fit to natural bounds if center/zoom are not explicitly given
|
|
370
710
|
if (!options.center && !isNumber(options.zoom)) {
|
|
371
711
|
this.fitToBounds(void 0, void 0, false);
|
|
@@ -447,4 +787,135 @@ var MapView = /** @class */ (function () {
|
|
|
447
787
|
};
|
|
448
788
|
return MapView;
|
|
449
789
|
}());
|
|
790
|
+
// Putting this in the same file due to circular dependency with MapView
|
|
791
|
+
var MapViewInset = /** @class */ (function (_super) {
|
|
792
|
+
__extends(MapViewInset, _super);
|
|
793
|
+
function MapViewInset(mapView, options) {
|
|
794
|
+
var _this = _super.call(this, mapView.chart, options) || this;
|
|
795
|
+
_this.id = options.id;
|
|
796
|
+
_this.mapView = mapView;
|
|
797
|
+
_this.options = merge(defaultInsetsOptions, options);
|
|
798
|
+
_this.allBounds = [];
|
|
799
|
+
if (_this.options.geoBounds) {
|
|
800
|
+
// The path in projected units in the map view's main projection.
|
|
801
|
+
// This is used for hit testing where the points should render.
|
|
802
|
+
var path = mapView.projection.path(_this.options.geoBounds);
|
|
803
|
+
_this.geoBoundsProjectedBox = boundsFromPath(path);
|
|
804
|
+
_this.geoBoundsProjectedPolygon = path.map(function (segment) { return [
|
|
805
|
+
segment[1] || 0,
|
|
806
|
+
segment[2] || 0
|
|
807
|
+
]; });
|
|
808
|
+
}
|
|
809
|
+
return _this;
|
|
810
|
+
}
|
|
811
|
+
// Get the playing field in pixels
|
|
812
|
+
MapViewInset.prototype.getField = function (padded) {
|
|
813
|
+
if (padded === void 0) { padded = true; }
|
|
814
|
+
var hitZone = this.hitZone;
|
|
815
|
+
if (hitZone) {
|
|
816
|
+
var padding = padded ? this.padding : [0, 0, 0, 0], polygon = hitZone.coordinates[0], xs = polygon.map(function (xy) { return xy[0]; }), ys = polygon.map(function (xy) { return xy[1]; }), x = Math.min.apply(0, xs) + padding[3], x2 = Math.max.apply(0, xs) - padding[1], y = Math.min.apply(0, ys) + padding[0], y2 = Math.max.apply(0, ys) - padding[2];
|
|
817
|
+
if (isNumber(x) && isNumber(y)) {
|
|
818
|
+
return {
|
|
819
|
+
x: x,
|
|
820
|
+
y: y,
|
|
821
|
+
width: x2 - x,
|
|
822
|
+
height: y2 - y
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
// Fall back to plot area
|
|
827
|
+
return _super.prototype.getField.call(this, padded);
|
|
828
|
+
};
|
|
829
|
+
// Get the hit zone in pixels
|
|
830
|
+
MapViewInset.prototype.getHitZone = function () {
|
|
831
|
+
var _a = this, chart = _a.chart, mapView = _a.mapView, options = _a.options, coordinates = (options.field || {}).coordinates;
|
|
832
|
+
if (coordinates) {
|
|
833
|
+
var polygon = coordinates[0];
|
|
834
|
+
if (options.units === 'percent') {
|
|
835
|
+
var relativeTo_1 = options.relativeTo === 'mapBoundingBox' &&
|
|
836
|
+
mapView.getMapBBox() ||
|
|
837
|
+
merge(chart.plotBox, { x: 0, y: 0 });
|
|
838
|
+
polygon = polygon.map(function (xy) { return [
|
|
839
|
+
relativeLength(xy[0] + "%", relativeTo_1.width, relativeTo_1.x),
|
|
840
|
+
relativeLength(xy[1] + "%", relativeTo_1.height, relativeTo_1.y)
|
|
841
|
+
]; });
|
|
842
|
+
}
|
|
843
|
+
return {
|
|
844
|
+
type: 'Polygon',
|
|
845
|
+
coordinates: [polygon]
|
|
846
|
+
};
|
|
847
|
+
}
|
|
848
|
+
};
|
|
849
|
+
MapViewInset.prototype.getProjectedBounds = function () {
|
|
850
|
+
return MapView.compositeBounds(this.allBounds);
|
|
851
|
+
};
|
|
852
|
+
// Determine whether a point on the main projected plane is inside the
|
|
853
|
+
// geoBounds of the inset.
|
|
854
|
+
MapViewInset.prototype.isInside = function (point) {
|
|
855
|
+
var _a = this, geoBoundsProjectedBox = _a.geoBoundsProjectedBox, geoBoundsProjectedPolygon = _a.geoBoundsProjectedPolygon;
|
|
856
|
+
return Boolean(
|
|
857
|
+
// First we do a pre-pass to check whether the test point is inside
|
|
858
|
+
// the rectangular bounding box of the polygon. This is less
|
|
859
|
+
// expensive and will rule out most cases.
|
|
860
|
+
geoBoundsProjectedBox &&
|
|
861
|
+
point.x >= geoBoundsProjectedBox.x1 &&
|
|
862
|
+
point.x <= geoBoundsProjectedBox.x2 &&
|
|
863
|
+
point.y >= geoBoundsProjectedBox.y1 &&
|
|
864
|
+
point.y <= geoBoundsProjectedBox.y2 &&
|
|
865
|
+
// Next, do the more expensive check whether the point is inside the
|
|
866
|
+
// polygon itself.
|
|
867
|
+
geoBoundsProjectedPolygon &&
|
|
868
|
+
pointInPolygon(point, geoBoundsProjectedPolygon));
|
|
869
|
+
};
|
|
870
|
+
// Render the map view inset with the border path
|
|
871
|
+
MapViewInset.prototype.render = function () {
|
|
872
|
+
var _a = this, chart = _a.chart, mapView = _a.mapView, options = _a.options, borderPath = options.borderPath || options.field;
|
|
873
|
+
if (borderPath && mapView.group) {
|
|
874
|
+
var animate = true;
|
|
875
|
+
if (!this.border) {
|
|
876
|
+
this.border = chart.renderer
|
|
877
|
+
.path()
|
|
878
|
+
.addClass('highcharts-mapview-inset-border')
|
|
879
|
+
.add(mapView.group);
|
|
880
|
+
animate = false;
|
|
881
|
+
}
|
|
882
|
+
if (!chart.styledMode) {
|
|
883
|
+
this.border.attr({
|
|
884
|
+
stroke: options.borderColor,
|
|
885
|
+
'stroke-width': options.borderWidth
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
var crisp_1 = Math.round(this.border.strokeWidth()) % 2 / 2, field_1 = (options.relativeTo === 'mapBoundingBox' &&
|
|
889
|
+
mapView.getMapBBox()) || mapView.playingField;
|
|
890
|
+
var d = (borderPath.coordinates || []).reduce(function (d, lineString) {
|
|
891
|
+
return lineString.reduce(function (d, point, i) {
|
|
892
|
+
var x = point[0], y = point[1];
|
|
893
|
+
if (options.units === 'percent') {
|
|
894
|
+
x = chart.plotLeft + relativeLength(x + "%", field_1.width, field_1.x);
|
|
895
|
+
y = chart.plotTop + relativeLength(y + "%", field_1.height, field_1.y);
|
|
896
|
+
}
|
|
897
|
+
x = Math.floor(x) + crisp_1;
|
|
898
|
+
y = Math.floor(y) + crisp_1;
|
|
899
|
+
d.push(i === 0 ? ['M', x, y] : ['L', x, y]);
|
|
900
|
+
return d;
|
|
901
|
+
}, d);
|
|
902
|
+
}, []);
|
|
903
|
+
// Apply the border path
|
|
904
|
+
this.border[animate ? 'animate' : 'attr']({ d: d });
|
|
905
|
+
}
|
|
906
|
+
};
|
|
907
|
+
MapViewInset.prototype.destroy = function () {
|
|
908
|
+
if (this.border) {
|
|
909
|
+
this.border = this.border.destroy();
|
|
910
|
+
}
|
|
911
|
+
this.eventsToUnbind.forEach(function (f) { return f(); });
|
|
912
|
+
};
|
|
913
|
+
// No chart-level events for insets
|
|
914
|
+
MapViewInset.prototype.setUpEvents = function () { };
|
|
915
|
+
return MapViewInset;
|
|
916
|
+
}(MapView));
|
|
917
|
+
// Initialize the MapView after initialization, but before firstRender
|
|
918
|
+
addEvent(MapChart, 'afterInit', function () {
|
|
919
|
+
this.mapView = new MapView(this, this.options.mapView);
|
|
920
|
+
});
|
|
450
921
|
export default MapView;
|