highcharts 9.1.1 → 9.2.2

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.
Files changed (718) hide show
  1. package/bower.json +1 -1
  2. package/css/annotations/popup.css +29 -28
  3. package/css/annotations/popup.scss +29 -27
  4. package/css/highcharts.css +15 -0
  5. package/css/highcharts.scss +12 -0
  6. package/css/stocktools/gui.css +1 -0
  7. package/css/stocktools/gui.scss +1 -0
  8. package/css/themes/dark-unica.css +15 -0
  9. package/css/themes/grid-light.css +15 -0
  10. package/css/themes/sand-signika.css +15 -0
  11. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +8 -2
  12. package/es-modules/Accessibility/Components/LegendComponent.js +19 -8
  13. package/es-modules/Accessibility/Components/MenuComponent.js +19 -13
  14. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +4 -8
  15. package/es-modules/Accessibility/FocusBorder.js +1 -3
  16. package/es-modules/Accessibility/Options/LangOptions.js +3 -3
  17. package/es-modules/Accessibility/Utils/Announcer.js +22 -5
  18. package/es-modules/Accessibility/Utils/ChartUtilities.js +6 -1
  19. package/es-modules/Core/Animation/AnimationUtilities.js +12 -4
  20. package/es-modules/Core/Animation/Fx.js +15 -12
  21. package/es-modules/Core/Axis/Axis.js +25 -13
  22. package/es-modules/Core/Axis/AxisDefaults.js +0 -1
  23. package/es-modules/Core/Axis/BrokenAxis.js +32 -15
  24. package/es-modules/Core/Axis/Color/ColorAxis.js +665 -0
  25. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +237 -0
  26. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +434 -0
  27. package/es-modules/Core/Axis/DateTimeAxis.js +163 -133
  28. package/es-modules/Core/Axis/GridAxis.js +8 -3
  29. package/es-modules/Core/Axis/LogarithmicAxis.js +159 -117
  30. package/es-modules/Core/Axis/OrdinalAxis.js +666 -460
  31. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +874 -0
  32. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +292 -0
  33. package/es-modules/Core/Axis/RadialAxis.js +858 -745
  34. package/es-modules/Core/Axis/ScrollbarAxis.js +7 -0
  35. package/es-modules/Core/Axis/StackingAxis.js +159 -140
  36. package/es-modules/Core/Axis/Tick.js +17 -27
  37. package/es-modules/Core/Chart/Chart.js +24 -38
  38. package/es-modules/Core/Chart/ChartDefaults.js +1 -1
  39. package/es-modules/Core/Chart/StockChart.js +12 -0
  40. package/es-modules/Core/Color/Color.js +96 -104
  41. package/es-modules/Core/DefaultOptions.js +269 -248
  42. package/es-modules/Core/Foundation.js +9 -8
  43. package/es-modules/Core/Geometry/CircleUtilities.js +385 -0
  44. package/es-modules/Core/Geometry/GeometryUtilities.js +83 -0
  45. package/es-modules/Core/Globals.js +23 -1
  46. package/es-modules/{Extensions/Ajax.js → Core/HttpUtilities.js} +86 -42
  47. package/es-modules/Core/{Legend.js → Legend/Legend.js} +142 -116
  48. package/es-modules/{Mixins → Core/Legend}/LegendSymbol.js +54 -38
  49. package/es-modules/Core/Navigator.js +3 -0
  50. package/es-modules/Core/Pointer.js +9 -0
  51. package/es-modules/Core/Renderer/HTML/AST.js +100 -82
  52. package/es-modules/Core/Renderer/HTML/HTMLElement.js +17 -7
  53. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +26 -9
  54. package/es-modules/Core/Renderer/RendererRegistry.js +9 -4
  55. package/es-modules/Core/Renderer/RendererUtilities.js +159 -0
  56. package/es-modules/Core/Renderer/SVG/SVGElement.js +13 -7
  57. package/es-modules/Core/Renderer/SVG/SVGLabel.js +9 -29
  58. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +2 -2
  59. package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -16
  60. package/es-modules/Core/Responsive.js +166 -148
  61. package/es-modules/Core/Series/DataLabel.js +564 -0
  62. package/es-modules/Core/Series/Point.js +233 -209
  63. package/es-modules/Core/Series/Series.js +174 -2339
  64. package/es-modules/Core/Series/SeriesDefaults.js +2293 -0
  65. package/es-modules/Core/Series/SeriesRegistry.js +3 -9
  66. package/es-modules/Core/Time.js +78 -2
  67. package/es-modules/Core/Tooltip.js +178 -236
  68. package/es-modules/Core/Utilities.js +409 -394
  69. package/es-modules/Extensions/Annotations/Annotations.js +102 -49
  70. package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +9 -1
  71. package/es-modules/Extensions/Annotations/NavigationBindings.js +30 -25
  72. package/es-modules/Extensions/Annotations/Popup.js +16 -7
  73. package/es-modules/Extensions/Boost/BoostOverrides.js +5 -1
  74. package/es-modules/Extensions/Boost/WGLRenderer.js +5 -4
  75. package/es-modules/Extensions/Boost/WGLVBuffer.js +3 -0
  76. package/es-modules/Extensions/BoostCanvas.js +1 -1
  77. package/es-modules/Extensions/CurrentDateIndication.js +1 -1
  78. package/es-modules/Extensions/Data.js +82 -76
  79. package/es-modules/Extensions/DataGrouping.js +225 -184
  80. package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
  81. package/es-modules/Extensions/DraggablePoints.js +13 -5
  82. package/es-modules/Extensions/Drilldown.js +41 -14
  83. package/es-modules/Extensions/ExportData.js +7 -4
  84. package/es-modules/Extensions/Exporting/Exporting.js +1273 -0
  85. package/es-modules/Extensions/Exporting/ExportingDefaults.js +803 -0
  86. package/es-modules/Extensions/Exporting/ExportingSymbols.js +73 -0
  87. package/es-modules/Extensions/FullScreen.js +7 -5
  88. package/es-modules/Extensions/NoDataToDisplay.js +1 -1
  89. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +617 -0
  90. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +58 -0
  91. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  92. package/es-modules/Extensions/Pane.js +0 -1
  93. package/es-modules/Extensions/PatternFill.js +23 -10
  94. package/es-modules/Extensions/Polar.js +2 -1
  95. package/es-modules/Extensions/RangeSelector.js +1 -1
  96. package/es-modules/Extensions/Themes/Avocado.js +49 -20
  97. package/es-modules/Extensions/Themes/DarkBlue.js +226 -203
  98. package/es-modules/Extensions/Themes/DarkGreen.js +231 -203
  99. package/es-modules/Extensions/Themes/DarkUnica.js +201 -172
  100. package/es-modules/Extensions/Themes/Gray.js +228 -205
  101. package/es-modules/Extensions/Themes/Grid.js +109 -81
  102. package/es-modules/Extensions/Themes/GridLight.js +83 -55
  103. package/es-modules/Extensions/Themes/HighContrastDark.js +192 -164
  104. package/es-modules/Extensions/Themes/HighContrastLight.js +49 -21
  105. package/es-modules/Extensions/Themes/SandSignika.js +115 -86
  106. package/es-modules/Extensions/Themes/Skies.js +102 -74
  107. package/es-modules/Extensions/Themes/Sunset.js +47 -19
  108. package/es-modules/Mixins/ColorSeries.js +0 -1
  109. package/es-modules/Mixins/MultipleLines.js +6 -0
  110. package/es-modules/Mixins/TreeSeries.js +1 -1
  111. package/es-modules/Series/Area/AreaSeries.js +2 -2
  112. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +2 -2
  113. package/es-modules/Series/Bubble/BubbleLegendComposition.js +279 -0
  114. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +267 -0
  115. package/es-modules/Series/Bubble/BubbleLegendItem.js +472 -0
  116. package/es-modules/Series/Bubble/BubbleSeries.js +6 -2
  117. package/es-modules/Series/Column/ColumnDataLabel.js +109 -0
  118. package/es-modules/Series/Column/ColumnSeries.js +39 -26
  119. package/es-modules/Series/Column3D/Column3DComposition.js +5 -2
  120. package/es-modules/Series/Flags/FlagsSeries.js +8 -1
  121. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  122. package/es-modules/Series/Heatmap/HeatmapSeries.js +9 -5
  123. package/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +60 -0
  124. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +277 -0
  125. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +83 -0
  126. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +370 -0
  127. package/es-modules/Series/Line/LineSeries.js +12 -8
  128. package/es-modules/Series/Map/MapSeries.js +5 -3
  129. package/es-modules/Series/MapBubble/MapBubbleSeries.js +6 -5
  130. package/es-modules/Series/OHLC/OHLCPoint.js +11 -0
  131. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -1
  132. package/es-modules/Series/Pie/PieDataLabel.js +448 -0
  133. package/es-modules/Series/Pie/PiePoint.js +35 -34
  134. package/es-modules/Series/Pie/PieSeries.js +19 -16
  135. package/es-modules/Series/Polygon/PolygonSeries.js +3 -3
  136. package/es-modules/Series/Sankey/SankeySeries.js +9 -7
  137. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +2 -2
  138. package/es-modules/Series/Sunburst/SunburstSeries.js +1 -14
  139. package/es-modules/Series/Timeline/TimelinePoint.js +6 -0
  140. package/es-modules/Series/Timeline/TimelineSeries.js +14 -17
  141. package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
  142. package/es-modules/Series/Venn/VennSeries.js +4 -4
  143. package/es-modules/Series/Venn/VennUtils.js +10 -16
  144. package/es-modules/Series/Waterfall/WaterfallSeries.js +40 -35
  145. package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -0
  146. package/es-modules/Series/XRange/XRangeSeries.js +4 -2
  147. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +92 -75
  148. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +20 -8
  149. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +17 -4
  150. package/es-modules/Stock/StockToolsBindings.js +77 -38
  151. package/es-modules/Stock/StockToolsGui.js +28 -3
  152. package/es-modules/masters/highcharts-3d.src.js +1 -1
  153. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  154. package/es-modules/masters/highcharts-more.src.js +11 -7
  155. package/es-modules/masters/highcharts.src.js +25 -9
  156. package/es-modules/masters/highmaps.src.js +1 -1
  157. package/es-modules/masters/highstock.src.js +1 -1
  158. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  159. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  160. package/es-modules/masters/indicators/ao.src.js +1 -1
  161. package/es-modules/masters/indicators/apo.src.js +1 -1
  162. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  163. package/es-modules/masters/indicators/aroon.src.js +1 -1
  164. package/es-modules/masters/indicators/atr.src.js +1 -1
  165. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  166. package/es-modules/masters/indicators/cci.src.js +1 -1
  167. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  168. package/es-modules/masters/indicators/cmf.src.js +1 -1
  169. package/es-modules/masters/indicators/cmo.src.js +1 -1
  170. package/es-modules/masters/indicators/dema.src.js +1 -1
  171. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  172. package/es-modules/masters/indicators/dmi.src.js +1 -1
  173. package/es-modules/masters/indicators/dpo.src.js +1 -1
  174. package/es-modules/masters/indicators/ema.src.js +1 -1
  175. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  176. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  177. package/es-modules/masters/indicators/indicators.src.js +1 -1
  178. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  179. package/es-modules/masters/indicators/klinger.src.js +1 -1
  180. package/es-modules/masters/indicators/macd.src.js +1 -1
  181. package/es-modules/masters/indicators/mfi.src.js +1 -1
  182. package/es-modules/masters/indicators/momentum.src.js +1 -1
  183. package/es-modules/masters/indicators/natr.src.js +1 -1
  184. package/es-modules/masters/indicators/obv.src.js +1 -1
  185. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  186. package/es-modules/masters/indicators/ppo.src.js +1 -1
  187. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  188. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  189. package/es-modules/masters/indicators/psar.src.js +1 -1
  190. package/es-modules/masters/indicators/regressions.src.js +1 -1
  191. package/es-modules/masters/indicators/roc.src.js +1 -1
  192. package/es-modules/masters/indicators/rsi.src.js +1 -1
  193. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  194. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  195. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  196. package/es-modules/masters/indicators/tema.src.js +1 -1
  197. package/es-modules/masters/indicators/trendline.src.js +1 -1
  198. package/es-modules/masters/indicators/trix.src.js +1 -1
  199. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  200. package/es-modules/masters/indicators/vwap.src.js +1 -1
  201. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  202. package/es-modules/masters/indicators/wma.src.js +1 -1
  203. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  204. package/es-modules/masters/modules/accessibility.src.js +1 -1
  205. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  206. package/es-modules/masters/modules/annotations.src.js +1 -1
  207. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  208. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  209. package/es-modules/masters/modules/boost.src.js +1 -1
  210. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  211. package/es-modules/masters/modules/bullet.src.js +1 -1
  212. package/es-modules/masters/modules/coloraxis.src.js +6 -2
  213. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  214. package/es-modules/masters/modules/cylinder.src.js +1 -1
  215. package/es-modules/masters/modules/data.src.js +8 -1
  216. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  217. package/es-modules/masters/modules/debugger.src.js +1 -1
  218. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  219. package/es-modules/masters/modules/dotplot.src.js +1 -1
  220. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  221. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  222. package/es-modules/masters/modules/drilldown.src.js +1 -1
  223. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  224. package/es-modules/masters/modules/export-data.src.js +1 -1
  225. package/es-modules/masters/modules/exporting.src.js +10 -2
  226. package/es-modules/masters/modules/full-screen.src.js +1 -1
  227. package/es-modules/masters/modules/funnel.src.js +1 -1
  228. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  229. package/es-modules/masters/modules/gantt.src.js +9 -4
  230. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  231. package/es-modules/masters/modules/heatmap.src.js +6 -2
  232. package/es-modules/masters/modules/heikinashi.src.js +14 -0
  233. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  234. package/es-modules/masters/modules/hollowcandlestick.src.js +14 -0
  235. package/es-modules/masters/modules/item-series.src.js +1 -1
  236. package/es-modules/masters/modules/lollipop.src.js +1 -1
  237. package/es-modules/masters/modules/map.src.js +10 -6
  238. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  239. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  240. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  241. package/es-modules/masters/modules/offline-exporting.src.js +8 -2
  242. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  243. package/es-modules/masters/modules/oldie.src.js +1 -1
  244. package/es-modules/masters/modules/organization.src.js +1 -1
  245. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  246. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  247. package/es-modules/masters/modules/pareto.src.js +1 -1
  248. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  249. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  250. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  251. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  252. package/es-modules/masters/modules/sankey.src.js +1 -1
  253. package/es-modules/masters/modules/series-label.src.js +1 -1
  254. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  255. package/es-modules/masters/modules/sonification.src.js +1 -1
  256. package/es-modules/masters/modules/static-scale.src.js +1 -1
  257. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  258. package/es-modules/masters/modules/stock.src.js +3 -2
  259. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  260. package/es-modules/masters/modules/sunburst.src.js +1 -1
  261. package/es-modules/masters/modules/tilemap.src.js +1 -1
  262. package/es-modules/masters/modules/timeline.src.js +1 -1
  263. package/es-modules/masters/modules/treegrid.src.js +1 -1
  264. package/es-modules/masters/modules/treemap.src.js +1 -1
  265. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  266. package/es-modules/masters/modules/variwide.src.js +1 -1
  267. package/es-modules/masters/modules/vector.src.js +1 -1
  268. package/es-modules/masters/modules/venn.src.js +1 -1
  269. package/es-modules/masters/modules/windbarb.src.js +1 -1
  270. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  271. package/es-modules/masters/modules/xrange.src.js +1 -1
  272. package/es-modules/masters/themes/avocado.src.js +5 -2
  273. package/es-modules/masters/themes/dark-blue.src.js +5 -2
  274. package/es-modules/masters/themes/dark-green.src.js +5 -2
  275. package/es-modules/masters/themes/dark-unica.src.js +5 -2
  276. package/es-modules/masters/themes/gray.src.js +5 -2
  277. package/es-modules/masters/themes/grid-light.src.js +5 -2
  278. package/es-modules/masters/themes/grid.src.js +5 -2
  279. package/es-modules/masters/themes/high-contrast-dark.src.js +5 -2
  280. package/es-modules/masters/themes/high-contrast-light.src.js +5 -2
  281. package/es-modules/masters/themes/sand-signika.src.js +5 -2
  282. package/es-modules/masters/themes/skies.src.js +5 -2
  283. package/es-modules/masters/themes/sunset.src.js +5 -2
  284. package/gfx/stock-icons/annotations-hidden.svg +1 -1
  285. package/gfx/stock-icons/annotations-visible.svg +2 -2
  286. package/gfx/stock-icons/arrow-bottom.svg +1 -1
  287. package/gfx/stock-icons/arrow-left.svg +1 -1
  288. package/gfx/stock-icons/arrow-line.svg +1 -1
  289. package/gfx/stock-icons/arrow-ray.svg +1 -1
  290. package/gfx/stock-icons/arrow-right.svg +1 -1
  291. package/gfx/stock-icons/arrow-segment.svg +1 -2
  292. package/gfx/stock-icons/circle.svg +1 -1
  293. package/gfx/stock-icons/close.svg +2 -2
  294. package/gfx/stock-icons/crooked-3.svg +1 -1
  295. package/gfx/stock-icons/crooked-5.svg +1 -1
  296. package/gfx/stock-icons/current-price-hide.svg +3 -3
  297. package/gfx/stock-icons/current-price-show.svg +2 -2
  298. package/gfx/stock-icons/destroy.svg +1 -1
  299. package/gfx/stock-icons/drawing.svg +18 -0
  300. package/gfx/stock-icons/edit.svg +1 -1
  301. package/gfx/stock-icons/elliott-3.svg +1 -1
  302. package/gfx/stock-icons/elliott-5.svg +1 -1
  303. package/gfx/stock-icons/ellipse.svg +11 -0
  304. package/gfx/stock-icons/fibonacci-timezone.svg +16 -0
  305. package/gfx/stock-icons/fibonacci.svg +1 -1
  306. package/gfx/stock-icons/flag-basic.svg +1 -1
  307. package/gfx/stock-icons/flag-diamond.svg +2 -2
  308. package/gfx/stock-icons/flag-elipse.svg +1 -1
  309. package/gfx/stock-icons/flag-trapeze.svg +2 -2
  310. package/gfx/stock-icons/fullscreen.svg +4 -4
  311. package/gfx/stock-icons/horizontal-line.svg +1 -1
  312. package/gfx/stock-icons/indicators.svg +3 -3
  313. package/gfx/stock-icons/label.svg +4 -4
  314. package/gfx/stock-icons/line.svg +1 -1
  315. package/gfx/stock-icons/linear.svg +11 -0
  316. package/gfx/stock-icons/logarithmic.svg +1 -0
  317. package/gfx/stock-icons/measure-x.svg +2 -2
  318. package/gfx/stock-icons/measure-xy.svg +1 -1
  319. package/gfx/stock-icons/measure-y.svg +1 -1
  320. package/gfx/stock-icons/panning.svg +17 -0
  321. package/gfx/stock-icons/parallel-channel.svg +1 -1
  322. package/gfx/stock-icons/pitchfork.svg +1 -1
  323. package/gfx/stock-icons/ray.svg +1 -1
  324. package/gfx/stock-icons/rectangle.svg +1 -1
  325. package/gfx/stock-icons/remove-annotations.svg +2 -2
  326. package/gfx/stock-icons/save-chart.svg +3 -3
  327. package/gfx/stock-icons/segment.svg +1 -1
  328. package/gfx/stock-icons/separator.svg +1 -1
  329. package/gfx/stock-icons/series-candlestick.svg +1 -1
  330. package/gfx/stock-icons/series-heikin-ashi.svg +1 -0
  331. package/gfx/stock-icons/series-hlc.svg +1 -0
  332. package/gfx/stock-icons/series-hollow-candlestick.svg +1 -0
  333. package/gfx/stock-icons/series-line.svg +1 -1
  334. package/gfx/stock-icons/series-ohlc.svg +4 -4
  335. package/gfx/stock-icons/time-cycles.svg +35 -0
  336. package/gfx/stock-icons/vertical-arrow.svg +1 -1
  337. package/gfx/stock-icons/vertical-counter.svg +1 -1
  338. package/gfx/stock-icons/vertical-double-arrow.svg +1 -1
  339. package/gfx/stock-icons/vertical-label.svg +3 -3
  340. package/gfx/stock-icons/vertical-line.svg +1 -1
  341. package/gfx/stock-icons/zoom-x.svg +2 -2
  342. package/gfx/stock-icons/zoom-xy.svg +2 -2
  343. package/gfx/stock-icons/zoom-y.svg +2 -2
  344. package/highcharts-3d.js +24 -24
  345. package/highcharts-3d.js.map +1 -1
  346. package/highcharts-3d.src.js +6 -3
  347. package/highcharts-gantt.js +800 -792
  348. package/highcharts-gantt.js.map +1 -1
  349. package/highcharts-gantt.src.js +16535 -15918
  350. package/highcharts-more.d.ts +73 -1
  351. package/highcharts-more.js +193 -192
  352. package/highcharts-more.js.map +1 -1
  353. package/highcharts-more.src.d.ts +73 -1
  354. package/highcharts-more.src.js +8044 -7839
  355. package/highcharts.d.ts +3850 -177
  356. package/highcharts.js +589 -581
  357. package/highcharts.js.map +1 -1
  358. package/highcharts.src.d.ts +3850 -177
  359. package/highcharts.src.js +16635 -16060
  360. package/highmaps.js +708 -698
  361. package/highmaps.js.map +1 -1
  362. package/highmaps.src.js +17419 -16521
  363. package/highstock.js +782 -769
  364. package/highstock.js.map +1 -1
  365. package/highstock.src.js +28867 -27975
  366. package/indicators/acceleration-bands.js +9 -9
  367. package/indicators/acceleration-bands.js.map +1 -1
  368. package/indicators/acceleration-bands.src.js +7 -1
  369. package/indicators/accumulation-distribution.js +1 -1
  370. package/indicators/accumulation-distribution.src.js +1 -1
  371. package/indicators/ao.js +1 -1
  372. package/indicators/ao.src.js +1 -1
  373. package/indicators/apo.js +1 -1
  374. package/indicators/apo.src.js +1 -1
  375. package/indicators/aroon-oscillator.js +9 -9
  376. package/indicators/aroon-oscillator.js.map +1 -1
  377. package/indicators/aroon-oscillator.src.js +7 -1
  378. package/indicators/aroon.js +9 -9
  379. package/indicators/aroon.js.map +1 -1
  380. package/indicators/aroon.src.js +7 -1
  381. package/indicators/atr.js +1 -1
  382. package/indicators/atr.src.js +1 -1
  383. package/indicators/bollinger-bands.js +9 -9
  384. package/indicators/bollinger-bands.js.map +1 -1
  385. package/indicators/bollinger-bands.src.js +7 -1
  386. package/indicators/cci.js +1 -1
  387. package/indicators/cci.src.js +1 -1
  388. package/indicators/chaikin.js +1 -1
  389. package/indicators/chaikin.src.js +1 -1
  390. package/indicators/cmf.js +1 -1
  391. package/indicators/cmf.src.js +1 -1
  392. package/indicators/cmo.js +1 -1
  393. package/indicators/cmo.src.js +1 -1
  394. package/indicators/dema.js +1 -1
  395. package/indicators/dema.src.js +1 -1
  396. package/indicators/disparity-index.js +1 -1
  397. package/indicators/disparity-index.src.js +1 -1
  398. package/indicators/dmi.js +11 -11
  399. package/indicators/dmi.js.map +1 -1
  400. package/indicators/dmi.src.js +7 -1
  401. package/indicators/dpo.js +1 -1
  402. package/indicators/dpo.src.js +1 -1
  403. package/indicators/ema.js +1 -1
  404. package/indicators/ema.src.js +1 -1
  405. package/indicators/ichimoku-kinko-hyo.js +1 -1
  406. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  407. package/indicators/indicators-all.js +203 -200
  408. package/indicators/indicators-all.js.map +1 -1
  409. package/indicators/indicators-all.src.js +206 -104
  410. package/indicators/indicators.js +12 -11
  411. package/indicators/indicators.js.map +1 -1
  412. package/indicators/indicators.src.js +108 -90
  413. package/indicators/keltner-channels.js +9 -9
  414. package/indicators/keltner-channels.js.map +1 -1
  415. package/indicators/keltner-channels.src.js +7 -1
  416. package/indicators/klinger.js +13 -13
  417. package/indicators/klinger.js.map +1 -1
  418. package/indicators/klinger.src.js +7 -1
  419. package/indicators/macd.js +1 -1
  420. package/indicators/macd.src.js +1 -1
  421. package/indicators/mfi.js +1 -1
  422. package/indicators/mfi.src.js +1 -1
  423. package/indicators/momentum.js +1 -1
  424. package/indicators/momentum.src.js +1 -1
  425. package/indicators/natr.js +1 -1
  426. package/indicators/natr.src.js +1 -1
  427. package/indicators/obv.js +1 -1
  428. package/indicators/obv.src.js +1 -1
  429. package/indicators/pivot-points.js +1 -1
  430. package/indicators/pivot-points.src.js +1 -1
  431. package/indicators/ppo.js +1 -1
  432. package/indicators/ppo.src.js +1 -1
  433. package/indicators/price-channel.js +9 -9
  434. package/indicators/price-channel.js.map +1 -1
  435. package/indicators/price-channel.src.js +7 -1
  436. package/indicators/price-envelopes.js +1 -1
  437. package/indicators/price-envelopes.src.js +1 -1
  438. package/indicators/psar.js +1 -1
  439. package/indicators/psar.src.js +1 -1
  440. package/indicators/regressions.js +1 -1
  441. package/indicators/regressions.src.js +1 -1
  442. package/indicators/roc.js +1 -1
  443. package/indicators/roc.src.js +1 -1
  444. package/indicators/rsi.js +1 -1
  445. package/indicators/rsi.src.js +1 -1
  446. package/indicators/slow-stochastic.js +1 -1
  447. package/indicators/slow-stochastic.src.js +1 -1
  448. package/indicators/stochastic.js +10 -10
  449. package/indicators/stochastic.js.map +1 -1
  450. package/indicators/stochastic.src.js +7 -1
  451. package/indicators/supertrend.js +10 -10
  452. package/indicators/supertrend.js.map +1 -1
  453. package/indicators/supertrend.src.js +23 -10
  454. package/indicators/tema.js +1 -1
  455. package/indicators/tema.src.js +1 -1
  456. package/indicators/trendline.js +1 -1
  457. package/indicators/trendline.src.js +1 -1
  458. package/indicators/trix.js +1 -1
  459. package/indicators/trix.src.js +1 -1
  460. package/indicators/volume-by-price.js +17 -15
  461. package/indicators/volume-by-price.js.map +1 -1
  462. package/indicators/volume-by-price.src.js +71 -6
  463. package/indicators/vwap.js +1 -1
  464. package/indicators/vwap.src.js +1 -1
  465. package/indicators/williams-r.js +1 -1
  466. package/indicators/williams-r.src.js +1 -1
  467. package/indicators/wma.js +1 -1
  468. package/indicators/wma.src.js +1 -1
  469. package/indicators/zigzag.js +1 -1
  470. package/indicators/zigzag.src.js +1 -1
  471. package/modules/accessibility.js +203 -202
  472. package/modules/accessibility.js.map +1 -1
  473. package/modules/accessibility.src.js +89 -49
  474. package/modules/annotations-advanced.js +164 -163
  475. package/modules/annotations-advanced.js.map +1 -1
  476. package/modules/annotations-advanced.src.js +162 -87
  477. package/modules/annotations.js +111 -111
  478. package/modules/annotations.js.map +1 -1
  479. package/modules/annotations.src.js +162 -87
  480. package/modules/arrow-symbols.js +1 -1
  481. package/modules/arrow-symbols.src.js +1 -1
  482. package/modules/boost-canvas.js +2 -2
  483. package/modules/boost-canvas.js.map +1 -1
  484. package/modules/boost-canvas.src.js +2 -2
  485. package/modules/boost.js +52 -52
  486. package/modules/boost.js.map +1 -1
  487. package/modules/boost.src.js +15 -7
  488. package/modules/broken-axis.js +13 -13
  489. package/modules/broken-axis.js.map +1 -1
  490. package/modules/broken-axis.src.js +34 -15
  491. package/modules/bullet.js +1 -1
  492. package/modules/bullet.src.js +1 -1
  493. package/modules/coloraxis.js +24 -22
  494. package/modules/coloraxis.js.map +1 -1
  495. package/modules/coloraxis.src.js +954 -774
  496. package/modules/current-date-indicator.js +2 -2
  497. package/modules/current-date-indicator.js.map +1 -1
  498. package/modules/current-date-indicator.src.js +2 -2
  499. package/modules/cylinder.js +1 -1
  500. package/modules/cylinder.src.js +1 -1
  501. package/modules/data.js +33 -32
  502. package/modules/data.js.map +1 -1
  503. package/modules/data.src.js +182 -134
  504. package/modules/datagrouping.d.ts +5 -0
  505. package/modules/datagrouping.js +20 -20
  506. package/modules/datagrouping.js.map +1 -1
  507. package/modules/datagrouping.src.d.ts +5 -0
  508. package/modules/datagrouping.src.js +270 -228
  509. package/modules/debugger.js +3 -3
  510. package/modules/debugger.js.map +1 -1
  511. package/modules/debugger.src.js +3 -3
  512. package/modules/dependency-wheel.js +1 -1
  513. package/modules/dependency-wheel.src.js +1 -1
  514. package/modules/dotplot.js +1 -1
  515. package/modules/dotplot.src.js +1 -1
  516. package/modules/drag-panes.js +1 -1
  517. package/modules/drag-panes.src.js +1 -1
  518. package/modules/draggable-points.js +34 -34
  519. package/modules/draggable-points.js.map +1 -1
  520. package/modules/draggable-points.src.js +14 -5
  521. package/modules/drilldown.d.ts +27 -0
  522. package/modules/drilldown.js +18 -18
  523. package/modules/drilldown.js.map +1 -1
  524. package/modules/drilldown.src.d.ts +27 -0
  525. package/modules/drilldown.src.js +42 -16
  526. package/modules/dumbbell.js +1 -1
  527. package/modules/dumbbell.src.js +1 -1
  528. package/modules/export-data.js +20 -20
  529. package/modules/export-data.js.map +1 -1
  530. package/modules/export-data.src.js +8 -5
  531. package/modules/exporting.d.ts +29 -0
  532. package/modules/exporting.js +38 -35
  533. package/modules/exporting.js.map +1 -1
  534. package/modules/exporting.src.d.ts +29 -0
  535. package/modules/exporting.src.js +1937 -1614
  536. package/modules/full-screen.js +2 -2
  537. package/modules/full-screen.js.map +1 -1
  538. package/modules/full-screen.src.js +8 -6
  539. package/modules/funnel.js +1 -1
  540. package/modules/funnel.src.js +1 -1
  541. package/modules/funnel3d.js +1 -1
  542. package/modules/funnel3d.src.js +1 -1
  543. package/modules/gantt.js +218 -217
  544. package/modules/gantt.js.map +1 -1
  545. package/modules/gantt.src.js +74 -32
  546. package/modules/grid-axis.js +23 -22
  547. package/modules/grid-axis.js.map +1 -1
  548. package/modules/grid-axis.src.js +9 -4
  549. package/modules/heatmap.js +39 -37
  550. package/modules/heatmap.js.map +1 -1
  551. package/modules/heatmap.src.js +963 -779
  552. package/modules/heikinashi.js +17 -0
  553. package/modules/heikinashi.js.map +1 -0
  554. package/modules/heikinashi.src.js +394 -0
  555. package/modules/histogram-bellcurve.js +1 -1
  556. package/modules/histogram-bellcurve.src.js +1 -1
  557. package/modules/hollowcandlestick.js +18 -0
  558. package/modules/hollowcandlestick.js.map +1 -0
  559. package/modules/hollowcandlestick.src.js +504 -0
  560. package/modules/item-series.js +1 -1
  561. package/modules/item-series.src.js +1 -1
  562. package/modules/lollipop.js +1 -1
  563. package/modules/lollipop.src.js +1 -1
  564. package/modules/map.d.ts +9 -0
  565. package/modules/map.js +122 -119
  566. package/modules/map.js.map +1 -1
  567. package/modules/map.src.d.ts +9 -0
  568. package/modules/map.src.js +1655 -1332
  569. package/modules/marker-clusters.js +1 -1
  570. package/modules/marker-clusters.src.js +1 -1
  571. package/modules/networkgraph.js +1 -1
  572. package/modules/networkgraph.src.js +1 -1
  573. package/modules/no-data-to-display.js +3 -3
  574. package/modules/no-data-to-display.js.map +1 -1
  575. package/modules/no-data-to-display.src.js +2 -2
  576. package/modules/offline-exporting.js +18 -16
  577. package/modules/offline-exporting.js.map +1 -1
  578. package/modules/offline-exporting.src.js +623 -562
  579. package/modules/oldie-polyfills.js +1 -1
  580. package/modules/oldie-polyfills.src.js +1 -1
  581. package/modules/oldie.js +2 -2
  582. package/modules/oldie.src.js +2 -2
  583. package/modules/organization.js +1 -1
  584. package/modules/organization.src.js +1 -1
  585. package/modules/overlapping-datalabels.js +1 -1
  586. package/modules/overlapping-datalabels.src.js +1 -1
  587. package/modules/parallel-coordinates.js +1 -1
  588. package/modules/parallel-coordinates.src.js +1 -1
  589. package/modules/pareto.js +1 -1
  590. package/modules/pareto.src.js +1 -1
  591. package/modules/pathfinder.js +1 -1
  592. package/modules/pathfinder.src.js +1 -1
  593. package/modules/pattern-fill.js +14 -14
  594. package/modules/pattern-fill.js.map +1 -1
  595. package/modules/pattern-fill.src.js +24 -12
  596. package/modules/price-indicator.js +1 -1
  597. package/modules/price-indicator.src.js +1 -1
  598. package/modules/pyramid3d.js +1 -1
  599. package/modules/pyramid3d.src.js +1 -1
  600. package/modules/sankey.js +28 -28
  601. package/modules/sankey.js.map +1 -1
  602. package/modules/sankey.src.js +11 -11
  603. package/modules/series-label.js +1 -1
  604. package/modules/series-label.src.js +1 -1
  605. package/modules/solid-gauge.js +2 -2
  606. package/modules/solid-gauge.js.map +1 -1
  607. package/modules/solid-gauge.src.js +3 -3
  608. package/modules/sonification.js +1 -1
  609. package/modules/sonification.src.js +1 -1
  610. package/modules/static-scale.js +1 -1
  611. package/modules/static-scale.src.js +1 -1
  612. package/modules/stock-tools.js +159 -157
  613. package/modules/stock-tools.js.map +1 -1
  614. package/modules/stock-tools.src.js +253 -123
  615. package/modules/stock.d.ts +5 -0
  616. package/modules/stock.js +196 -191
  617. package/modules/stock.js.map +1 -1
  618. package/modules/stock.src.d.ts +5 -0
  619. package/modules/stock.src.js +7749 -7432
  620. package/modules/streamgraph.js +1 -1
  621. package/modules/streamgraph.src.js +1 -1
  622. package/modules/sunburst.js +5 -5
  623. package/modules/sunburst.js.map +1 -1
  624. package/modules/sunburst.src.js +6 -19
  625. package/modules/tilemap.js +1 -1
  626. package/modules/tilemap.src.js +1 -1
  627. package/modules/timeline.js +18 -17
  628. package/modules/timeline.js.map +1 -1
  629. package/modules/timeline.src.js +21 -24
  630. package/modules/treegrid.js +57 -57
  631. package/modules/treegrid.js.map +1 -1
  632. package/modules/treegrid.src.js +43 -19
  633. package/modules/treemap.js +5 -5
  634. package/modules/treemap.js.map +1 -1
  635. package/modules/treemap.src.js +5 -5
  636. package/modules/variable-pie.js +1 -1
  637. package/modules/variable-pie.src.js +1 -1
  638. package/modules/variwide.js +1 -1
  639. package/modules/variwide.src.js +1 -1
  640. package/modules/vector.js +1 -1
  641. package/modules/vector.src.js +1 -1
  642. package/modules/venn.js +31 -30
  643. package/modules/venn.js.map +1 -1
  644. package/modules/venn.src.js +508 -424
  645. package/modules/windbarb.js +1 -1
  646. package/modules/windbarb.src.js +1 -1
  647. package/modules/wordcloud.js +4 -4
  648. package/modules/wordcloud.js.map +1 -1
  649. package/modules/wordcloud.src.js +2 -1
  650. package/modules/xrange.js +17 -17
  651. package/modules/xrange.js.map +1 -1
  652. package/modules/xrange.src.js +7 -4
  653. package/package.json +1 -1
  654. package/themes/avocado.d.ts +6 -1
  655. package/themes/avocado.js +3 -3
  656. package/themes/avocado.js.map +1 -1
  657. package/themes/avocado.src.d.ts +6 -1
  658. package/themes/avocado.src.js +53 -22
  659. package/themes/dark-blue.d.ts +6 -1
  660. package/themes/dark-blue.js +3 -3
  661. package/themes/dark-blue.js.map +1 -1
  662. package/themes/dark-blue.src.d.ts +6 -1
  663. package/themes/dark-blue.src.js +231 -205
  664. package/themes/dark-green.d.ts +6 -1
  665. package/themes/dark-green.js +4 -4
  666. package/themes/dark-green.js.map +1 -1
  667. package/themes/dark-green.src.d.ts +6 -1
  668. package/themes/dark-green.src.js +236 -205
  669. package/themes/dark-unica.d.ts +6 -1
  670. package/themes/dark-unica.js +7 -7
  671. package/themes/dark-unica.js.map +1 -1
  672. package/themes/dark-unica.src.d.ts +6 -1
  673. package/themes/dark-unica.src.js +206 -174
  674. package/themes/gray.d.ts +6 -1
  675. package/themes/gray.js +3 -3
  676. package/themes/gray.js.map +1 -1
  677. package/themes/gray.src.d.ts +6 -1
  678. package/themes/gray.src.js +233 -207
  679. package/themes/grid-light.d.ts +6 -1
  680. package/themes/grid-light.js +4 -4
  681. package/themes/grid-light.js.map +1 -1
  682. package/themes/grid-light.src.d.ts +6 -1
  683. package/themes/grid-light.src.js +88 -57
  684. package/themes/grid.d.ts +6 -1
  685. package/themes/grid.js +3 -3
  686. package/themes/grid.js.map +1 -1
  687. package/themes/grid.src.d.ts +6 -1
  688. package/themes/grid.src.js +114 -83
  689. package/themes/high-contrast-dark.js +5 -4
  690. package/themes/high-contrast-dark.js.map +1 -1
  691. package/themes/high-contrast-dark.src.js +197 -166
  692. package/themes/high-contrast-light.js +3 -3
  693. package/themes/high-contrast-light.js.map +1 -1
  694. package/themes/high-contrast-light.src.js +54 -23
  695. package/themes/sand-signika.d.ts +6 -1
  696. package/themes/sand-signika.js +5 -5
  697. package/themes/sand-signika.js.map +1 -1
  698. package/themes/sand-signika.src.d.ts +6 -1
  699. package/themes/sand-signika.src.js +119 -88
  700. package/themes/skies.d.ts +6 -1
  701. package/themes/skies.js +5 -5
  702. package/themes/skies.js.map +1 -1
  703. package/themes/skies.src.d.ts +6 -1
  704. package/themes/skies.src.js +107 -76
  705. package/themes/sunset.d.ts +6 -1
  706. package/themes/sunset.js +3 -3
  707. package/themes/sunset.js.map +1 -1
  708. package/themes/sunset.src.d.ts +6 -1
  709. package/themes/sunset.src.js +52 -21
  710. package/es-modules/Core/Axis/ColorAxis.js +0 -1164
  711. package/es-modules/Core/Axis/HiddenAxis.js +0 -46
  712. package/es-modules/Core/Axis/PlotLineOrBand.js +0 -1051
  713. package/es-modules/Core/Series/DataLabels.js +0 -1173
  714. package/es-modules/Extensions/Exporting.js +0 -2024
  715. package/es-modules/Extensions/OfflineExporting.js +0 -621
  716. package/es-modules/Mixins/Geometry.js +0 -56
  717. package/es-modules/Mixins/GeometryCircles.js +0 -320
  718. package/es-modules/Series/Bubble/BubbleLegend.js +0 -893
