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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v9.1.1 (2021-06-04)
2
+ * @license Highcharts JS v9.2.2 (2021-08-24)
3
3
  *
4
4
  * Client side exporting module
5
5
  *
@@ -141,206 +141,651 @@
141
141
 
142
142
  return exports;
143
143
  });
144
- _registerModule(_modules, 'Extensions/OfflineExporting.js', [_modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/DefaultOptions.js'], _modules['Core/Renderer/SVG/SVGRenderer.js'], _modules['Core/Utilities.js'], _modules['Extensions/DownloadURL.js']], function (Chart, H, D, SVGRenderer, U, DownloadURL) {
144
+ _registerModule(_modules, 'Extensions/OfflineExporting/OfflineExportingDefaults.js', [], function () {
145
145
  /* *
146
146
  *
147
- * Client side exporting module
148
- *
149
- * (c) 2015 Torstein Honsi / Oystein Moseng
147
+ * (c) 2010-2021 Torstein Honsi
150
148
  *
151
149
  * License: www.highcharts.com/license
152
150
  *
153
151
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
154
152
  *
155
153
  * */
156
- var win = H.win,
157
- doc = H.doc;
158
- var getOptions = D.getOptions;
159
- var addEvent = U.addEvent,
160
- error = U.error,
161
- extend = U.extend,
162
- fireEvent = U.fireEvent,
163
- merge = U.merge;
164
- var downloadURL = DownloadURL.downloadURL;
165
- var domurl = win.URL || win.webkitURL || win,
166
- // Milliseconds to defer image load event handlers to offset IE bug
167
- loadEventDeferDelay = H.isMS ? 150 : 0;
168
- // Dummy object so we can reuse our canvas-tools.js without errors
169
- H.CanVGRenderer = {};
170
- /* eslint-disable valid-jsdoc */
171
- /**
172
- * Downloads a script and executes a callback when done.
154
+ /* *
173
155
  *
174
- * @private
175
- * @function getScript
176
- * @param {string} scriptLocation
177
- * @param {Function} callback
178
- * @return {void}
179
- */
180
- function getScript(scriptLocation, callback) {
181
- var head = doc.getElementsByTagName('head')[0], script = doc.createElement('script');
182
- script.type = 'text/javascript';
183
- script.src = scriptLocation;
184
- script.onload = callback;
185
- script.onerror = function () {
186
- error('Error loading script ' + scriptLocation);
187
- };
188
- head.appendChild(script);
189
- }
190
- /**
191
- * Get blob URL from SVG code. Falls back to normal data URI.
156
+ * Declarations
192
157
  *
193
- * @private
194
- * @function Highcharts.svgToDataURL
195
- * @param {string} svg
196
- * @return {string}
197
- */
198
- function svgToDataUrl(svg) {
199
- // Webkit and not chrome
200
- var userAgent = win.navigator.userAgent;
201
- var webKit = (userAgent.indexOf('WebKit') > -1 &&
202
- userAgent.indexOf('Chrome') < 0);
203
- try {
204
- // Safari requires data URI since it doesn't allow navigation to blob
205
- // URLs. Firefox has an issue with Blobs and internal references,
206
- // leading to gradients not working using Blobs (#4550).
207
- // foreignObjects also dont work well in Blobs in Chrome (#14780).
208
- if (!webKit && !H.isFirefox && svg.indexOf('<foreignObject') === -1) {
209
- return domurl.createObjectURL(new win.Blob([svg], {
210
- type: 'image/svg+xml;charset-utf-16'
211
- }));
158
+ * */
159
+ var OfflineExportingDefaults = {
160
+ libURL: 'https://code.highcharts.com/9.2.2/lib/',
161
+ // When offline-exporting is loaded, redefine the menu item definitions
162
+ // related to download.
163
+ menuItemDefinitions: {
164
+ downloadPNG: {
165
+ textKey: 'downloadPNG',
166
+ onclick: function () {
167
+ this.exportChartLocal();
168
+ }
169
+ },
170
+ downloadJPEG: {
171
+ textKey: 'downloadJPEG',
172
+ onclick: function () {
173
+ this.exportChartLocal({
174
+ type: 'image/jpeg'
175
+ });
176
+ }
177
+ },
178
+ downloadSVG: {
179
+ textKey: 'downloadSVG',
180
+ onclick: function () {
181
+ this.exportChartLocal({
182
+ type: 'image/svg+xml'
183
+ });
184
+ }
185
+ },
186
+ downloadPDF: {
187
+ textKey: 'downloadPDF',
188
+ onclick: function () {
189
+ this.exportChartLocal({
190
+ type: 'application/pdf'
191
+ });
192
+ }
212
193
  }
213
194
  }
214
- catch (e) {
215
- // Ignore
216
- }
217
- return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg);
218
- }
219
- /**
220
- * Get data:URL from image URL. Pass in callbacks to handle results.
195
+ };
196
+ /* *
221
197
  *
222
- * @private
223
- * @function Highcharts.imageToDataUrl
198
+ * Default Export
224
199
  *
225
- * @param {string} imageURL
200
+ * */
201
+
202
+ return OfflineExportingDefaults;
203
+ });
204
+ _registerModule(_modules, 'Extensions/OfflineExporting/OfflineExporting.js', [_modules['Core/Chart/Chart.js'], _modules['Core/DefaultOptions.js'], _modules['Extensions/DownloadURL.js'], _modules['Extensions/Exporting/Exporting.js'], _modules['Core/Globals.js'], _modules['Extensions/OfflineExporting/OfflineExportingDefaults.js'], _modules['Core/Utilities.js']], function (Chart, D, DownloadURL, Exporting, H, OfflineExportingDefaults, U) {
205
+ /* *
226
206
  *
227
- * @param {string} imageType
207
+ * Client side exporting module
228
208
  *
229
- * @param {*} callbackArgs
230
- * callbackArgs is used only by callbacks.
209
+ * (c) 2015 Torstein Honsi / Oystein Moseng
231
210
  *
232
- * @param {number} scale
211
+ * License: www.highcharts.com/license
233
212
  *
234
- * @param {Function} successCallback
235
- * Receives four arguments: imageURL, imageType, callbackArgs, and scale.
213
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
236
214
  *
237
- * @param {Function} taintedCallback
238
- * Receives four arguments: imageURL, imageType, callbackArgs, and scale.
215
+ * */
216
+ /* global MSBlobBuilder */
217
+ var defaultOptions = D.defaultOptions;
218
+ var downloadURL = DownloadURL.downloadURL;
219
+ var win = H.win,
220
+ doc = H.doc;
221
+ var addEvent = U.addEvent,
222
+ error = U.error,
223
+ extend = U.extend,
224
+ fireEvent = U.fireEvent,
225
+ merge = U.merge;
226
+ /* *
239
227
  *
240
- * @param {Function} noCanvasSupportCallback
241
- * Receives four arguments: imageURL, imageType, callbackArgs, and scale.
228
+ * Constants
242
229
  *
243
- * @param {Function} failedLoadCallback
244
- * Receives four arguments: imageURL, imageType, callbackArgs, and scale.
230
+ * */
231
+ var composedClasses = [];
232
+ /* *
245
233
  *
246
- * @param {Function} [finallyCallback]
247
- * finallyCallback is always called at the end of the process. All
248
- * callbacks receive four arguments: imageURL, imageType, callbackArgs,
249
- * and scale.
234
+ * Composition
250
235
  *
251
- * @return {void}
252
- */
253
- function imageToDataUrl(imageURL, imageType, callbackArgs, scale, successCallback, taintedCallback, noCanvasSupportCallback, failedLoadCallback, finallyCallback) {
254
- var img = new win.Image(), taintedHandler, loadHandler = function () {
255
- setTimeout(function () {
256
- var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d'), dataURL;
236
+ * */
237
+ var OfflineExporting;
238
+ (function (OfflineExporting) {
239
+ /* *
240
+ *
241
+ * Declarations
242
+ *
243
+ * */
244
+ /* *
245
+ *
246
+ * Constants
247
+ *
248
+ * */
249
+ // Dummy object so we can reuse our canvas-tools.js without errors
250
+ OfflineExporting.CanVGRenderer = {}, OfflineExporting.domurl = win.URL || win.webkitURL || win,
251
+ // Milliseconds to defer image load event handlers to offset IE bug
252
+ OfflineExporting.loadEventDeferDelay = H.isMS ? 150 : 0;
253
+ /* *
254
+ *
255
+ * Functions
256
+ *
257
+ * */
258
+ /* eslint-disable valid-jsdoc */
259
+ /**
260
+ * Extends OfflineExporting with Chart.
261
+ * @private
262
+ */
263
+ function compose(ChartClass) {
264
+ if (composedClasses.indexOf(ChartClass) === -1) {
265
+ composedClasses.push(ChartClass);
266
+ var chartProto = ChartClass.prototype;
267
+ chartProto.getSVGForLocalExport = getSVGForLocalExport;
268
+ chartProto.exportChartLocal = exportChartLocal;
269
+ // Extend the default options to use the local exporter logic
270
+ merge(true, defaultOptions.exporting, OfflineExportingDefaults);
271
+ }
272
+ return ChartClass;
273
+ }
274
+ OfflineExporting.compose = compose;
275
+ /* eslint-disable valid-jsdoc */
276
+ /**
277
+ * Get data URL to an image of an SVG and call download on it options
278
+ * object:
279
+ * - **filename:** Name of resulting downloaded file without extension.
280
+ * Default is `chart`.
281
+ *
282
+ * - **type:** File type of resulting download. Default is `image/png`.
283
+ *
284
+ * - **scale:** Scaling factor of downloaded image compared to source.
285
+ * Default is `1`.
286
+ *
287
+ * - **libURL:** URL pointing to location of dependency scripts to download
288
+ * on demand. Default is the exporting.libURL option of the global
289
+ * Highcharts options pointing to our server.
290
+ *
291
+ * @function Highcharts.downloadSVGLocal
292
+ *
293
+ * @param {string} svg
294
+ * The generated SVG
295
+ *
296
+ * @param {Highcharts.ExportingOptions} options
297
+ * The exporting options
298
+ *
299
+ * @param {Function} failCallback
300
+ * The callback function in case of errors
301
+ *
302
+ * @param {Function} [successCallback]
303
+ * The callback function in case of success
304
+ *
305
+ * @return {void}
306
+ */
307
+ function downloadSVGLocal(svg, options, failCallback, successCallback) {
308
+ var dummySVGContainer = doc.createElement('div'), imageType = options.type || 'image/png', filename = ((options.filename || 'chart') +
309
+ '.' +
310
+ (imageType === 'image/svg+xml' ? 'svg' : imageType.split('/')[1])), scale = options.scale || 1;
311
+ var svgurl,
312
+ blob,
313
+ finallyHandler,
314
+ libURL = (options.libURL || defaultOptions.exporting.libURL),
315
+ objectURLRevoke = true;
316
+ // Allow libURL to end with or without fordward slash
317
+ libURL = libURL.slice(-1) !== '/' ? libURL + '/' : libURL;
318
+ /**
319
+ * @private
320
+ * @return {void}
321
+ */
322
+ var downloadPDF = function () {
323
+ dummySVGContainer.innerHTML = svg;
324
+ var textElements = dummySVGContainer.getElementsByTagName('text'),
325
+ // Copy style property to element from parents if it's not
326
+ // there. Searches up hierarchy until it finds prop, or hits the
327
+ // chart container.
328
+ setStylePropertyFromParents = function (el,
329
+ propName) {
330
+ var curParent = el;
331
+ while (curParent && curParent !== dummySVGContainer) {
332
+ if (curParent.style[propName]) {
333
+ el.style[propName] =
334
+ curParent.style[propName];
335
+ break;
336
+ }
337
+ curParent = curParent.parentNode;
338
+ }
339
+ };
340
+ var titleElements;
341
+ // Workaround for the text styling. Making sure it does pick up
342
+ // settings for parent elements.
343
+ [].forEach.call(textElements, function (el) {
344
+ // Workaround for the text styling. making sure it does pick up@
345
+ // the root element
346
+ ['font-family', 'font-size'].forEach(function (property) {
347
+ setStylePropertyFromParents(el, property);
348
+ });
349
+ el.style['font-family'] = (el.style['font-family'] &&
350
+ el.style['font-family'].split(' ').splice(-1));
351
+ // Workaround for plotband with width, removing title from text
352
+ // nodes
353
+ titleElements = el.getElementsByTagName('title');
354
+ [].forEach.call(titleElements, function (titleElement) {
355
+ el.removeChild(titleElement);
356
+ });
357
+ });
358
+ var svgData = svgToPdf(dummySVGContainer.firstChild, 0);
359
+ try {
360
+ downloadURL(svgData, filename);
361
+ if (successCallback) {
362
+ successCallback();
363
+ }
364
+ }
365
+ catch (e) {
366
+ failCallback(e);
367
+ }
368
+ };
369
+ // Initiate download depending on file type
370
+ if (imageType === 'image/svg+xml') {
371
+ // SVG download. In this case, we want to use Microsoft specific
372
+ // Blob if available
257
373
  try {
258
- if (!ctx) {
259
- noCanvasSupportCallback(imageURL, imageType, callbackArgs, scale);
374
+ if (typeof win.navigator.msSaveOrOpenBlob !== 'undefined') {
375
+ blob = new MSBlobBuilder();
376
+ blob.append(svg);
377
+ svgurl = blob.getBlob('image/svg+xml');
260
378
  }
261
379
  else {
262
- canvas.height = img.height * scale;
263
- canvas.width = img.width * scale;
264
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
265
- // Now we try to get the contents of the canvas.
380
+ svgurl = svgToDataUrl(svg);
381
+ }
382
+ downloadURL(svgurl, filename);
383
+ if (successCallback) {
384
+ successCallback();
385
+ }
386
+ }
387
+ catch (e) {
388
+ failCallback(e);
389
+ }
390
+ }
391
+ else if (imageType === 'application/pdf') {
392
+ if (win.jsPDF && win.svg2pdf) {
393
+ downloadPDF();
394
+ }
395
+ else {
396
+ // Must load pdf libraries first. // Don't destroy the object
397
+ // URL yet since we are doing things asynchronously. A cleaner
398
+ // solution would be nice, but this will do for now.
399
+ objectURLRevoke = true;
400
+ getScript(libURL + 'jspdf.js', function () {
401
+ getScript(libURL + 'svg2pdf.js', function () {
402
+ downloadPDF();
403
+ });
404
+ });
405
+ }
406
+ }
407
+ else {
408
+ // PNG/JPEG download - create bitmap from SVG
409
+ svgurl = svgToDataUrl(svg);
410
+ finallyHandler = function () {
411
+ try {
412
+ OfflineExporting.domurl.revokeObjectURL(svgurl);
413
+ }
414
+ catch (e) {
415
+ // Ignore
416
+ }
417
+ };
418
+ // First, try to get PNG by rendering on canvas
419
+ imageToDataUrl(svgurl, imageType, {}, scale, function (imageURL) {
420
+ // Success
421
+ try {
422
+ downloadURL(imageURL, filename);
423
+ if (successCallback) {
424
+ successCallback();
425
+ }
426
+ }
427
+ catch (e) {
428
+ failCallback(e);
429
+ }
430
+ }, function () {
431
+ // Failed due to tainted canvas
432
+ // Create new and untainted canvas
433
+ var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d'), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
434
+ var v = win.canvg.Canvg.fromString(ctx, svg);
435
+ v.start();
266
436
  try {
267
- dataURL = canvas.toDataURL(imageType);
268
- successCallback(dataURL, imageType, callbackArgs, scale);
437
+ downloadURL(win.navigator.msSaveOrOpenBlob ?
438
+ canvas.msToBlob() :
439
+ canvas.toDataURL(imageType), filename);
440
+ if (successCallback) {
441
+ successCallback();
442
+ }
269
443
  }
270
444
  catch (e) {
271
- taintedHandler(imageURL, imageType, callbackArgs, scale);
445
+ failCallback(e);
446
+ }
447
+ finally {
448
+ finallyHandler();
272
449
  }
450
+ };
451
+ canvas.width = imageWidth;
452
+ canvas.height = imageHeight;
453
+ if (win.canvg) {
454
+ // Use preloaded canvg
455
+ downloadWithCanVG();
456
+ }
457
+ else {
458
+ // Must load canVG first. // Don't destroy the object
459
+ // URL yet since we are doing things asynchronously. A
460
+ // cleaner solution would be nice, but this will do for
461
+ // now.
462
+ objectURLRevoke = true;
463
+ getScript(libURL + 'canvg.js', function () {
464
+ downloadWithCanVG();
465
+ });
466
+ }
467
+ },
468
+ // No canvas support
469
+ failCallback,
470
+ // Failed to load image
471
+ failCallback,
472
+ // Finally
473
+ function () {
474
+ if (objectURLRevoke) {
475
+ finallyHandler();
476
+ }
477
+ });
478
+ }
479
+ }
480
+ OfflineExporting.downloadSVGLocal = downloadSVGLocal;
481
+ /* eslint-disable valid-jsdoc */
482
+ /**
483
+ * Exporting and offline-exporting modules required. Export a chart to
484
+ * an image locally in the user's browser.
485
+ *
486
+ * @function Highcharts.Chart#exportChartLocal
487
+ *
488
+ * @param {Highcharts.ExportingOptions} [exportingOptions]
489
+ * Exporting options, the same as in
490
+ * {@link Highcharts.Chart#exportChart}.
491
+ *
492
+ * @param {Highcharts.Options} [chartOptions]
493
+ * Additional chart options for the exported chart. For example
494
+ * a different background color can be added here, or
495
+ * `dataLabels` for export only.
496
+ *
497
+ * @return {void}
498
+ *
499
+ * @requires modules/exporting
500
+ */
501
+ function exportChartLocal(exportingOptions, chartOptions) {
502
+ var chart = this,
503
+ options = merge(chart.options.exporting,
504
+ exportingOptions),
505
+ fallbackToExportServer = function (err) {
506
+ if (options.fallbackToExportServer === false) {
507
+ if (options.error) {
508
+ options.error(options,
509
+ err);
510
+ }
511
+ else {
512
+ error(28, true); // Fallback disabled
273
513
  }
274
514
  }
275
- finally {
276
- if (finallyCallback) {
277
- finallyCallback(imageURL, imageType, callbackArgs, scale);
515
+ else {
516
+ chart.exportChart(options);
517
+ }
518
+ }, svgSuccess = function (svg) {
519
+ // If SVG contains foreignObjects PDF fails in all browsers
520
+ // and all exports except SVG will fail in IE, as both CanVG
521
+ // and svg2pdf choke on this. Gracefully fall back.
522
+ if (svg.indexOf('<foreignObject') > -1 &&
523
+ options.type !== 'image/svg+xml' &&
524
+ (H.isMS || options.type === 'application/pdf')) {
525
+ fallbackToExportServer('Image type not supported' +
526
+ 'for charts with embedded HTML');
527
+ }
528
+ else {
529
+ OfflineExporting.downloadSVGLocal(svg, extend({ filename: chart.getFilename() }, options), fallbackToExportServer, function () { return fireEvent(chart, 'exportChartLocalSuccess'); });
530
+ }
531
+ },
532
+ // Return true if the SVG contains images with external data.
533
+ // With the boost module there are `image` elements with encoded
534
+ // PNGs, these are supported by svg2pdf and should
535
+ // pass (#10243).
536
+ hasExternalImages = function () {
537
+ return [].some.call(chart.container.getElementsByTagName('image'), function (image) {
538
+ var href = image.getAttribute('href');
539
+ return href !== '' && href.indexOf('data:') !== 0;
540
+ });
541
+ };
542
+ // If we are on IE and in styled mode, add a whitelist to the
543
+ // renderer for inline styles that we want to pass through. There
544
+ // are so many styles by default in IE that we don't want to
545
+ // blacklist them all.
546
+ if (H.isMS && chart.styledMode && !Exporting.inlineWhitelist.length) {
547
+ Exporting.inlineWhitelist.push(/^blockSize/, /^border/, /^caretColor/, /^color/, /^columnRule/, /^columnRuleColor/, /^cssFloat/, /^cursor/, /^fill$/, /^fillOpacity/, /^font/, /^inlineSize/, /^length/, /^lineHeight/, /^opacity/, /^outline/, /^parentRule/, /^rx$/, /^ry$/, /^stroke/, /^textAlign/, /^textAnchor/, /^textDecoration/, /^transform/, /^vectorEffect/, /^visibility/, /^x$/, /^y$/);
548
+ }
549
+ // Always fall back on:
550
+ // - MS browsers: Embedded images JPEG/PNG, or any PDF
551
+ // - Embedded images and PDF
552
+ if ((H.isMS &&
553
+ (options.type === 'application/pdf' ||
554
+ chart.container.getElementsByTagName('image').length &&
555
+ options.type !== 'image/svg+xml')) || (options.type === 'application/pdf' &&
556
+ hasExternalImages())) {
557
+ fallbackToExportServer('Image type not supported for this chart/browser.');
558
+ return;
559
+ }
560
+ chart.getSVGForLocalExport(options, chartOptions || {}, fallbackToExportServer, svgSuccess);
561
+ }
562
+ /**
563
+ * Downloads a script and executes a callback when done.
564
+ *
565
+ * @private
566
+ * @function getScript
567
+ * @param {string} scriptLocation
568
+ * @param {Function} callback
569
+ */
570
+ function getScript(scriptLocation, callback) {
571
+ var head = doc.getElementsByTagName('head')[0], script = doc.createElement('script');
572
+ script.type = 'text/javascript';
573
+ script.src = scriptLocation;
574
+ script.onload = callback;
575
+ script.onerror = function () {
576
+ error('Error loading script ' + scriptLocation);
577
+ };
578
+ head.appendChild(script);
579
+ }
580
+ OfflineExporting.getScript = getScript;
581
+ /**
582
+ * Get SVG of chart prepared for client side export. This converts
583
+ * embedded images in the SVG to data URIs. It requires the regular
584
+ * exporting module. The options and chartOptions arguments are passed
585
+ * to the getSVGForExport function.
586
+ *
587
+ * @private
588
+ * @function Highcharts.Chart#getSVGForLocalExport
589
+ * @param {Highcharts.ExportingOptions} options
590
+ * @param {Highcharts.Options} chartOptions
591
+ * @param {Function} failCallback
592
+ * @param {Function} successCallback
593
+ * @return {void}
594
+ */
595
+ function getSVGForLocalExport(options, chartOptions, failCallback, successCallback) {
596
+ var chart = this,
597
+ // After grabbing the SVG of the chart's copy container we need
598
+ // to do sanitation on the SVG
599
+ sanitize = function (svg) { return chart.sanitizeSVG(svg,
600
+ chartCopyOptions); },
601
+ // When done with last image we have our SVG
602
+ checkDone = function () {
603
+ if (images && imagesEmbedded === images.length) {
604
+ successCallback(sanitize(chartCopyContainer.innerHTML));
605
+ }
606
+ },
607
+ // Success handler, we converted image to base64!
608
+ embeddedSuccess = function (imageURL, imageType, callbackArgs) {
609
+ ++imagesEmbedded;
610
+ // Change image href in chart copy
611
+ callbackArgs.imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageURL);
612
+ checkDone();
613
+ };
614
+ var el,
615
+ i,
616
+ l,
617
+ chartCopyContainer,
618
+ chartCopyOptions,
619
+ href = null,
620
+ images,
621
+ imagesEmbedded = 0;
622
+ // Hook into getSVG to get a copy of the chart copy's
623
+ // container (#8273)
624
+ chart.unbindGetSVG = addEvent(chart, 'getSVG', function (e) {
625
+ chartCopyOptions = e.chartCopy.options;
626
+ chartCopyContainer = e.chartCopy.container.cloneNode(true);
627
+ images = chartCopyContainer && chartCopyContainer.getElementsByTagName('image') || [];
628
+ });
629
+ // Trigger hook to get chart copy
630
+ chart.getSVGForExport(options, chartOptions);
631
+ try {
632
+ // If there are no images to embed, the SVG is okay now.
633
+ if (!images || !images.length) {
634
+ // Use SVG of chart copy
635
+ successCallback(sanitize(chartCopyContainer.innerHTML));
636
+ return;
637
+ }
638
+ // Go through the images we want to embed
639
+ for (i = 0, l = images.length; i < l; ++i) {
640
+ el = images[i];
641
+ href = el.getAttributeNS('http://www.w3.org/1999/xlink', 'href');
642
+ if (href) {
643
+ OfflineExporting.imageToDataUrl(href, 'image/png', { imageElement: el }, options.scale, embeddedSuccess,
644
+ // Tainted canvas
645
+ failCallback,
646
+ // No canvas support
647
+ failCallback,
648
+ // Failed to load source
649
+ failCallback);
650
+ // Hidden, boosted series have blank href (#10243)
651
+ }
652
+ else {
653
+ ++imagesEmbedded;
654
+ el.parentNode.removeChild(el);
655
+ checkDone();
278
656
  }
279
657
  }
280
- // IE bug where image is not always ready despite calling load
281
- // event.
282
- }, loadEventDeferDelay);
283
- },
284
- // Image load failed (e.g. invalid URL)
285
- errorHandler = function () {
286
- failedLoadCallback(imageURL, imageType, callbackArgs, scale);
287
- if (finallyCallback) {
288
- finallyCallback(imageURL, imageType, callbackArgs, scale);
289
658
  }
290
- };
291
- // This is called on load if the image drawing to canvas failed with a
292
- // security error. We retry the drawing with crossOrigin set to Anonymous.
293
- taintedHandler = function () {
294
- img = new win.Image();
295
- taintedHandler = taintedCallback;
296
- // Must be set prior to loading image source
297
- img.crossOrigin = 'Anonymous';
659
+ catch (e) {
660
+ failCallback(e);
661
+ }
662
+ // Clean up
663
+ chart.unbindGetSVG();
664
+ }
665
+ /**
666
+ * Get data:URL from image URL. Pass in callbacks to handle results.
667
+ *
668
+ * @private
669
+ * @function Highcharts.imageToDataUrl
670
+ *
671
+ * @param {string} imageURL
672
+ *
673
+ * @param {string} imageType
674
+ *
675
+ * @param {*} callbackArgs
676
+ * callbackArgs is used only by callbacks.
677
+ *
678
+ * @param {number} scale
679
+ *
680
+ * @param {Function} successCallback
681
+ * Receives four arguments: imageURL, imageType, callbackArgs,
682
+ * and scale.
683
+ *
684
+ * @param {Function} taintedCallback
685
+ * Receives four arguments: imageURL, imageType, callbackArgs,
686
+ * and scale.
687
+ *
688
+ * @param {Function} noCanvasSupportCallback
689
+ * Receives four arguments: imageURL, imageType, callbackArgs,
690
+ * and scale.
691
+ *
692
+ * @param {Function} failedLoadCallback
693
+ * Receives four arguments: imageURL, imageType, callbackArgs,
694
+ * and scale.
695
+ *
696
+ * @param {Function} [finallyCallback]
697
+ * finallyCallback is always called at the end of the process. All
698
+ * callbacks receive four arguments: imageURL, imageType,
699
+ * callbackArgs, and scale.
700
+ */
701
+ function imageToDataUrl(imageURL, imageType, callbackArgs, scale, successCallback, taintedCallback, noCanvasSupportCallback, failedLoadCallback, finallyCallback) {
702
+ var img = new win.Image(),
703
+ taintedHandler;
704
+ var loadHandler = function () {
705
+ setTimeout(function () {
706
+ var canvas = doc.createElement('canvas'), ctx = canvas.getContext && canvas.getContext('2d');
707
+ var dataURL;
708
+ try {
709
+ if (!ctx) {
710
+ noCanvasSupportCallback(imageURL, imageType, callbackArgs, scale);
711
+ }
712
+ else {
713
+ canvas.height = img.height * scale;
714
+ canvas.width = img.width * scale;
715
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
716
+ // Now we try to get the contents of the canvas.
717
+ try {
718
+ dataURL = canvas.toDataURL(imageType);
719
+ successCallback(dataURL, imageType, callbackArgs, scale);
720
+ }
721
+ catch (e) {
722
+ taintedHandler(imageURL, imageType, callbackArgs, scale);
723
+ }
724
+ }
725
+ }
726
+ finally {
727
+ if (finallyCallback) {
728
+ finallyCallback(imageURL, imageType, callbackArgs, scale);
729
+ }
730
+ }
731
+ // IE bug where image is not always ready despite calling load
732
+ // event.
733
+ }, OfflineExporting.loadEventDeferDelay);
734
+ },
735
+ // Image load failed (e.g. invalid URL)
736
+ errorHandler = function () {
737
+ failedLoadCallback(imageURL, imageType, callbackArgs, scale);
738
+ if (finallyCallback) {
739
+ finallyCallback(imageURL, imageType, callbackArgs, scale);
740
+ }
741
+ };
742
+ // This is called on load if the image drawing to canvas failed with a
743
+ // security error. We retry the drawing with crossOrigin set to
744
+ // Anonymous.
745
+ taintedHandler = function () {
746
+ img = new win.Image();
747
+ taintedHandler = taintedCallback;
748
+ // Must be set prior to loading image source
749
+ img.crossOrigin = 'Anonymous';
750
+ img.onload = loadHandler;
751
+ img.onerror = errorHandler;
752
+ img.src = imageURL;
753
+ };
298
754
  img.onload = loadHandler;
299
755
  img.onerror = errorHandler;
300
756
  img.src = imageURL;
301
- };
302
- img.onload = loadHandler;
303
- img.onerror = errorHandler;
304
- img.src = imageURL;
305
- }
306
- /* eslint-enable valid-jsdoc */
307
- /**
308
- * Get data URL to an image of an SVG and call download on it options object:
309
- *
310
- * - **filename:** Name of resulting downloaded file without extension. Default
311
- * is `chart`.
312
- *
313
- * - **type:** File type of resulting download. Default is `image/png`.
314
- *
315
- * - **scale:** Scaling factor of downloaded image compared to source. Default
316
- * is `1`.
317
- *
318
- * - **libURL:** URL pointing to location of dependency scripts to download on
319
- * demand. Default is the exporting.libURL option of the global Highcharts
320
- * options pointing to our server.
321
- *
322
- * @function Highcharts.downloadSVGLocal
323
- *
324
- * @param {string} svg
325
- * The generated SVG
326
- *
327
- * @param {Highcharts.ExportingOptions} options
328
- * The exporting options
329
- *
330
- * @param {Function} failCallback
331
- * The callback function in case of errors
332
- *
333
- * @param {Function} [successCallback]
334
- * The callback function in case of success
335
- *
336
- * @return {void}
337
- */
338
- function downloadSVGLocal(svg, options, failCallback, successCallback) {
339
- var svgurl, blob, objectURLRevoke = true, finallyHandler, libURL = (options.libURL || getOptions().exporting.libURL), dummySVGContainer = doc.createElement('div'), imageType = options.type || 'image/png', filename = ((options.filename || 'chart') +
340
- '.' +
341
- (imageType === 'image/svg+xml' ? 'svg' : imageType.split('/')[1])), scale = options.scale || 1;
342
- // Allow libURL to end with or without fordward slash
343
- libURL = libURL.slice(-1) !== '/' ? libURL + '/' : libURL;
757
+ }
758
+ OfflineExporting.imageToDataUrl = imageToDataUrl;
759
+ /**
760
+ * Get blob URL from SVG code. Falls back to normal data URI.
761
+ *
762
+ * @private
763
+ * @function Highcharts.svgToDataURL
764
+ * @param {string} svg
765
+ * @return {string}
766
+ */
767
+ function svgToDataUrl(svg) {
768
+ // Webkit and not chrome
769
+ var userAgent = win.navigator.userAgent;
770
+ var webKit = (userAgent.indexOf('WebKit') > -1 &&
771
+ userAgent.indexOf('Chrome') < 0);
772
+ try {
773
+ // Safari requires data URI since it doesn't allow navigation to
774
+ // blob URLs. Firefox has an issue with Blobs and internal
775
+ // references, leading to gradients not working using Blobs (#4550).
776
+ // foreignObjects also dont work well in Blobs in Chrome (#14780).
777
+ if (!webKit && !H.isFirefox && svg.indexOf('<foreignObject') === -1) {
778
+ return OfflineExporting.domurl.createObjectURL(new win.Blob([svg], {
779
+ type: 'image/svg+xml;charset-utf-16'
780
+ }));
781
+ }
782
+ }
783
+ catch (e) {
784
+ // Ignore
785
+ }
786
+ return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg);
787
+ }
788
+ OfflineExporting.svgToDataUrl = svgToDataUrl;
344
789
  /* eslint-disable valid-jsdoc */
345
790
  /**
346
791
  * @private
@@ -373,9 +818,9 @@
373
818
  i++;
374
819
  }
375
820
  }
376
- // Workaround for #15135, zero width spaces, which Highcharts uses to
377
- // break lines, are not correctly rendered in PDF. Replace it with a
378
- // regular space and offset by some pixels to compensate.
821
+ // Workaround for #15135, zero width spaces, which Highcharts uses
822
+ // to break lines, are not correctly rendered in PDF. Replace it
823
+ // with a regular space and offset by some pixels to compensate.
379
824
  [].forEach.call(svgElement.querySelectorAll('tspan'), function (tspan) {
380
825
  if (tspan.textContent === '\u200B') {
381
826
  tspan.textContent = ' ';
@@ -385,407 +830,23 @@
385
830
  win.svg2pdf(svgElement, pdf, { removeInvalid: true });
386
831
  return pdf.output('datauristring');
387
832
  }
388
- /**
389
- * @private
390
- * @return {void}
391
- */
392
- function downloadPDF() {
393
- dummySVGContainer.innerHTML = svg;
394
- var textElements = dummySVGContainer.getElementsByTagName('text'),
395
- titleElements,
396
- svgData,
397
- // Copy style property to element from parents if it's not there.
398
- // Searches up hierarchy until it finds prop, or hits the chart
399
- // container.
400
- setStylePropertyFromParents = function (el,
401
- propName) {
402
- var curParent = el;
403
- while (curParent && curParent !== dummySVGContainer) {
404
- if (curParent.style[propName]) {
405
- el.style[propName] =
406
- curParent.style[propName];
407
- break;
408
- }
409
- curParent = curParent.parentNode;
410
- }
411
- };
412
- // Workaround for the text styling. Making sure it does pick up settings
413
- // for parent elements.
414
- [].forEach.call(textElements, function (el) {
415
- // Workaround for the text styling. making sure it does pick up the
416
- // root element
417
- ['font-family', 'font-size'].forEach(function (property) {
418
- setStylePropertyFromParents(el, property);
419
- });
420
- el.style['font-family'] = (el.style['font-family'] &&
421
- el.style['font-family'].split(' ').splice(-1));
422
- // Workaround for plotband with width, removing title from text
423
- // nodes
424
- titleElements = el.getElementsByTagName('title');
425
- [].forEach.call(titleElements, function (titleElement) {
426
- el.removeChild(titleElement);
427
- });
428
- });
429
- svgData = svgToPdf(dummySVGContainer.firstChild, 0);
430
- try {
431
- downloadURL(svgData, filename);
432
- if (successCallback) {
433
- successCallback();
434
- }
435
- }
436
- catch (e) {
437
- failCallback(e);
438
- }
439
- }
440
- /* eslint-enable valid-jsdoc */
441
- // Initiate download depending on file type
442
- if (imageType === 'image/svg+xml') {
443
- // SVG download. In this case, we want to use Microsoft specific Blob if
444
- // available
445
- try {
446
- if (typeof win.navigator.msSaveOrOpenBlob !== 'undefined') {
447
- blob = new MSBlobBuilder();
448
- blob.append(svg);
449
- svgurl = blob.getBlob('image/svg+xml');
450
- }
451
- else {
452
- svgurl = svgToDataUrl(svg);
453
- }
454
- downloadURL(svgurl, filename);
455
- if (successCallback) {
456
- successCallback();
457
- }
458
- }
459
- catch (e) {
460
- failCallback(e);
461
- }
462
- }
463
- else if (imageType === 'application/pdf') {
464
- if (win.jsPDF && win.svg2pdf) {
465
- downloadPDF();
466
- }
467
- else {
468
- // Must load pdf libraries first. // Don't destroy the object URL
469
- // yet since we are doing things asynchronously. A cleaner solution
470
- // would be nice, but this will do for now.
471
- objectURLRevoke = true;
472
- getScript(libURL + 'jspdf.js', function () {
473
- getScript(libURL + 'svg2pdf.js', function () {
474
- downloadPDF();
475
- });
476
- });
477
- }
478
- }
479
- else {
480
- // PNG/JPEG download - create bitmap from SVG
481
- svgurl = svgToDataUrl(svg);
482
- finallyHandler = function () {
483
- try {
484
- domurl.revokeObjectURL(svgurl);
485
- }
486
- catch (e) {
487
- // Ignore
488
- }
489
- };
490
- // First, try to get PNG by rendering on canvas
491
- imageToDataUrl(svgurl, imageType, {}, scale, function (imageURL) {
492
- // Success
493
- try {
494
- downloadURL(imageURL, filename);
495
- if (successCallback) {
496
- successCallback();
497
- }
498
- }
499
- catch (e) {
500
- failCallback(e);
501
- }
502
- }, function () {
503
- // Failed due to tainted canvas
504
- // Create new and untainted canvas
505
- var canvas = doc.createElement('canvas'), ctx = canvas.getContext('2d'), imageWidth = svg.match(/^<svg[^>]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, imageHeight = svg.match(/^<svg[^>]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1] * scale, downloadWithCanVG = function () {
506
- var v = win.canvg.Canvg.fromString(ctx, svg);
507
- v.start();
508
- try {
509
- downloadURL(win.navigator.msSaveOrOpenBlob ?
510
- canvas.msToBlob() :
511
- canvas.toDataURL(imageType), filename);
512
- if (successCallback) {
513
- successCallback();
514
- }
515
- }
516
- catch (e) {
517
- failCallback(e);
518
- }
519
- finally {
520
- finallyHandler();
521
- }
522
- };
523
- canvas.width = imageWidth;
524
- canvas.height = imageHeight;
525
- if (win.canvg) {
526
- // Use preloaded canvg
527
- downloadWithCanVG();
528
- }
529
- else {
530
- // Must load canVG first. // Don't destroy the object URL
531
- // yet since we are doing things asynchronously. A cleaner
532
- // solution would be nice, but this will do for now.
533
- objectURLRevoke = true;
534
- getScript(libURL + 'canvg.js', function () {
535
- downloadWithCanVG();
536
- });
537
- }
538
- },
539
- // No canvas support
540
- failCallback,
541
- // Failed to load image
542
- failCallback,
543
- // Finally
544
- function () {
545
- if (objectURLRevoke) {
546
- finallyHandler();
547
- }
548
- });
549
- }
550
- }
551
- /* eslint-disable valid-jsdoc */
552
- /**
553
- * Get SVG of chart prepared for client side export. This converts embedded
554
- * images in the SVG to data URIs. It requires the regular exporting module. The
555
- * options and chartOptions arguments are passed to the getSVGForExport
556
- * function.
557
- *
558
- * @private
559
- * @function Highcharts.Chart#getSVGForLocalExport
560
- * @param {Highcharts.ExportingOptions} options
561
- * @param {Highcharts.Options} chartOptions
562
- * @param {Function} failCallback
563
- * @param {Function} successCallback
564
- * @return {void}
565
- */
566
- Chart.prototype.getSVGForLocalExport = function (options, chartOptions, failCallback, successCallback) {
567
- var chart = this,
568
- images,
569
- imagesEmbedded = 0,
570
- chartCopyContainer,
571
- chartCopyOptions,
572
- el,
573
- i,
574
- l,
575
- href,
576
- // After grabbing the SVG of the chart's copy container we need to do
577
- // sanitation on the SVG
578
- sanitize = function (svg) {
579
- return chart.sanitizeSVG(svg,
580
- chartCopyOptions);
581
- },
582
- // When done with last image we have our SVG
583
- checkDone = function () {
584
- if (imagesEmbedded === images.length) {
585
- successCallback(sanitize(chartCopyContainer.innerHTML));
586
- }
587
- },
588
- // Success handler, we converted image to base64!
589
- embeddedSuccess = function (imageURL, imageType, callbackArgs) {
590
- ++imagesEmbedded;
591
- // Change image href in chart copy
592
- callbackArgs.imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageURL);
593
- checkDone();
594
- };
595
- // Hook into getSVG to get a copy of the chart copy's container (#8273)
596
- chart.unbindGetSVG = addEvent(chart, 'getSVG', function (e) {
597
- chartCopyOptions = e.chartCopy.options;
598
- chartCopyContainer = e.chartCopy.container.cloneNode(true);
599
- });
600
- // Trigger hook to get chart copy
601
- chart.getSVGForExport(options, chartOptions);
602
- images = chartCopyContainer.getElementsByTagName('image');
603
- try {
604
- // If there are no images to embed, the SVG is okay now.
605
- if (!images.length) {
606
- // Use SVG of chart copy
607
- successCallback(sanitize(chartCopyContainer.innerHTML));
608
- return;
609
- }
610
- // Go through the images we want to embed
611
- for (i = 0, l = images.length; i < l; ++i) {
612
- el = images[i];
613
- href = el.getAttributeNS('http://www.w3.org/1999/xlink', 'href');
614
- if (href) {
615
- imageToDataUrl(href, 'image/png', { imageElement: el }, options.scale, embeddedSuccess,
616
- // Tainted canvas
617
- failCallback,
618
- // No canvas support
619
- failCallback,
620
- // Failed to load source
621
- failCallback);
622
- // Hidden, boosted series have blank href (#10243)
623
- }
624
- else {
625
- ++imagesEmbedded;
626
- el.parentNode.removeChild(el);
627
- checkDone();
628
- }
629
- }
630
- }
631
- catch (e) {
632
- failCallback(e);
633
- }
634
- // Clean up
635
- chart.unbindGetSVG();
636
- };
637
- /* eslint-enable valid-jsdoc */
638
- /**
639
- * Exporting and offline-exporting modules required. Export a chart to an image
640
- * locally in the user's browser.
641
- *
642
- * @function Highcharts.Chart#exportChartLocal
643
- *
644
- * @param {Highcharts.ExportingOptions} [exportingOptions]
645
- * Exporting options, the same as in
646
- * {@link Highcharts.Chart#exportChart}.
647
- *
648
- * @param {Highcharts.Options} [chartOptions]
649
- * Additional chart options for the exported chart. For example a
650
- * different background color can be added here, or `dataLabels`
651
- * for export only.
833
+ OfflineExporting.svgToPdf = svgToPdf;
834
+ })(OfflineExporting || (OfflineExporting = {}));
835
+ /* *
652
836
  *
653
- * @return {void}
837
+ * Default Export
654
838
  *
655
- * @requires modules/exporting
656
- */
657
- Chart.prototype.exportChartLocal = function (exportingOptions, chartOptions) {
658
- var chart = this,
659
- options = merge(chart.options.exporting,
660
- exportingOptions),
661
- fallbackToExportServer = function (err) {
662
- if (options.fallbackToExportServer === false) {
663
- if (options.error) {
664
- options.error(options,
665
- err);
666
- }
667
- else {
668
- error(28, true); // Fallback disabled
669
- }
670
- }
671
- else {
672
- chart.exportChart(options);
673
- }
674
- }, svgSuccess = function (svg) {
675
- // If SVG contains foreignObjects PDF fails in all browsers and all
676
- // exports except SVG will fail in IE, as both CanVG and svg2pdf
677
- // choke on this. Gracefully fall back.
678
- if (svg.indexOf('<foreignObject') > -1 &&
679
- options.type !== 'image/svg+xml' &&
680
- (H.isMS || options.type === 'application/pdf')) {
681
- fallbackToExportServer('Image type not supported' +
682
- 'for charts with embedded HTML');
683
- }
684
- else {
685
- downloadSVGLocal(svg, extend({ filename: chart.getFilename() }, options), fallbackToExportServer, function () { return fireEvent(chart, 'exportChartLocalSuccess'); });
686
- }
687
- },
688
- // Return true if the SVG contains images with external data. With the
689
- // boost module there are `image` elements with encoded PNGs, these are
690
- // supported by svg2pdf and should pass (#10243).
691
- hasExternalImages = function () {
692
- return [].some.call(chart.container.getElementsByTagName('image'), function (image) {
693
- var href = image.getAttribute('href');
694
- return href !== '' && href.indexOf('data:') !== 0;
695
- });
696
- };
697
- // If we are on IE and in styled mode, add a whitelist to the renderer for
698
- // inline styles that we want to pass through. There are so many styles by
699
- // default in IE that we don't want to blacklist them all.
700
- if (H.isMS && chart.styledMode) {
701
- SVGRenderer.prototype.inlineWhitelist = [
702
- /^blockSize/,
703
- /^border/,
704
- /^caretColor/,
705
- /^color/,
706
- /^columnRule/,
707
- /^columnRuleColor/,
708
- /^cssFloat/,
709
- /^cursor/,
710
- /^fill$/,
711
- /^fillOpacity/,
712
- /^font/,
713
- /^inlineSize/,
714
- /^length/,
715
- /^lineHeight/,
716
- /^opacity/,
717
- /^outline/,
718
- /^parentRule/,
719
- /^rx$/,
720
- /^ry$/,
721
- /^stroke/,
722
- /^textAlign/,
723
- /^textAnchor/,
724
- /^textDecoration/,
725
- /^transform/,
726
- /^vectorEffect/,
727
- /^visibility/,
728
- /^x$/,
729
- /^y$/
730
- ];
731
- }
732
- // Always fall back on:
733
- // - MS browsers: Embedded images JPEG/PNG, or any PDF
734
- // - Embedded images and PDF
735
- if ((H.isMS &&
736
- (options.type === 'application/pdf' ||
737
- chart.container.getElementsByTagName('image').length &&
738
- options.type !== 'image/svg+xml')) || (options.type === 'application/pdf' &&
739
- hasExternalImages())) {
740
- fallbackToExportServer('Image type not supported for this chart/browser.');
741
- return;
742
- }
743
- chart.getSVGForLocalExport(options, chartOptions || {}, fallbackToExportServer, svgSuccess);
744
- };
745
- // Extend the default options to use the local exporter logic
746
- merge(true, getOptions().exporting, {
747
- libURL: 'https://code.highcharts.com/9.1.1/lib/',
748
- // When offline-exporting is loaded, redefine the menu item definitions
749
- // related to download.
750
- menuItemDefinitions: {
751
- downloadPNG: {
752
- textKey: 'downloadPNG',
753
- onclick: function () {
754
- this.exportChartLocal();
755
- }
756
- },
757
- downloadJPEG: {
758
- textKey: 'downloadJPEG',
759
- onclick: function () {
760
- this.exportChartLocal({
761
- type: 'image/jpeg'
762
- });
763
- }
764
- },
765
- downloadSVG: {
766
- textKey: 'downloadSVG',
767
- onclick: function () {
768
- this.exportChartLocal({
769
- type: 'image/svg+xml'
770
- });
771
- }
772
- },
773
- downloadPDF: {
774
- textKey: 'downloadPDF',
775
- onclick: function () {
776
- this.exportChartLocal({
777
- type: 'application/pdf'
778
- });
779
- }
780
- }
781
- }
782
- });
783
- // Compatibility
784
- H.downloadSVGLocal = downloadSVGLocal;
839
+ * */
785
840
 
841
+ return OfflineExporting;
786
842
  });
787
- _registerModule(_modules, 'masters/modules/offline-exporting.src.js', [], function () {
843
+ _registerModule(_modules, 'masters/modules/offline-exporting.src.js', [_modules['Core/Globals.js'], _modules['Extensions/OfflineExporting/OfflineExporting.js']], function (Highcharts, OfflineExporting) {
788
844
 
845
+ var G = Highcharts;
846
+ // Compatibility
847
+ G.downloadSVGLocal = OfflineExporting.downloadSVGLocal;
848
+ // Compose
849
+ OfflineExporting.compose(G.Chart);
789
850
 
790
851
  });
791
852
  }));