@@ -0,0 +1,1273 @@
1
+ /* *
2
+ *
3
+ * Exporting module
4
+ *
5
+ * (c) 2010-2021 Torstein Honsi
6
+ *
7
+ * License: www.highcharts.com/license
8
+ *
9
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
10
+ *
11
+ * */
12
+ 'use strict';
13
+ import AST from '../../Core/Renderer/HTML/AST.js';
14
+ import Chart from '../../Core/Chart/Chart.js';
15
+ import chartNavigationMixin from '../../Mixins/Navigation.js';
16
+ import D from '../../Core/DefaultOptions.js';
17
+ var defaultOptions = D.defaultOptions;
18
+ import ExportingDefaults from './ExportingDefaults.js';
19
+ import ExportingSymbols from './ExportingSymbols.js';
20
+ import G from '../../Core/Globals.js';
21
+ var doc = G.doc, win = G.win;
22
+ import HU from '../../Core/HttpUtilities.js';
23
+ import Palette from '../../Core/Color/Palette.js';
24
+ import U from '../../Core/Utilities.js';
25
+ var addEvent = U.addEvent, css = U.css, createElement = U.createElement, discardElement = U.discardElement, extend = U.extend, find = U.find, fireEvent = U.fireEvent, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, removeEvent = U.removeEvent, uniqueKey = U.uniqueKey;
26
+ /* *
27
+ *
28
+ * Composition
29
+ *
30
+ * */
31
+ var Exporting;
32
+ (function (Exporting) {
33
+ /* *
34
+ *
35
+ * Declarations
36
+ *
37
+ * */
38
+ /* *
39
+ *
40
+ * Constants
41
+ *
42
+ * */
43
+ var composedClasses = [];
44
+ // These CSS properties are not inlined. Remember camelCase.
45
+ var inlineBlacklist = [
46
+ /-/,
47
+ /^(clipPath|cssText|d|height|width)$/,
48
+ /^font$/,
49
+ /[lL]ogical(Width|Height)$/,
50
+ /perspective/,
51
+ /TapHighlightColor/,
52
+ /^transition/,
53
+ /^length$/ // #7700
54
+ // /^text (border|color|cursor|height|webkitBorder)/
55
+ ];
56
+ // These ones are translated to attributes rather than styles
57
+ var inlineToAttributes = [
58
+ 'fill',
59
+ 'stroke',
60
+ 'strokeLinecap',
61
+ 'strokeLinejoin',
62
+ 'strokeWidth',
63
+ 'textAnchor',
64
+ 'x',
65
+ 'y'
66
+ ];
67
+ Exporting.inlineWhitelist = [];
68
+ var unstyledElements = [
69
+ 'clipPath',
70
+ 'defs',
71
+ 'desc'
72
+ ];
73
+ /* *
74
+ *
75
+ * Variables
76
+ *
77
+ * */
78
+ var printingChart;
79
+ /* *
80
+ *
81
+ * Functions
82
+ *
83
+ * */
84
+ /* eslint-disable valid-jsdoc */
85
+ /**
86
+ * Add the export button to the chart, with options.
87
+ *
88
+ * @private
89
+ * @function Highcharts.Chart#addButton
90
+ * @param {Highcharts.NavigationButtonOptions} options
91
+ * @return {void}
92
+ * @requires modules/exporting
93
+ */
94
+ function addButton(options) {
95
+ var chart = this, renderer = chart.renderer, btnOptions = merge(chart.options.navigation.buttonOptions, options), onclick = btnOptions.onclick, menuItems = btnOptions.menuItems, symbolSize = btnOptions.symbolSize || 12;
96
+ var symbol;
97
+ if (!chart.btnCount) {
98
+ chart.btnCount = 0;
99
+ }
100
+ // Keeps references to the button elements
101
+ if (!chart.exportDivElements) {
102
+ chart.exportDivElements = [];
103
+ chart.exportSVGElements = [];
104
+ }
105
+ if (btnOptions.enabled === false || !btnOptions.theme) {
106
+ return;
107
+ }
108
+ var attr = btnOptions.theme, states = attr.states, hover = states && states.hover, select = states && states.select;
109
+ var callback;
110
+ if (!chart.styledMode) {
111
+ attr.fill = pick(attr.fill, Palette.backgroundColor);
112
+ attr.stroke = pick(attr.stroke, 'none');
113
+ }
114
+ delete attr.states;
115
+ if (onclick) {
116
+ callback = function (e) {
117
+ if (e) {
118
+ e.stopPropagation();
119
+ }
120
+ onclick.call(chart, e);
121
+ };
122
+ }
123
+ else if (menuItems) {
124
+ callback = function (e) {
125
+ // consistent with onclick call (#3495)
126
+ if (e) {
127
+ e.stopPropagation();
128
+ }
129
+ chart.contextMenu(button.menuClassName, menuItems, button.translateX, button.translateY, button.width, button.height, button);
130
+ button.setState(2);
131
+ };
132
+ }
133
+ if (btnOptions.text && btnOptions.symbol) {
134
+ attr.paddingLeft = pick(attr.paddingLeft, 30);
135
+ }
136
+ else if (!btnOptions.text) {
137
+ extend(attr, {
138
+ width: btnOptions.width,
139
+ height: btnOptions.height,
140
+ padding: 0
141
+ });
142
+ }
143
+ if (!chart.styledMode) {
144
+ attr['stroke-linecap'] = 'round';
145
+ attr.fill = pick(attr.fill, Palette.backgroundColor);
146
+ attr.stroke = pick(attr.stroke, 'none');
147
+ }
148
+ var button = renderer
149
+ .button(btnOptions.text, 0, 0, callback, attr, hover, select)
150
+ .addClass(options.className)
151
+ .attr({
152
+ title: pick(chart.options.lang[btnOptions._titleKey || btnOptions.titleKey], '')
153
+ });
154
+ button.menuClassName = (options.menuClassName ||
155
+ 'highcharts-menu-' + chart.btnCount++);
156
+ if (btnOptions.symbol) {
157
+ symbol = renderer
158
+ .symbol(btnOptions.symbol, btnOptions.symbolX - (symbolSize / 2), btnOptions.symbolY - (symbolSize / 2), symbolSize, symbolSize
159
+ // If symbol is an image, scale it (#7957)
160
+ , {
161
+ width: symbolSize,
162
+ height: symbolSize
163
+ })
164
+ .addClass('highcharts-button-symbol')
165
+ .attr({
166
+ zIndex: 1
167
+ })
168
+ .add(button);
169
+ if (!chart.styledMode) {
170
+ symbol.attr({
171
+ stroke: btnOptions.symbolStroke,
172
+ fill: btnOptions.symbolFill,
173
+ 'stroke-width': btnOptions.symbolStrokeWidth || 1
174
+ });
175
+ }
176
+ }
177
+ button
178
+ .add(chart.exportingGroup)
179
+ .align(extend(btnOptions, {
180
+ width: button.width,
181
+ x: pick(btnOptions.x, chart.buttonOffset) // #1654
182
+ }), true, 'spacingBox');
183
+ chart.buttonOffset += ((button.width + btnOptions.buttonSpacing) *
184
+ (btnOptions.align === 'right' ? -1 : 1));
185
+ chart.exportSVGElements.push(button, symbol);
186
+ }
187
+ /**
188
+ * Clena up after printing a chart.
189
+ *
190
+ * @function Highcharts#afterPrint
191
+ *
192
+ * @private
193
+ *
194
+ * @param {Highcharts.Chart} chart
195
+ * Chart that was (or suppose to be) printed
196
+ * @return {void}
197
+ *
198
+ * @fires Highcharts.Chart#event:afterPrint
199
+ */
200
+ function afterPrint() {
201
+ var chart = this;
202
+ if (!chart.printReverseInfo) {
203
+ return void 0;
204
+ }
205
+ var _a = chart.printReverseInfo, childNodes = _a.childNodes, origDisplay = _a.origDisplay, resetParams = _a.resetParams;
206
+ // put the chart back in
207
+ chart.moveContainers(chart.renderTo);
208
+ // restore all body content
209
+ [].forEach.call(childNodes, function (node, i) {
210
+ if (node.nodeType === 1) {
211
+ node.style.display = (origDisplay[i] || '');
212
+ }
213
+ });
214
+ chart.isPrinting = false;
215
+ // Reset printMaxWidth
216
+ if (resetParams) {
217
+ chart.setSize.apply(chart, resetParams);
218
+ }
219
+ delete chart.printReverseInfo;
220
+ printingChart = void 0;
221
+ fireEvent(chart, 'afterPrint');
222
+ }
223
+ /**
224
+ * Prepare chart and document before printing a chart.
225
+ *
226
+ * @function Highcharts#beforePrint
227
+ *
228
+ * @private
229
+ *
230
+ * @return {void}
231
+ *
232
+ * @fires Highcharts.Chart#event:beforePrint
233
+ */
234
+ function beforePrint() {
235
+ var chart = this, body = doc.body, printMaxWidth = chart.options.exporting.printMaxWidth, printReverseInfo = {
236
+ childNodes: body.childNodes,
237
+ origDisplay: [],
238
+ resetParams: void 0
239
+ };
240
+ chart.isPrinting = true;
241
+ chart.pointer.reset(null, 0);
242
+ fireEvent(chart, 'beforePrint');
243
+ // Handle printMaxWidth
244
+ var handleMaxWidth = printMaxWidth && chart.chartWidth > printMaxWidth;
245
+ if (handleMaxWidth) {
246
+ printReverseInfo.resetParams = [
247
+ chart.options.chart.width,
248
+ void 0,
249
+ false
250
+ ];
251
+ chart.setSize(printMaxWidth, void 0, false);
252
+ }
253
+ // hide all body content
254
+ [].forEach.call(printReverseInfo.childNodes, function (node, i) {
255
+ if (node.nodeType === 1) {
256
+ printReverseInfo.origDisplay[i] = node.style.display;
257
+ node.style.display = 'none';
258
+ }
259
+ });
260
+ // pull out the chart
261
+ chart.moveContainers(body);
262
+ // Storage details for undo action after printing
263
+ chart.printReverseInfo = printReverseInfo;
264
+ }
265
+ /**
266
+ * @private
267
+ */
268
+ function chartCallback(chart) {
269
+ var composition = chart;
270
+ composition.renderExporting();
271
+ addEvent(chart, 'redraw', composition.renderExporting);
272
+ // Destroy the export elements at chart destroy
273
+ addEvent(chart, 'destroy', composition.destroyExport);
274
+ // Uncomment this to see a button directly below the chart, for quick
275
+ // testing of export
276
+ /*
277
+ let button, viewImage, viewSource;
278
+ if (!chart.renderer.forExport) {
279
+ viewImage = function () {
280
+ let div = doc.createElement('div');
281
+ div.innerHTML = chart.getSVGForExport();
282
+ chart.renderTo.parentNode.appendChild(div);
283
+ };
284
+
285
+ viewSource = function () {
286
+ let pre = doc.createElement('pre');
287
+ pre.innerHTML = chart.getSVGForExport()
288
+ .replace(/</g, '\n&lt;')
289
+ .replace(/>/g, '&gt;');
290
+ chart.renderTo.parentNode.appendChild(pre);
291
+ };
292
+
293
+ viewImage();
294
+
295
+ // View SVG Image
296
+ button = doc.createElement('button');
297
+ button.innerHTML = 'View SVG Image';
298
+ chart.renderTo.parentNode.appendChild(button);
299
+ button.onclick = viewImage;
300
+
301
+ // View SVG Source
302
+ button = doc.createElement('button');
303
+ button.innerHTML = 'View SVG Source';
304
+ chart.renderTo.parentNode.appendChild(button);
305
+ button.onclick = viewSource;
306
+ }
307
+ //*/
308
+ }
309
+ /**
310
+ * @private
311
+ */
312
+ function compose(ChartClass, SVGRendererClass) {
313
+ ExportingSymbols.compose(SVGRendererClass);
314
+ if (composedClasses.indexOf(ChartClass) === -1) {
315
+ composedClasses.push(ChartClass);
316
+ var chartProto = ChartClass.prototype;
317
+ chartProto.afterPrint = afterPrint;
318
+ chartProto.exportChart = exportChart;
319
+ chartProto.inlineStyles = inlineStyles;
320
+ chartProto.print = print;
321
+ chartProto.sanitizeSVG = sanitizeSVG;
322
+ chartProto.getChartHTML = getChartHTML;
323
+ chartProto.getSVG = getSVG;
324
+ chartProto.getSVGForExport = getSVGForExport;
325
+ chartProto.getFilename = getFilename;
326
+ chartProto.moveContainers = moveContainers;
327
+ chartProto.beforePrint = beforePrint;
328
+ chartProto.contextMenu = contextMenu;
329
+ chartProto.addButton = addButton;
330
+ chartProto.destroyExport = destroyExport;
331
+ chartProto.renderExporting = renderExporting;
332
+ chartProto.callbacks.push(chartCallback);
333
+ addEvent(ChartClass, 'init', onChartInit);
334
+ if (G.isSafari) {
335
+ G.win.matchMedia('print').addListener(function (mqlEvent) {
336
+ if (!printingChart) {
337
+ return void 0;
338
+ }
339
+ if (mqlEvent.matches) {
340
+ printingChart.beforePrint();
341
+ }
342
+ else {
343
+ printingChart.afterPrint();
344
+ }
345
+ });
346
+ }
347
+ }
348
+ }
349
+ Exporting.compose = compose;
350
+ /**
351
+ * Display a popup menu for choosing the export type.
352
+ *
353
+ * @private
354
+ * @function Highcharts.Chart#contextMenu
355
+ * @param {string} className
356
+ * An identifier for the menu.
357
+ * @param {Array<string|Highcharts.ExportingMenuObject>} items
358
+ * A collection with text and onclicks for the items.
359
+ * @param {number} x
360
+ * The x position of the opener button
361
+ * @param {number} y
362
+ * The y position of the opener button
363
+ * @param {number} width
364
+ * The width of the opener button
365
+ * @param {number} height
366
+ * The height of the opener button
367
+ * @return {void}
368
+ * @requires modules/exporting
369
+ */
370
+ function contextMenu(className, items, x, y, width, height, button) {
371
+ var chart = this, navOptions = chart.options.navigation, chartWidth = chart.chartWidth, chartHeight = chart.chartHeight, cacheName = 'cache-' + className, menuPadding = Math.max(width, height); // for mouse leave detection
372
+ var innerMenu, menu = chart[cacheName];
373
+ // create the menu only the first time
374
+ if (!menu) {
375
+ // create a HTML element above the SVG
376
+ chart.exportContextMenu = chart[cacheName] = menu =
377
+ createElement('div', {
378
+ className: className
379
+ }, {
380
+ position: 'absolute',
381
+ zIndex: 1000,
382
+ padding: menuPadding + 'px',
383
+ pointerEvents: 'auto'
384
+ }, chart.fixedDiv || chart.container);
385
+ innerMenu = createElement('ul', { className: 'highcharts-menu' }, {
386
+ listStyle: 'none',
387
+ margin: 0,
388
+ padding: 0
389
+ }, menu);
390
+ // Presentational CSS
391
+ if (!chart.styledMode) {
392
+ css(innerMenu, extend({
393
+ MozBoxShadow: '3px 3px 10px #888',
394
+ WebkitBoxShadow: '3px 3px 10px #888',
395
+ boxShadow: '3px 3px 10px #888'
396
+ }, navOptions.menuStyle));
397
+ }
398
+ // hide on mouse out
399
+ menu.hideMenu = function () {
400
+ css(menu, { display: 'none' });
401
+ if (button) {
402
+ button.setState(0);
403
+ }
404
+ chart.openMenu = false;
405
+ // #10361, #9998
406
+ css(chart.renderTo, { overflow: 'hidden' });
407
+ css(chart.container, { overflow: 'hidden' });
408
+ U.clearTimeout(menu.hideTimer);
409
+ fireEvent(chart, 'exportMenuHidden');
410
+ };
411
+ // Hide the menu some time after mouse leave (#1357)
412
+ chart.exportEvents.push(addEvent(menu, 'mouseleave', function () {
413
+ menu.hideTimer = win.setTimeout(menu.hideMenu, 500);
414
+ }), addEvent(menu, 'mouseenter', function () {
415
+ U.clearTimeout(menu.hideTimer);
416
+ }),
417
+ // Hide it on clicking or touching outside the menu (#2258,
418
+ // #2335, #2407)
419
+ addEvent(doc, 'mouseup', function (e) {
420
+ if (!chart.pointer.inClass(e.target, className)) {
421
+ menu.hideMenu();
422
+ }
423
+ }), addEvent(menu, 'click', function () {
424
+ if (chart.openMenu) {
425
+ menu.hideMenu();
426
+ }
427
+ }));
428
+ // create the items
429
+ items.forEach(function (item) {
430
+ if (typeof item === 'string') {
431
+ item = chart.options.exporting
432
+ .menuItemDefinitions[item];
433
+ }
434
+ if (isObject(item, true)) {
435
+ var element = void 0;
436
+ if (item.separator) {
437
+ element = createElement('hr', void 0, void 0, innerMenu);
438
+ }
439
+ else {
440
+ // When chart initialized with the table,
441
+ // wrong button text displayed, #14352.
442
+ if (item.textKey === 'viewData' && chart.isDataTableVisible) {
443
+ item.textKey = 'hideData';
444
+ }
445
+ element = createElement('li', {
446
+ className: 'highcharts-menu-item',
447
+ onclick: function (e) {
448
+ if (e) { // IE7
449
+ e.stopPropagation();
450
+ }
451
+ menu.hideMenu();
452
+ if (item.onclick) {
453
+ item.onclick
454
+ .apply(chart, arguments);
455
+ }
456
+ }
457
+ }, void 0, innerMenu);
458
+ AST.setElementHTML(element, item.text ||
459
+ chart.options.lang[item.textKey]);
460
+ if (!chart.styledMode) {
461
+ element.onmouseover = function () {
462
+ css(this, navOptions.menuItemHoverStyle);
463
+ };
464
+ element.onmouseout = function () {
465
+ css(this, navOptions.menuItemStyle);
466
+ };
467
+ css(element, extend({
468
+ cursor: 'pointer'
469
+ }, navOptions.menuItemStyle));
470
+ }
471
+ }
472
+ // Keep references to menu divs to be able to destroy them
473
+ chart.exportDivElements.push(element);
474
+ }
475
+ });
476
+ // Keep references to menu and innerMenu div to be able to destroy
477
+ // them
478
+ chart.exportDivElements.push(innerMenu, menu);
479
+ chart.exportMenuWidth = menu.offsetWidth;
480
+ chart.exportMenuHeight = menu.offsetHeight;
481
+ }
482
+ var menuStyle = { display: 'block' };
483
+ // if outside right, right align it
484
+ if (x + chart.exportMenuWidth > chartWidth) {
485
+ menuStyle.right = (chartWidth - x - width - menuPadding) + 'px';
486
+ }
487
+ else {
488
+ menuStyle.left = (x - menuPadding) + 'px';
489
+ }
490
+ // if outside bottom, bottom align it
491
+ if (y + height + chart.exportMenuHeight > chartHeight &&
492
+ button.alignOptions.verticalAlign !== 'top') {
493
+ menuStyle.bottom = (chartHeight - y - menuPadding) + 'px';
494
+ }
495
+ else {
496
+ menuStyle.top = (y + height - menuPadding) + 'px';
497
+ }
498
+ css(menu, menuStyle);
499
+ // #10361, #9998
500
+ css(chart.renderTo, { overflow: '' });
501
+ css(chart.container, { overflow: '' });
502
+ chart.openMenu = true;
503
+ fireEvent(chart, 'exportMenuShown');
504
+ }
505
+ /**
506
+ * Destroy the export buttons.
507
+ * @private
508
+ * @function Highcharts.Chart#destroyExport
509
+ * @param {global.Event} [e]
510
+ * @return {void}
511
+ * @requires modules/exporting
512
+ */
513
+ function destroyExport(e) {
514
+ var chart = e ? e.target : this, exportSVGElements = chart.exportSVGElements, exportDivElements = chart.exportDivElements, exportEvents = chart.exportEvents;
515
+ var cacheName;
516
+ // Destroy the extra buttons added
517
+ if (exportSVGElements) {
518
+ exportSVGElements.forEach(function (elem, i) {
519
+ // Destroy and null the svg elements
520
+ if (elem) { // #1822
521
+ elem.onclick = elem.ontouchstart = null;
522
+ cacheName = 'cache-' + elem.menuClassName;
523
+ if (chart[cacheName]) {
524
+ delete chart[cacheName];
525
+ }
526
+ exportSVGElements[i] = elem.destroy();
527
+ }
528
+ });
529
+ exportSVGElements.length = 0;
530
+ }
531
+ // Destroy the exporting group
532
+ if (chart.exportingGroup) {
533
+ chart.exportingGroup.destroy();
534
+ delete chart.exportingGroup;
535
+ }
536
+ // Destroy the divs for the menu
537
+ if (exportDivElements) {
538
+ exportDivElements.forEach(function (elem, i) {
539
+ if (elem) {
540
+ // Remove the event handler
541
+ U.clearTimeout(elem.hideTimer); // #5427
542
+ removeEvent(elem, 'mouseleave');
543
+ // Remove inline events
544
+ // (chart.exportDivElements as any)[i] =
545
+ exportDivElements[i] =
546
+ elem.onmouseout =
547
+ elem.onmouseover =
548
+ elem.ontouchstart =
549
+ elem.onclick = null;
550
+ // Destroy the div by moving to garbage bin
551
+ discardElement(elem);
552
+ }
553
+ });
554
+ exportDivElements.length = 0;
555
+ }
556
+ if (exportEvents) {
557
+ exportEvents.forEach(function (unbind) {
558
+ unbind();
559
+ });
560
+ exportEvents.length = 0;
561
+ }
562
+ }
563
+ /**
564
+ * Exporting module required. Submit an SVG version of the chart to a server
565
+ * along with some parameters for conversion.
566
+ *
567
+ * @sample highcharts/members/chart-exportchart/
568
+ * Export with no options
569
+ * @sample highcharts/members/chart-exportchart-filename/
570
+ * PDF type and custom filename
571
+ * @sample highcharts/members/chart-exportchart-custom-background/
572
+ * Different chart background in export
573
+ * @sample stock/members/chart-exportchart/
574
+ * Export with Highcharts Stock
575
+ *
576
+ * @function Highcharts.Chart#exportChart
577
+ *
578
+ * @param {Highcharts.ExportingOptions} exportingOptions
579
+ * Exporting options in addition to those defined in
580
+ * [exporting](https://api.highcharts.com/highcharts/exporting).
581
+ *
582
+ * @param {Highcharts.Options} chartOptions
583
+ * Additional chart options for the exported chart. For example a
584
+ * different background color can be added here, or `dataLabels` for
585
+ * export only.
586
+ *
587
+ * @requires modules/exporting
588
+ */
589
+ function exportChart(exportingOptions, chartOptions) {
590
+ var svg = this.getSVGForExport(exportingOptions, chartOptions);
591
+ // merge the options
592
+ exportingOptions = merge(this.options.exporting, exportingOptions);
593
+ // do the post
594
+ HU.post(exportingOptions.url, {
595
+ filename: exportingOptions.filename ?
596
+ exportingOptions.filename.replace(/\//g, '-') :
597
+ this.getFilename(),
598
+ type: exportingOptions.type,
599
+ // IE8 fails to post undefined correctly, so use 0
600
+ width: exportingOptions.width || 0,
601
+ scale: exportingOptions.scale,
602
+ svg: svg
603
+ }, exportingOptions.formAttributes);
604
+ }
605
+ /**
606
+ * Return the unfiltered innerHTML of the chart container. Used as hook for
607
+ * plugins. In styled mode, it also takes care of inlining CSS style rules.
608
+ *
609
+ * @see Chart#getSVG
610
+ *
611
+ * @function Highcharts.Chart#getChartHTML
612
+ *
613
+ * @returns {string}
614
+ * The unfiltered SVG of the chart.
615
+ *
616
+ * @requires modules/exporting
617
+ */
618
+ function getChartHTML() {
619
+ if (this.styledMode) {
620
+ this.inlineStyles();
621
+ }
622
+ return this.container.innerHTML;
623
+ }
624
+ /**
625
+ * Get the default file name used for exported charts. By default it creates
626
+ * a file name based on the chart title.
627
+ *
628
+ * @function Highcharts.Chart#getFilename
629
+ *
630
+ * @return {string} A file name without extension.
631
+ *
632
+ * @requires modules/exporting
633
+ */
634
+ function getFilename() {
635
+ var s = this.userOptions.title && this.userOptions.title.text;
636
+ var filename = this.options.exporting.filename;
637
+ if (filename) {
638
+ return filename.replace(/\//g, '-');
639
+ }
640
+ if (typeof s === 'string') {
641
+ filename = s
642
+ .toLowerCase()
643
+ .replace(/<\/?[^>]+(>|$)/g, '') // strip HTML tags
644
+ .replace(/[\s_]+/g, '-')
645
+ .replace(/[^a-z0-9\-]/g, '') // preserve only latin
646
+ .replace(/^[\-]+/g, '') // dashes in the start
647
+ .replace(/[\-]+/g, '-') // dashes in a row
648
+ .substr(0, 24)
649
+ .replace(/[\-]+$/g, ''); // dashes in the end;
650
+ }
651
+ if (!filename || filename.length < 5) {
652
+ filename = 'chart';
653
+ }
654
+ return filename;
655
+ }
656
+ /**
657
+ * Return an SVG representation of the chart.
658
+ *
659
+ * @sample highcharts/members/chart-getsvg/
660
+ * View the SVG from a button
661
+ *
662
+ * @function Highcharts.Chart#getSVG
663
+ *
664
+ * @param {Highcharts.Options} [chartOptions]
665
+ * Additional chart options for the generated SVG representation. For
666
+ * collections like `xAxis`, `yAxis` or `series`, the additional
667
+ * options is either merged in to the original item of the same
668
+ * `id`, or to the first item if a common id is not found.
669
+ *
670
+ * @return {string}
671
+ * The SVG representation of the rendered chart.
672
+ *
673
+ * @fires Highcharts.Chart#event:getSVG
674
+ *
675
+ * @requires modules/exporting
676
+ */
677
+ function getSVG(chartOptions) {
678
+ var chart = this;
679
+ var svg, seriesOptions,
680
+ // Copy the options and add extra options
681
+ options = merge(chart.options, chartOptions);
682
+ // Use userOptions to make the options chain in series right (#3881)
683
+ options.plotOptions = merge(chart.userOptions.plotOptions, chartOptions && chartOptions.plotOptions);
684
+ // ... and likewise with time, avoid that undefined time properties are
685
+ // merged over legacy global time options
686
+ options.time = merge(chart.userOptions.time, chartOptions && chartOptions.time);
687
+ // create a sandbox where a new chart will be generated
688
+ var sandbox = createElement('div', null, {
689
+ position: 'absolute',
690
+ top: '-9999em',
691
+ width: chart.chartWidth + 'px',
692
+ height: chart.chartHeight + 'px'
693
+ }, doc.body);
694
+ // get the source size
695
+ var cssWidth = chart.renderTo.style.width, cssHeight = chart.renderTo.style.height, sourceWidth = options.exporting.sourceWidth ||
696
+ options.chart.width ||
697
+ (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||
698
+ (options.isGantt ? 800 : 600), sourceHeight = options.exporting.sourceHeight ||
699
+ options.chart.height ||
700
+ (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||
701
+ 400;
702
+ // override some options
703
+ extend(options.chart, {
704
+ animation: false,
705
+ renderTo: sandbox,
706
+ forExport: true,
707
+ renderer: 'SVGRenderer',
708
+ width: sourceWidth,
709
+ height: sourceHeight
710
+ });
711
+ options.exporting.enabled = false; // hide buttons in print
712
+ delete options.data; // #3004
713
+ // prepare for replicating the chart
714
+ options.series = [];
715
+ chart.series.forEach(function (serie) {
716
+ seriesOptions = merge(serie.userOptions, {
717
+ animation: false,
718
+ enableMouseTracking: false,
719
+ showCheckbox: false,
720
+ visible: serie.visible
721
+ });
722
+ // Used for the navigator series that has its own option set
723
+ if (!seriesOptions.isInternal) {
724
+ options.series.push(seriesOptions);
725
+ }
726
+ });
727
+ var colls = {};
728
+ chart.axes.forEach(function (axis) {
729
+ // Assign an internal key to ensure a one-to-one mapping (#5924)
730
+ if (!axis.userOptions.internalKey) { // #6444
731
+ axis.userOptions.internalKey = uniqueKey();
732
+ }
733
+ if (!axis.options.isInternal) {
734
+ if (!colls[axis.coll]) {
735
+ colls[axis.coll] = true;
736
+ options[axis.coll] = [];
737
+ }
738
+ options[axis.coll].push(merge(axis.userOptions, {
739
+ visible: axis.visible
740
+ }));
741
+ }
742
+ });
743
+ // generate the chart copy
744
+ var chartCopy = new Chart(options, chart.callback);
745
+ // Axis options and series options (#2022, #3900, #5982)
746
+ if (chartOptions) {
747
+ ['xAxis', 'yAxis', 'series'].forEach(function (coll) {
748
+ var collOptions = {};
749
+ if (chartOptions[coll]) {
750
+ collOptions[coll] = chartOptions[coll];
751
+ chartCopy.update(collOptions);
752
+ }
753
+ });
754
+ }
755
+ // Reflect axis extremes in the export (#5924)
756
+ chart.axes.forEach(function (axis) {
757
+ var axisCopy = find(chartCopy.axes, function (copy) {
758
+ return copy.options.internalKey ===
759
+ axis.userOptions.internalKey;
760
+ }), extremes = axis.getExtremes(), userMin = extremes.userMin, userMax = extremes.userMax;
761
+ if (axisCopy &&
762
+ ((typeof userMin !== 'undefined' &&
763
+ userMin !== axisCopy.min) || (typeof userMax !== 'undefined' &&
764
+ userMax !== axisCopy.max))) {
765
+ axisCopy.setExtremes(userMin, userMax, true, false);
766
+ }
767
+ });
768
+ // Get the SVG from the container's innerHTML
769
+ svg = chartCopy.getChartHTML();
770
+ fireEvent(this, 'getSVG', { chartCopy: chartCopy });
771
+ svg = chart.sanitizeSVG(svg, options);
772
+ // free up memory
773
+ options = null;
774
+ chartCopy.destroy();
775
+ discardElement(sandbox);
776
+ return svg;
777
+ }
778
+ /**
779
+ * @private
780
+ * @function Highcharts.Chart#getSVGForExport
781
+ * @param {Highcharts.ExportingOptions} options
782
+ * @param {Highcharts.Options} chartOptions
783
+ * @return {string}
784
+ * @requires modules/exporting
785
+ */
786
+ function getSVGForExport(options, chartOptions) {
787
+ var chartExportingOptions = this.options.exporting;
788
+ return this.getSVG(merge({ chart: { borderRadius: 0 } }, chartExportingOptions.chartOptions, chartOptions, {
789
+ exporting: {
790
+ sourceWidth: ((options && options.sourceWidth) ||
791
+ chartExportingOptions.sourceWidth),
792
+ sourceHeight: ((options && options.sourceHeight) ||
793
+ chartExportingOptions.sourceHeight)
794
+ }
795
+ }));
796
+ }
797
+ /**
798
+ * Make hyphenated property names out of camelCase
799
+ * @private
800
+ * @param {string} prop
801
+ * Property name in camelCase
802
+ * @return {string}
803
+ * Hyphenated property name
804
+ */
805
+ function hyphenate(prop) {
806
+ return prop.replace(/([A-Z])/g, function (a, b) {
807
+ return '-' + b.toLowerCase();
808
+ });
809
+ }
810
+ /**
811
+ * Analyze inherited styles from stylesheets and add them inline
812
+ *
813
+ * @private
814
+ * @function Highcharts.Chart#inlineStyles
815
+ * @return {void}
816
+ *
817
+ * @todo: What are the border styles for text about? In general, text has a
818
+ * lot of properties.
819
+ * @todo: Make it work with IE9 and IE10.
820
+ *
821
+ * @requires modules/exporting
822
+ */
823
+ function inlineStyles() {
824
+ var blacklist = inlineBlacklist, whitelist = Exporting.inlineWhitelist, // For IE
825
+ defaultStyles = {};
826
+ var dummySVG;
827
+ // Create an iframe where we read default styles without pollution from
828
+ // this body
829
+ var iframe = doc.createElement('iframe');
830
+ css(iframe, {
831
+ width: '1px',
832
+ height: '1px',
833
+ visibility: 'hidden'
834
+ });
835
+ doc.body.appendChild(iframe);
836
+ var iframeDoc = iframe.contentWindow.document;
837
+ iframeDoc.open();
838
+ iframeDoc.write('<svg xmlns="http://www.w3.org/2000/svg"></svg>');
839
+ iframeDoc.close();
840
+ /**
841
+ * Call this on all elements and recurse to children
842
+ * @private
843
+ * @param {Highcharts.HTMLDOMElement} node
844
+ * Element child
845
+ * @return {void}
846
+ */
847
+ function recurse(node) {
848
+ var styles, parentStyles, cssText = '', dummy, styleAttr, blacklisted, whitelisted, i;
849
+ /**
850
+ * Check computed styles and whether they are in the white/blacklist
851
+ * for styles or atttributes.
852
+ * @private
853
+ * @param {string} val
854
+ * Style value
855
+ * @param {string} prop
856
+ * Style property name
857
+ * @return {void}
858
+ */
859
+ function filterStyles(val, prop) {
860
+ // Check against whitelist & blacklist
861
+ blacklisted = whitelisted = false;
862
+ if (whitelist.length) {
863
+ // Styled mode in IE has a whitelist instead.
864
+ // Exclude all props not in this list.
865
+ i = whitelist.length;
866
+ while (i-- && !whitelisted) {
867
+ whitelisted = whitelist[i].test(prop);
868
+ }
869
+ blacklisted = !whitelisted;
870
+ }
871
+ // Explicitly remove empty transforms
872
+ if (prop === 'transform' && val === 'none') {
873
+ blacklisted = true;
874
+ }
875
+ i = blacklist.length;
876
+ while (i-- && !blacklisted) {
877
+ blacklisted = (blacklist[i].test(prop) ||
878
+ typeof val === 'function');
879
+ }
880
+ if (!blacklisted) {
881
+ // If parent node has the same style, it gets inherited, no
882
+ // need to inline it. Top-level props should be diffed
883
+ // against parent (#7687).
884
+ if ((parentStyles[prop] !== val ||
885
+ node.nodeName === 'svg') &&
886
+ defaultStyles[node.nodeName][prop] !== val) {
887
+ // Attributes
888
+ if (!inlineToAttributes ||
889
+ inlineToAttributes.indexOf(prop) !== -1) {
890
+ if (val) {
891
+ node.setAttribute(hyphenate(prop), val);
892
+ }
893
+ // Styles
894
+ }
895
+ else {
896
+ cssText += hyphenate(prop) + ':' + val + ';';
897
+ }
898
+ }
899
+ }
900
+ }
901
+ if (node.nodeType === 1 &&
902
+ unstyledElements.indexOf(node.nodeName) === -1) {
903
+ styles = win.getComputedStyle(node, null);
904
+ parentStyles = node.nodeName === 'svg' ?
905
+ {} :
906
+ win.getComputedStyle(node.parentNode, null);
907
+ // Get default styles from the browser so that we don't have to
908
+ // add these
909
+ if (!defaultStyles[node.nodeName]) {
910
+ /*
911
+ if (!dummySVG) {
912
+ dummySVG = doc.createElementNS(H.SVG_NS, 'svg');
913
+ dummySVG.setAttribute('version', '1.1');
914
+ doc.body.appendChild(dummySVG);
915
+ }
916
+ */
917
+ dummySVG = iframeDoc.getElementsByTagName('svg')[0];
918
+ dummy = iframeDoc.createElementNS(node.namespaceURI, node.nodeName);
919
+ dummySVG.appendChild(dummy);
920
+ // Copy, so we can remove the node
921
+ defaultStyles[node.nodeName] = merge(win.getComputedStyle(dummy, null));
922
+ // Remove default fill, otherwise text disappears when
923
+ // exported
924
+ if (node.nodeName === 'text') {
925
+ delete defaultStyles.text.fill;
926
+ }
927
+ dummySVG.removeChild(dummy);
928
+ }
929
+ // Loop through all styles and add them inline if they are ok
930
+ if (G.isFirefox || G.isMS) {
931
+ // Some browsers put lots of styles on the prototype
932
+ for (var p in styles) { // eslint-disable-line guard-for-in
933
+ filterStyles(styles[p], p);
934
+ }
935
+ }
936
+ else {
937
+ objectEach(styles, filterStyles);
938
+ }
939
+ // Apply styles
940
+ if (cssText) {
941
+ styleAttr = node.getAttribute('style');
942
+ node.setAttribute('style', (styleAttr ? styleAttr + ';' : '') + cssText);
943
+ }
944
+ // Set default stroke width (needed at least for IE)
945
+ if (node.nodeName === 'svg') {
946
+ node.setAttribute('stroke-width', '1px');
947
+ }
948
+ if (node.nodeName === 'text') {
949
+ return;
950
+ }
951
+ // Recurse
952
+ [].forEach.call(node.children || node.childNodes, recurse);
953
+ }
954
+ }
955
+ /**
956
+ * Remove the dummy objects used to get defaults
957
+ * @private
958
+ * @return {void}
959
+ */
960
+ function tearDown() {
961
+ dummySVG.parentNode.removeChild(dummySVG);
962
+ // Remove trash from DOM that stayed after each exporting
963
+ iframe.parentNode.removeChild(iframe);
964
+ }
965
+ recurse(this.container.querySelector('svg'));
966
+ tearDown();
967
+ }
968
+ /**
969
+ * Move the chart container(s) to another div.
970
+ *
971
+ * @function Highcharts#moveContainers
972
+ *
973
+ * @private
974
+ *
975
+ * @param {Highcharts.HTMLDOMElement} moveTo
976
+ * Move target
977
+ * @return {void}
978
+ */
979
+ function moveContainers(moveTo) {
980
+ var chart = this;
981
+ (chart.fixedDiv ? // When scrollablePlotArea is active (#9533)
982
+ [chart.fixedDiv, chart.scrollingContainer] :
983
+ [chart.container]).forEach(function (div) {
984
+ moveTo.appendChild(div);
985
+ });
986
+ }
987
+ /**
988
+ * Add update methods to handle chart.update and chart.exporting.update and
989
+ * chart.navigation.update. These must be added to the chart instance rather
990
+ * than the Chart prototype in order to use the chart instance inside the
991
+ * update function.
992
+ * @private
993
+ */
994
+ function onChartInit() {
995
+ var chart = this,
996
+ /**
997
+ * @private
998
+ * @param {"exporting"|"navigation"} prop
999
+ * Property name in option root
1000
+ * @param {Highcharts.ExportingOptions|Highcharts.NavigationOptions} options
1001
+ * Options to update
1002
+ * @param {boolean} [redraw=true]
1003
+ * Whether to redraw
1004
+ * @return {void}
1005
+ */
1006
+ update = function (prop, options, redraw) {
1007
+ chart.isDirtyExporting = true;
1008
+ merge(true, chart.options[prop], options);
1009
+ if (pick(redraw, true)) {
1010
+ chart.redraw();
1011
+ }
1012
+ };
1013
+ chart.exporting = {
1014
+ update: function (options, redraw) {
1015
+ update('exporting', options, redraw);
1016
+ }
1017
+ };
1018
+ // Register update() method for navigation. Can not be set the same way
1019
+ // as for exporting, because navigation options are shared with bindings
1020
+ // which has separate update() logic.
1021
+ chartNavigationMixin.addUpdate(function (options, redraw) {
1022
+ update('navigation', options, redraw);
1023
+ }, chart);
1024
+ }
1025
+ /**
1026
+ * Exporting module required. Clears away other elements in the page and
1027
+ * prints the chart as it is displayed. By default, when the exporting
1028
+ * module is enabled, a context button with a drop down menu in the upper
1029
+ * right corner accesses this function.
1030
+ *
1031
+ * @sample highcharts/members/chart-print/
1032
+ * Print from a HTML button
1033
+ *
1034
+ * @function Highcharts.Chart#print
1035
+ *
1036
+ * @return {void}
1037
+ *
1038
+ * @fires Highcharts.Chart#event:beforePrint
1039
+ * @fires Highcharts.Chart#event:afterPrint
1040
+ *
1041
+ * @requires modules/exporting
1042
+ */
1043
+ function print() {
1044
+ var chart = this;
1045
+ if (chart.isPrinting) { // block the button while in printing mode
1046
+ return;
1047
+ }
1048
+ printingChart = chart;
1049
+ if (!G.isSafari) {
1050
+ chart.beforePrint();
1051
+ }
1052
+ // Give the browser time to draw WebGL content, an issue that randomly
1053
+ // appears (at least) in Chrome ~67 on the Mac (#8708).
1054
+ setTimeout(function () {
1055
+ win.focus(); // #1510
1056
+ win.print();
1057
+ // allow the browser to prepare before reverting
1058
+ if (!G.isSafari) {
1059
+ setTimeout(function () {
1060
+ chart.afterPrint();
1061
+ }, 1000);
1062
+ }
1063
+ }, 1);
1064
+ }
1065
+ /**
1066
+ * Add the buttons on chart load
1067
+ * @private
1068
+ * @function Highcharts.Chart#renderExporting
1069
+ * @return {void}
1070
+ * @requires modules/exporting
1071
+ */
1072
+ function renderExporting() {
1073
+ var chart = this, exportingOptions = chart.options.exporting, buttons = exportingOptions.buttons, isDirty = chart.isDirtyExporting || !chart.exportSVGElements;
1074
+ chart.buttonOffset = 0;
1075
+ if (chart.isDirtyExporting) {
1076
+ chart.destroyExport();
1077
+ }
1078
+ if (isDirty && exportingOptions.enabled !== false) {
1079
+ chart.exportEvents = [];
1080
+ chart.exportingGroup = chart.exportingGroup ||
1081
+ chart.renderer.g('exporting-group').attr({
1082
+ zIndex: 3 // #4955, // #8392
1083
+ }).add();
1084
+ objectEach(buttons, function (button) {
1085
+ chart.addButton(button);
1086
+ });
1087
+ chart.isDirtyExporting = false;
1088
+ }
1089
+ }
1090
+ /**
1091
+ * Exporting module only. A collection of fixes on the produced SVG to
1092
+ * account for expando properties, browser bugs, VML problems and other.
1093
+ * Returns a cleaned SVG.
1094
+ *
1095
+ * @private
1096
+ * @function Highcharts.Chart#sanitizeSVG
1097
+ * @param {string} svg
1098
+ * SVG code to sanitize
1099
+ * @param {Highcharts.Options} options
1100
+ * Chart options to apply
1101
+ * @return {string}
1102
+ * Sanitized SVG code
1103
+ * @requires modules/exporting
1104
+ */
1105
+ function sanitizeSVG(svg, options) {
1106
+ var split = svg.indexOf('</svg>') + 6;
1107
+ var html = svg.substr(split);
1108
+ // Remove any HTML added to the container after the SVG (#894, #9087)
1109
+ svg = svg.substr(0, split);
1110
+ // Move HTML into a foreignObject
1111
+ if (options && options.exporting && options.exporting.allowHTML) {
1112
+ if (html) {
1113
+ html = '<foreignObject x="0" y="0" ' +
1114
+ 'width="' + options.chart.width + '" ' +
1115
+ 'height="' + options.chart.height + '">' +
1116
+ '<body xmlns="http://www.w3.org/1999/xhtml">' +
1117
+ // Some tags needs to be closed in xhtml (#13726)
1118
+ html.replace(/(<(?:img|br).*?(?=\>))>/g, '$1 />') +
1119
+ '</body>' +
1120
+ '</foreignObject>';
1121
+ svg = svg.replace('</svg>', html + '</svg>');
1122
+ }
1123
+ }
1124
+ svg = svg
1125
+ .replace(/zIndex="[^"]+"/g, '')
1126
+ .replace(/symbolName="[^"]+"/g, '')
1127
+ .replace(/jQuery[0-9]+="[^"]+"/g, '')
1128
+ .replace(/url\(("|&quot;)(.*?)("|&quot;)\;?\)/g, 'url($2)')
1129
+ .replace(/url\([^#]+#/g, 'url(#')
1130
+ .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
1131
+ .replace(/ (|NS[0-9]+\:)href=/g, ' xlink:href=') // #3567
1132
+ .replace(/\n/, ' ')
1133
+ // Batik doesn't support rgba fills and strokes (#3095)
1134
+ .replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, // eslint-disable-line max-len
1135
+ '$1="rgb($2)" $1-opacity="$3"')
1136
+ // Replace HTML entities, issue #347
1137
+ .replace(/&nbsp;/g, '\u00A0') // no-break space
1138
+ .replace(/&shy;/g, '\u00AD'); // soft hyphen
1139
+ // Further sanitize for oldIE
1140
+ if (this.ieSanitizeSVG) {
1141
+ svg = this.ieSanitizeSVG(svg);
1142
+ }
1143
+ return svg;
1144
+ }
1145
+ })(Exporting || (Exporting = {}));
1146
+ /* *
1147
+ *
1148
+ * Registry
1149
+ *
1150
+ * */
1151
+ defaultOptions.exporting = merge(ExportingDefaults.exporting, defaultOptions.exporting);
1152
+ defaultOptions.lang = merge(ExportingDefaults.lang, defaultOptions.lang);
1153
+ // Buttons and menus are collected in a separate config option set called
1154
+ // 'navigation'. This can be extended later to add control buttons like
1155
+ // zoom and pan right click menus.
1156
+ /**
1157
+ * A collection of options for buttons and menus appearing in the exporting
1158
+ * module.
1159
+ *
1160
+ * @requires modules/exporting
1161
+ * @optionparent navigation
1162
+ */
1163
+ defaultOptions.navigation = merge(ExportingDefaults.navigation, defaultOptions.navigation);
1164
+ /* *
1165
+ *
1166
+ * Default Export
1167
+ *
1168
+ * */
1169
+ export default Exporting;
1170
+ /* *
1171
+ *
1172
+ * API Declarations
1173
+ *
1174
+ * */
1175
+ /**
1176
+ * Gets fired after a chart is printed through the context menu item or the
1177
+ * Chart.print method.
1178
+ *
1179
+ * @callback Highcharts.ExportingAfterPrintCallbackFunction
1180
+ *
1181
+ * @param {Highcharts.Chart} chart
1182
+ * The chart on which the event occured.
1183
+ *
1184
+ * @param {global.Event} event
1185
+ * The event that occured.
1186
+ */
1187
+ /**
1188
+ * Gets fired before a chart is printed through the context menu item or the
1189
+ * Chart.print method.
1190
+ *
1191
+ * @callback Highcharts.ExportingBeforePrintCallbackFunction
1192
+ *
1193
+ * @param {Highcharts.Chart} chart
1194
+ * The chart on which the event occured.
1195
+ *
1196
+ * @param {global.Event} event
1197
+ * The event that occured.
1198
+ */
1199
+ /**
1200
+ * Function to call if the offline-exporting module fails to export a chart on
1201
+ * the client side.
1202
+ *
1203
+ * @callback Highcharts.ExportingErrorCallbackFunction
1204
+ *
1205
+ * @param {Highcharts.ExportingOptions} options
1206
+ * The exporting options.
1207
+ *
1208
+ * @param {global.Error} err
1209
+ * The error from the module.
1210
+ */
1211
+ /**
1212
+ * Definition for a menu item in the context menu.
1213
+ *
1214
+ * @interface Highcharts.ExportingMenuObject
1215
+ */ /**
1216
+ * The text for the menu item.
1217
+ *
1218
+ * @name Highcharts.ExportingMenuObject#text
1219
+ * @type {string|undefined}
1220
+ */ /**
1221
+ * If internationalization is required, the key to a language string.
1222
+ *
1223
+ * @name Highcharts.ExportingMenuObject#textKey
1224
+ * @type {string|undefined}
1225
+ */ /**
1226
+ * The click handler for the menu item.
1227
+ *
1228
+ * @name Highcharts.ExportingMenuObject#onclick
1229
+ * @type {Highcharts.EventCallbackFunction<Highcharts.Chart>|undefined}
1230
+ */ /**
1231
+ * Indicates a separator line instead of an item.
1232
+ *
1233
+ * @name Highcharts.ExportingMenuObject#separator
1234
+ * @type {boolean|undefined}
1235
+ */
1236
+ /**
1237
+ * Possible MIME types for exporting.
1238
+ *
1239
+ * @typedef {"image/png"|"image/jpeg"|"application/pdf"|"image/svg+xml"} Highcharts.ExportingMimeTypeValue
1240
+ */
1241
+ (''); // keeps doclets above in transpiled file
1242
+ /* *
1243
+ *
1244
+ * API Options
1245
+ *
1246
+ * */
1247
+ /**
1248
+ * Fires after a chart is printed through the context menu item or the
1249
+ * `Chart.print` method.
1250
+ *
1251
+ * @sample highcharts/chart/events-beforeprint-afterprint/
1252
+ * Rescale the chart to print
1253
+ *
1254
+ * @type {Highcharts.ExportingAfterPrintCallbackFunction}
1255
+ * @since 4.1.0
1256
+ * @context Highcharts.Chart
1257
+ * @requires modules/exporting
1258
+ * @apioption chart.events.afterPrint
1259
+ */
1260
+ /**
1261
+ * Fires before a chart is printed through the context menu item or
1262
+ * the `Chart.print` method.
1263
+ *
1264
+ * @sample highcharts/chart/events-beforeprint-afterprint/
1265
+ * Rescale the chart to print
1266
+ *
1267
+ * @type {Highcharts.ExportingBeforePrintCallbackFunction}
1268
+ * @since 4.1.0
1269
+ * @context Highcharts.Chart
1270
+ * @requires modules/exporting
1271
+ * @apioption chart.events.beforePrint
1272
+ */
1273
+ (''); // keeps doclets above in transpiled file