@ntlab/ntjs-assets 2.72.0 → 2.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (838) hide show
  1. package/assets/js/cdn.json +1 -1
  2. package/assets/js/exif-js/exif.min.js +1 -8
  3. package/assets/js/highcharts/css/annotations/popup.css +86 -45
  4. package/assets/js/highcharts/css/highcharts.css +40 -30
  5. package/assets/js/highcharts/css/stocktools/gui.css +28 -11
  6. package/assets/js/highcharts/es-modules/Accessibility/Components/InfoRegionsComponent.js +3 -3
  7. package/assets/js/highcharts/es-modules/Accessibility/Components/LegendComponent.js +10 -1
  8. package/assets/js/highcharts/es-modules/Accessibility/Components/MenuComponent.js +23 -22
  9. package/assets/js/highcharts/es-modules/Accessibility/HighContrastMode.js +0 -5
  10. package/assets/js/highcharts/es-modules/Core/Axis/AxisDefaults.js +5 -0
  11. package/assets/js/highcharts/es-modules/Core/Axis/OrdinalAxis.js +19 -11
  12. package/assets/js/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +14 -1
  13. package/assets/js/highcharts/es-modules/Core/Axis/RadialAxis.js +3 -4
  14. package/assets/js/highcharts/es-modules/Core/Axis/Tick.js +1 -1
  15. package/assets/js/highcharts/es-modules/Core/Axis/WaterfallAxis.js +4 -4
  16. package/assets/js/highcharts/es-modules/Core/Chart/Chart.js +31 -25
  17. package/assets/js/highcharts/es-modules/Core/Chart/ChartDefaults.js +13 -0
  18. package/assets/js/highcharts/es-modules/Core/Chart/GanttChart.js +4 -2
  19. package/assets/js/highcharts/es-modules/Core/Chart/StockChart.js +1 -1
  20. package/assets/js/highcharts/es-modules/Core/Color/Color.js +4 -8
  21. package/assets/js/highcharts/es-modules/Core/Defaults.js +4 -0
  22. package/assets/js/highcharts/es-modules/Core/Globals.js +1 -1
  23. package/assets/js/highcharts/es-modules/Core/HttpUtilities.js +45 -38
  24. package/assets/js/highcharts/es-modules/Core/Pointer.js +3 -4
  25. package/assets/js/highcharts/es-modules/Core/Renderer/HTML/AST.js +14 -14
  26. package/assets/js/highcharts/es-modules/Core/Renderer/HTML/HTMLElement.js +6 -2
  27. package/assets/js/highcharts/es-modules/Core/Renderer/SVG/SVGRenderer.js +4 -1
  28. package/assets/js/highcharts/es-modules/Core/Series/DataLabel.js +4 -2
  29. package/assets/js/highcharts/es-modules/Core/Series/Series.js +16 -6
  30. package/assets/js/highcharts/es-modules/Core/Series/SeriesDefaults.js +1 -3
  31. package/assets/js/highcharts/es-modules/Core/Templating.js +6 -5
  32. package/assets/js/highcharts/es-modules/Core/Tooltip.js +3 -1
  33. package/assets/js/highcharts/es-modules/Data/Connectors/CSVConnector.js +32 -15
  34. package/assets/js/highcharts/es-modules/Data/Connectors/DataConnector.js +107 -12
  35. package/assets/js/highcharts/es-modules/Data/Connectors/GoogleSheetsConnector.js +29 -17
  36. package/assets/js/highcharts/es-modules/Data/Connectors/HTMLTableConnector.js +3 -3
  37. package/assets/js/highcharts/es-modules/Data/Connectors/JSONConnector.js +37 -16
  38. package/assets/js/highcharts/es-modules/Data/Converters/HTMLTableConverter.js +1 -1
  39. package/assets/js/highcharts/es-modules/Data/DataPool.js +15 -4
  40. package/assets/js/highcharts/es-modules/Extensions/Annotations/Annotation.js +10 -7
  41. package/assets/js/highcharts/es-modules/Extensions/Annotations/AnnotationChart.js +7 -3
  42. package/assets/js/highcharts/es-modules/Extensions/Annotations/AnnotationDefaults.js +38 -12
  43. package/assets/js/highcharts/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +10 -3
  44. package/assets/js/highcharts/es-modules/Extensions/Annotations/NavigationBindingsDefaults.js +1 -1
  45. package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +10 -4
  46. package/assets/js/highcharts/es-modules/Extensions/Annotations/Popup/PopupComposition.js +1 -1
  47. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +0 -3
  48. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/CrookedLine.js +97 -94
  49. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/ElliottWave.js +43 -36
  50. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Fibonacci.js +86 -82
  51. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +74 -71
  52. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/InfinityLine.js +17 -3
  53. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Measure.js +229 -226
  54. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Pitchfork.js +39 -40
  55. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/TimeCycles.js +56 -52
  56. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/Tunnel.js +80 -76
  57. package/assets/js/highcharts/es-modules/Extensions/Annotations/Types/VerticalLine.js +57 -53
  58. package/assets/js/highcharts/es-modules/Extensions/Boost/BoostSeries.js +22 -3
  59. package/assets/js/highcharts/es-modules/Extensions/DownloadURL.js +41 -8
  60. package/assets/js/highcharts/es-modules/Extensions/ExportData/ExportData.js +876 -780
  61. package/assets/js/highcharts/es-modules/Extensions/ExportData/ExportDataDefaults.js +67 -13
  62. package/assets/js/highcharts/es-modules/Extensions/Exporting/Exporting.js +1091 -546
  63. package/assets/js/highcharts/es-modules/Extensions/Exporting/ExportingDefaults.js +52 -36
  64. package/assets/js/highcharts/es-modules/Extensions/Exporting/Fullscreen.js +2 -2
  65. package/assets/js/highcharts/es-modules/Extensions/NonCartesianSeriesZoom/NonCartesianSeriesZoom.js +311 -0
  66. package/assets/js/highcharts/es-modules/Extensions/OfflineExporting/OfflineExporting.js +254 -575
  67. package/assets/js/highcharts/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +9 -38
  68. package/assets/js/highcharts/es-modules/Extensions/Pane/Pane.js +1 -1
  69. package/assets/js/highcharts/es-modules/Extensions/Pane/PaneDefaults.js +9 -1
  70. package/assets/js/highcharts/es-modules/Extensions/Themes/Adaptive.js +1009 -0
  71. package/assets/js/highcharts/es-modules/Maps/MapNavigation.js +1 -1
  72. package/assets/js/highcharts/es-modules/Series/Bubble/BubblePoint.js +2 -2
  73. package/assets/js/highcharts/es-modules/Series/Column/ColumnSeriesDefaults.js +1 -2
  74. package/assets/js/highcharts/es-modules/Series/DragNodesComposition.js +4 -0
  75. package/assets/js/highcharts/es-modules/Series/Flags/FlagsSeriesDefaults.js +2 -0
  76. package/assets/js/highcharts/es-modules/Series/GraphLayoutComposition.js +2 -1
  77. package/assets/js/highcharts/es-modules/Series/Heatmap/HeatmapSeriesDefaults.js +1 -2
  78. package/assets/js/highcharts/es-modules/Series/Item/ItemSeries.js +1 -1
  79. package/assets/js/highcharts/es-modules/Series/PackedBubble/PackedBubblePoint.js +5 -0
  80. package/assets/js/highcharts/es-modules/Series/Pie/PieSeriesDefaults.js +1 -2
  81. package/assets/js/highcharts/es-modules/Series/PolarComposition.js +1 -1
  82. package/assets/js/highcharts/es-modules/Series/SolidGauge/SolidGaugeSeries.js +7 -2
  83. package/assets/js/highcharts/es-modules/Series/Treegraph/TreegraphSeries.js +3 -1
  84. package/assets/js/highcharts/es-modules/Series/Variwide/VariwideSeries.js +8 -1
  85. package/assets/js/highcharts/es-modules/Series/Waterfall/WaterfallSeries.js +6 -8
  86. package/assets/js/highcharts/es-modules/Series/Wordcloud/WordcloudSeries.js +87 -10
  87. package/assets/js/highcharts/es-modules/Shared/BaseForm.js +6 -3
  88. package/assets/js/highcharts/es-modules/Shared/TimeBase.js +5 -1
  89. package/assets/js/highcharts/es-modules/Stock/Navigator/NavigatorComposition.js +2 -2
  90. package/assets/js/highcharts/es-modules/Stock/Scrollbar/Scrollbar.js +5 -7
  91. package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolbar.js +1 -1
  92. package/assets/js/highcharts/es-modules/Stock/StockTools/StockToolsBindings.js +34 -113
  93. package/assets/js/highcharts/es-modules/masters/highcharts-3d.src.js +3 -1
  94. package/assets/js/highcharts/es-modules/masters/highcharts-gantt.src.js +1 -1
  95. package/assets/js/highcharts/es-modules/masters/highcharts-more.src.js +1 -1
  96. package/assets/js/highcharts/es-modules/masters/highcharts.src.js +1 -1
  97. package/assets/js/highcharts/es-modules/masters/highmaps.src.js +1 -1
  98. package/assets/js/highcharts/es-modules/masters/highstock.src.js +1 -1
  99. package/assets/js/highcharts/es-modules/masters/i18n/fr-FR.src.js +1 -1
  100. package/assets/js/highcharts/es-modules/masters/i18n/nb-NO.src.js +1 -1
  101. package/assets/js/highcharts/es-modules/masters/i18n/zh-CN.src.js +1 -1
  102. package/assets/js/highcharts/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  103. package/assets/js/highcharts/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  104. package/assets/js/highcharts/es-modules/masters/indicators/ao.src.js +1 -1
  105. package/assets/js/highcharts/es-modules/masters/indicators/apo.src.js +1 -1
  106. package/assets/js/highcharts/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  107. package/assets/js/highcharts/es-modules/masters/indicators/aroon.src.js +1 -1
  108. package/assets/js/highcharts/es-modules/masters/indicators/atr.src.js +1 -1
  109. package/assets/js/highcharts/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  110. package/assets/js/highcharts/es-modules/masters/indicators/cci.src.js +1 -1
  111. package/assets/js/highcharts/es-modules/masters/indicators/chaikin.src.js +1 -1
  112. package/assets/js/highcharts/es-modules/masters/indicators/cmf.src.js +1 -1
  113. package/assets/js/highcharts/es-modules/masters/indicators/cmo.src.js +1 -1
  114. package/assets/js/highcharts/es-modules/masters/indicators/dema.src.js +1 -1
  115. package/assets/js/highcharts/es-modules/masters/indicators/disparity-index.src.js +1 -1
  116. package/assets/js/highcharts/es-modules/masters/indicators/dmi.src.js +1 -1
  117. package/assets/js/highcharts/es-modules/masters/indicators/dpo.src.js +1 -1
  118. package/assets/js/highcharts/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  119. package/assets/js/highcharts/es-modules/masters/indicators/indicators-all.src.js +1 -1
  120. package/assets/js/highcharts/es-modules/masters/indicators/indicators.src.js +1 -1
  121. package/assets/js/highcharts/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  122. package/assets/js/highcharts/es-modules/masters/indicators/klinger.src.js +1 -1
  123. package/assets/js/highcharts/es-modules/masters/indicators/macd.src.js +1 -1
  124. package/assets/js/highcharts/es-modules/masters/indicators/mfi.src.js +1 -1
  125. package/assets/js/highcharts/es-modules/masters/indicators/momentum.src.js +1 -1
  126. package/assets/js/highcharts/es-modules/masters/indicators/natr.src.js +1 -1
  127. package/assets/js/highcharts/es-modules/masters/indicators/obv.src.js +1 -1
  128. package/assets/js/highcharts/es-modules/masters/indicators/pivot-points.src.js +1 -1
  129. package/assets/js/highcharts/es-modules/masters/indicators/ppo.src.js +1 -1
  130. package/assets/js/highcharts/es-modules/masters/indicators/price-channel.src.js +1 -1
  131. package/assets/js/highcharts/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  132. package/assets/js/highcharts/es-modules/masters/indicators/psar.src.js +1 -1
  133. package/assets/js/highcharts/es-modules/masters/indicators/regressions.src.js +1 -1
  134. package/assets/js/highcharts/es-modules/masters/indicators/roc.src.js +1 -1
  135. package/assets/js/highcharts/es-modules/masters/indicators/rsi.src.js +1 -1
  136. package/assets/js/highcharts/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  137. package/assets/js/highcharts/es-modules/masters/indicators/stochastic.src.js +1 -1
  138. package/assets/js/highcharts/es-modules/masters/indicators/supertrend.src.js +1 -1
  139. package/assets/js/highcharts/es-modules/masters/indicators/tema.src.js +1 -1
  140. package/assets/js/highcharts/es-modules/masters/indicators/trendline.src.js +1 -1
  141. package/assets/js/highcharts/es-modules/masters/indicators/trix.src.js +1 -1
  142. package/assets/js/highcharts/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  143. package/assets/js/highcharts/es-modules/masters/indicators/vwap.src.js +1 -1
  144. package/assets/js/highcharts/es-modules/masters/indicators/williams-r.src.js +1 -1
  145. package/assets/js/highcharts/es-modules/masters/indicators/wma.src.js +1 -1
  146. package/assets/js/highcharts/es-modules/masters/indicators/zigzag.src.js +1 -1
  147. package/assets/js/highcharts/es-modules/masters/modules/accessibility.src.js +1 -1
  148. package/assets/js/highcharts/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  149. package/assets/js/highcharts/es-modules/masters/modules/annotations.src.js +1 -1
  150. package/assets/js/highcharts/es-modules/masters/modules/arc-diagram.src.js +1 -1
  151. package/assets/js/highcharts/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  152. package/assets/js/highcharts/es-modules/masters/modules/boost-canvas.src.js +1 -1
  153. package/assets/js/highcharts/es-modules/masters/modules/boost.src.js +1 -1
  154. package/assets/js/highcharts/es-modules/masters/modules/broken-axis.src.js +1 -1
  155. package/assets/js/highcharts/es-modules/masters/modules/bullet.src.js +1 -1
  156. package/assets/js/highcharts/es-modules/masters/modules/coloraxis.src.js +1 -1
  157. package/assets/js/highcharts/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  158. package/assets/js/highcharts/es-modules/masters/modules/cylinder.src.js +1 -1
  159. package/assets/js/highcharts/es-modules/masters/modules/data-tools.src.js +1 -1
  160. package/assets/js/highcharts/es-modules/masters/modules/data.src.js +1 -1
  161. package/assets/js/highcharts/es-modules/masters/modules/datagrouping.src.js +1 -1
  162. package/assets/js/highcharts/es-modules/masters/modules/debugger.src.js +1 -1
  163. package/assets/js/highcharts/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  164. package/assets/js/highcharts/es-modules/masters/modules/dotplot.src.js +1 -1
  165. package/assets/js/highcharts/es-modules/masters/modules/drag-panes.src.js +1 -1
  166. package/assets/js/highcharts/es-modules/masters/modules/draggable-points.src.js +1 -1
  167. package/assets/js/highcharts/es-modules/masters/modules/drilldown.src.js +3 -1
  168. package/assets/js/highcharts/es-modules/masters/modules/dumbbell.src.js +1 -1
  169. package/assets/js/highcharts/es-modules/masters/modules/export-data.src.js +3 -3
  170. package/assets/js/highcharts/es-modules/masters/modules/exporting.src.js +5 -1
  171. package/assets/js/highcharts/es-modules/masters/modules/flowmap.src.js +1 -1
  172. package/assets/js/highcharts/es-modules/masters/modules/full-screen.src.js +1 -1
  173. package/assets/js/highcharts/es-modules/masters/modules/funnel.src.js +1 -1
  174. package/assets/js/highcharts/es-modules/masters/modules/funnel3d.src.js +1 -1
  175. package/assets/js/highcharts/es-modules/masters/modules/gantt.src.js +1 -1
  176. package/assets/js/highcharts/es-modules/masters/modules/geoheatmap.src.js +1 -1
  177. package/assets/js/highcharts/es-modules/masters/modules/grid-axis.src.js +1 -1
  178. package/assets/js/highcharts/es-modules/masters/modules/heatmap.src.js +1 -1
  179. package/assets/js/highcharts/es-modules/masters/modules/heikinashi.src.js +1 -1
  180. package/assets/js/highcharts/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  181. package/assets/js/highcharts/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  182. package/assets/js/highcharts/es-modules/masters/modules/item-series.src.js +1 -1
  183. package/assets/js/highcharts/es-modules/masters/modules/lollipop.src.js +1 -1
  184. package/assets/js/highcharts/es-modules/masters/modules/map.src.js +1 -1
  185. package/assets/js/highcharts/es-modules/masters/modules/marker-clusters.src.js +1 -1
  186. package/assets/js/highcharts/es-modules/masters/modules/mouse-wheel-zoom.src.js +1 -1
  187. package/assets/js/highcharts/es-modules/masters/modules/navigator.src.js +1 -1
  188. package/assets/js/highcharts/es-modules/masters/modules/networkgraph.src.js +1 -1
  189. package/assets/js/highcharts/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  190. package/assets/js/highcharts/es-modules/masters/modules/non-cartesian-zoom.src.js +18 -0
  191. package/assets/js/highcharts/es-modules/masters/modules/offline-exporting.src.js +2 -2
  192. package/assets/js/highcharts/es-modules/masters/modules/organization.src.js +1 -1
  193. package/assets/js/highcharts/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  194. package/assets/js/highcharts/es-modules/masters/modules/pareto.src.js +1 -1
  195. package/assets/js/highcharts/es-modules/masters/modules/pathfinder.src.js +1 -1
  196. package/assets/js/highcharts/es-modules/masters/modules/pattern-fill.src.js +1 -1
  197. package/assets/js/highcharts/es-modules/masters/modules/pictorial.src.js +1 -1
  198. package/assets/js/highcharts/es-modules/masters/modules/pointandfigure.src.js +1 -1
  199. package/assets/js/highcharts/es-modules/masters/modules/price-indicator.src.js +1 -1
  200. package/assets/js/highcharts/es-modules/masters/modules/pyramid3d.src.js +1 -1
  201. package/assets/js/highcharts/es-modules/masters/modules/renko.src.js +1 -1
  202. package/assets/js/highcharts/es-modules/masters/modules/sankey.src.js +1 -1
  203. package/assets/js/highcharts/es-modules/masters/modules/series-label.src.js +1 -1
  204. package/assets/js/highcharts/es-modules/masters/modules/series-on-point.src.js +1 -1
  205. package/assets/js/highcharts/es-modules/masters/modules/solid-gauge.src.js +1 -1
  206. package/assets/js/highcharts/es-modules/masters/modules/sonification.src.js +1 -1
  207. package/assets/js/highcharts/es-modules/masters/modules/static-scale.src.js +1 -1
  208. package/assets/js/highcharts/es-modules/masters/modules/stock-tools.src.js +1 -1
  209. package/assets/js/highcharts/es-modules/masters/modules/stock.src.js +1 -1
  210. package/assets/js/highcharts/es-modules/masters/modules/streamgraph.src.js +1 -1
  211. package/assets/js/highcharts/es-modules/masters/modules/sunburst.src.js +1 -1
  212. package/assets/js/highcharts/es-modules/masters/modules/textpath.src.js +1 -1
  213. package/assets/js/highcharts/es-modules/masters/modules/tiledwebmap.src.js +1 -1
  214. package/assets/js/highcharts/es-modules/masters/modules/tilemap.src.js +1 -1
  215. package/assets/js/highcharts/es-modules/masters/modules/timeline.src.js +1 -1
  216. package/assets/js/highcharts/es-modules/masters/modules/treegraph.src.js +1 -1
  217. package/assets/js/highcharts/es-modules/masters/modules/treegrid.src.js +1 -1
  218. package/assets/js/highcharts/es-modules/masters/modules/treemap.src.js +1 -1
  219. package/assets/js/highcharts/es-modules/masters/modules/variable-pie.src.js +1 -1
  220. package/assets/js/highcharts/es-modules/masters/modules/variwide.src.js +1 -1
  221. package/assets/js/highcharts/es-modules/masters/modules/vector.src.js +1 -1
  222. package/assets/js/highcharts/es-modules/masters/modules/venn.src.js +1 -1
  223. package/assets/js/highcharts/es-modules/masters/modules/windbarb.src.js +1 -1
  224. package/assets/js/highcharts/es-modules/masters/modules/wordcloud.src.js +1 -1
  225. package/assets/js/highcharts/es-modules/masters/modules/xrange.src.js +1 -1
  226. package/assets/js/highcharts/es-modules/masters/themes/adaptive.src.js +15 -0
  227. package/assets/js/highcharts/es-modules/masters/themes/avocado.src.js +1 -1
  228. package/assets/js/highcharts/es-modules/masters/themes/brand-dark.src.js +1 -1
  229. package/assets/js/highcharts/es-modules/masters/themes/brand-light.src.js +1 -1
  230. package/assets/js/highcharts/es-modules/masters/themes/dark-blue.src.js +1 -1
  231. package/assets/js/highcharts/es-modules/masters/themes/dark-green.src.js +1 -1
  232. package/assets/js/highcharts/es-modules/masters/themes/dark-unica.src.js +1 -1
  233. package/assets/js/highcharts/es-modules/masters/themes/gray.src.js +1 -1
  234. package/assets/js/highcharts/es-modules/masters/themes/grid-light.src.js +1 -1
  235. package/assets/js/highcharts/es-modules/masters/themes/grid.src.js +1 -1
  236. package/assets/js/highcharts/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  237. package/assets/js/highcharts/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  238. package/assets/js/highcharts/es-modules/masters/themes/sand-signika.src.js +1 -1
  239. package/assets/js/highcharts/es-modules/masters/themes/skies.src.js +1 -1
  240. package/assets/js/highcharts/es-modules/masters/themes/sunset.src.js +1 -1
  241. package/assets/js/highcharts/esm/highcharts-3d.js +11 -1
  242. package/assets/js/highcharts/esm/highcharts-3d.src.js +3 -1
  243. package/assets/js/highcharts/esm/highcharts-gantt.js +8 -1
  244. package/assets/js/highcharts/esm/highcharts-gantt.src.js +1 -1
  245. package/assets/js/highcharts/esm/highcharts-more.js +9 -1
  246. package/assets/js/highcharts/esm/highcharts-more.src.js +44 -29
  247. package/assets/js/highcharts/esm/highcharts.js +9 -2
  248. package/assets/js/highcharts/esm/highcharts.src.js +138 -80
  249. package/assets/js/highcharts/esm/highmaps.js +8 -1
  250. package/assets/js/highcharts/esm/highmaps.src.js +1 -1
  251. package/assets/js/highcharts/esm/highstock.js +8 -1
  252. package/assets/js/highcharts/esm/highstock.src.js +1 -1
  253. package/assets/js/highcharts/esm/i18n/fr-FR.js +13 -1
  254. package/assets/js/highcharts/esm/i18n/fr-FR.src.js +1 -1
  255. package/assets/js/highcharts/esm/i18n/nb-NO.js +13 -1
  256. package/assets/js/highcharts/esm/i18n/nb-NO.src.js +1 -1
  257. package/assets/js/highcharts/esm/i18n/zh-CN.js +13 -1
  258. package/assets/js/highcharts/esm/i18n/zh-CN.src.js +1 -1
  259. package/assets/js/highcharts/esm/indicators/acceleration-bands.js +12 -1
  260. package/assets/js/highcharts/esm/indicators/acceleration-bands.src.js +1 -1
  261. package/assets/js/highcharts/esm/indicators/accumulation-distribution.js +12 -1
  262. package/assets/js/highcharts/esm/indicators/accumulation-distribution.src.js +1 -1
  263. package/assets/js/highcharts/esm/indicators/ao.js +12 -1
  264. package/assets/js/highcharts/esm/indicators/ao.src.js +1 -1
  265. package/assets/js/highcharts/esm/indicators/apo.js +12 -1
  266. package/assets/js/highcharts/esm/indicators/apo.src.js +1 -1
  267. package/assets/js/highcharts/esm/indicators/aroon-oscillator.js +12 -1
  268. package/assets/js/highcharts/esm/indicators/aroon-oscillator.src.js +1 -1
  269. package/assets/js/highcharts/esm/indicators/aroon.js +12 -1
  270. package/assets/js/highcharts/esm/indicators/aroon.src.js +1 -1
  271. package/assets/js/highcharts/esm/indicators/atr.js +12 -1
  272. package/assets/js/highcharts/esm/indicators/atr.src.js +1 -1
  273. package/assets/js/highcharts/esm/indicators/bollinger-bands.js +12 -1
  274. package/assets/js/highcharts/esm/indicators/bollinger-bands.src.js +1 -1
  275. package/assets/js/highcharts/esm/indicators/cci.js +12 -1
  276. package/assets/js/highcharts/esm/indicators/cci.src.js +1 -1
  277. package/assets/js/highcharts/esm/indicators/chaikin.js +12 -1
  278. package/assets/js/highcharts/esm/indicators/chaikin.src.js +1 -1
  279. package/assets/js/highcharts/esm/indicators/cmf.js +11 -1
  280. package/assets/js/highcharts/esm/indicators/cmf.src.js +1 -1
  281. package/assets/js/highcharts/esm/indicators/cmo.js +12 -1
  282. package/assets/js/highcharts/esm/indicators/cmo.src.js +1 -1
  283. package/assets/js/highcharts/esm/indicators/dema.js +12 -1
  284. package/assets/js/highcharts/esm/indicators/dema.src.js +1 -1
  285. package/assets/js/highcharts/esm/indicators/disparity-index.js +12 -1
  286. package/assets/js/highcharts/esm/indicators/disparity-index.src.js +1 -1
  287. package/assets/js/highcharts/esm/indicators/dmi.js +12 -1
  288. package/assets/js/highcharts/esm/indicators/dmi.src.js +1 -1
  289. package/assets/js/highcharts/esm/indicators/dpo.js +12 -1
  290. package/assets/js/highcharts/esm/indicators/dpo.src.js +1 -1
  291. package/assets/js/highcharts/esm/indicators/ichimoku-kinko-hyo.js +12 -1
  292. package/assets/js/highcharts/esm/indicators/ichimoku-kinko-hyo.src.js +1 -1
  293. package/assets/js/highcharts/esm/indicators/indicators-all.js +12 -1
  294. package/assets/js/highcharts/esm/indicators/indicators-all.src.js +1 -1
  295. package/assets/js/highcharts/esm/indicators/indicators.js +12 -1
  296. package/assets/js/highcharts/esm/indicators/indicators.src.js +1 -1
  297. package/assets/js/highcharts/esm/indicators/keltner-channels.js +12 -1
  298. package/assets/js/highcharts/esm/indicators/keltner-channels.src.js +1 -1
  299. package/assets/js/highcharts/esm/indicators/klinger.js +12 -1
  300. package/assets/js/highcharts/esm/indicators/klinger.src.js +1 -1
  301. package/assets/js/highcharts/esm/indicators/macd.js +12 -1
  302. package/assets/js/highcharts/esm/indicators/macd.src.js +1 -1
  303. package/assets/js/highcharts/esm/indicators/mfi.js +12 -1
  304. package/assets/js/highcharts/esm/indicators/mfi.src.js +1 -1
  305. package/assets/js/highcharts/esm/indicators/momentum.js +12 -1
  306. package/assets/js/highcharts/esm/indicators/momentum.src.js +1 -1
  307. package/assets/js/highcharts/esm/indicators/natr.js +12 -1
  308. package/assets/js/highcharts/esm/indicators/natr.src.js +1 -1
  309. package/assets/js/highcharts/esm/indicators/obv.js +12 -1
  310. package/assets/js/highcharts/esm/indicators/obv.src.js +1 -1
  311. package/assets/js/highcharts/esm/indicators/pivot-points.js +12 -1
  312. package/assets/js/highcharts/esm/indicators/pivot-points.src.js +1 -1
  313. package/assets/js/highcharts/esm/indicators/ppo.js +12 -1
  314. package/assets/js/highcharts/esm/indicators/ppo.src.js +1 -1
  315. package/assets/js/highcharts/esm/indicators/price-channel.js +12 -1
  316. package/assets/js/highcharts/esm/indicators/price-channel.src.js +1 -1
  317. package/assets/js/highcharts/esm/indicators/price-envelopes.js +12 -1
  318. package/assets/js/highcharts/esm/indicators/price-envelopes.src.js +1 -1
  319. package/assets/js/highcharts/esm/indicators/psar.js +12 -1
  320. package/assets/js/highcharts/esm/indicators/psar.src.js +1 -1
  321. package/assets/js/highcharts/esm/indicators/regressions.js +12 -1
  322. package/assets/js/highcharts/esm/indicators/regressions.src.js +1 -1
  323. package/assets/js/highcharts/esm/indicators/roc.js +12 -1
  324. package/assets/js/highcharts/esm/indicators/roc.src.js +1 -1
  325. package/assets/js/highcharts/esm/indicators/rsi.js +12 -1
  326. package/assets/js/highcharts/esm/indicators/rsi.src.js +1 -1
  327. package/assets/js/highcharts/esm/indicators/slow-stochastic.js +12 -1
  328. package/assets/js/highcharts/esm/indicators/slow-stochastic.src.js +1 -1
  329. package/assets/js/highcharts/esm/indicators/stochastic.js +12 -1
  330. package/assets/js/highcharts/esm/indicators/stochastic.src.js +1 -1
  331. package/assets/js/highcharts/esm/indicators/supertrend.js +12 -1
  332. package/assets/js/highcharts/esm/indicators/supertrend.src.js +1 -1
  333. package/assets/js/highcharts/esm/indicators/tema.js +12 -1
  334. package/assets/js/highcharts/esm/indicators/tema.src.js +1 -1
  335. package/assets/js/highcharts/esm/indicators/trendline.js +12 -1
  336. package/assets/js/highcharts/esm/indicators/trendline.src.js +1 -1
  337. package/assets/js/highcharts/esm/indicators/trix.js +12 -1
  338. package/assets/js/highcharts/esm/indicators/trix.src.js +1 -1
  339. package/assets/js/highcharts/esm/indicators/volume-by-price.js +12 -1
  340. package/assets/js/highcharts/esm/indicators/volume-by-price.src.js +1 -1
  341. package/assets/js/highcharts/esm/indicators/vwap.js +12 -1
  342. package/assets/js/highcharts/esm/indicators/vwap.src.js +1 -1
  343. package/assets/js/highcharts/esm/indicators/williams-r.js +12 -1
  344. package/assets/js/highcharts/esm/indicators/williams-r.src.js +1 -1
  345. package/assets/js/highcharts/esm/indicators/wma.js +12 -1
  346. package/assets/js/highcharts/esm/indicators/wma.src.js +1 -1
  347. package/assets/js/highcharts/esm/indicators/zigzag.js +12 -1
  348. package/assets/js/highcharts/esm/indicators/zigzag.src.js +1 -1
  349. package/assets/js/highcharts/esm/modules/accessibility.js +12 -1
  350. package/assets/js/highcharts/esm/modules/accessibility.src.js +46 -43
  351. package/assets/js/highcharts/esm/modules/annotations-advanced.js +11 -1
  352. package/assets/js/highcharts/esm/modules/annotations-advanced.src.js +866 -775
  353. package/assets/js/highcharts/esm/modules/annotations.js +11 -1
  354. package/assets/js/highcharts/esm/modules/annotations.src.js +89 -40
  355. package/assets/js/highcharts/esm/modules/arc-diagram.js +11 -1
  356. package/assets/js/highcharts/esm/modules/arc-diagram.src.js +1 -1
  357. package/assets/js/highcharts/esm/modules/arrow-symbols.js +11 -1
  358. package/assets/js/highcharts/esm/modules/arrow-symbols.src.js +1 -1
  359. package/assets/js/highcharts/esm/modules/boost-canvas.js +12 -1
  360. package/assets/js/highcharts/esm/modules/boost-canvas.src.js +23 -4
  361. package/assets/js/highcharts/esm/modules/boost.js +13 -1
  362. package/assets/js/highcharts/esm/modules/boost.src.js +23 -4
  363. package/assets/js/highcharts/esm/modules/broken-axis.js +9 -1
  364. package/assets/js/highcharts/esm/modules/broken-axis.src.js +1 -1
  365. package/assets/js/highcharts/esm/modules/bullet.js +11 -1
  366. package/assets/js/highcharts/esm/modules/bullet.src.js +1 -1
  367. package/assets/js/highcharts/esm/modules/coloraxis.js +11 -1
  368. package/assets/js/highcharts/esm/modules/coloraxis.src.js +1 -1
  369. package/assets/js/highcharts/esm/modules/current-date-indicator.js +11 -1
  370. package/assets/js/highcharts/esm/modules/current-date-indicator.src.js +1 -1
  371. package/assets/js/highcharts/esm/modules/cylinder.js +12 -1
  372. package/assets/js/highcharts/esm/modules/cylinder.src.js +1 -1
  373. package/assets/js/highcharts/esm/modules/data-tools.js +11 -1
  374. package/assets/js/highcharts/esm/modules/data-tools.src.js +225 -69
  375. package/assets/js/highcharts/esm/modules/data.js +11 -1
  376. package/assets/js/highcharts/esm/modules/data.src.js +46 -39
  377. package/assets/js/highcharts/esm/modules/datagrouping.js +11 -1
  378. package/assets/js/highcharts/esm/modules/datagrouping.src.js +1 -1
  379. package/assets/js/highcharts/esm/modules/debugger.js +11 -1
  380. package/assets/js/highcharts/esm/modules/debugger.src.js +1 -1
  381. package/assets/js/highcharts/esm/modules/dependency-wheel.js +12 -1
  382. package/assets/js/highcharts/esm/modules/dependency-wheel.src.js +1 -1
  383. package/assets/js/highcharts/esm/modules/dotplot.js +11 -1
  384. package/assets/js/highcharts/esm/modules/dotplot.src.js +1 -1
  385. package/assets/js/highcharts/esm/modules/drag-panes.js +13 -1
  386. package/assets/js/highcharts/esm/modules/drag-panes.src.js +1 -1
  387. package/assets/js/highcharts/esm/modules/draggable-points.js +9 -1
  388. package/assets/js/highcharts/esm/modules/draggable-points.src.js +1 -1
  389. package/assets/js/highcharts/esm/modules/drilldown.js +13 -1
  390. package/assets/js/highcharts/esm/modules/drilldown.src.js +3 -1
  391. package/assets/js/highcharts/esm/modules/dumbbell.js +9 -1
  392. package/assets/js/highcharts/esm/modules/dumbbell.src.js +1 -1
  393. package/assets/js/highcharts/esm/modules/export-data.js +12 -1
  394. package/assets/js/highcharts/esm/modules/export-data.src.js +984 -798
  395. package/assets/js/highcharts/esm/modules/exporting.js +11 -1
  396. package/assets/js/highcharts/esm/modules/exporting.src.js +1373 -642
  397. package/assets/js/highcharts/esm/modules/flowmap.js +9 -1
  398. package/assets/js/highcharts/esm/modules/flowmap.src.js +1 -1
  399. package/assets/js/highcharts/esm/modules/full-screen.js +12 -1
  400. package/assets/js/highcharts/esm/modules/full-screen.src.js +3 -3
  401. package/assets/js/highcharts/esm/modules/funnel.js +11 -1
  402. package/assets/js/highcharts/esm/modules/funnel.src.js +1 -1
  403. package/assets/js/highcharts/esm/modules/funnel3d.js +13 -1
  404. package/assets/js/highcharts/esm/modules/funnel3d.src.js +1 -1
  405. package/assets/js/highcharts/esm/modules/gantt.js +11 -1
  406. package/assets/js/highcharts/esm/modules/gantt.src.js +33 -25
  407. package/assets/js/highcharts/esm/modules/geoheatmap.js +9 -1
  408. package/assets/js/highcharts/esm/modules/geoheatmap.src.js +1 -1
  409. package/assets/js/highcharts/esm/modules/grid-axis.js +11 -1
  410. package/assets/js/highcharts/esm/modules/grid-axis.src.js +1 -1
  411. package/assets/js/highcharts/esm/modules/heatmap.js +9 -1
  412. package/assets/js/highcharts/esm/modules/heatmap.src.js +2 -3
  413. package/assets/js/highcharts/esm/modules/heikinashi.js +12 -1
  414. package/assets/js/highcharts/esm/modules/heikinashi.src.js +1 -1
  415. package/assets/js/highcharts/esm/modules/histogram-bellcurve.js +10 -1
  416. package/assets/js/highcharts/esm/modules/histogram-bellcurve.src.js +1 -1
  417. package/assets/js/highcharts/esm/modules/hollowcandlestick.js +12 -1
  418. package/assets/js/highcharts/esm/modules/hollowcandlestick.src.js +1 -1
  419. package/assets/js/highcharts/esm/modules/item-series.js +11 -1
  420. package/assets/js/highcharts/esm/modules/item-series.src.js +3 -5
  421. package/assets/js/highcharts/esm/modules/lollipop.js +9 -1
  422. package/assets/js/highcharts/esm/modules/lollipop.src.js +1 -1
  423. package/assets/js/highcharts/esm/modules/map.js +11 -1
  424. package/assets/js/highcharts/esm/modules/map.src.js +5 -6
  425. package/assets/js/highcharts/esm/modules/marker-clusters.js +11 -1
  426. package/assets/js/highcharts/esm/modules/marker-clusters.src.js +1 -1
  427. package/assets/js/highcharts/esm/modules/mouse-wheel-zoom.js +11 -1
  428. package/assets/js/highcharts/esm/modules/mouse-wheel-zoom.src.js +1 -1
  429. package/assets/js/highcharts/esm/modules/navigator.js +11 -1
  430. package/assets/js/highcharts/esm/modules/navigator.src.js +10 -12
  431. package/assets/js/highcharts/esm/modules/networkgraph.js +11 -1
  432. package/assets/js/highcharts/esm/modules/networkgraph.src.js +7 -2
  433. package/assets/js/highcharts/esm/modules/no-data-to-display.js +12 -1
  434. package/assets/js/highcharts/esm/modules/no-data-to-display.src.js +1 -1
  435. package/assets/js/highcharts/esm/modules/non-cartesian-zoom.js +11 -0
  436. package/assets/js/highcharts/esm/modules/non-cartesian-zoom.src.js +374 -0
  437. package/assets/js/highcharts/esm/modules/offline-exporting.js +12 -1
  438. package/assets/js/highcharts/esm/modules/offline-exporting.src.js +334 -3360
  439. package/assets/js/highcharts/esm/modules/organization.js +11 -1
  440. package/assets/js/highcharts/esm/modules/organization.src.js +1 -1
  441. package/assets/js/highcharts/esm/modules/parallel-coordinates.js +11 -1
  442. package/assets/js/highcharts/esm/modules/parallel-coordinates.src.js +1 -1
  443. package/assets/js/highcharts/esm/modules/pareto.js +11 -1
  444. package/assets/js/highcharts/esm/modules/pareto.src.js +1 -1
  445. package/assets/js/highcharts/esm/modules/pathfinder.js +11 -1
  446. package/assets/js/highcharts/esm/modules/pathfinder.src.js +1 -1
  447. package/assets/js/highcharts/esm/modules/pattern-fill.js +12 -1
  448. package/assets/js/highcharts/esm/modules/pattern-fill.src.js +1 -1
  449. package/assets/js/highcharts/esm/modules/pictorial.js +11 -1
  450. package/assets/js/highcharts/esm/modules/pictorial.src.js +1 -1
  451. package/assets/js/highcharts/esm/modules/pointandfigure.js +12 -1
  452. package/assets/js/highcharts/esm/modules/pointandfigure.src.js +1 -1
  453. package/assets/js/highcharts/esm/modules/price-indicator.js +13 -1
  454. package/assets/js/highcharts/esm/modules/price-indicator.src.js +1 -1
  455. package/assets/js/highcharts/esm/modules/pyramid3d.js +14 -1
  456. package/assets/js/highcharts/esm/modules/pyramid3d.src.js +1 -1
  457. package/assets/js/highcharts/esm/modules/renko.js +12 -1
  458. package/assets/js/highcharts/esm/modules/renko.src.js +1 -1
  459. package/assets/js/highcharts/esm/modules/sankey.js +11 -1
  460. package/assets/js/highcharts/esm/modules/sankey.src.js +1 -1
  461. package/assets/js/highcharts/esm/modules/series-label.js +9 -1
  462. package/assets/js/highcharts/esm/modules/series-label.src.js +1 -1
  463. package/assets/js/highcharts/esm/modules/series-on-point.js +12 -1
  464. package/assets/js/highcharts/esm/modules/series-on-point.src.js +1 -1
  465. package/assets/js/highcharts/esm/modules/solid-gauge.js +12 -1
  466. package/assets/js/highcharts/esm/modules/solid-gauge.src.js +8 -3
  467. package/assets/js/highcharts/esm/modules/sonification.js +12 -1
  468. package/assets/js/highcharts/esm/modules/sonification.src.js +42 -9
  469. package/assets/js/highcharts/esm/modules/static-scale.js +11 -1
  470. package/assets/js/highcharts/esm/modules/static-scale.src.js +1 -1
  471. package/assets/js/highcharts/esm/modules/stock-tools.js +13 -1
  472. package/assets/js/highcharts/esm/modules/stock-tools.src.js +37 -116
  473. package/assets/js/highcharts/esm/modules/stock.js +11 -1
  474. package/assets/js/highcharts/esm/modules/stock.src.js +32 -24
  475. package/assets/js/highcharts/esm/modules/streamgraph.js +11 -1
  476. package/assets/js/highcharts/esm/modules/streamgraph.src.js +1 -1
  477. package/assets/js/highcharts/esm/modules/sunburst.js +10 -1
  478. package/assets/js/highcharts/esm/modules/sunburst.src.js +1 -1
  479. package/assets/js/highcharts/esm/modules/textpath.js +9 -1
  480. package/assets/js/highcharts/esm/modules/textpath.src.js +1 -1
  481. package/assets/js/highcharts/esm/modules/tiledwebmap.js +10 -2
  482. package/assets/js/highcharts/esm/modules/tiledwebmap.src.js +1 -1
  483. package/assets/js/highcharts/esm/modules/tilemap.js +12 -1
  484. package/assets/js/highcharts/esm/modules/tilemap.src.js +1 -1
  485. package/assets/js/highcharts/esm/modules/timeline.js +12 -1
  486. package/assets/js/highcharts/esm/modules/timeline.src.js +1 -1
  487. package/assets/js/highcharts/esm/modules/treegraph.js +11 -1
  488. package/assets/js/highcharts/esm/modules/treegraph.src.js +4 -2
  489. package/assets/js/highcharts/esm/modules/treegrid.js +11 -1
  490. package/assets/js/highcharts/esm/modules/treegrid.src.js +1 -1
  491. package/assets/js/highcharts/esm/modules/treemap.js +10 -1
  492. package/assets/js/highcharts/esm/modules/treemap.src.js +1 -1
  493. package/assets/js/highcharts/esm/modules/variable-pie.js +11 -1
  494. package/assets/js/highcharts/esm/modules/variable-pie.src.js +1 -1
  495. package/assets/js/highcharts/esm/modules/variwide.js +11 -1
  496. package/assets/js/highcharts/esm/modules/variwide.src.js +9 -2
  497. package/assets/js/highcharts/esm/modules/vector.js +11 -1
  498. package/assets/js/highcharts/esm/modules/vector.src.js +1 -1
  499. package/assets/js/highcharts/esm/modules/venn.js +10 -1
  500. package/assets/js/highcharts/esm/modules/venn.src.js +1 -1
  501. package/assets/js/highcharts/esm/modules/windbarb.js +11 -1
  502. package/assets/js/highcharts/esm/modules/windbarb.src.js +1 -1
  503. package/assets/js/highcharts/esm/modules/wordcloud.js +10 -1
  504. package/assets/js/highcharts/esm/modules/wordcloud.src.js +88 -11
  505. package/assets/js/highcharts/esm/modules/xrange.js +11 -1
  506. package/assets/js/highcharts/esm/modules/xrange.src.js +1 -1
  507. package/assets/js/highcharts/esm/standalone-navigator.js +9 -2
  508. package/assets/js/highcharts/esm/standalone-navigator.src.js +146 -90
  509. package/assets/js/highcharts/esm/themes/adaptive.js +130 -0
  510. package/assets/js/highcharts/esm/themes/adaptive.src.js +1069 -0
  511. package/assets/js/highcharts/esm/themes/avocado.js +9 -1
  512. package/assets/js/highcharts/esm/themes/avocado.src.js +1 -1
  513. package/assets/js/highcharts/esm/themes/brand-dark.js +9 -1
  514. package/assets/js/highcharts/esm/themes/brand-dark.src.js +1 -1
  515. package/assets/js/highcharts/esm/themes/brand-light.js +9 -1
  516. package/assets/js/highcharts/esm/themes/brand-light.src.js +1 -1
  517. package/assets/js/highcharts/esm/themes/dark-blue.js +9 -1
  518. package/assets/js/highcharts/esm/themes/dark-blue.src.js +1 -1
  519. package/assets/js/highcharts/esm/themes/dark-green.js +9 -1
  520. package/assets/js/highcharts/esm/themes/dark-green.src.js +1 -1
  521. package/assets/js/highcharts/esm/themes/dark-unica.js +9 -1
  522. package/assets/js/highcharts/esm/themes/dark-unica.src.js +1 -1
  523. package/assets/js/highcharts/esm/themes/gray.js +9 -1
  524. package/assets/js/highcharts/esm/themes/gray.src.js +1 -1
  525. package/assets/js/highcharts/esm/themes/grid-light.js +9 -1
  526. package/assets/js/highcharts/esm/themes/grid-light.src.js +1 -1
  527. package/assets/js/highcharts/esm/themes/grid.js +9 -1
  528. package/assets/js/highcharts/esm/themes/grid.src.js +1 -1
  529. package/assets/js/highcharts/esm/themes/high-contrast-dark.js +9 -1
  530. package/assets/js/highcharts/esm/themes/high-contrast-dark.src.js +1 -1
  531. package/assets/js/highcharts/esm/themes/high-contrast-light.js +9 -1
  532. package/assets/js/highcharts/esm/themes/high-contrast-light.src.js +1 -1
  533. package/assets/js/highcharts/esm/themes/sand-signika.js +9 -1
  534. package/assets/js/highcharts/esm/themes/sand-signika.src.js +1 -1
  535. package/assets/js/highcharts/esm/themes/skies.js +9 -1
  536. package/assets/js/highcharts/esm/themes/skies.src.js +1 -1
  537. package/assets/js/highcharts/esm/themes/sunset.js +9 -1
  538. package/assets/js/highcharts/esm/themes/sunset.src.js +1 -1
  539. package/assets/js/highcharts/highcharts-3d.js +11 -1
  540. package/assets/js/highcharts/highcharts-3d.src.js +3 -1
  541. package/assets/js/highcharts/highcharts-gantt.js +16 -2
  542. package/assets/js/highcharts/highcharts-gantt.src.js +173 -107
  543. package/assets/js/highcharts/highcharts-more.js +9 -1
  544. package/assets/js/highcharts/highcharts-more.src.js +44 -29
  545. package/assets/js/highcharts/highcharts.js +9 -2
  546. package/assets/js/highcharts/highcharts.src.js +138 -80
  547. package/assets/js/highcharts/highmaps.js +16 -2
  548. package/assets/js/highcharts/highmaps.src.js +145 -88
  549. package/assets/js/highcharts/highstock.js +16 -2
  550. package/assets/js/highcharts/highstock.src.js +172 -106
  551. package/assets/js/highcharts/i18n/fr-FR.js +13 -1
  552. package/assets/js/highcharts/i18n/fr-FR.src.js +8 -8
  553. package/assets/js/highcharts/i18n/nb-NO.js +13 -1
  554. package/assets/js/highcharts/i18n/nb-NO.src.js +8 -8
  555. package/assets/js/highcharts/i18n/zh-CN.js +13 -1
  556. package/assets/js/highcharts/i18n/zh-CN.src.js +8 -8
  557. package/assets/js/highcharts/indicators/acceleration-bands.js +12 -1
  558. package/assets/js/highcharts/indicators/acceleration-bands.src.js +1 -1
  559. package/assets/js/highcharts/indicators/accumulation-distribution.js +12 -1
  560. package/assets/js/highcharts/indicators/accumulation-distribution.src.js +1 -1
  561. package/assets/js/highcharts/indicators/ao.js +12 -1
  562. package/assets/js/highcharts/indicators/ao.src.js +1 -1
  563. package/assets/js/highcharts/indicators/apo.js +12 -1
  564. package/assets/js/highcharts/indicators/apo.src.js +1 -1
  565. package/assets/js/highcharts/indicators/aroon-oscillator.js +12 -1
  566. package/assets/js/highcharts/indicators/aroon-oscillator.src.js +1 -1
  567. package/assets/js/highcharts/indicators/aroon.js +12 -1
  568. package/assets/js/highcharts/indicators/aroon.src.js +1 -1
  569. package/assets/js/highcharts/indicators/atr.js +12 -1
  570. package/assets/js/highcharts/indicators/atr.src.js +1 -1
  571. package/assets/js/highcharts/indicators/bollinger-bands.js +12 -1
  572. package/assets/js/highcharts/indicators/bollinger-bands.src.js +1 -1
  573. package/assets/js/highcharts/indicators/cci.js +12 -1
  574. package/assets/js/highcharts/indicators/cci.src.js +1 -1
  575. package/assets/js/highcharts/indicators/chaikin.js +12 -1
  576. package/assets/js/highcharts/indicators/chaikin.src.js +1 -1
  577. package/assets/js/highcharts/indicators/cmf.js +11 -1
  578. package/assets/js/highcharts/indicators/cmf.src.js +1 -1
  579. package/assets/js/highcharts/indicators/cmo.js +12 -1
  580. package/assets/js/highcharts/indicators/cmo.src.js +1 -1
  581. package/assets/js/highcharts/indicators/dema.js +12 -1
  582. package/assets/js/highcharts/indicators/dema.src.js +1 -1
  583. package/assets/js/highcharts/indicators/disparity-index.js +12 -1
  584. package/assets/js/highcharts/indicators/disparity-index.src.js +1 -1
  585. package/assets/js/highcharts/indicators/dmi.js +12 -1
  586. package/assets/js/highcharts/indicators/dmi.src.js +1 -1
  587. package/assets/js/highcharts/indicators/dpo.js +12 -1
  588. package/assets/js/highcharts/indicators/dpo.src.js +1 -1
  589. package/assets/js/highcharts/indicators/ema.src.js +3 -3
  590. package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.js +12 -1
  591. package/assets/js/highcharts/indicators/ichimoku-kinko-hyo.src.js +1 -1
  592. package/assets/js/highcharts/indicators/indicators-all.js +12 -1
  593. package/assets/js/highcharts/indicators/indicators-all.src.js +1 -1
  594. package/assets/js/highcharts/indicators/indicators.js +12 -1
  595. package/assets/js/highcharts/indicators/indicators.src.js +1 -1
  596. package/assets/js/highcharts/indicators/keltner-channels.js +12 -1
  597. package/assets/js/highcharts/indicators/keltner-channels.src.js +1 -1
  598. package/assets/js/highcharts/indicators/klinger.js +12 -1
  599. package/assets/js/highcharts/indicators/klinger.src.js +1 -1
  600. package/assets/js/highcharts/indicators/macd.js +12 -1
  601. package/assets/js/highcharts/indicators/macd.src.js +1 -1
  602. package/assets/js/highcharts/indicators/mfi.js +12 -1
  603. package/assets/js/highcharts/indicators/mfi.src.js +1 -1
  604. package/assets/js/highcharts/indicators/momentum.js +12 -1
  605. package/assets/js/highcharts/indicators/momentum.src.js +1 -1
  606. package/assets/js/highcharts/indicators/natr.js +12 -1
  607. package/assets/js/highcharts/indicators/natr.src.js +1 -1
  608. package/assets/js/highcharts/indicators/obv.js +12 -1
  609. package/assets/js/highcharts/indicators/obv.src.js +1 -1
  610. package/assets/js/highcharts/indicators/pivot-points.js +12 -1
  611. package/assets/js/highcharts/indicators/pivot-points.src.js +1 -1
  612. package/assets/js/highcharts/indicators/ppo.js +12 -1
  613. package/assets/js/highcharts/indicators/ppo.src.js +1 -1
  614. package/assets/js/highcharts/indicators/price-channel.js +12 -1
  615. package/assets/js/highcharts/indicators/price-channel.src.js +1 -1
  616. package/assets/js/highcharts/indicators/price-envelopes.js +12 -1
  617. package/assets/js/highcharts/indicators/price-envelopes.src.js +1 -1
  618. package/assets/js/highcharts/indicators/psar.js +12 -1
  619. package/assets/js/highcharts/indicators/psar.src.js +1 -1
  620. package/assets/js/highcharts/indicators/regressions.js +12 -1
  621. package/assets/js/highcharts/indicators/regressions.src.js +1 -1
  622. package/assets/js/highcharts/indicators/roc.js +12 -1
  623. package/assets/js/highcharts/indicators/roc.src.js +1 -1
  624. package/assets/js/highcharts/indicators/rsi.js +12 -1
  625. package/assets/js/highcharts/indicators/rsi.src.js +1 -1
  626. package/assets/js/highcharts/indicators/slow-stochastic.js +12 -1
  627. package/assets/js/highcharts/indicators/slow-stochastic.src.js +1 -1
  628. package/assets/js/highcharts/indicators/stochastic.js +12 -1
  629. package/assets/js/highcharts/indicators/stochastic.src.js +1 -1
  630. package/assets/js/highcharts/indicators/supertrend.js +12 -1
  631. package/assets/js/highcharts/indicators/supertrend.src.js +1 -1
  632. package/assets/js/highcharts/indicators/tema.js +12 -1
  633. package/assets/js/highcharts/indicators/tema.src.js +1 -1
  634. package/assets/js/highcharts/indicators/trendline.js +12 -1
  635. package/assets/js/highcharts/indicators/trendline.src.js +1 -1
  636. package/assets/js/highcharts/indicators/trix.js +12 -1
  637. package/assets/js/highcharts/indicators/trix.src.js +1 -1
  638. package/assets/js/highcharts/indicators/volume-by-price.js +12 -1
  639. package/assets/js/highcharts/indicators/volume-by-price.src.js +1 -1
  640. package/assets/js/highcharts/indicators/vwap.js +12 -1
  641. package/assets/js/highcharts/indicators/vwap.src.js +1 -1
  642. package/assets/js/highcharts/indicators/williams-r.js +12 -1
  643. package/assets/js/highcharts/indicators/williams-r.src.js +1 -1
  644. package/assets/js/highcharts/indicators/wma.js +12 -1
  645. package/assets/js/highcharts/indicators/wma.src.js +1 -1
  646. package/assets/js/highcharts/indicators/zigzag.js +12 -1
  647. package/assets/js/highcharts/indicators/zigzag.src.js +1 -1
  648. package/assets/js/highcharts/modules/accessibility.js +12 -1
  649. package/assets/js/highcharts/modules/accessibility.src.js +46 -43
  650. package/assets/js/highcharts/modules/annotations-advanced.js +21 -1
  651. package/assets/js/highcharts/modules/annotations-advanced.src.js +879 -788
  652. package/assets/js/highcharts/modules/annotations.js +11 -1
  653. package/assets/js/highcharts/modules/annotations.src.js +89 -40
  654. package/assets/js/highcharts/modules/arc-diagram.js +11 -1
  655. package/assets/js/highcharts/modules/arc-diagram.src.js +1 -1
  656. package/assets/js/highcharts/modules/arrow-symbols.js +11 -1
  657. package/assets/js/highcharts/modules/arrow-symbols.src.js +1 -1
  658. package/assets/js/highcharts/modules/boost-canvas.js +12 -1
  659. package/assets/js/highcharts/modules/boost-canvas.src.js +23 -4
  660. package/assets/js/highcharts/modules/boost.js +13 -1
  661. package/assets/js/highcharts/modules/boost.src.js +23 -4
  662. package/assets/js/highcharts/modules/broken-axis.js +9 -1
  663. package/assets/js/highcharts/modules/broken-axis.src.js +1 -1
  664. package/assets/js/highcharts/modules/bullet.js +11 -1
  665. package/assets/js/highcharts/modules/bullet.src.js +1 -1
  666. package/assets/js/highcharts/modules/coloraxis.js +11 -1
  667. package/assets/js/highcharts/modules/coloraxis.src.js +1 -1
  668. package/assets/js/highcharts/modules/current-date-indicator.js +11 -1
  669. package/assets/js/highcharts/modules/current-date-indicator.src.js +1 -1
  670. package/assets/js/highcharts/modules/cylinder.js +12 -1
  671. package/assets/js/highcharts/modules/cylinder.src.js +1 -1
  672. package/assets/js/highcharts/modules/data-tools.js +11 -1
  673. package/assets/js/highcharts/modules/data-tools.src.js +225 -69
  674. package/assets/js/highcharts/modules/data.js +11 -1
  675. package/assets/js/highcharts/modules/data.src.js +46 -39
  676. package/assets/js/highcharts/modules/datagrouping.js +11 -1
  677. package/assets/js/highcharts/modules/datagrouping.src.js +1 -1
  678. package/assets/js/highcharts/modules/debugger.js +11 -1
  679. package/assets/js/highcharts/modules/debugger.src.js +1 -1
  680. package/assets/js/highcharts/modules/dependency-wheel.js +12 -1
  681. package/assets/js/highcharts/modules/dependency-wheel.src.js +1 -1
  682. package/assets/js/highcharts/modules/dotplot.js +11 -1
  683. package/assets/js/highcharts/modules/dotplot.src.js +1 -1
  684. package/assets/js/highcharts/modules/drag-panes.js +13 -1
  685. package/assets/js/highcharts/modules/drag-panes.src.js +1 -1
  686. package/assets/js/highcharts/modules/draggable-points.js +9 -1
  687. package/assets/js/highcharts/modules/draggable-points.src.js +1 -1
  688. package/assets/js/highcharts/modules/drilldown.js +13 -1
  689. package/assets/js/highcharts/modules/drilldown.src.js +3 -1
  690. package/assets/js/highcharts/modules/dumbbell.js +9 -1
  691. package/assets/js/highcharts/modules/dumbbell.src.js +1 -1
  692. package/assets/js/highcharts/modules/export-data.js +12 -1
  693. package/assets/js/highcharts/modules/export-data.src.js +996 -803
  694. package/assets/js/highcharts/modules/exporting.js +11 -1
  695. package/assets/js/highcharts/modules/exporting.src.js +1372 -636
  696. package/assets/js/highcharts/modules/flowmap.js +9 -1
  697. package/assets/js/highcharts/modules/flowmap.src.js +1 -1
  698. package/assets/js/highcharts/modules/full-screen.js +12 -1
  699. package/assets/js/highcharts/modules/full-screen.src.js +3 -3
  700. package/assets/js/highcharts/modules/funnel.js +11 -1
  701. package/assets/js/highcharts/modules/funnel.src.js +1 -1
  702. package/assets/js/highcharts/modules/funnel3d.js +13 -1
  703. package/assets/js/highcharts/modules/funnel3d.src.js +1 -1
  704. package/assets/js/highcharts/modules/gantt.js +31 -1
  705. package/assets/js/highcharts/modules/gantt.src.js +36 -28
  706. package/assets/js/highcharts/modules/geoheatmap.js +9 -1
  707. package/assets/js/highcharts/modules/geoheatmap.src.js +1 -1
  708. package/assets/js/highcharts/modules/grid-axis.js +11 -1
  709. package/assets/js/highcharts/modules/grid-axis.src.js +1 -1
  710. package/assets/js/highcharts/modules/heatmap.js +19 -1
  711. package/assets/js/highcharts/modules/heatmap.src.js +3 -4
  712. package/assets/js/highcharts/modules/heikinashi.js +12 -1
  713. package/assets/js/highcharts/modules/heikinashi.src.js +1 -1
  714. package/assets/js/highcharts/modules/histogram-bellcurve.js +10 -1
  715. package/assets/js/highcharts/modules/histogram-bellcurve.src.js +1 -1
  716. package/assets/js/highcharts/modules/hollowcandlestick.js +12 -1
  717. package/assets/js/highcharts/modules/hollowcandlestick.src.js +1 -1
  718. package/assets/js/highcharts/modules/item-series.js +11 -1
  719. package/assets/js/highcharts/modules/item-series.src.js +3 -5
  720. package/assets/js/highcharts/modules/lollipop.js +9 -1
  721. package/assets/js/highcharts/modules/lollipop.src.js +1 -1
  722. package/assets/js/highcharts/modules/map.js +21 -1
  723. package/assets/js/highcharts/modules/map.src.js +6 -7
  724. package/assets/js/highcharts/modules/marker-clusters.js +11 -1
  725. package/assets/js/highcharts/modules/marker-clusters.src.js +1 -1
  726. package/assets/js/highcharts/modules/mouse-wheel-zoom.js +11 -1
  727. package/assets/js/highcharts/modules/mouse-wheel-zoom.src.js +1 -1
  728. package/assets/js/highcharts/modules/navigator.js +11 -1
  729. package/assets/js/highcharts/modules/navigator.src.js +10 -12
  730. package/assets/js/highcharts/modules/networkgraph.js +11 -1
  731. package/assets/js/highcharts/modules/networkgraph.src.js +7 -2
  732. package/assets/js/highcharts/modules/no-data-to-display.js +12 -1
  733. package/assets/js/highcharts/modules/no-data-to-display.src.js +1 -1
  734. package/assets/js/highcharts/modules/non-cartesian-zoom.js +11 -0
  735. package/assets/js/highcharts/modules/non-cartesian-zoom.src.js +427 -0
  736. package/assets/js/highcharts/modules/offline-exporting.js +12 -1
  737. package/assets/js/highcharts/modules/offline-exporting.src.js +353 -3380
  738. package/assets/js/highcharts/modules/organization.js +11 -1
  739. package/assets/js/highcharts/modules/organization.src.js +1 -1
  740. package/assets/js/highcharts/modules/parallel-coordinates.js +11 -1
  741. package/assets/js/highcharts/modules/parallel-coordinates.src.js +1 -1
  742. package/assets/js/highcharts/modules/pareto.js +11 -1
  743. package/assets/js/highcharts/modules/pareto.src.js +1 -1
  744. package/assets/js/highcharts/modules/pathfinder.js +11 -1
  745. package/assets/js/highcharts/modules/pathfinder.src.js +1 -1
  746. package/assets/js/highcharts/modules/pattern-fill.js +12 -1
  747. package/assets/js/highcharts/modules/pattern-fill.src.js +1 -1
  748. package/assets/js/highcharts/modules/pictorial.js +11 -1
  749. package/assets/js/highcharts/modules/pictorial.src.js +1 -1
  750. package/assets/js/highcharts/modules/pointandfigure.js +12 -1
  751. package/assets/js/highcharts/modules/pointandfigure.src.js +1 -1
  752. package/assets/js/highcharts/modules/price-indicator.js +13 -1
  753. package/assets/js/highcharts/modules/price-indicator.src.js +1 -1
  754. package/assets/js/highcharts/modules/pyramid3d.js +14 -1
  755. package/assets/js/highcharts/modules/pyramid3d.src.js +1 -1
  756. package/assets/js/highcharts/modules/renko.js +12 -1
  757. package/assets/js/highcharts/modules/renko.src.js +1 -1
  758. package/assets/js/highcharts/modules/sankey.js +11 -1
  759. package/assets/js/highcharts/modules/sankey.src.js +1 -1
  760. package/assets/js/highcharts/modules/series-label.js +9 -1
  761. package/assets/js/highcharts/modules/series-label.src.js +1 -1
  762. package/assets/js/highcharts/modules/series-on-point.js +12 -1
  763. package/assets/js/highcharts/modules/series-on-point.src.js +1 -1
  764. package/assets/js/highcharts/modules/solid-gauge.js +12 -1
  765. package/assets/js/highcharts/modules/solid-gauge.src.js +8 -3
  766. package/assets/js/highcharts/modules/sonification.js +12 -1
  767. package/assets/js/highcharts/modules/sonification.src.js +42 -9
  768. package/assets/js/highcharts/modules/static-scale.js +11 -1
  769. package/assets/js/highcharts/modules/static-scale.src.js +1 -1
  770. package/assets/js/highcharts/modules/stock-tools.js +13 -1
  771. package/assets/js/highcharts/modules/stock-tools.src.js +37 -116
  772. package/assets/js/highcharts/modules/stock.js +29 -1
  773. package/assets/js/highcharts/modules/stock.src.js +35 -27
  774. package/assets/js/highcharts/modules/streamgraph.js +11 -1
  775. package/assets/js/highcharts/modules/streamgraph.src.js +1 -1
  776. package/assets/js/highcharts/modules/sunburst.js +10 -1
  777. package/assets/js/highcharts/modules/sunburst.src.js +1 -1
  778. package/assets/js/highcharts/modules/textpath.js +9 -1
  779. package/assets/js/highcharts/modules/textpath.src.js +1 -1
  780. package/assets/js/highcharts/modules/tiledwebmap.js +10 -2
  781. package/assets/js/highcharts/modules/tiledwebmap.src.js +1 -1
  782. package/assets/js/highcharts/modules/tilemap.js +12 -1
  783. package/assets/js/highcharts/modules/tilemap.src.js +1 -1
  784. package/assets/js/highcharts/modules/timeline.js +12 -1
  785. package/assets/js/highcharts/modules/timeline.src.js +1 -1
  786. package/assets/js/highcharts/modules/treegraph.js +11 -1
  787. package/assets/js/highcharts/modules/treegraph.src.js +4 -2
  788. package/assets/js/highcharts/modules/treegrid.js +11 -1
  789. package/assets/js/highcharts/modules/treegrid.src.js +1 -1
  790. package/assets/js/highcharts/modules/treemap.js +10 -1
  791. package/assets/js/highcharts/modules/treemap.src.js +1 -1
  792. package/assets/js/highcharts/modules/variable-pie.js +11 -1
  793. package/assets/js/highcharts/modules/variable-pie.src.js +1 -1
  794. package/assets/js/highcharts/modules/variwide.js +11 -1
  795. package/assets/js/highcharts/modules/variwide.src.js +9 -2
  796. package/assets/js/highcharts/modules/vector.js +11 -1
  797. package/assets/js/highcharts/modules/vector.src.js +1 -1
  798. package/assets/js/highcharts/modules/venn.js +10 -1
  799. package/assets/js/highcharts/modules/venn.src.js +1 -1
  800. package/assets/js/highcharts/modules/windbarb.js +11 -1
  801. package/assets/js/highcharts/modules/windbarb.src.js +1 -1
  802. package/assets/js/highcharts/modules/wordcloud.js +10 -1
  803. package/assets/js/highcharts/modules/wordcloud.src.js +88 -11
  804. package/assets/js/highcharts/modules/xrange.js +11 -1
  805. package/assets/js/highcharts/modules/xrange.src.js +1 -1
  806. package/assets/js/highcharts/standalone-navigator.js +9 -2
  807. package/assets/js/highcharts/standalone-navigator.src.js +146 -90
  808. package/assets/js/highcharts/themes/adaptive.js +130 -0
  809. package/assets/js/highcharts/themes/adaptive.src.js +1122 -0
  810. package/assets/js/highcharts/themes/avocado.js +9 -1
  811. package/assets/js/highcharts/themes/avocado.src.js +1 -1
  812. package/assets/js/highcharts/themes/brand-dark.js +9 -1
  813. package/assets/js/highcharts/themes/brand-dark.src.js +1 -1
  814. package/assets/js/highcharts/themes/brand-light.js +9 -1
  815. package/assets/js/highcharts/themes/brand-light.src.js +1 -1
  816. package/assets/js/highcharts/themes/dark-blue.js +9 -1
  817. package/assets/js/highcharts/themes/dark-blue.src.js +1 -1
  818. package/assets/js/highcharts/themes/dark-green.js +9 -1
  819. package/assets/js/highcharts/themes/dark-green.src.js +1 -1
  820. package/assets/js/highcharts/themes/dark-unica.js +9 -1
  821. package/assets/js/highcharts/themes/dark-unica.src.js +1 -1
  822. package/assets/js/highcharts/themes/gray.js +9 -1
  823. package/assets/js/highcharts/themes/gray.src.js +1 -1
  824. package/assets/js/highcharts/themes/grid-light.js +9 -1
  825. package/assets/js/highcharts/themes/grid-light.src.js +1 -1
  826. package/assets/js/highcharts/themes/grid.js +9 -1
  827. package/assets/js/highcharts/themes/grid.src.js +1 -1
  828. package/assets/js/highcharts/themes/high-contrast-dark.js +9 -1
  829. package/assets/js/highcharts/themes/high-contrast-dark.src.js +1 -1
  830. package/assets/js/highcharts/themes/high-contrast-light.js +9 -1
  831. package/assets/js/highcharts/themes/high-contrast-light.src.js +1 -1
  832. package/assets/js/highcharts/themes/sand-signika.js +9 -1
  833. package/assets/js/highcharts/themes/sand-signika.src.js +1 -1
  834. package/assets/js/highcharts/themes/skies.js +9 -1
  835. package/assets/js/highcharts/themes/skies.src.js +1 -1
  836. package/assets/js/highcharts/themes/sunset.js +9 -1
  837. package/assets/js/highcharts/themes/sunset.src.js +1 -1
  838. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v12.2.0 (2025-04-07)
2
+ * @license Highcharts JS v12.3.0 (2025-06-21)
3
3
  * @module highcharts/modules/exporting
4
4
  * @requires highcharts
5
5
  *
@@ -52,12 +52,8 @@ var external_highcharts_src_js_default_default = /*#__PURE__*/__webpack_require_
52
52
  const external_highcharts_src_js_default_AST_namespaceObject = __WEBPACK_EXTERNAL_MODULE__highcharts_src_js_8202131d__["default"].AST;
53
53
  var external_highcharts_src_js_default_AST_default = /*#__PURE__*/__webpack_require__.n(external_highcharts_src_js_default_AST_namespaceObject);
54
54
  ;// external ["../highcharts.src.js","default","Chart"]
55
- var x = (y) => {
56
- var x = {}; __webpack_require__.d(x,
57
- y); return x
58
- }
59
- var y = (x) => (() => (x))
60
- const external_highcharts_src_js_default_Chart_namespaceObject = x({ });
55
+ const external_highcharts_src_js_default_Chart_namespaceObject = __WEBPACK_EXTERNAL_MODULE__highcharts_src_js_8202131d__["default"].Chart;
56
+ var external_highcharts_src_js_default_Chart_default = /*#__PURE__*/__webpack_require__.n(external_highcharts_src_js_default_Chart_namespaceObject);
61
57
  ;// ./code/es-modules/Core/Chart/ChartNavigationComposition.js
62
58
  /**
63
59
  *
@@ -150,6 +146,169 @@ var ChartNavigationComposition;
150
146
  * */
151
147
  /* harmony default export */ const Chart_ChartNavigationComposition = (ChartNavigationComposition);
152
148
 
149
+ ;// ./code/es-modules/Extensions/DownloadURL.js
150
+ /* *
151
+ *
152
+ * (c) 2015-2025 Oystein Moseng
153
+ *
154
+ * License: www.highcharts.com/license
155
+ *
156
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
157
+ *
158
+ * Mixin for downloading content in the browser
159
+ *
160
+ * */
161
+
162
+ /* *
163
+ *
164
+ * Imports
165
+ *
166
+ * */
167
+
168
+ const { isSafari, win, win: { document: doc } } = (external_highcharts_src_js_default_default());
169
+
170
+ const { error } = (external_highcharts_src_js_default_default());
171
+ /* *
172
+ *
173
+ * Constants
174
+ *
175
+ * */
176
+ const domurl = win.URL || win.webkitURL || win;
177
+ /* *
178
+ *
179
+ * Functions
180
+ *
181
+ * */
182
+ /**
183
+ * Convert base64 dataURL to Blob if supported, otherwise returns undefined.
184
+ *
185
+ * @private
186
+ * @function Highcharts.dataURLtoBlob
187
+ *
188
+ * @param {string} dataURL
189
+ * URL to convert.
190
+ *
191
+ * @return {string | undefined}
192
+ * Blob.
193
+ */
194
+ function dataURLtoBlob(dataURL) {
195
+ const parts = dataURL
196
+ .replace(/filename=.*;/, '')
197
+ .match(/data:([^;]*)(;base64)?,([A-Z+\d\/]+)/i);
198
+ if (parts &&
199
+ parts.length > 3 &&
200
+ (win.atob) &&
201
+ win.ArrayBuffer &&
202
+ win.Uint8Array &&
203
+ win.Blob &&
204
+ (domurl.createObjectURL)) {
205
+ // Try to convert data URL to Blob
206
+ const binStr = win.atob(parts[3]), buf = new win.ArrayBuffer(binStr.length), binary = new win.Uint8Array(buf);
207
+ for (let i = 0; i < binary.length; ++i) {
208
+ binary[i] = binStr.charCodeAt(i);
209
+ }
210
+ return domurl
211
+ .createObjectURL(new win.Blob([binary], { 'type': parts[1] }));
212
+ }
213
+ }
214
+ /**
215
+ * Download a data URL in the browser. Can also take a blob as first param.
216
+ *
217
+ * @private
218
+ * @function Highcharts.downloadURL
219
+ *
220
+ * @param {string | global.URL} dataURL
221
+ * The dataURL/Blob to download.
222
+ * @param {string} filename
223
+ * The name of the resulting file (w/extension).
224
+ */
225
+ function downloadURL(dataURL, filename) {
226
+ const nav = win.navigator, a = doc.createElement('a');
227
+ // IE specific blob implementation
228
+ // Don't use for normal dataURLs
229
+ if (typeof dataURL !== 'string' &&
230
+ !(dataURL instanceof String) &&
231
+ nav.msSaveOrOpenBlob) {
232
+ nav.msSaveOrOpenBlob(dataURL, filename);
233
+ return;
234
+ }
235
+ dataURL = '' + dataURL;
236
+ if (nav.userAgent.length > 1000 /* RegexLimits.shortLimit */) {
237
+ throw new Error('Input too long');
238
+ }
239
+ const // Some browsers have limitations for data URL lengths. Try to convert
240
+ // to Blob or fall back. Edge always needs that blob.
241
+ isOldEdgeBrowser = /Edge\/\d+/.test(nav.userAgent),
242
+ // Safari on iOS needs Blob in order to download PDF
243
+ safariBlob = (isSafari &&
244
+ typeof dataURL === 'string' &&
245
+ dataURL.indexOf('data:application/pdf') === 0);
246
+ if (safariBlob || isOldEdgeBrowser || dataURL.length > 2000000) {
247
+ dataURL = dataURLtoBlob(dataURL) || '';
248
+ if (!dataURL) {
249
+ throw new Error('Failed to convert to blob');
250
+ }
251
+ }
252
+ // Try HTML5 download attr if supported
253
+ if (typeof a.download !== 'undefined') {
254
+ a.href = dataURL;
255
+ a.download = filename; // HTML5 download attribute
256
+ doc.body.appendChild(a);
257
+ a.click();
258
+ doc.body.removeChild(a);
259
+ }
260
+ else {
261
+ // No download attr, just opening data URI
262
+ try {
263
+ if (!win.open(dataURL, 'chart')) {
264
+ throw new Error('Failed to open window');
265
+ }
266
+ }
267
+ catch {
268
+ // If window.open failed, try location.href
269
+ win.location.href = dataURL;
270
+ }
271
+ }
272
+ }
273
+ /**
274
+ * Asynchronously downloads a script from a provided location.
275
+ *
276
+ * @private
277
+ * @function Highcharts.getScript
278
+ *
279
+ * @param {string} scriptLocation
280
+ * The location for the script to fetch.
281
+ */
282
+ function getScript(scriptLocation) {
283
+ return new Promise((resolve, reject) => {
284
+ const head = doc.getElementsByTagName('head')[0], script = doc.createElement('script');
285
+ // Set type and location for the script
286
+ script.type = 'text/javascript';
287
+ script.src = scriptLocation;
288
+ // Resolve in case of a succesful script fetching
289
+ script.onload = () => {
290
+ resolve();
291
+ };
292
+ // Reject in case of fail
293
+ script.onerror = () => {
294
+ reject(error(`Error loading script ${scriptLocation}`));
295
+ };
296
+ // Append the newly created script
297
+ head.appendChild(script);
298
+ });
299
+ }
300
+ /* *
301
+ *
302
+ * Default Export
303
+ *
304
+ * */
305
+ const DownloadURL = {
306
+ dataURLtoBlob,
307
+ downloadURL,
308
+ getScript
309
+ };
310
+ /* harmony default export */ const Extensions_DownloadURL = (DownloadURL);
311
+
153
312
  ;// ./code/es-modules/Extensions/Exporting/ExportingDefaults.js
154
313
  /* *
155
314
  *
@@ -198,7 +357,7 @@ const exporting = {
198
357
  /**
199
358
  * Allows the end user to sort the data table by clicking on column headers.
200
359
  *
201
- * @since 10.3.3
360
+ * @since 10.3.3
202
361
  * @apioption exporting.allowTableSorting
203
362
  */
204
363
  allowTableSorting: true,
@@ -213,7 +372,7 @@ const exporting = {
213
372
  *
214
373
  * @type {boolean}
215
374
  * @default false
216
- * @since 12.0.0
375
+ * @since 12.0.0
217
376
  * @apioption exporting.applyStyleSheets
218
377
  */
219
378
  /**
@@ -316,8 +475,8 @@ const exporting = {
316
475
  * See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
317
476
  * for more information
318
477
  *
319
- * @type {Object}
320
- * @since 11.3.0
478
+ * @type {Object}
479
+ * @since 11.3.0
321
480
  * @apioption exporting.fetchOptions
322
481
  */
323
482
  /**
@@ -333,6 +492,27 @@ const exporting = {
333
492
  * @since 5.0.0
334
493
  * @apioption exporting.libURL
335
494
  */
495
+ libURL: 'https://code.highcharts.com/12.3.0/lib/',
496
+ /**
497
+ * Whether the chart should be exported using the browser's built-in
498
+ * capabilities, allowing offline exports without requiring access to the
499
+ * Highcharts export server, or sent directly to the export server for
500
+ * processing and downloading.
501
+ *
502
+ * This option is different from `exporting.fallbackToExportServer`, which
503
+ * controls whether the export server should be used as a fallback only if
504
+ * the local export fails. In contrast, `exporting.local` explicitly defines
505
+ * which export method to use.
506
+ *
507
+ * @see [fallbackToExportServer](#exporting.fallbackToExportServer)
508
+ *
509
+ * @type {boolean}
510
+ * @default true
511
+ * @since 12.3.0
512
+ * @requires modules/exporting
513
+ * @apioption exporting.local
514
+ */
515
+ local: true,
336
516
  /**
337
517
  * Analogous to [sourceWidth](#exporting.sourceWidth).
338
518
  *
@@ -405,7 +585,7 @@ const exporting = {
405
585
  * @sample {highcharts} highcharts/exporting/offline-download-pdffont/
406
586
  * Download PDF in a language containing non-Latin characters.
407
587
  *
408
- * @since 10.0.0
588
+ * @since 10.0.0
409
589
  * @requires modules/offline-exporting
410
590
  */
411
591
  pdfFont: {
@@ -414,25 +594,25 @@ const exporting = {
414
594
  * `bold` or `italic` are not defined, the `normal` font will be used
415
595
  * for those too.
416
596
  *
417
- * @type string|undefined
597
+ * @type string | undefined
418
598
  */
419
599
  normal: void 0,
420
600
  /**
421
601
  * The TTF font file for bold text.
422
602
  *
423
- * @type string|undefined
603
+ * @type string | undefined
424
604
  */
425
605
  bold: void 0,
426
606
  /**
427
607
  * The TTF font file for bold and italic text.
428
608
  *
429
- * @type string|undefined
609
+ * @type string | undefined
430
610
  */
431
611
  bolditalic: void 0,
432
612
  /**
433
613
  * The TTF font file for italic text.
434
614
  *
435
- * @type string|undefined
615
+ * @type string | undefined
436
616
  */
437
617
  italic: void 0
438
618
  },
@@ -535,7 +715,7 @@ const exporting = {
535
715
  * @sample highcharts/exporting/buttons-contextbutton-symbol-custom/
536
716
  * Custom shape as symbol
537
717
  *
538
- * @type {Highcharts.SymbolKeyValue|"menu"|"menuball"|string}
718
+ * @type {Highcharts.SymbolKeyValue | "menu" | "menuball" | string}
539
719
  * @since 2.0
540
720
  */
541
721
  symbol: 'menu',
@@ -556,12 +736,10 @@ const exporting = {
556
736
  * By default, there is the "View in full screen" and "Print" menu
557
737
  * items, plus one menu item for each of the available export types.
558
738
  *
559
- * @sample {highcharts} highcharts/exporting/menuitemdefinitions/
560
- * Menu item definitions
561
- * @sample {highstock} highcharts/exporting/menuitemdefinitions/
562
- * Menu item definitions
563
- * @sample {highmaps} highcharts/exporting/menuitemdefinitions/
739
+ * @sample highcharts/exporting/menuitemdefinitions/
564
740
  * Menu item definitions
741
+ * @sample highcharts/exporting/menuitemdefinitions-webp/
742
+ * Adding a custom menu item for WebP export
565
743
  *
566
744
  * @type {Array<string>}
567
745
  * @default ["viewFullscreen", "printChart", "separator", "downloadPNG", "downloadJPEG", "downloadSVG"]
@@ -593,12 +771,10 @@ const exporting = {
593
771
  * Custom text for the "exitFullScreen" can be set only in lang options
594
772
  * (it is not a separate button).
595
773
  *
596
- * @sample {highcharts} highcharts/exporting/menuitemdefinitions/
597
- * Menu item definitions
598
- * @sample {highstock} highcharts/exporting/menuitemdefinitions/
599
- * Menu item definitions
600
- * @sample {highmaps} highcharts/exporting/menuitemdefinitions/
774
+ * @sample highcharts/exporting/menuitemdefinitions/
601
775
  * Menu item definitions
776
+ * @sample highcharts/exporting/menuitemdefinitions-webp/
777
+ * Adding a custom menu item for WebP export
602
778
  *
603
779
  *
604
780
  * @type {Highcharts.Dictionary<Highcharts.ExportingMenuObject>}
@@ -612,9 +788,7 @@ const exporting = {
612
788
  viewFullscreen: {
613
789
  textKey: 'viewFullscreen',
614
790
  onclick: function () {
615
- if (this.fullscreen) {
616
- this.fullscreen.toggle();
617
- }
791
+ this.fullscreen?.toggle();
618
792
  }
619
793
  },
620
794
  /**
@@ -623,7 +797,7 @@ const exporting = {
623
797
  printChart: {
624
798
  textKey: 'printChart',
625
799
  onclick: function () {
626
- this.print();
800
+ this.exporting?.print();
627
801
  }
628
802
  },
629
803
  /**
@@ -637,8 +811,8 @@ const exporting = {
637
811
  */
638
812
  downloadPNG: {
639
813
  textKey: 'downloadPNG',
640
- onclick: function () {
641
- this.exportChart();
814
+ onclick: async function () {
815
+ await this.exporting?.exportChart();
642
816
  }
643
817
  },
644
818
  /**
@@ -646,8 +820,8 @@ const exporting = {
646
820
  */
647
821
  downloadJPEG: {
648
822
  textKey: 'downloadJPEG',
649
- onclick: function () {
650
- this.exportChart({
823
+ onclick: async function () {
824
+ await this.exporting?.exportChart({
651
825
  type: 'image/jpeg'
652
826
  });
653
827
  }
@@ -657,8 +831,8 @@ const exporting = {
657
831
  */
658
832
  downloadPDF: {
659
833
  textKey: 'downloadPDF',
660
- onclick: function () {
661
- this.exportChart({
834
+ onclick: async function () {
835
+ await this.exporting?.exportChart({
662
836
  type: 'application/pdf'
663
837
  });
664
838
  }
@@ -668,8 +842,8 @@ const exporting = {
668
842
  */
669
843
  downloadSVG: {
670
844
  textKey: 'downloadSVG',
671
- onclick: function () {
672
- this.exportChart({
845
+ onclick: async function () {
846
+ await this.exporting?.exportChart({
673
847
  type: 'image/svg+xml'
674
848
  });
675
849
  }
@@ -811,6 +985,7 @@ const navigation = {
811
985
  *
812
986
  * @sample highcharts/title/widthadjust
813
987
  * Adjust the spacing when using text button
988
+ *
814
989
  * @since 2.0
815
990
  */
816
991
  buttonSpacing: 5,
@@ -847,7 +1022,7 @@ const navigation = {
847
1022
  *
848
1023
  * @type boolean
849
1024
  * @default false
850
- * @since 10.3.0
1025
+ * @since 10.3.0
851
1026
  * @apioption navigation.buttonOptions.useHTML
852
1027
  */
853
1028
  /**
@@ -887,7 +1062,7 @@ const navigation = {
887
1062
  * @sample highcharts/navigation/buttonoptions-symbolfill/
888
1063
  * Blue symbol stroke for one of the buttons
889
1064
  *
890
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
1065
+ * @type {Highcharts.ColorString | Highcharts.GradientColorObject | Highcharts.PatternObject}
891
1066
  * @since 2.0
892
1067
  */
893
1068
  symbolFill: "#666666" /* Palette.neutralColor60 */,
@@ -927,7 +1102,7 @@ const navigation = {
927
1102
  /**
928
1103
  * The default fill exists only to capture hover events.
929
1104
  *
930
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
1105
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
931
1106
  */
932
1107
  fill: "#ffffff" /* Palette.backgroundColor */,
933
1108
  /**
@@ -937,7 +1112,7 @@ const navigation = {
937
1112
  /**
938
1113
  * Default stroke for the buttons.
939
1114
  *
940
- * @type {Highcharts.ColorString}
1115
+ * @type {Highcharts.ColorString}
941
1116
  */
942
1117
  stroke: 'none',
943
1118
  /**
@@ -1196,7 +1371,7 @@ class Fullscreen {
1196
1371
  * the fullscreen mode.
1197
1372
  *
1198
1373
  * @name Highcharts.Fullscreen#isOpen
1199
- * @type {boolean|undefined}
1374
+ * @type {boolean | undefined}
1200
1375
  * @since 8.0.1
1201
1376
  */
1202
1377
  this.isOpen = false;
@@ -1338,7 +1513,7 @@ class Fullscreen {
1338
1513
  * @requires modules/full-screen
1339
1514
  */
1340
1515
  setButtonText() {
1341
- const chart = this.chart, exportDivElements = chart.exportDivElements, exportingOptions = chart.options.exporting, menuItems = (exportingOptions &&
1516
+ const chart = this.chart, exportDivElements = chart.exporting?.divElements, exportingOptions = chart.options.exporting, menuItems = (exportingOptions &&
1342
1517
  exportingOptions.buttons &&
1343
1518
  exportingOptions.buttons.contextButton.menuItems), lang = chart.options.lang;
1344
1519
  if (exportingOptions &&
@@ -1461,7 +1636,7 @@ class Fullscreen {
1461
1636
  * */
1462
1637
 
1463
1638
 
1464
- const { win } = (external_highcharts_src_js_default_default());
1639
+ const { win: HttpUtilities_win } = (external_highcharts_src_js_default_default());
1465
1640
 
1466
1641
  const { discardElement, objectEach } = (external_highcharts_src_js_default_default());
1467
1642
  /* *
@@ -1475,10 +1650,10 @@ const { discardElement, objectEach } = (external_highcharts_src_js_default_defau
1475
1650
  * @function Highcharts.ajax
1476
1651
  *
1477
1652
  * @param {Highcharts.AjaxSettingsObject} settings
1478
- * The Ajax settings to use.
1653
+ * The Ajax settings to use.
1479
1654
  *
1480
- * @return {false|undefined}
1481
- * Returns false, if error occurred.
1655
+ * @return {false | undefined}
1656
+ * Returns false, if error occurred.
1482
1657
  */
1483
1658
  function ajax(settings) {
1484
1659
  const headers = {
@@ -1489,10 +1664,12 @@ function ajax(settings) {
1489
1664
  }, r = new XMLHttpRequest();
1490
1665
  /**
1491
1666
  * Private error handler.
1667
+ *
1492
1668
  * @private
1669
+ *
1493
1670
  * @param {XMLHttpRequest} xhr
1494
1671
  * Internal request object.
1495
- * @param {string|Error} err
1672
+ * @param {string | Error} err
1496
1673
  * Occurred error.
1497
1674
  */
1498
1675
  function handleError(xhr, err) {
@@ -1548,11 +1725,12 @@ function ajax(settings) {
1548
1725
  * Get a JSON resource over XHR, also supporting CORS without preflight.
1549
1726
  *
1550
1727
  * @function Highcharts.getJSON
1728
+ *
1551
1729
  * @param {string} url
1552
- * The URL to load.
1730
+ * The URL to load.
1553
1731
  * @param {Function} success
1554
- * The success callback. For error handling, use the `Highcharts.ajax`
1555
- * function instead.
1732
+ * The success callback. For error handling, use the `Highcharts.ajax` function
1733
+ * instead.
1556
1734
  */
1557
1735
  function getJSON(url, success) {
1558
1736
  HttpUtilities.ajax({
@@ -1567,46 +1745,44 @@ function getJSON(url, success) {
1567
1745
  });
1568
1746
  }
1569
1747
  /**
1570
- * The post utility
1748
+ * The post utility.
1571
1749
  *
1572
1750
  * @private
1573
1751
  * @function Highcharts.post
1574
1752
  *
1575
1753
  * @param {string} url
1576
- * Post URL
1577
- *
1754
+ * Post URL.
1578
1755
  * @param {Object} data
1579
- * Post data
1580
- *
1756
+ * Post data.
1581
1757
  * @param {RequestInit} [fetchOptions]
1582
- * Additional attributes for the post request
1583
- */
1584
- /**
1585
- *
1758
+ * Additional attributes for the post request.
1586
1759
  */
1587
- function post(url, data, fetchOptions) {
1588
- const formData = new win.FormData();
1589
- // Add the data
1590
- objectEach(data, function (val, name) {
1591
- formData.append(name, val);
1760
+ async function post(url, data, fetchOptions) {
1761
+ // Prepare a form to send the data
1762
+ const formData = new HttpUtilities_win.FormData();
1763
+ // Add the data to the form
1764
+ objectEach(data, function (value, name) {
1765
+ formData.append(name, value);
1592
1766
  });
1593
1767
  formData.append('b64', 'true');
1594
- const { filename, type } = data;
1595
- return win.fetch(url, {
1768
+ // Send the POST
1769
+ const response = await HttpUtilities_win.fetch(url, {
1596
1770
  method: 'POST',
1597
1771
  body: formData,
1598
1772
  ...fetchOptions
1599
- }).then((res) => {
1600
- if (res.ok) {
1601
- res.text().then((text) => {
1602
- const link = document.createElement('a');
1603
- link.href = `data:${type};base64,${text}`;
1604
- link.download = filename;
1605
- link.click();
1606
- discardElement(link);
1607
- });
1608
- }
1609
1773
  });
1774
+ // Check the response
1775
+ if (response.ok) {
1776
+ // Get the text from the response
1777
+ const text = await response.text();
1778
+ // Prepare self-click link with the Base64 representation
1779
+ const link = document.createElement('a');
1780
+ link.href = `data:${data.type};base64,${text}`;
1781
+ link.download = data.filename;
1782
+ link.click();
1783
+ // Remove the link
1784
+ discardElement(link);
1785
+ }
1610
1786
  }
1611
1787
  /* *
1612
1788
  *
@@ -1630,29 +1806,35 @@ const HttpUtilities = {
1630
1806
  * The payload to send.
1631
1807
  *
1632
1808
  * @name Highcharts.AjaxSettingsObject#data
1633
- * @type {string|Highcharts.Dictionary<any>|undefined}
1809
+ * @type {string | Highcharts.Dictionary<any> | undefined}
1634
1810
  */ /**
1635
1811
  * The data type expected.
1812
+ *
1636
1813
  * @name Highcharts.AjaxSettingsObject#dataType
1637
- * @type {"json"|"xml"|"text"|"octet"|undefined}
1814
+ * @type {"json" | "xml" | "text" | "octet" | undefined}
1638
1815
  */ /**
1639
1816
  * Function to call on error.
1817
+ *
1640
1818
  * @name Highcharts.AjaxSettingsObject#error
1641
- * @type {Function|undefined}
1819
+ * @type {Function | undefined}
1642
1820
  */ /**
1643
1821
  * The headers; keyed on header name.
1822
+ *
1644
1823
  * @name Highcharts.AjaxSettingsObject#headers
1645
- * @type {Highcharts.Dictionary<string>|undefined}
1824
+ * @type {Highcharts.Dictionary<string> | undefined}
1646
1825
  */ /**
1647
1826
  * Function to call on success.
1827
+ *
1648
1828
  * @name Highcharts.AjaxSettingsObject#success
1649
- * @type {Function|undefined}
1829
+ * @type {Function | undefined}
1650
1830
  */ /**
1651
1831
  * The HTTP method to use. For example GET or POST.
1832
+ *
1652
1833
  * @name Highcharts.AjaxSettingsObject#type
1653
- * @type {string|undefined}
1834
+ * @type {string | undefined}
1654
1835
  */ /**
1655
1836
  * The URL to call.
1837
+ *
1656
1838
  * @name Highcharts.AjaxSettingsObject#url
1657
1839
  * @type {string}
1658
1840
  */
@@ -1675,69 +1857,267 @@ const HttpUtilities = {
1675
1857
 
1676
1858
 
1677
1859
 
1678
- const { defaultOptions } = (external_highcharts_src_js_default_default());
1860
+ const { defaultOptions, setOptions } = (external_highcharts_src_js_default_default());
1679
1861
 
1862
+ const { downloadURL: Exporting_downloadURL, getScript: Exporting_getScript } = Extensions_DownloadURL;
1680
1863
 
1681
1864
 
1682
1865
 
1683
- const { doc, SVG_NS, win: Exporting_win } = (external_highcharts_src_js_default_default());
1684
1866
 
1867
+ const { composed: Exporting_composed, doc: Exporting_doc, isFirefox, isMS, isSafari: Exporting_isSafari, SVG_NS, win: Exporting_win } = (external_highcharts_src_js_default_default());
1685
1868
 
1686
- const { addEvent: Exporting_addEvent, css, createElement, discardElement: Exporting_discardElement, extend, find, fireEvent: Exporting_fireEvent, isObject, merge, objectEach: Exporting_objectEach, pick, removeEvent, splat, uniqueKey } = (external_highcharts_src_js_default_default());
1869
+
1870
+ const { addEvent: Exporting_addEvent, clearTimeout: Exporting_clearTimeout, createElement, css, discardElement: Exporting_discardElement, error: Exporting_error, extend, find, fireEvent: Exporting_fireEvent, isObject, merge, objectEach: Exporting_objectEach, pick, pushUnique: Exporting_pushUnique, removeEvent, splat, uniqueKey } = (external_highcharts_src_js_default_default());
1871
+ external_highcharts_src_js_default_AST_default().allowedAttributes.push('data-z-index', 'fill-opacity', 'filter', 'preserveAspectRatio', 'rx', 'ry', 'stroke-dasharray', 'stroke-linejoin', 'stroke-opacity', 'text-anchor', 'transform', 'transform-origin', 'version', 'viewBox', 'visibility', 'xmlns', 'xmlns:xlink');
1872
+ external_highcharts_src_js_default_AST_default().allowedTags.push('desc', 'clippath', 'fedropshadow', 'femorphology', 'g', 'image');
1687
1873
  /* *
1688
1874
  *
1689
- * Composition
1875
+ * Constants
1690
1876
  *
1691
1877
  * */
1692
- var Exporting;
1693
- (function (Exporting) {
1878
+ const Exporting_domurl = Exporting_win.URL || Exporting_win.webkitURL || Exporting_win;
1879
+ /* *
1880
+ *
1881
+ * Class
1882
+ *
1883
+ * */
1884
+ /**
1885
+ * The Exporting class provides methods for exporting charts to images. If the
1886
+ * exporting module is loaded, this class is instantiated on the chart and
1887
+ * available through the `chart.exporting` property. Read more about the
1888
+ * [exporting module](https://www.highcharts.com/docs/export-module-overview).
1889
+ *
1890
+ * @class
1891
+ * @name Highcharts.Exporting
1892
+ *
1893
+ * @param {Highcharts.Chart} chart
1894
+ * The chart instance.
1895
+ *
1896
+ */
1897
+ class Exporting {
1694
1898
  /* *
1695
1899
  *
1696
- * Declarations
1900
+ * Constructor
1697
1901
  *
1698
1902
  * */
1903
+ constructor(chart, options) {
1904
+ this.options = {};
1905
+ this.chart = chart;
1906
+ this.options = options;
1907
+ this.btnCount = 0;
1908
+ this.buttonOffset = 0;
1909
+ this.divElements = [];
1910
+ this.svgElements = [];
1911
+ }
1699
1912
  /* *
1700
1913
  *
1701
- * Constants
1914
+ * Static Functions
1702
1915
  *
1703
1916
  * */
1704
- // These CSS properties are not inlined. Remember camelCase.
1705
- const inlineDenylist = [
1706
- /-/, // In Firefox, both hyphened and camelCased names are listed
1707
- /^(clipPath|cssText|d|height|width)$/, // Full words
1708
- /^font$/, // More specific props are set
1709
- /[lL]ogical(Width|Height)$/,
1710
- /^parentRule$/,
1711
- /^(cssRules|ownerRules)$/, // #19516 read-only properties
1712
- /perspective/,
1713
- /TapHighlightColor/,
1714
- /^transition/,
1715
- /^length$/, // #7700
1716
- /^\d+$/ // #17538
1717
- ];
1718
- // These ones are translated to attributes rather than styles
1719
- const inlineToAttributes = [
1720
- 'fill',
1721
- 'stroke',
1722
- 'strokeLinecap',
1723
- 'strokeLinejoin',
1724
- 'strokeWidth',
1725
- 'textAnchor',
1726
- 'x',
1727
- 'y'
1728
- ];
1729
- Exporting.inlineAllowlist = [];
1730
- const unstyledElements = [
1731
- 'clipPath',
1732
- 'defs',
1733
- 'desc'
1734
- ];
1735
- /* *
1917
+ /**
1918
+ * Make hyphenated property names out of camelCase.
1736
1919
  *
1737
- * Variables
1920
+ * @private
1921
+ * @static
1922
+ * @function Highcharts.Exporting#hyphenate
1738
1923
  *
1739
- * */
1740
- let printingChart;
1924
+ * @param {string} property
1925
+ * Property name in camelCase.
1926
+ *
1927
+ * @return {string}
1928
+ * Hyphenated property name.
1929
+ *
1930
+ * @requires modules/exporting
1931
+ */
1932
+ static hyphenate(property) {
1933
+ return property.replace(/[A-Z]/g, function (match) {
1934
+ return '-' + match.toLowerCase();
1935
+ });
1936
+ }
1937
+ /**
1938
+ * Get data:URL from image URL.
1939
+ *
1940
+ * @private
1941
+ * @static
1942
+ * @async
1943
+ * @function Highcharts.Exporting#imageToDataURL
1944
+ *
1945
+ * @param {string} imageURL
1946
+ * The address or URL of the image.
1947
+ * @param {number} scale
1948
+ * The scale of the image.
1949
+ * @param {string} imageType
1950
+ * The export type of the image.
1951
+ *
1952
+ * @requires modules/exporting
1953
+ */
1954
+ static async imageToDataURL(imageURL, scale, imageType) {
1955
+ // First, wait for the image to be loaded
1956
+ const img = await Exporting.loadImage(imageURL), canvas = Exporting_doc.createElement('canvas'), ctx = canvas?.getContext('2d');
1957
+ if (!ctx) {
1958
+ throw new Error('No canvas found!');
1959
+ }
1960
+ else {
1961
+ canvas.height = img.height * scale;
1962
+ canvas.width = img.width * scale;
1963
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
1964
+ // Now we try to get the contents of the canvas
1965
+ return canvas.toDataURL(imageType);
1966
+ }
1967
+ }
1968
+ /**
1969
+ * Loads an image from the provided URL.
1970
+ *
1971
+ * @private
1972
+ * @static
1973
+ * @function Highcharts.Exporting#loadImage
1974
+ *
1975
+ * @param {string} imageURL
1976
+ * The address or URL of the image.
1977
+ *
1978
+ * @return {Promise<HTMLImageElement>}
1979
+ * Returns a Promise that resolves with the loaded HTMLImageElement.
1980
+ *
1981
+ * @requires modules/exporting
1982
+ */
1983
+ static loadImage(imageURL) {
1984
+ return new Promise((resolve, reject) => {
1985
+ // Create an image
1986
+ const image = new Exporting_win.Image();
1987
+ // Must be set prior to loading image source
1988
+ image.crossOrigin = 'Anonymous';
1989
+ // Return the image in case of success
1990
+ image.onload = () => {
1991
+ // IE bug where image is not always ready despite load event
1992
+ setTimeout(() => {
1993
+ resolve(image);
1994
+ }, Exporting.loadEventDeferDelay);
1995
+ };
1996
+ // Reject in case of fail
1997
+ image.onerror = (error) => {
1998
+ reject(error);
1999
+ };
2000
+ // Provide the image URL
2001
+ image.src = imageURL;
2002
+ });
2003
+ }
2004
+ /**
2005
+ * Prepares and returns the image export options with default values where
2006
+ * necessary.
2007
+ *
2008
+ * @private
2009
+ * @static
2010
+ * @function Highcharts.Exporting#prepareImageOptions
2011
+ *
2012
+ * @param {Highcharts.ExportingOptions} exportingOptions
2013
+ * The exporting options.
2014
+ *
2015
+ * @return {Exporting.ImageOptions}
2016
+ * The finalized image export options with ensured values.
2017
+ *
2018
+ * @requires modules/exporting
2019
+ */
2020
+ static prepareImageOptions(exportingOptions) {
2021
+ const type = exportingOptions?.type || 'image/png', libURL = (exportingOptions?.libURL ||
2022
+ defaultOptions.exporting?.libURL);
2023
+ return {
2024
+ type,
2025
+ filename: ((exportingOptions?.filename || 'chart') +
2026
+ '.' +
2027
+ (type === 'image/svg+xml' ? 'svg' : type.split('/')[1])),
2028
+ scale: exportingOptions?.scale || 1,
2029
+ // Allow libURL to end with or without fordward slash
2030
+ libURL: libURL?.slice(-1) !== '/' ? libURL + '/' : libURL
2031
+ };
2032
+ }
2033
+ /**
2034
+ * A collection of fixes on the produced SVG to account for expand
2035
+ * properties and browser bugs. Returns a cleaned SVG.
2036
+ *
2037
+ * @private
2038
+ * @static
2039
+ * @function Highcharts.Exporting#sanitizeSVG
2040
+ *
2041
+ * @param {string} svg
2042
+ * SVG code to sanitize.
2043
+ * @param {Highcharts.Options} options
2044
+ * Chart options to apply.
2045
+ *
2046
+ * @return {string}
2047
+ * Sanitized SVG code.
2048
+ *
2049
+ * @requires modules/exporting
2050
+ */
2051
+ static sanitizeSVG(svg, options) {
2052
+ const split = svg.indexOf('</svg>') + 6, useForeignObject = svg.indexOf('<foreignObject') > -1;
2053
+ let html = svg.substr(split);
2054
+ // Remove any HTML added to the container after the SVG (#894, #9087)
2055
+ svg = svg.substr(0, split);
2056
+ if (useForeignObject) {
2057
+ // Some tags needs to be closed in xhtml (#13726)
2058
+ svg = svg.replace(/(<(?:img|br).*?(?=\>))>/g, '$1 />');
2059
+ // Move HTML into a foreignObject
2060
+ }
2061
+ else if (html && options?.exporting?.allowHTML) {
2062
+ html = '<foreignObject x="0" y="0" ' +
2063
+ 'width="' + options.chart.width + '" ' +
2064
+ 'height="' + options.chart.height + '">' +
2065
+ '<body xmlns="http://www.w3.org/1999/xhtml">' +
2066
+ // Some tags needs to be closed in xhtml (#13726)
2067
+ html.replace(/(<(?:img|br).*?(?=\>))>/g, '$1 />') +
2068
+ '</body>' +
2069
+ '</foreignObject>';
2070
+ svg = svg.replace('</svg>', html + '</svg>');
2071
+ }
2072
+ svg = svg
2073
+ .replace(/zIndex="[^"]+"/g, '')
2074
+ .replace(/symbolName="[^"]+"/g, '')
2075
+ .replace(/jQuery\d+="[^"]+"/g, '')
2076
+ .replace(/url\(("|&quot;)(.*?)("|&quot;)\;?\)/g, 'url($2)')
2077
+ .replace(/url\([^#]+#/g, 'url(#')
2078
+ .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
2079
+ .replace(/ (NS\d+\:)?href=/g, ' xlink:href=') // #3567
2080
+ .replace(/\n+/g, ' ')
2081
+ // Replace HTML entities, issue #347
2082
+ .replace(/&nbsp;/g, '\u00A0') // No-break space
2083
+ .replace(/&shy;/g, '\u00AD'); // Soft hyphen
2084
+ return svg;
2085
+ }
2086
+ /**
2087
+ * Get blob URL from SVG code. Falls back to normal data URI.
2088
+ *
2089
+ * @private
2090
+ * @static
2091
+ * @function Highcharts.Exporting#svgToDataURL
2092
+ *
2093
+ * @param {string} svg
2094
+ * SVG to get the URL from.
2095
+ *
2096
+ * @return {string}
2097
+ * The data URL.
2098
+ *
2099
+ * @requires modules/exporting
2100
+ */
2101
+ static svgToDataURL(svg) {
2102
+ // Webkit and not chrome
2103
+ const userAgent = Exporting_win.navigator.userAgent;
2104
+ const webKit = (userAgent.indexOf('WebKit') > -1 &&
2105
+ userAgent.indexOf('Chrome') < 0);
2106
+ try {
2107
+ // Safari requires data URI since it doesn't allow navigation to
2108
+ // blob URLs. ForeignObjects also don't work well in Blobs in Chrome
2109
+ // (#14780).
2110
+ if (!webKit && svg.indexOf('<foreignObject') === -1) {
2111
+ return Exporting_domurl.createObjectURL(new Exporting_win.Blob([svg], {
2112
+ type: 'image/svg+xml;charset-utf-16'
2113
+ }));
2114
+ }
2115
+ }
2116
+ catch {
2117
+ // Ignore
2118
+ }
2119
+ return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg);
2120
+ }
1741
2121
  /* *
1742
2122
  *
1743
2123
  * Functions
@@ -1747,26 +2127,21 @@ var Exporting;
1747
2127
  * Add the export button to the chart, with options.
1748
2128
  *
1749
2129
  * @private
1750
- * @function Highcharts.Chart#addButton
1751
- * @param {Highcharts.NavigationButtonOptions} options
2130
+ * @function Highcharts.Exporting#addButton
2131
+ *
2132
+ * @param {Highcharts.ExportingButtonOptions} options
2133
+ * The exporting button options object.
2134
+ *
1752
2135
  * @requires modules/exporting
1753
2136
  */
1754
- function addButton(options) {
1755
- const chart = this, renderer = chart.renderer, btnOptions = merge(chart.options.navigation.buttonOptions, options), onclick = btnOptions.onclick, menuItems = btnOptions.menuItems, symbolSize = btnOptions.symbolSize || 12;
2137
+ addButton(options) {
2138
+ const exporting = this, chart = exporting.chart, renderer = chart.renderer, btnOptions = merge(chart.options.navigation?.buttonOptions, options), onclick = btnOptions.onclick, menuItems = btnOptions.menuItems, symbolSize = btnOptions.symbolSize || 12;
1756
2139
  let symbol;
1757
- if (!chart.btnCount) {
1758
- chart.btnCount = 0;
1759
- }
1760
- // Keeps references to the button elements
1761
- if (!chart.exportDivElements) {
1762
- chart.exportDivElements = [];
1763
- chart.exportSVGElements = [];
1764
- }
1765
2140
  if (btnOptions.enabled === false || !btnOptions.theme) {
1766
2141
  return;
1767
2142
  }
1768
2143
  const theme = chart.styledMode ? {} : btnOptions.theme;
1769
- let callback;
2144
+ let callback = (() => { });
1770
2145
  if (onclick) {
1771
2146
  callback = function (e) {
1772
2147
  if (e) {
@@ -1781,7 +2156,7 @@ var Exporting;
1781
2156
  if (e) {
1782
2157
  e.stopPropagation();
1783
2158
  }
1784
- chart.contextMenu(button.menuClassName, menuItems, button.translateX || 0, button.translateY || 0, button.width || 0, button.height || 0, button);
2159
+ exporting.contextMenu(button.menuClassName, menuItems, button.translateX || 0, button.translateY || 0, button.width || 0, button.height || 0, button);
1785
2160
  button.setState(2);
1786
2161
  };
1787
2162
  }
@@ -1796,18 +2171,19 @@ var Exporting;
1796
2171
  });
1797
2172
  }
1798
2173
  const button = renderer
1799
- .button(btnOptions.text, 0, 0, callback, theme, void 0, void 0, void 0, void 0, btnOptions.useHTML)
1800
- .addClass(options.className)
2174
+ .button(btnOptions.text || '', 0, 0, callback, theme, void 0, void 0, void 0, void 0, btnOptions.useHTML)
2175
+ .addClass(options.className || '')
1801
2176
  .attr({
1802
- title: pick(chart.options.lang[btnOptions._titleKey || btnOptions.titleKey], '')
2177
+ title: pick(chart.options.lang[(btnOptions._titleKey ||
2178
+ btnOptions.titleKey)], '')
1803
2179
  });
1804
2180
  button.menuClassName = (options.menuClassName ||
1805
- 'highcharts-menu-' + chart.btnCount++);
2181
+ 'highcharts-menu-' + exporting.btnCount++);
1806
2182
  if (btnOptions.symbol) {
1807
2183
  symbol = renderer
1808
- .symbol(btnOptions.symbol, Math.round((btnOptions.symbolX || 0) - (symbolSize / 2)), Math.round((btnOptions.symbolY || 0) - (symbolSize / 2)), symbolSize, symbolSize
2184
+ .symbol(btnOptions.symbol, Math.round((btnOptions.symbolX || 0) - (symbolSize / 2)), Math.round((btnOptions.symbolY || 0) - (symbolSize / 2)), symbolSize, symbolSize,
1809
2185
  // If symbol is an image, scale it (#7957)
1810
- , {
2186
+ {
1811
2187
  width: symbolSize,
1812
2188
  height: symbolSize
1813
2189
  })
@@ -1825,73 +2201,69 @@ var Exporting;
1825
2201
  }
1826
2202
  }
1827
2203
  button
1828
- .add(chart.exportingGroup)
2204
+ .add(exporting.group)
1829
2205
  .align(extend(btnOptions, {
1830
2206
  width: button.width,
1831
- x: pick(btnOptions.x, chart.buttonOffset) // #1654
2207
+ x: pick(btnOptions.x, exporting.buttonOffset) // #1654
1832
2208
  }), true, 'spacingBox');
1833
- chart.buttonOffset += (((button.width || 0) + btnOptions.buttonSpacing) *
2209
+ exporting.buttonOffset += (((button.width || 0) + (btnOptions.buttonSpacing || 0)) *
1834
2210
  (btnOptions.align === 'right' ? -1 : 1));
1835
- chart.exportSVGElements.push(button, symbol);
2211
+ exporting.svgElements.push(button, symbol);
1836
2212
  }
1837
2213
  /**
1838
2214
  * Clean up after printing a chart.
1839
2215
  *
1840
- * @function Highcharts#afterPrint
1841
- *
1842
2216
  * @private
1843
- *
1844
- * @param {Highcharts.Chart} chart
1845
- * Chart that was (or suppose to be) printed
2217
+ * @function Highcharts.Exporting#afterPrint
1846
2218
  *
1847
2219
  * @emits Highcharts.Chart#event:afterPrint
2220
+ *
2221
+ * @requires modules/exporting
1848
2222
  */
1849
- function afterPrint() {
1850
- const chart = this;
1851
- if (!chart.printReverseInfo) {
2223
+ afterPrint() {
2224
+ const chart = this.chart;
2225
+ if (!this.printReverseInfo) {
1852
2226
  return void 0;
1853
2227
  }
1854
- const { childNodes, origDisplay, resetParams } = chart.printReverseInfo;
2228
+ const { childNodes, origDisplay, resetParams } = this.printReverseInfo;
1855
2229
  // Put the chart back in
1856
- chart.moveContainers(chart.renderTo);
2230
+ this.moveContainers(chart.renderTo);
1857
2231
  // Restore all body content
1858
2232
  [].forEach.call(childNodes, function (node, i) {
1859
2233
  if (node.nodeType === 1) {
1860
2234
  node.style.display = (origDisplay[i] || '');
1861
2235
  }
1862
2236
  });
1863
- chart.isPrinting = false;
2237
+ this.isPrinting = false;
1864
2238
  // Reset printMaxWidth
1865
2239
  if (resetParams) {
1866
2240
  chart.setSize.apply(chart, resetParams);
1867
2241
  }
1868
- delete chart.printReverseInfo;
1869
- printingChart = void 0;
2242
+ delete this.printReverseInfo;
2243
+ Exporting.printingChart = void 0;
1870
2244
  Exporting_fireEvent(chart, 'afterPrint');
1871
2245
  }
1872
2246
  /**
1873
2247
  * Prepare chart and document before printing a chart.
1874
2248
  *
1875
- * @function Highcharts#beforePrint
1876
- *
1877
2249
  * @private
1878
- *
2250
+ * @function Highcharts.Exporting#beforePrint
1879
2251
  *
1880
2252
  * @emits Highcharts.Chart#event:beforePrint
2253
+ *
2254
+ * @requires modules/exporting
1881
2255
  */
1882
- function beforePrint() {
1883
- const chart = this, body = doc.body, printMaxWidth = chart.options.exporting.printMaxWidth, printReverseInfo = {
2256
+ beforePrint() {
2257
+ const chart = this.chart, body = Exporting_doc.body, printMaxWidth = this.options.printMaxWidth, printReverseInfo = {
1884
2258
  childNodes: body.childNodes,
1885
2259
  origDisplay: [],
1886
2260
  resetParams: void 0
1887
2261
  };
1888
- chart.isPrinting = true;
2262
+ this.isPrinting = true;
1889
2263
  chart.pointer?.reset(void 0, 0);
1890
2264
  Exporting_fireEvent(chart, 'beforePrint');
1891
2265
  // Handle printMaxWidth
1892
- const handleMaxWidth = printMaxWidth &&
1893
- chart.chartWidth > printMaxWidth;
1894
- if (handleMaxWidth) {
2266
+ if (printMaxWidth && chart.chartWidth > printMaxWidth) {
1895
2267
  printReverseInfo.resetParams = [
1896
2268
  chart.options.chart.width,
1897
2269
  void 0,
@@ -1907,131 +2279,45 @@ var Exporting;
1907
2279
  }
1908
2280
  });
1909
2281
  // Pull out the chart
1910
- chart.moveContainers(body);
2282
+ this.moveContainers(body);
1911
2283
  // Storage details for undo action after printing
1912
- chart.printReverseInfo = printReverseInfo;
2284
+ this.printReverseInfo = printReverseInfo;
1913
2285
  }
1914
2286
  /**
2287
+ * Display a popup menu for choosing the export type.
2288
+ *
1915
2289
  * @private
2290
+ * @function Highcharts.Exporting#contextMenu
2291
+ *
2292
+ * @param {string} className
2293
+ * An identifier for the menu.
2294
+ * @param {Array<(string | Highcharts.ExportingMenuObject)>} items
2295
+ * A collection with text and onclicks for the items.
2296
+ * @param {number} x
2297
+ * The x position of the opener button.
2298
+ * @param {number} y
2299
+ * The y position of the opener button.
2300
+ * @param {number} width
2301
+ * The width of the opener button.
2302
+ * @param {number} height
2303
+ * The height of the opener button.
2304
+ * @param {SVGElement} button
2305
+ * The SVG button element.
2306
+ *
2307
+ * @emits Highcharts.Chart#event:exportMenuHidden
2308
+ * @emits Highcharts.Chart#event:exportMenuShown
2309
+ *
2310
+ * @requires modules/exporting
1916
2311
  */
1917
- function chartCallback(chart) {
1918
- const composition = chart;
1919
- composition.renderExporting();
1920
- Exporting_addEvent(chart, 'redraw', composition.renderExporting);
1921
- // Destroy the export elements at chart destroy
1922
- Exporting_addEvent(chart, 'destroy', composition.destroyExport);
1923
- // Uncomment this to see a button directly below the chart, for quick
1924
- // testing of export
1925
- /*
1926
- let button, viewImage, viewSource;
1927
- if (!chart.renderer.forExport) {
1928
- viewImage = function () {
1929
- let div = doc.createElement('div');
1930
- div.innerHTML = chart.getSVGForExport();
1931
- chart.renderTo.parentNode.appendChild(div);
1932
- };
1933
-
1934
- viewSource = function () {
1935
- let pre = doc.createElement('pre');
1936
- pre.innerHTML = chart.getSVGForExport()
1937
- .replace(/</g, '\n&lt;')
1938
- .replace(/>/g, '&gt;');
1939
- chart.renderTo.parentNode.appendChild(pre);
1940
- };
1941
-
1942
- viewImage();
1943
-
1944
- // View SVG Image
1945
- button = doc.createElement('button');
1946
- button.innerHTML = 'View SVG Image';
1947
- chart.renderTo.parentNode.appendChild(button);
1948
- button.onclick = viewImage;
1949
-
1950
- // View SVG Source
1951
- button = doc.createElement('button');
1952
- button.innerHTML = 'View SVG Source';
1953
- chart.renderTo.parentNode.appendChild(button);
1954
- button.onclick = viewSource;
1955
- }
1956
- //*/
1957
- }
1958
- /**
1959
- * @private
1960
- */
1961
- function compose(ChartClass, SVGRendererClass) {
1962
- Exporting_ExportingSymbols.compose(SVGRendererClass);
1963
- Exporting_Fullscreen.compose(ChartClass);
1964
- const chartProto = ChartClass.prototype;
1965
- if (!chartProto.exportChart) {
1966
- chartProto.afterPrint = afterPrint;
1967
- chartProto.exportChart = exportChart;
1968
- chartProto.inlineStyles = inlineStyles;
1969
- chartProto.print = print;
1970
- chartProto.sanitizeSVG = sanitizeSVG;
1971
- chartProto.getChartHTML = getChartHTML;
1972
- chartProto.getSVG = getSVG;
1973
- chartProto.getSVGForExport = getSVGForExport;
1974
- chartProto.getFilename = getFilename;
1975
- chartProto.moveContainers = moveContainers;
1976
- chartProto.beforePrint = beforePrint;
1977
- chartProto.contextMenu = contextMenu;
1978
- chartProto.addButton = addButton;
1979
- chartProto.destroyExport = destroyExport;
1980
- chartProto.renderExporting = renderExporting;
1981
- chartProto.resolveCSSVariables = resolveCSSVariables;
1982
- chartProto.callbacks.push(chartCallback);
1983
- Exporting_addEvent(ChartClass, 'init', onChartInit);
1984
- Exporting_addEvent(ChartClass, 'layOutTitle', onChartLayOutTitle);
1985
- if ((external_highcharts_src_js_default_default()).isSafari) {
1986
- Exporting_win.matchMedia('print').addListener(function (mqlEvent) {
1987
- if (!printingChart) {
1988
- return void 0;
1989
- }
1990
- if (mqlEvent.matches) {
1991
- printingChart.beforePrint();
1992
- }
1993
- else {
1994
- printingChart.afterPrint();
1995
- }
1996
- });
1997
- }
1998
- defaultOptions.exporting = merge(Exporting_ExportingDefaults.exporting, defaultOptions.exporting);
1999
- defaultOptions.lang = merge(Exporting_ExportingDefaults.lang, defaultOptions.lang);
2000
- // Buttons and menus are collected in a separate config option set
2001
- // called 'navigation'. This can be extended later to add control
2002
- // buttons like zoom and pan right click menus.
2003
- defaultOptions.navigation = merge(Exporting_ExportingDefaults.navigation, defaultOptions.navigation);
2004
- }
2005
- }
2006
- Exporting.compose = compose;
2007
- /**
2008
- * Display a popup menu for choosing the export type.
2009
- *
2010
- * @private
2011
- * @function Highcharts.Chart#contextMenu
2012
- * @param {string} className
2013
- * An identifier for the menu.
2014
- * @param {Array<string|Highcharts.ExportingMenuObject>} items
2015
- * A collection with text and onclicks for the items.
2016
- * @param {number} x
2017
- * The x position of the opener button
2018
- * @param {number} y
2019
- * The y position of the opener button
2020
- * @param {number} width
2021
- * The width of the opener button
2022
- * @param {number} height
2023
- * The height of the opener button
2024
- * @requires modules/exporting
2025
- */
2026
- function contextMenu(className, items, x, y, width, height, button) {
2027
- const chart = this, navOptions = chart.options.navigation, chartWidth = chart.chartWidth, chartHeight = chart.chartHeight, cacheName = 'cache-' + className,
2312
+ contextMenu(className, items, x, y, width, height, button) {
2313
+ const exporting = this, chart = exporting.chart, navOptions = chart.options.navigation, chartWidth = chart.chartWidth, chartHeight = chart.chartHeight, cacheName = 'cache-' + className,
2028
2314
  // For mouse leave detection
2029
2315
  menuPadding = Math.max(width, height);
2030
2316
  let innerMenu, menu = chart[cacheName];
2031
2317
  // Create the menu only the first time
2032
2318
  if (!menu) {
2033
2319
  // Create a HTML element above the SVG
2034
- chart.exportContextMenu = chart[cacheName] = menu =
2320
+ exporting.contextMenuEl = chart[cacheName] = menu =
2035
2321
  createElement('div', {
2036
2322
  className: className
2037
2323
  }, {
@@ -2049,10 +2335,10 @@ var Exporting;
2049
2335
  // Presentational CSS
2050
2336
  if (!chart.styledMode) {
2051
2337
  css(innerMenu, extend({
2052
- MozBoxShadow: '3px 3px 10px #888',
2053
- WebkitBoxShadow: '3px 3px 10px #888',
2054
- boxShadow: '3px 3px 10px #888'
2055
- }, navOptions.menuStyle));
2338
+ MozBoxShadow: '3px 3px 10px #0008',
2339
+ WebkitBoxShadow: '3px 3px 10px #0008',
2340
+ boxShadow: '3px 3px 10px #0008'
2341
+ }, navOptions?.menuStyle || {}));
2056
2342
  }
2057
2343
  // Hide on mouse out
2058
2344
  menu.hideMenu = function () {
@@ -2060,35 +2346,38 @@ var Exporting;
2060
2346
  if (button) {
2061
2347
  button.setState(0);
2062
2348
  }
2063
- chart.openMenu = false;
2349
+ if (chart.exporting) {
2350
+ chart.exporting.openMenu = false;
2351
+ }
2064
2352
  // #10361, #9998
2065
2353
  css(chart.renderTo, { overflow: 'hidden' });
2066
2354
  css(chart.container, { overflow: 'hidden' });
2067
- external_highcharts_src_js_default_default().clearTimeout(menu.hideTimer);
2355
+ Exporting_clearTimeout(menu.hideTimer);
2068
2356
  Exporting_fireEvent(chart, 'exportMenuHidden');
2069
2357
  };
2070
2358
  // Hide the menu some time after mouse leave (#1357)
2071
- chart.exportEvents.push(Exporting_addEvent(menu, 'mouseleave', function () {
2359
+ exporting.events?.push(Exporting_addEvent(menu, 'mouseleave', function () {
2072
2360
  menu.hideTimer = Exporting_win.setTimeout(menu.hideMenu, 500);
2073
2361
  }), Exporting_addEvent(menu, 'mouseenter', function () {
2074
- external_highcharts_src_js_default_default().clearTimeout(menu.hideTimer);
2362
+ Exporting_clearTimeout(menu.hideTimer);
2075
2363
  }),
2076
2364
  // Hide it on clicking or touching outside the menu (#2258,
2077
2365
  // #2335, #2407)
2078
- Exporting_addEvent(doc, 'mouseup', function (e) {
2366
+ Exporting_addEvent(Exporting_doc, 'mouseup', function (e) {
2079
2367
  if (!chart.pointer?.inClass(e.target, className)) {
2080
2368
  menu.hideMenu();
2081
2369
  }
2082
2370
  }), Exporting_addEvent(menu, 'click', function () {
2083
- if (chart.openMenu) {
2371
+ if (chart.exporting?.openMenu) {
2084
2372
  menu.hideMenu();
2085
2373
  }
2086
2374
  }));
2087
2375
  // Create the items
2088
2376
  items.forEach(function (item) {
2089
2377
  if (typeof item === 'string') {
2090
- item = chart.options.exporting
2091
- .menuItemDefinitions[item];
2378
+ if (exporting.options.menuItemDefinitions?.[item]) {
2379
+ item = exporting.options.menuItemDefinitions[item];
2380
+ }
2092
2381
  }
2093
2382
  if (isObject(item, true)) {
2094
2383
  let element;
@@ -2099,7 +2388,7 @@ var Exporting;
2099
2388
  // When chart initialized with the table, wrong button
2100
2389
  // text displayed, #14352.
2101
2390
  if (item.textKey === 'viewData' &&
2102
- chart.isDataTableVisible) {
2391
+ exporting.isDataTableVisible) {
2103
2392
  item.textKey = 'hideData';
2104
2393
  }
2105
2394
  element = createElement('li', {
@@ -2110,44 +2399,45 @@ var Exporting;
2110
2399
  }
2111
2400
  menu.hideMenu();
2112
2401
  if (typeof item !== 'string' && item.onclick) {
2402
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
2113
2403
  item.onclick.apply(chart, arguments);
2114
2404
  }
2115
2405
  }
2116
2406
  }, void 0, innerMenu);
2117
- external_highcharts_src_js_default_AST_default().setElementHTML(element, item.text ||
2118
- chart.options.lang[item.textKey]);
2407
+ external_highcharts_src_js_default_AST_default().setElementHTML(element, item.text || chart.options.lang[item.textKey]);
2119
2408
  if (!chart.styledMode) {
2120
2409
  element.onmouseover = function () {
2121
- css(this, navOptions.menuItemHoverStyle);
2410
+ css(this, navOptions?.menuItemHoverStyle || {});
2122
2411
  };
2123
2412
  element.onmouseout = function () {
2124
- css(this, navOptions.menuItemStyle);
2413
+ css(this, navOptions?.menuItemStyle || {});
2125
2414
  };
2126
2415
  css(element, extend({
2127
2416
  cursor: 'pointer'
2128
- }, navOptions.menuItemStyle || {}));
2417
+ }, navOptions?.menuItemStyle || {}));
2129
2418
  }
2130
2419
  }
2131
2420
  // Keep references to menu divs to be able to destroy them
2132
- chart.exportDivElements.push(element);
2421
+ exporting.divElements.push(element);
2133
2422
  }
2134
2423
  });
2135
2424
  // Keep references to menu and innerMenu div to be able to destroy
2136
2425
  // them
2137
- chart.exportDivElements.push(innerMenu, menu);
2138
- chart.exportMenuWidth = menu.offsetWidth;
2139
- chart.exportMenuHeight = menu.offsetHeight;
2426
+ exporting.divElements.push(innerMenu, menu);
2427
+ exporting.menuHeight = menu.offsetHeight;
2428
+ exporting.menuWidth = menu.offsetWidth;
2140
2429
  }
2141
2430
  const menuStyle = { display: 'block' };
2142
2431
  // If outside right, right align it
2143
- if (x + (chart.exportMenuWidth || 0) > chartWidth) {
2432
+ if (x + (exporting.menuWidth || 0) > chartWidth) {
2144
2433
  menuStyle.right = (chartWidth - x - width - menuPadding) + 'px';
2145
2434
  }
2146
2435
  else {
2147
2436
  menuStyle.left = (x - menuPadding) + 'px';
2148
2437
  }
2149
2438
  // If outside bottom, bottom align it
2150
- if (y + height + (chart.exportMenuHeight || 0) > chartHeight &&
2439
+ if (y + height + (exporting.menuHeight || 0) >
2440
+ chartHeight &&
2151
2441
  button.alignOptions?.verticalAlign !== 'top') {
2152
2442
  menuStyle.bottom = (chartHeight - y - menuPadding) + 'px';
2153
2443
  }
@@ -2158,106 +2448,272 @@ var Exporting;
2158
2448
  // #10361, #9998
2159
2449
  css(chart.renderTo, { overflow: '' });
2160
2450
  css(chart.container, { overflow: '' });
2161
- chart.openMenu = true;
2451
+ if (chart.exporting) {
2452
+ chart.exporting.openMenu = true;
2453
+ }
2162
2454
  Exporting_fireEvent(chart, 'exportMenuShown');
2163
2455
  }
2164
2456
  /**
2165
2457
  * Destroy the export buttons.
2458
+ *
2166
2459
  * @private
2167
- * @function Highcharts.Chart#destroyExport
2460
+ * @function Highcharts.Exporting#destroy
2461
+ *
2168
2462
  * @param {global.Event} [e]
2463
+ * Event object.
2464
+ *
2169
2465
  * @requires modules/exporting
2170
2466
  */
2171
- function destroyExport(e) {
2172
- const chart = e ? e.target : this, exportSVGElements = chart.exportSVGElements, exportDivElements = chart.exportDivElements, exportEvents = chart.exportEvents;
2467
+ destroy(e) {
2468
+ const exporting = this, chart = e ? e.target : exporting.chart, { divElements, events, svgElements } = exporting;
2173
2469
  let cacheName;
2174
2470
  // Destroy the extra buttons added
2175
- if (exportSVGElements) {
2176
- exportSVGElements.forEach((elem, i) => {
2177
- // Destroy and null the svg elements
2178
- if (elem) { // #1822
2179
- elem.onclick = elem.ontouchstart = null;
2180
- cacheName = 'cache-' + elem.menuClassName;
2181
- if (chart[cacheName]) {
2182
- delete chart[cacheName];
2183
- }
2184
- exportSVGElements[i] = elem.destroy();
2471
+ svgElements.forEach((elem, i) => {
2472
+ // Destroy and null the svg elements
2473
+ if (elem) { // #1822
2474
+ elem.onclick = elem.ontouchstart = null;
2475
+ cacheName = 'cache-' + elem.menuClassName;
2476
+ if (chart[cacheName]) {
2477
+ delete chart[cacheName];
2185
2478
  }
2186
- });
2187
- exportSVGElements.length = 0;
2188
- }
2479
+ svgElements[i] = elem.destroy();
2480
+ }
2481
+ });
2482
+ svgElements.length = 0;
2189
2483
  // Destroy the exporting group
2190
- if (chart.exportingGroup) {
2191
- chart.exportingGroup.destroy();
2192
- delete chart.exportingGroup;
2484
+ if (exporting.group) {
2485
+ exporting.group.destroy();
2486
+ delete exporting.group;
2193
2487
  }
2194
2488
  // Destroy the divs for the menu
2195
- if (exportDivElements) {
2196
- exportDivElements.forEach(function (elem, i) {
2197
- if (elem) {
2198
- // Remove the event handler
2199
- external_highcharts_src_js_default_default().clearTimeout(elem.hideTimer); // #5427
2200
- removeEvent(elem, 'mouseleave');
2201
- // Remove inline events
2202
- // (chart.exportDivElements as any)[i] =
2203
- exportDivElements[i] =
2204
- elem.onmouseout =
2205
- elem.onmouseover =
2206
- elem.ontouchstart =
2207
- elem.onclick = null;
2208
- // Destroy the div by moving to garbage bin
2209
- Exporting_discardElement(elem);
2210
- }
2211
- });
2212
- exportDivElements.length = 0;
2213
- }
2214
- if (exportEvents) {
2215
- exportEvents.forEach(function (unbind) {
2489
+ divElements.forEach(function (elem, i) {
2490
+ if (elem) {
2491
+ // Remove the event handler
2492
+ Exporting_clearTimeout(elem.hideTimer); // #5427
2493
+ removeEvent(elem, 'mouseleave');
2494
+ // Remove inline events
2495
+ divElements[i] =
2496
+ elem.onmouseout =
2497
+ elem.onmouseover =
2498
+ elem.ontouchstart =
2499
+ elem.onclick = null;
2500
+ // Destroy the div by moving to garbage bin
2501
+ Exporting_discardElement(elem);
2502
+ }
2503
+ });
2504
+ divElements.length = 0;
2505
+ if (events) {
2506
+ events.forEach(function (unbind) {
2216
2507
  unbind();
2217
2508
  });
2218
- exportEvents.length = 0;
2509
+ events.length = 0;
2510
+ }
2511
+ }
2512
+ /**
2513
+ * Get data URL to an image of an SVG and call download on its options
2514
+ * object:
2515
+ *
2516
+ * - **filename:** Name of resulting downloaded file without extension.
2517
+ * Default is based on the chart title.
2518
+ * - **type:** File type of resulting download. Default is `image/png`.
2519
+ * - **scale:** Scaling factor of downloaded image compared to source.
2520
+ * Default is `2`.
2521
+ * - **libURL:** URL pointing to location of dependency scripts to download
2522
+ * on demand. Default is the exporting.libURL option of the global
2523
+ * Highcharts options pointing to our server.
2524
+ *
2525
+ * @async
2526
+ * @private
2527
+ * @function Highcharts.Exporting#downloadSVG
2528
+ *
2529
+ * @param {string} svg
2530
+ * The generated SVG.
2531
+ * @param {Highcharts.ExportingOptions} exportingOptions
2532
+ * The exporting options.
2533
+ *
2534
+ * @requires modules/exporting
2535
+ */
2536
+ // eslint-disable-next-line @typescript-eslint/require-await
2537
+ async downloadSVG(svg, exportingOptions) {
2538
+ const eventArgs = {
2539
+ svg,
2540
+ exportingOptions,
2541
+ exporting: this
2542
+ };
2543
+ // Fire a custom event before the export starts
2544
+ Exporting_fireEvent(Exporting.prototype, 'downloadSVG', eventArgs);
2545
+ // If the event was prevented, do not proceed with the export
2546
+ if (eventArgs.defaultPrevented) {
2547
+ return;
2548
+ }
2549
+ // Get the final image options
2550
+ const { type, filename, scale, libURL } = Exporting.prepareImageOptions(exportingOptions);
2551
+ let svgURL;
2552
+ // Initiate download depending on file type
2553
+ if (type === 'application/pdf') {
2554
+ // Error in case of offline-exporting module is not loaded
2555
+ throw new Error('Offline exporting logic for PDF type is not found.');
2556
+ }
2557
+ else if (type === 'image/svg+xml') {
2558
+ // SVG download. In this case, we want to use Microsoft specific
2559
+ // Blob if available
2560
+ if (typeof Exporting_win.MSBlobBuilder !== 'undefined') {
2561
+ const blob = new Exporting_win.MSBlobBuilder();
2562
+ blob.append(svg);
2563
+ svgURL = blob.getBlob('image/svg+xml');
2564
+ }
2565
+ else {
2566
+ svgURL = Exporting.svgToDataURL(svg);
2567
+ }
2568
+ // Download the chart
2569
+ Exporting_downloadURL(svgURL, filename);
2570
+ }
2571
+ else {
2572
+ // PNG/JPEG download - create bitmap from SVG
2573
+ svgURL = Exporting.svgToDataURL(svg);
2574
+ try {
2575
+ Exporting.objectURLRevoke = true;
2576
+ // First, try to get PNG by rendering on canvas
2577
+ const dataURL = await Exporting.imageToDataURL(svgURL, scale, type);
2578
+ Exporting_downloadURL(dataURL, filename);
2579
+ }
2580
+ catch (error) {
2581
+ // No need for the below logic to run in case no canvas is
2582
+ // found
2583
+ if (error.message === 'No canvas found!') {
2584
+ throw error;
2585
+ }
2586
+ // Or in case of exceeding the input length
2587
+ if (svg.length > 100000000 /* RegexLimits.svgLimit */) {
2588
+ throw new Error('Input too long');
2589
+ }
2590
+ // Failed due to tainted canvas
2591
+ // Create new and untainted canvas
2592
+ const canvas = Exporting_doc.createElement('canvas'), ctx = canvas.getContext('2d'), matchedImageWidth = svg.match(
2593
+ // eslint-disable-next-line max-len
2594
+ /^<svg[^>]*\s{,1000}width\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/), matchedImageHeight = svg.match(
2595
+ // eslint-disable-next-line max-len
2596
+ /^<svg[^>]*\s{0,1000}height\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/);
2597
+ if (ctx &&
2598
+ matchedImageWidth &&
2599
+ matchedImageHeight) {
2600
+ const imageWidth = +matchedImageWidth[1] * scale, imageHeight = +matchedImageHeight[1] * scale, downloadWithCanVG = () => {
2601
+ const v = Exporting_win.canvg.Canvg.fromString(ctx, svg);
2602
+ v.start();
2603
+ Exporting_downloadURL(Exporting_win.navigator.msSaveOrOpenBlob ?
2604
+ canvas.msToBlob() :
2605
+ canvas.toDataURL(type), filename);
2606
+ };
2607
+ canvas.width = imageWidth;
2608
+ canvas.height = imageHeight;
2609
+ // Must load canVG first if not found. Don't destroy the
2610
+ // object URL yet since we are doing things
2611
+ // asynchronously
2612
+ if (!Exporting_win.canvg) {
2613
+ Exporting.objectURLRevoke = true;
2614
+ await Exporting_getScript(libURL + 'canvg.js');
2615
+ }
2616
+ // Use loaded canvg
2617
+ downloadWithCanVG();
2618
+ }
2619
+ }
2620
+ finally {
2621
+ if (Exporting.objectURLRevoke) {
2622
+ try {
2623
+ Exporting_domurl.revokeObjectURL(svgURL);
2624
+ }
2625
+ catch {
2626
+ // Ignore
2627
+ }
2628
+ }
2629
+ }
2219
2630
  }
2220
2631
  }
2221
2632
  /**
2222
- * Exporting module required. Submit an SVG version of the chart to a server
2223
- * along with some parameters for conversion.
2633
+ * Submit an SVG version of the chart along with some parameters for local
2634
+ * conversion (PNG, JPEG, and SVG) or conversion on a server (PDF).
2224
2635
  *
2225
2636
  * @sample highcharts/members/chart-exportchart/
2226
- * Export with no options
2637
+ * Export with no options
2227
2638
  * @sample highcharts/members/chart-exportchart-filename/
2228
- * PDF type and custom filename
2639
+ * PDF type and custom filename
2640
+ * @sample highcharts/exporting/menuitemdefinitions-webp/
2641
+ * Export to WebP
2229
2642
  * @sample highcharts/members/chart-exportchart-custom-background/
2230
- * Different chart background in export
2643
+ * Different chart background in export
2231
2644
  * @sample stock/members/chart-exportchart/
2232
- * Export with Highcharts Stock
2645
+ * Export with Highcharts Stock
2646
+ *
2647
+ * @async
2648
+ * @function Highcharts.Exporting#exportChart
2649
+ *
2650
+ * @param {Highcharts.ExportingOptions} [exportingOptions]
2651
+ * Exporting options in addition to those defined in
2652
+ * [exporting](https://api.highcharts.com/highcharts/exporting).
2653
+ * @param {Highcharts.Options} [chartOptions]
2654
+ * Additional chart options for the exported chart. For example a different
2655
+ * background color can be added here, or `dataLabels` for export only.
2656
+ *
2657
+ * @requires modules/exporting
2658
+ */
2659
+ async exportChart(exportingOptions, chartOptions) {
2660
+ // Merge the options
2661
+ exportingOptions = merge(this.options, exportingOptions);
2662
+ // If local if expected
2663
+ if (exportingOptions.local) {
2664
+ // Trigger the local export logic
2665
+ await this.localExport(exportingOptions, chartOptions || {});
2666
+ }
2667
+ else {
2668
+ // Get the SVG representation
2669
+ const svg = this.getSVGForExport(exportingOptions, chartOptions);
2670
+ // Do the post
2671
+ if (exportingOptions.url) {
2672
+ await Core_HttpUtilities.post(exportingOptions.url, {
2673
+ filename: exportingOptions.filename ?
2674
+ exportingOptions.filename.replace(/\//g, '-') :
2675
+ this.getFilename(),
2676
+ type: exportingOptions.type,
2677
+ width: exportingOptions.width,
2678
+ scale: exportingOptions.scale,
2679
+ svg
2680
+ }, exportingOptions.fetchOptions);
2681
+ }
2682
+ }
2683
+ }
2684
+ /**
2685
+ * Handles the fallback to the export server when a local export fails.
2233
2686
  *
2234
- * @function Highcharts.Chart#exportChart
2687
+ * @private
2688
+ * @async
2689
+ * @function Highcharts.Exporting#fallbackToServer
2235
2690
  *
2236
2691
  * @param {Highcharts.ExportingOptions} exportingOptions
2237
- * Exporting options in addition to those defined in
2238
- * [exporting](https://api.highcharts.com/highcharts/exporting).
2692
+ * The exporting options.
2693
+ * @param {Error} err
2694
+ * The error that caused the local export to fail.
2239
2695
  *
2240
- * @param {Highcharts.Options} chartOptions
2241
- * Additional chart options for the exported chart. For example a
2242
- * different background color can be added here, or `dataLabels` for
2243
- * export only.
2696
+ * @return {Promise<void>}
2697
+ * A promise that resolves when the fallback process is complete.
2244
2698
  *
2245
2699
  * @requires modules/exporting
2246
2700
  */
2247
- function exportChart(exportingOptions, chartOptions) {
2248
- const svg = this.getSVGForExport(exportingOptions, chartOptions);
2249
- // Merge the options
2250
- exportingOptions = merge(this.options.exporting, exportingOptions);
2251
- // Do the post
2252
- Core_HttpUtilities.post(exportingOptions.url, {
2253
- filename: exportingOptions.filename ?
2254
- exportingOptions.filename.replace(/\//g, '-') :
2255
- this.getFilename(),
2256
- type: exportingOptions.type,
2257
- width: exportingOptions.width,
2258
- scale: exportingOptions.scale,
2259
- svg: svg
2260
- }, exportingOptions.fetchOptions);
2701
+ async fallbackToServer(exportingOptions, err) {
2702
+ if (exportingOptions.fallbackToExportServer === false) {
2703
+ if (exportingOptions.error) {
2704
+ exportingOptions.error(exportingOptions, err);
2705
+ }
2706
+ else {
2707
+ // Fallback disabled
2708
+ Exporting_error(28, true);
2709
+ }
2710
+ }
2711
+ else if (exportingOptions.type === 'application/pdf') {
2712
+ // The local must be false to fallback to server for PDF export
2713
+ exportingOptions.local = false;
2714
+ // Allow fallbacking to server only for PDFs that failed locally
2715
+ await this.exportChart(exportingOptions);
2716
+ }
2261
2717
  }
2262
2718
  /**
2263
2719
  * Return the unfiltered innerHTML of the chart container. Used as hook for
@@ -2265,38 +2721,43 @@ var Exporting;
2265
2721
  *
2266
2722
  * @see Chart#getSVG
2267
2723
  *
2268
- * @function Highcharts.Chart#getChartHTML
2724
+ * @function Highcharts.Exporting#getChartHTML
2725
+ *
2726
+ * @param {boolean} [applyStyleSheets]
2727
+ * whether or not to apply the style sheets.
2269
2728
  *
2270
2729
  * @return {string}
2271
2730
  * The unfiltered SVG of the chart.
2272
2731
  *
2273
2732
  * @requires modules/exporting
2274
2733
  */
2275
- function getChartHTML(applyStyleSheets) {
2734
+ getChartHTML(applyStyleSheets) {
2735
+ const chart = this.chart;
2276
2736
  if (applyStyleSheets) {
2277
2737
  this.inlineStyles();
2278
2738
  }
2279
2739
  this.resolveCSSVariables();
2280
- return this.container.innerHTML;
2740
+ return chart.container.innerHTML;
2281
2741
  }
2282
2742
  /**
2283
2743
  * Get the default file name used for exported charts. By default it creates
2284
2744
  * a file name based on the chart title.
2285
2745
  *
2286
- * @function Highcharts.Chart#getFilename
2746
+ * @function Highcharts.Exporting#getFilename
2287
2747
  *
2288
- * @return {string} A file name without extension.
2748
+ * @return {string}
2749
+ * A file name without extension.
2289
2750
  *
2290
2751
  * @requires modules/exporting
2291
2752
  */
2292
- function getFilename() {
2293
- const s = this.userOptions.title && this.userOptions.title.text;
2294
- let filename = this.options.exporting.filename;
2753
+ getFilename() {
2754
+ const titleText = this.chart.userOptions.title?.text;
2755
+ let filename = this.options.filename;
2295
2756
  if (filename) {
2296
2757
  return filename.replace(/\//g, '-');
2297
2758
  }
2298
- if (typeof s === 'string') {
2299
- filename = s
2759
+ if (typeof titleText === 'string') {
2760
+ filename = titleText
2300
2761
  .toLowerCase()
2301
2762
  .replace(/<\/?[^>]+(>|$)/g, '') // Strip HTML tags
2302
2763
  .replace(/[\s_]+/g, '-')
@@ -2315,45 +2776,45 @@ var Exporting;
2315
2776
  * Return an SVG representation of the chart.
2316
2777
  *
2317
2778
  * @sample highcharts/members/chart-getsvg/
2318
- * View the SVG from a button
2779
+ * View the SVG from a button
2319
2780
  *
2320
- * @function Highcharts.Chart#getSVG
2781
+ * @function Highcharts.Exporting#getSVG
2321
2782
  *
2322
2783
  * @param {Highcharts.Options} [chartOptions]
2323
- * Additional chart options for the generated SVG representation. For
2324
- * collections like `xAxis`, `yAxis` or `series`, the additional
2325
- * options is either merged in to the original item of the same
2326
- * `id`, or to the first item if a common id is not found.
2784
+ * Additional chart options for the generated SVG representation. For
2785
+ * collections like `xAxis`, `yAxis` or `series`, the additional options is
2786
+ * either merged in to the original item of the same `id`, or to the first
2787
+ * item if a common id is not found.
2327
2788
  *
2328
2789
  * @return {string}
2329
- * The SVG representation of the rendered chart.
2790
+ * The SVG representation of the rendered chart.
2330
2791
  *
2331
2792
  * @emits Highcharts.Chart#event:getSVG
2332
2793
  *
2333
2794
  * @requires modules/exporting
2334
2795
  */
2335
- function getSVG(chartOptions) {
2336
- const chart = this;
2796
+ getSVG(chartOptions) {
2797
+ const chart = this.chart;
2337
2798
  let svg, seriesOptions,
2338
2799
  // Copy the options and add extra options
2339
2800
  options = merge(chart.options, chartOptions);
2340
2801
  // Use userOptions to make the options chain in series right (#3881)
2341
- options.plotOptions = merge(chart.userOptions.plotOptions, chartOptions && chartOptions.plotOptions);
2802
+ options.plotOptions = merge(chart.userOptions.plotOptions, chartOptions?.plotOptions);
2342
2803
  // ... and likewise with time, avoid that undefined time properties are
2343
2804
  // merged over legacy global time options
2344
- options.time = merge(chart.userOptions.time, chartOptions && chartOptions.time);
2805
+ options.time = merge(chart.userOptions.time, chartOptions?.time);
2345
2806
  // Create a sandbox where a new chart will be generated
2346
- const sandbox = createElement('div', null, {
2807
+ const sandbox = createElement('div', void 0, {
2347
2808
  position: 'absolute',
2348
2809
  top: '-9999em',
2349
2810
  width: chart.chartWidth + 'px',
2350
2811
  height: chart.chartHeight + 'px'
2351
- }, doc.body);
2812
+ }, Exporting_doc.body);
2352
2813
  // Get the source size
2353
- const cssWidth = chart.renderTo.style.width, cssHeight = chart.renderTo.style.height, sourceWidth = options.exporting.sourceWidth ||
2814
+ const cssWidth = chart.renderTo.style.width, cssHeight = chart.renderTo.style.height, sourceWidth = options.exporting?.sourceWidth ||
2354
2815
  options.chart.width ||
2355
2816
  (/px$/.test(cssWidth) && parseInt(cssWidth, 10)) ||
2356
- (options.isGantt ? 800 : 600), sourceHeight = options.exporting.sourceHeight ||
2817
+ (options.isGantt ? 800 : 600), sourceHeight = options.exporting?.sourceHeight ||
2357
2818
  options.chart.height ||
2358
2819
  (/px$/.test(cssHeight) && parseInt(cssHeight, 10)) ||
2359
2820
  400;
@@ -2366,9 +2827,11 @@ var Exporting;
2366
2827
  width: sourceWidth,
2367
2828
  height: sourceHeight
2368
2829
  });
2369
- options.exporting.enabled = false; // Hide buttons in print
2830
+ if (options.exporting) {
2831
+ options.exporting.enabled = false; // Hide buttons in print
2832
+ }
2370
2833
  delete options.data; // #3004
2371
- // prepare for replicating the chart
2834
+ // Prepare for replicating the chart
2372
2835
  options.series = [];
2373
2836
  chart.series.forEach(function (serie) {
2374
2837
  seriesOptions = merge(serie.userOptions, {
@@ -2379,7 +2842,7 @@ var Exporting;
2379
2842
  });
2380
2843
  // Used for the navigator series that has its own option set
2381
2844
  if (!seriesOptions.isInternal) {
2382
- options.series.push(seriesOptions);
2845
+ options?.series?.push(seriesOptions);
2383
2846
  }
2384
2847
  });
2385
2848
  const colls = {};
@@ -2388,7 +2851,7 @@ var Exporting;
2388
2851
  if (!axis.userOptions.internalKey) { // #6444
2389
2852
  axis.userOptions.internalKey = uniqueKey();
2390
2853
  }
2391
- if (!axis.options.isInternal) {
2854
+ if (options && !axis.options.isInternal) {
2392
2855
  if (!colls[axis.coll]) {
2393
2856
  colls[axis.coll] = true;
2394
2857
  options[axis.coll] = [];
@@ -2411,10 +2874,10 @@ var Exporting;
2411
2874
  // Axis options and series options (#2022, #3900, #5982)
2412
2875
  if (chartOptions) {
2413
2876
  ['xAxis', 'yAxis', 'series'].forEach(function (coll) {
2414
- const collOptions = {};
2415
2877
  if (chartOptions[coll]) {
2416
- collOptions[coll] = chartOptions[coll];
2417
- chartCopy.update(collOptions);
2878
+ chartCopy.update({
2879
+ [coll]: chartOptions[coll]
2880
+ });
2418
2881
  }
2419
2882
  });
2420
2883
  }
@@ -2440,92 +2903,96 @@ var Exporting;
2440
2903
  }
2441
2904
  });
2442
2905
  // Get the SVG from the container's innerHTML
2443
- svg = chartCopy.getChartHTML(chart.styledMode ||
2444
- options.exporting?.applyStyleSheets);
2445
- Exporting_fireEvent(this, 'getSVG', { chartCopy: chartCopy });
2446
- svg = chart.sanitizeSVG(svg, options);
2906
+ svg = chartCopy.exporting?.getChartHTML(chart.styledMode ||
2907
+ options.exporting?.applyStyleSheets) || '';
2908
+ Exporting_fireEvent(chart, 'getSVG', { chartCopy: chartCopy });
2909
+ svg = Exporting.sanitizeSVG(svg, options);
2447
2910
  // Free up memory
2448
- options = null;
2911
+ options = void 0;
2449
2912
  chartCopy.destroy();
2450
2913
  Exporting_discardElement(sandbox);
2451
2914
  return svg;
2452
2915
  }
2453
2916
  /**
2917
+ * Gets the SVG for export using the getSVG function with additional
2918
+ * options.
2919
+ *
2454
2920
  * @private
2455
- * @function Highcharts.Chart#getSVGForExport
2921
+ * @function Highcharts.Exporting#getSVGForExport
2922
+ *
2923
+ * @param {Highcharts.ExportingOptions} [exportingOptions]
2924
+ * The exporting options.
2925
+ * @param {Highcharts.Options} [chartOptions]
2926
+ * Additional chart options for the exported chart.
2927
+ *
2928
+ * @return {string}
2929
+ * The SVG representation of the rendered chart.
2930
+ *
2931
+ * @requires modules/exporting
2456
2932
  */
2457
- function getSVGForExport(options, chartOptions) {
2458
- const chartExportingOptions = this.options.exporting;
2459
- return this.getSVG(merge({ chart: { borderRadius: 0 } }, chartExportingOptions.chartOptions, chartOptions, {
2933
+ getSVGForExport(exportingOptions, chartOptions) {
2934
+ const currentExportingOptions = this.options;
2935
+ return this.getSVG(merge({ chart: { borderRadius: 0 } }, currentExportingOptions.chartOptions, chartOptions, {
2460
2936
  exporting: {
2461
- sourceWidth: ((options && options.sourceWidth) ||
2462
- chartExportingOptions.sourceWidth),
2463
- sourceHeight: ((options && options.sourceHeight) ||
2464
- chartExportingOptions.sourceHeight)
2937
+ sourceWidth: (exportingOptions?.sourceWidth ||
2938
+ currentExportingOptions.sourceWidth),
2939
+ sourceHeight: (exportingOptions?.sourceHeight ||
2940
+ currentExportingOptions.sourceHeight)
2465
2941
  }
2466
2942
  }));
2467
2943
  }
2468
2944
  /**
2469
- * Make hyphenated property names out of camelCase
2470
- * @private
2471
- * @param {string} prop
2472
- * Property name in camelCase
2473
- * @return {string}
2474
- * Hyphenated property name
2475
- */
2476
- function hyphenate(prop) {
2477
- return prop.replace(/[A-Z]/g, function (match) {
2478
- return '-' + match.toLowerCase();
2479
- });
2480
- }
2481
- /**
2482
- * Analyze inherited styles from stylesheets and add them inline
2945
+ * Analyze inherited styles from stylesheets and add them inline.
2483
2946
  *
2484
2947
  * @private
2485
- * @function Highcharts.Chart#inlineStyles
2948
+ * @function Highcharts.Exporting#inlineStyles
2486
2949
  *
2487
2950
  * @todo What are the border styles for text about? In general, text has a
2488
- * lot of properties.
2951
+ * lot of properties.
2489
2952
  *
2490
2953
  * @todo Make it work with IE9 and IE10.
2491
2954
  *
2492
2955
  * @requires modules/exporting
2493
2956
  */
2494
- function inlineStyles() {
2495
- const denylist = inlineDenylist, allowlist = Exporting.inlineAllowlist, // For IE
2957
+ inlineStyles() {
2958
+ const denylist = Exporting.inlineDenylist, allowlist = Exporting.inlineAllowlist, // For IE
2496
2959
  defaultStyles = {};
2497
2960
  let dummySVG;
2498
2961
  // Create an iframe where we read default styles without pollution from
2499
2962
  // this body
2500
- const iframe = doc.createElement('iframe');
2501
- css(iframe, {
2963
+ const iframe = createElement('iframe', void 0, {
2502
2964
  width: '1px',
2503
2965
  height: '1px',
2504
2966
  visibility: 'hidden'
2505
- });
2506
- doc.body.appendChild(iframe);
2507
- const iframeDoc = (iframe.contentWindow && iframe.contentWindow.document);
2967
+ }, Exporting_doc.body);
2968
+ const iframeDoc = iframe.contentWindow?.document;
2508
2969
  if (iframeDoc) {
2509
2970
  iframeDoc.body.appendChild(iframeDoc.createElementNS(SVG_NS, 'svg'));
2510
2971
  }
2511
2972
  /**
2512
- * Call this on all elements and recurse to children
2973
+ * Call this on all elements and recurse to children.
2974
+ *
2513
2975
  * @private
2514
- * @param {Highcharts.HTMLDOMElement} node
2515
- * Element child
2516
- */
2976
+ * @function recurse
2977
+ *
2978
+ * @param {Highcharts.HTMLDOMElement | Highcharts.SVGSVGElement} node
2979
+ * Element child.
2980
+ */
2517
2981
  function recurse(node) {
2518
2982
  const filteredStyles = {};
2519
2983
  let styles, parentStyles, dummy, denylisted, allowlisted, i;
2520
2984
  /**
2521
2985
  * Check computed styles and whether they are in the allow/denylist
2522
2986
  * for styles or attributes.
2987
+ *
2523
2988
  * @private
2524
- * @param {string} val
2525
- * Style value
2989
+ * @function filterStyles
2990
+ *
2991
+ * @param {string | number | Highcharts.GradientColor | Highcharts.PatternObject | undefined} val
2992
+ * Style value.
2526
2993
  * @param {string} prop
2527
- * Style property name
2528
- */
2994
+ * Style property name.
2995
+ */
2529
2996
  function filterStyles(val, prop) {
2530
2997
  // Check against allowlist & denylist
2531
2998
  denylisted = allowlisted = false;
@@ -2556,12 +3023,12 @@ var Exporting;
2556
3023
  // against parent (#7687).
2557
3024
  if ((parentStyles[prop] !== val ||
2558
3025
  node.nodeName === 'svg') &&
2559
- defaultStyles[node.nodeName][prop] !== val) {
3026
+ (defaultStyles[node.nodeName])[prop] !== val) {
2560
3027
  // Attributes
2561
- if (!inlineToAttributes ||
2562
- inlineToAttributes.indexOf(prop) !== -1) {
3028
+ if (!Exporting.inlineToAttributes ||
3029
+ Exporting.inlineToAttributes.indexOf(prop) !== -1) {
2563
3030
  if (val) {
2564
- node.setAttribute(hyphenate(prop), val);
3031
+ node.setAttribute(Exporting.hyphenate(prop), val);
2565
3032
  }
2566
3033
  // Styles
2567
3034
  }
@@ -2573,8 +3040,9 @@ var Exporting;
2573
3040
  }
2574
3041
  if (iframeDoc &&
2575
3042
  node.nodeType === 1 &&
2576
- unstyledElements.indexOf(node.nodeName) === -1) {
2577
- styles = Exporting_win.getComputedStyle(node, null);
3043
+ Exporting.unstyledElements.indexOf(node.nodeName) === -1) {
3044
+ styles =
3045
+ Exporting_win.getComputedStyle(node, null);
2578
3046
  parentStyles = node.nodeName === 'svg' ?
2579
3047
  {} :
2580
3048
  Exporting_win.getComputedStyle(node.parentNode, null);
@@ -2588,7 +3056,8 @@ var Exporting;
2588
3056
  doc.body.appendChild(dummySVG);
2589
3057
  }
2590
3058
  */
2591
- dummySVG = iframeDoc.getElementsByTagName('svg')[0];
3059
+ dummySVG =
3060
+ iframeDoc.getElementsByTagName('svg')[0];
2592
3061
  dummy = iframeDoc.createElementNS(node.namespaceURI, node.nodeName);
2593
3062
  dummySVG.appendChild(dummy);
2594
3063
  // Get the defaults into a standard object (simple merge
@@ -2613,9 +3082,9 @@ var Exporting;
2613
3082
  for (const p in styles) {
2614
3083
  if (
2615
3084
  // Some browsers put lots of styles on the prototype...
2616
- (external_highcharts_src_js_default_default()).isFirefox ||
2617
- (external_highcharts_src_js_default_default()).isMS ||
2618
- (external_highcharts_src_js_default_default()).isSafari || // #16902
3085
+ isFirefox ||
3086
+ isMS ||
3087
+ Exporting_isSafari || // #16902
2619
3088
  // ... Chrome puts them on the instance
2620
3089
  Object.hasOwnProperty.call(styles, p)) {
2621
3090
  filterStyles(styles[p], p);
@@ -2635,43 +3104,140 @@ var Exporting;
2635
3104
  }
2636
3105
  }
2637
3106
  /**
2638
- * Remove the dummy objects used to get defaults
3107
+ * Remove the dummy objects used to get defaults.
3108
+ *
2639
3109
  * @private
3110
+ * @function tearDown
2640
3111
  */
2641
3112
  function tearDown() {
2642
3113
  dummySVG.parentNode.removeChild(dummySVG);
2643
3114
  // Remove trash from DOM that stayed after each exporting
2644
3115
  iframe.parentNode.removeChild(iframe);
2645
3116
  }
2646
- recurse(this.container.querySelector('svg'));
3117
+ recurse(this.chart.container.querySelector('svg'));
2647
3118
  tearDown();
2648
3119
  }
2649
3120
  /**
2650
- * Resolve CSS variables into hex colors
3121
+ * Get SVG of chart prepared for client side export. This converts embedded
3122
+ * images in the SVG to data URIs. It requires the regular exporting module.
3123
+ * The options and chartOptions arguments are passed to the getSVGForExport
3124
+ * function.
3125
+ *
3126
+ * @private
3127
+ * @async
3128
+ * @function Highcharts.Exporting#localExport
3129
+ *
3130
+ * @param {Highcharts.ExportingOptions} exportingOptions
3131
+ * The exporting options.
3132
+ * @param {Highcharts.Options} chartOptions
3133
+ * Additional chart options for the exported chart.
3134
+ *
3135
+ * @return {Promise<string>}
3136
+ * The sanitized SVG.
3137
+ *
3138
+ * @requires modules/exporting
2651
3139
  */
2652
- function resolveCSSVariables() {
2653
- const svgElements = this.container.querySelectorAll('*'), colorAttributes = ['color', 'fill', 'stop-color', 'stroke'];
2654
- Array.from(svgElements).forEach((element) => {
2655
- colorAttributes.forEach((attr) => {
2656
- const attrValue = element.getAttribute(attr);
2657
- if (attrValue?.includes('var(')) {
2658
- element.setAttribute(attr, getComputedStyle(element).getPropertyValue(attr));
2659
- }
3140
+ async localExport(exportingOptions, chartOptions) {
3141
+ const chart = this.chart, exporting = this,
3142
+ // After grabbing the SVG of the chart's copy container we need
3143
+ // to do sanitation on the SVG
3144
+ sanitize = (svg) => Exporting.sanitizeSVG(svg || '', chartCopyOptions),
3145
+ // Return true if the SVG contains images with external data.
3146
+ // With the boost module there are `image` elements with encoded
3147
+ // PNGs, these are supported by svg2pdf and should pass (#10243)
3148
+ hasExternalImages = function () {
3149
+ return [].some.call(chart.container.getElementsByTagName('image'), function (image) {
3150
+ const href = image.getAttribute('href');
3151
+ return (href !== '' &&
3152
+ typeof href === 'string' &&
3153
+ href.indexOf('data:') !== 0);
2660
3154
  });
3155
+ };
3156
+ let chartCopyContainer, chartCopyOptions, href = null, images;
3157
+ // If we are on IE and in styled mode, add an allowlist to the
3158
+ // renderer for inline styles that we want to pass through. There
3159
+ // are so many styles by default in IE that we don't want to
3160
+ // denylist them all
3161
+ if (isMS && chart.styledMode && !Exporting.inlineAllowlist.length) {
3162
+ Exporting.inlineAllowlist.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$/);
3163
+ }
3164
+ // Always fall back on:
3165
+ // - MS browsers: Embedded images JPEG/PNG, or any PDF
3166
+ // - Embedded images and PDF
3167
+ if ((isMS &&
3168
+ (exportingOptions.type === 'application/pdf' ||
3169
+ chart.container.getElementsByTagName('image').length &&
3170
+ exportingOptions.type !== 'image/svg+xml')) || (exportingOptions.type === 'application/pdf' &&
3171
+ hasExternalImages())) {
3172
+ await this.fallbackToServer(exportingOptions, new Error('Image type not supported for this chart/browser.'));
3173
+ return;
3174
+ }
3175
+ // Hook into getSVG to get a copy of the chart copy's container (#8273)
3176
+ const unbindGetSVG = Exporting_addEvent(chart, 'getSVG', (e) => {
3177
+ chartCopyOptions = e.chartCopy.options;
3178
+ chartCopyContainer =
3179
+ e.chartCopy.container.cloneNode(true);
3180
+ images = chartCopyContainer && chartCopyContainer
3181
+ .getElementsByTagName('image') || [];
2661
3182
  });
3183
+ try {
3184
+ // Trigger hook to get chart copy
3185
+ this.getSVGForExport(exportingOptions, chartOptions);
3186
+ // Get the static array
3187
+ const imagesArray = images ? Array.from(images) : [];
3188
+ // Go through the images we want to embed
3189
+ for (const image of imagesArray) {
3190
+ href = image.getAttributeNS('http://www.w3.org/1999/xlink', 'href');
3191
+ if (href) {
3192
+ Exporting.objectURLRevoke = false;
3193
+ const dataURL = await Exporting.imageToDataURL(href, exportingOptions?.scale || 1, exportingOptions?.type || 'image/png');
3194
+ // Change image href in chart copy
3195
+ image.setAttributeNS('http://www.w3.org/1999/xlink', 'href', dataURL);
3196
+ // Hidden, boosted series have blank href (#10243)
3197
+ }
3198
+ else {
3199
+ image.parentNode.removeChild(image);
3200
+ }
3201
+ }
3202
+ // Sanitize the SVG
3203
+ const sanitizedSVG = sanitize(chartCopyContainer?.innerHTML);
3204
+ // Use SVG of chart copy. If SVG contains foreignObjects PDF fails
3205
+ // in all browsers and all exports except SVG will fail in IE, as
3206
+ // both CanVG and svg2pdf choke on this. Gracefully fall back.
3207
+ if (sanitizedSVG.indexOf('<foreignObject') > -1 &&
3208
+ exportingOptions.type !== 'image/svg+xml' &&
3209
+ (isMS ||
3210
+ exportingOptions.type === 'application/pdf')) {
3211
+ throw new Error('Image type not supported for charts with embedded HTML');
3212
+ }
3213
+ else {
3214
+ // Trigger SVG download
3215
+ await exporting.downloadSVG(sanitizedSVG, extend({ filename: exporting.getFilename() }, exportingOptions));
3216
+ }
3217
+ // Return the sanitized SVG
3218
+ return sanitizedSVG;
3219
+ }
3220
+ catch (error) {
3221
+ await this.fallbackToServer(exportingOptions, error);
3222
+ }
3223
+ finally {
3224
+ // Clean up
3225
+ unbindGetSVG();
3226
+ }
2662
3227
  }
2663
3228
  /**
2664
3229
  * Move the chart container(s) to another div.
2665
3230
  *
2666
- * @function Highcharts#moveContainers
2667
- *
2668
3231
  * @private
3232
+ * @function Highcharts.Exporting#moveContainers
2669
3233
  *
2670
3234
  * @param {Highcharts.HTMLDOMElement} moveTo
2671
- * Move target
3235
+ * Move target.
3236
+ *
3237
+ * @requires modules/exporting
2672
3238
  */
2673
- function moveContainers(moveTo) {
2674
- const { scrollablePlotArea } = this;
3239
+ moveContainers(moveTo) {
3240
+ const chart = this.chart, { scrollablePlotArea } = chart;
2675
3241
  (
2676
3242
  // When scrollablePlotArea is active (#9533)
2677
3243
  scrollablePlotArea ?
@@ -2679,95 +3245,35 @@ var Exporting;
2679
3245
  scrollablePlotArea.fixedDiv,
2680
3246
  scrollablePlotArea.scrollingContainer
2681
3247
  ] :
2682
- [this.container]).forEach(function (div) {
3248
+ [chart.container]).forEach(function (div) {
2683
3249
  moveTo.appendChild(div);
2684
3250
  });
2685
3251
  }
2686
3252
  /**
2687
- * Add update methods to handle chart.update and chart.exporting.update and
2688
- * chart.navigation.update. These must be added to the chart instance rather
2689
- * than the Chart prototype in order to use the chart instance inside the
2690
- * update function.
2691
- * @private
2692
- */
2693
- function onChartInit() {
2694
- const chart = this,
2695
- /**
2696
- * @private
2697
- * @param {"exporting"|"navigation"} prop
2698
- * Property name in option root
2699
- * @param {Highcharts.ExportingOptions|Highcharts.NavigationOptions} options
2700
- * Options to update
2701
- * @param {boolean} [redraw=true]
2702
- * Whether to redraw
2703
- */
2704
- update = (prop, options, redraw) => {
2705
- chart.isDirtyExporting = true;
2706
- merge(true, chart.options[prop], options);
2707
- if (pick(redraw, true)) {
2708
- chart.redraw();
2709
- }
2710
- };
2711
- chart.exporting = {
2712
- update: function (options, redraw) {
2713
- update('exporting', options, redraw);
2714
- }
2715
- };
2716
- // Register update() method for navigation. Cannot be set the same way
2717
- // as for exporting, because navigation options are shared with bindings
2718
- // which has separate update() logic.
2719
- Chart_ChartNavigationComposition
2720
- .compose(chart).navigation
2721
- .addUpdate((options, redraw) => {
2722
- update('navigation', options, redraw);
2723
- });
2724
- }
2725
- /**
2726
- * On layout of titles (title, subtitle and caption), adjust the `alignTo``
2727
- * box to avoid the context menu button.
2728
- * @private
2729
- */
2730
- function onChartLayOutTitle({ alignTo, key, textPxLength }) {
2731
- const exportingOptions = this.options.exporting, { align, buttonSpacing = 0, verticalAlign, width = 0 } = merge(this.options.navigation?.buttonOptions, exportingOptions?.buttons?.contextButton), space = alignTo.width - textPxLength, widthAdjust = width + buttonSpacing;
2732
- if ((exportingOptions?.enabled ?? true) &&
2733
- key === 'title' &&
2734
- align === 'right' &&
2735
- verticalAlign === 'top') {
2736
- if (space < 2 * widthAdjust) {
2737
- if (space < widthAdjust) {
2738
- alignTo.width -= widthAdjust;
2739
- }
2740
- else if (this.title?.alignValue !== 'left') {
2741
- alignTo.x -= widthAdjust - space / 2;
2742
- }
2743
- }
2744
- }
2745
- }
2746
- /**
2747
- * Exporting module required. Clears away other elements in the page and
2748
- * prints the chart as it is displayed. By default, when the exporting
2749
- * module is enabled, a context button with a drop down menu in the upper
2750
- * right corner accesses this function.
3253
+ * Clears away other elements in the page and prints the chart as it is
3254
+ * displayed. By default, when the exporting module is enabled, a context
3255
+ * button with a drop down menu in the upper right corner accesses this
3256
+ * function.
2751
3257
  *
2752
3258
  * @sample highcharts/members/chart-print/
2753
- * Print from a HTML button
2754
- *
2755
- * @function Highcharts.Chart#print
3259
+ * Print from a HTML button
2756
3260
  *
3261
+ * @function Highcharts.Exporting#print
2757
3262
  *
2758
3263
  * @emits Highcharts.Chart#event:beforePrint
2759
3264
  * @emits Highcharts.Chart#event:afterPrint
2760
3265
  *
2761
3266
  * @requires modules/exporting
2762
3267
  */
2763
- function print() {
2764
- const chart = this;
2765
- if (chart.isPrinting) { // Block the button while in printing mode
3268
+ print() {
3269
+ const chart = this.chart;
3270
+ // Block the button while in printing mode
3271
+ if (this.isPrinting) {
2766
3272
  return;
2767
3273
  }
2768
- printingChart = chart;
2769
- if (!(external_highcharts_src_js_default_default()).isSafari) {
2770
- chart.beforePrint();
3274
+ Exporting.printingChart = chart;
3275
+ if (!Exporting_isSafari) {
3276
+ this.beforePrint();
2771
3277
  }
2772
3278
  // Give the browser time to draw WebGL content, an issue that randomly
2773
3279
  // appears (at least) in Chrome ~67 on the Mac (#8708).
@@ -2775,86 +3281,310 @@ var Exporting;
2775
3281
  Exporting_win.focus(); // #1510
2776
3282
  Exporting_win.print();
2777
3283
  // Allow the browser to prepare before reverting
2778
- if (!(external_highcharts_src_js_default_default()).isSafari) {
3284
+ if (!Exporting_isSafari) {
2779
3285
  setTimeout(() => {
2780
- chart.afterPrint();
3286
+ chart.exporting?.afterPrint();
2781
3287
  }, 1000);
2782
3288
  }
2783
3289
  }, 1);
2784
3290
  }
2785
3291
  /**
2786
- * Add the buttons on chart load
3292
+ * Add the buttons on chart load.
3293
+ *
2787
3294
  * @private
2788
- * @function Highcharts.Chart#renderExporting
3295
+ * @function Highcharts.Exporting#render
3296
+ *
2789
3297
  * @requires modules/exporting
2790
3298
  */
2791
- function renderExporting() {
2792
- const chart = this, exportingOptions = chart.options.exporting, buttons = exportingOptions.buttons, isDirty = chart.isDirtyExporting || !chart.exportSVGElements;
2793
- chart.buttonOffset = 0;
2794
- if (chart.isDirtyExporting) {
2795
- chart.destroyExport();
2796
- }
2797
- if (isDirty && exportingOptions.enabled !== false) {
2798
- chart.exportEvents = [];
2799
- chart.exportingGroup = chart.exportingGroup ||
2800
- chart.renderer.g('exporting-group').attr({
2801
- zIndex: 3 // #4955, // #8392
2802
- }).add();
2803
- Exporting_objectEach(buttons, function (button) {
2804
- chart.addButton(button);
3299
+ render() {
3300
+ const exporting = this, { chart, options } = exporting, isDirty = exporting?.isDirty || !exporting?.svgElements.length;
3301
+ exporting.buttonOffset = 0;
3302
+ if (exporting.isDirty) {
3303
+ exporting.destroy();
3304
+ }
3305
+ if (isDirty && options.enabled !== false) {
3306
+ exporting.events = [];
3307
+ exporting.group || (exporting.group = chart.renderer.g('exporting-group').attr({
3308
+ zIndex: 3 // #4955, // #8392
3309
+ }).add());
3310
+ Exporting_objectEach(options?.buttons, function (button) {
3311
+ exporting.addButton(button);
2805
3312
  });
2806
- chart.isDirtyExporting = false;
3313
+ exporting.isDirty = false;
2807
3314
  }
2808
3315
  }
2809
3316
  /**
2810
- * Exporting module only. A collection of fixes on the produced SVG to
2811
- * account for expand properties, browser bugs.
2812
- * Returns a cleaned SVG.
3317
+ * Resolve CSS variables into hex colors.
2813
3318
  *
2814
3319
  * @private
2815
- * @function Highcharts.Chart#sanitizeSVG
2816
- * @param {string} svg
2817
- * SVG code to sanitize
2818
- * @param {Highcharts.Options} options
2819
- * Chart options to apply
2820
- * @return {string}
2821
- * Sanitized SVG code
3320
+ * @function Highcharts.Exporting#resolveCSSVariables
3321
+ *
2822
3322
  * @requires modules/exporting
2823
3323
  */
2824
- function sanitizeSVG(svg, options) {
2825
- const split = svg.indexOf('</svg>') + 6, useForeignObject = svg.indexOf('<foreignObject') > -1;
2826
- let html = svg.substr(split);
2827
- // Remove any HTML added to the container after the SVG (#894, #9087)
2828
- svg = svg.substr(0, split);
2829
- if (useForeignObject) {
2830
- // Some tags needs to be closed in xhtml (#13726)
2831
- svg = svg.replace(/(<(?:img|br).*?(?=\>))>/g, '$1 />');
2832
- // Move HTML into a foreignObject
3324
+ resolveCSSVariables() {
3325
+ Array.from(this.chart.container.querySelectorAll('*')).forEach((element) => {
3326
+ ['color', 'fill', 'stop-color', 'stroke'].forEach((prop) => {
3327
+ const attrValue = element.getAttribute(prop);
3328
+ if (attrValue?.includes('var(')) {
3329
+ element.setAttribute(prop, getComputedStyle(element).getPropertyValue(prop));
3330
+ }
3331
+ const styleValue = element.style?.[prop];
3332
+ if (styleValue?.includes('var(')) {
3333
+ element.style[prop] =
3334
+ getComputedStyle(element).getPropertyValue(prop);
3335
+ }
3336
+ });
3337
+ });
3338
+ }
3339
+ /**
3340
+ * Updates the exporting object with the provided exporting options.
3341
+ *
3342
+ * @private
3343
+ * @function Highcharts.Exporting#update
3344
+ *
3345
+ * @param {Highcharts.ExportingOptions} exportingOptions
3346
+ * The exporting options to update with.
3347
+ * @param {boolean} [redraw=true]
3348
+ * Whether to redraw or not.
3349
+ *
3350
+ * @requires modules/exporting
3351
+ */
3352
+ update(exportingOptions, redraw) {
3353
+ this.isDirty = true;
3354
+ merge(true, this.options, exportingOptions);
3355
+ if (pick(redraw, true)) {
3356
+ this.chart.redraw();
2833
3357
  }
2834
- else if (html && options?.exporting?.allowHTML) {
2835
- html = '<foreignObject x="0" y="0" ' +
2836
- 'width="' + options.chart.width + '" ' +
2837
- 'height="' + options.chart.height + '">' +
2838
- '<body xmlns="http://www.w3.org/1999/xhtml">' +
2839
- // Some tags needs to be closed in xhtml (#13726)
2840
- html.replace(/(<(?:img|br).*?(?=\>))>/g, '$1 />') +
2841
- '</body>' +
2842
- '</foreignObject>';
2843
- svg = svg.replace('</svg>', html + '</svg>');
3358
+ }
3359
+ }
3360
+ /* *
3361
+ *
3362
+ * Static Properties
3363
+ *
3364
+ * */
3365
+ Exporting.inlineAllowlist = [];
3366
+ // These CSS properties are not inlined. Remember camelCase.
3367
+ Exporting.inlineDenylist = [
3368
+ /-/, // In Firefox, both hyphened and camelCased names are listed
3369
+ /^(clipPath|cssText|d|height|width)$/, // Full words
3370
+ /^font$/, // More specific props are set
3371
+ /[lL]ogical(Width|Height)$/,
3372
+ /^parentRule$/,
3373
+ /^(cssRules|ownerRules)$/, // #19516 read-only properties
3374
+ /perspective/,
3375
+ /TapHighlightColor/,
3376
+ /^transition/,
3377
+ /^length$/, // #7700
3378
+ /^\d+$/ // #17538
3379
+ ];
3380
+ // These ones are translated to attributes rather than styles
3381
+ Exporting.inlineToAttributes = [
3382
+ 'fill',
3383
+ 'stroke',
3384
+ 'strokeLinecap',
3385
+ 'strokeLinejoin',
3386
+ 'strokeWidth',
3387
+ 'textAnchor',
3388
+ 'x',
3389
+ 'y'
3390
+ ];
3391
+ // Milliseconds to defer image load event handlers to offset IE bug
3392
+ Exporting.loadEventDeferDelay = isMS ? 150 : 0;
3393
+ Exporting.unstyledElements = [
3394
+ 'clipPath',
3395
+ 'defs',
3396
+ 'desc'
3397
+ ];
3398
+ /* *
3399
+ *
3400
+ * Class Namespace
3401
+ *
3402
+ * */
3403
+ (function (Exporting) {
3404
+ /* *
3405
+ *
3406
+ * Declarations
3407
+ *
3408
+ * */
3409
+ /* *
3410
+ *
3411
+ * Functions
3412
+ *
3413
+ * */
3414
+ /**
3415
+ * Composition function.
3416
+ *
3417
+ * @private
3418
+ * @function Highcharts.Exporting#compose
3419
+ *
3420
+ * @param {ChartClass} ChartClass
3421
+ * Chart class.
3422
+ * @param {SVGRendererClass} SVGRendererClass
3423
+ * SVGRenderer class.
3424
+ *
3425
+ * @requires modules/exporting
3426
+ */
3427
+ function compose(ChartClass, SVGRendererClass) {
3428
+ Exporting_ExportingSymbols.compose(SVGRendererClass);
3429
+ Exporting_Fullscreen.compose(ChartClass);
3430
+ // Check the composition registry for the Exporting
3431
+ if (!Exporting_pushUnique(Exporting_composed, 'Exporting')) {
3432
+ return;
3433
+ }
3434
+ // Adding wrappers for the deprecated functions
3435
+ extend((external_highcharts_src_js_default_Chart_default()).prototype, {
3436
+ exportChart: async function (exportingOptions, chartOptions) {
3437
+ await this.exporting?.exportChart(exportingOptions, chartOptions);
3438
+ return;
3439
+ },
3440
+ getChartHTML: function (applyStyleSheets) {
3441
+ return this.exporting?.getChartHTML(applyStyleSheets);
3442
+ },
3443
+ getFilename: function () {
3444
+ return this.exporting?.getFilename();
3445
+ },
3446
+ getSVG: function (chartOptions) {
3447
+ return this.exporting?.getSVG(chartOptions);
3448
+ },
3449
+ print: function () {
3450
+ return this.exporting?.print();
3451
+ }
3452
+ });
3453
+ ChartClass.prototype.callbacks.push(chartCallback);
3454
+ Exporting_addEvent(ChartClass, 'afterInit', onChartAfterInit);
3455
+ Exporting_addEvent(ChartClass, 'layOutTitle', onChartLayOutTitle);
3456
+ if (Exporting_isSafari) {
3457
+ Exporting_win.matchMedia('print').addListener(function (mqlEvent) {
3458
+ if (!Exporting.printingChart) {
3459
+ return void 0;
3460
+ }
3461
+ if (mqlEvent.matches) {
3462
+ Exporting.printingChart.exporting?.beforePrint();
3463
+ }
3464
+ else {
3465
+ Exporting.printingChart.exporting?.afterPrint();
3466
+ }
3467
+ });
3468
+ }
3469
+ // Update with defaults of the exporting module
3470
+ setOptions(Exporting_ExportingDefaults);
3471
+ }
3472
+ Exporting.compose = compose;
3473
+ /**
3474
+ * Function that is added to the callbacks array that runs on chart load.
3475
+ *
3476
+ * @private
3477
+ * @function Highcharts#chartCallback
3478
+ *
3479
+ * @param {Highcharts.Chart} chart
3480
+ * The chart instance.
3481
+ *
3482
+ * @requires modules/exporting
3483
+ */
3484
+ function chartCallback(chart) {
3485
+ const exporting = chart.exporting;
3486
+ if (exporting) {
3487
+ exporting.render();
3488
+ // Add the exporting buttons on each chart redraw
3489
+ Exporting_addEvent(chart, 'redraw', function () {
3490
+ this.exporting?.render();
3491
+ });
3492
+ // Destroy the export elements at chart destroy
3493
+ Exporting_addEvent(chart, 'destroy', function () {
3494
+ this.exporting?.destroy();
3495
+ });
3496
+ }
3497
+ // Uncomment this to see a button directly below the chart, for quick
3498
+ // testing of export
3499
+ // let button, viewImage, viewSource;
3500
+ // if (!chart.renderer.forExport) {
3501
+ // viewImage = function (): void {
3502
+ // const div = doc.createElement('div');
3503
+ // div.innerHTML = chart.exporting?.getSVGForExport() || '';
3504
+ // chart.renderTo.parentNode.appendChild(div);
3505
+ // };
3506
+ // viewSource = function (): void {
3507
+ // const pre = doc.createElement('pre');
3508
+ // pre.innerHTML = chart.exporting?.getSVGForExport()
3509
+ // .replace(/</g, '\n&lt;')
3510
+ // .replace(/>/g, '&gt;') || '';
3511
+ // chart.renderTo.parentNode.appendChild(pre);
3512
+ // };
3513
+ // viewImage();
3514
+ // // View SVG Image
3515
+ // button = doc.createElement('button');
3516
+ // button.innerHTML = 'View SVG Image';
3517
+ // chart.renderTo.parentNode.appendChild(button);
3518
+ // button.onclick = viewImage;
3519
+ // // View SVG Source
3520
+ // button = doc.createElement('button');
3521
+ // button.innerHTML = 'View SVG Source';
3522
+ // chart.renderTo.parentNode.appendChild(button);
3523
+ // button.onclick = viewSource;
3524
+ // }
3525
+ }
3526
+ /**
3527
+ * Add update methods to handle chart.update and chart.exporting.update and
3528
+ * chart.navigation.update. These must be added to the chart instance rather
3529
+ * than the Chart prototype in order to use the chart instance inside the
3530
+ * update function.
3531
+ *
3532
+ * @private
3533
+ * @function Highcharts#onChartAfterInit
3534
+ *
3535
+ * @requires modules/exporting
3536
+ */
3537
+ function onChartAfterInit() {
3538
+ const chart = this;
3539
+ // Create the exporting instance
3540
+ if (chart.options.exporting) {
3541
+ /**
3542
+ * Exporting object.
3543
+ *
3544
+ * @name Highcharts.Chart#exporting
3545
+ * @type {Highcharts.Exporting}
3546
+ */
3547
+ chart.exporting = new Exporting(chart, chart.options.exporting);
3548
+ // Register update() method for navigation. Cannot be set the same
3549
+ // way as for exporting, because navigation options are shared with
3550
+ // bindings which has separate update() logic.
3551
+ Chart_ChartNavigationComposition
3552
+ .compose(chart).navigation
3553
+ .addUpdate((options, redraw) => {
3554
+ if (chart.exporting) {
3555
+ chart.exporting.isDirty = true;
3556
+ merge(true, chart.options.navigation, options);
3557
+ if (pick(redraw, true)) {
3558
+ chart.redraw();
3559
+ }
3560
+ }
3561
+ });
3562
+ }
3563
+ }
3564
+ /**
3565
+ * On layout of titles (title, subtitle and caption), adjust the `alignTo`
3566
+ * box to avoid the context menu button.
3567
+ *
3568
+ * @private
3569
+ * @function Highcharts#onChartLayOutTitle
3570
+ *
3571
+ * @requires modules/exporting
3572
+ */
3573
+ function onChartLayOutTitle({ alignTo, key, textPxLength }) {
3574
+ const exportingOptions = this.options.exporting, { align, buttonSpacing = 0, verticalAlign, width = 0 } = merge(this.options.navigation?.buttonOptions, exportingOptions?.buttons?.contextButton), space = alignTo.width - textPxLength, widthAdjust = width + buttonSpacing;
3575
+ if ((exportingOptions?.enabled ?? true) &&
3576
+ key === 'title' &&
3577
+ align === 'right' &&
3578
+ verticalAlign === 'top') {
3579
+ if (space < 2 * widthAdjust) {
3580
+ if (space < widthAdjust) {
3581
+ alignTo.width -= widthAdjust;
3582
+ }
3583
+ else if (this.title?.alignValue !== 'left') {
3584
+ alignTo.x -= widthAdjust - space / 2;
3585
+ }
3586
+ }
2844
3587
  }
2845
- svg = svg
2846
- .replace(/zIndex="[^"]+"/g, '')
2847
- .replace(/symbolName="[^"]+"/g, '')
2848
- .replace(/jQuery\d+="[^"]+"/g, '')
2849
- .replace(/url\(("|&quot;)(.*?)("|&quot;)\;?\)/g, 'url($2)')
2850
- .replace(/url\([^#]+#/g, 'url(#')
2851
- .replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
2852
- .replace(/ (NS\d+\:)?href=/g, ' xlink:href=') // #3567
2853
- .replace(/\n+/g, ' ')
2854
- // Replace HTML entities, issue #347
2855
- .replace(/&nbsp;/g, '\u00A0') // No-break space
2856
- .replace(/&shy;/g, '\u00AD'); // Soft hyphen
2857
- return svg;
2858
3588
  }
2859
3589
  })(Exporting || (Exporting = {}));
2860
3590
  /* *
@@ -2875,10 +3605,9 @@ var Exporting;
2875
3605
  * @callback Highcharts.ExportingAfterPrintCallbackFunction
2876
3606
  *
2877
3607
  * @param {Highcharts.Chart} this
2878
- * The chart on which the event occurred.
2879
- *
3608
+ * The chart on which the event occurred.
2880
3609
  * @param {global.Event} event
2881
- * The event that occurred.
3610
+ * The event that occurred.
2882
3611
  */
2883
3612
  /**
2884
3613
  * Gets fired before a chart is printed through the context menu item or the
@@ -2887,10 +3616,9 @@ var Exporting;
2887
3616
  * @callback Highcharts.ExportingBeforePrintCallbackFunction
2888
3617
  *
2889
3618
  * @param {Highcharts.Chart} this
2890
- * The chart on which the event occurred.
2891
- *
3619
+ * The chart on which the event occurred.
2892
3620
  * @param {global.Event} event
2893
- * The event that occurred.
3621
+ * The event that occurred.
2894
3622
  */
2895
3623
  /**
2896
3624
  * Function to call if the offline-exporting module fails to export a chart on
@@ -2899,10 +3627,9 @@ var Exporting;
2899
3627
  * @callback Highcharts.ExportingErrorCallbackFunction
2900
3628
  *
2901
3629
  * @param {Highcharts.ExportingOptions} options
2902
- * The exporting options.
2903
- *
3630
+ * The exporting options.
2904
3631
  * @param {global.Error} err
2905
- * The error from the module.
3632
+ * The error from the module.
2906
3633
  */
2907
3634
  /**
2908
3635
  * Definition for a menu item in the context menu.
@@ -2912,27 +3639,27 @@ var Exporting;
2912
3639
  * The text for the menu item.
2913
3640
  *
2914
3641
  * @name Highcharts.ExportingMenuObject#text
2915
- * @type {string|undefined}
3642
+ * @type {string | undefined}
2916
3643
  */ /**
2917
3644
  * If internationalization is required, the key to a language string.
2918
3645
  *
2919
3646
  * @name Highcharts.ExportingMenuObject#textKey
2920
- * @type {string|undefined}
3647
+ * @type {string | undefined}
2921
3648
  */ /**
2922
3649
  * The click handler for the menu item.
2923
3650
  *
2924
3651
  * @name Highcharts.ExportingMenuObject#onclick
2925
- * @type {Highcharts.EventCallbackFunction<Highcharts.Chart>|undefined}
3652
+ * @type {Highcharts.EventCallbackFunction<Highcharts.Chart> | undefined}
2926
3653
  */ /**
2927
3654
  * Indicates a separator line instead of an item.
2928
3655
  *
2929
3656
  * @name Highcharts.ExportingMenuObject#separator
2930
- * @type {boolean|undefined}
3657
+ * @type {boolean | undefined}
2931
3658
  */
2932
3659
  /**
2933
3660
  * Possible MIME types for exporting.
2934
3661
  *
2935
- * @typedef {"image/png"|"image/jpeg"|"application/pdf"|"image/svg+xml"} Highcharts.ExportingMimeTypeValue
3662
+ * @typedef {"image/png" | "image/jpeg" | "application/pdf" | "image/svg+xml"} Highcharts.ExportingMimeTypeValue
2936
3663
  */
2937
3664
  (''); // Keeps doclets above in transpiled file
2938
3665
  /* *
@@ -2945,12 +3672,12 @@ var Exporting;
2945
3672
  * `Chart.print` method.
2946
3673
  *
2947
3674
  * @sample highcharts/chart/events-beforeprint-afterprint/
2948
- * Rescale the chart to print
3675
+ * Rescale the chart to print
2949
3676
  *
2950
- * @type {Highcharts.ExportingAfterPrintCallbackFunction}
2951
- * @since 4.1.0
2952
- * @context Highcharts.Chart
2953
- * @requires modules/exporting
3677
+ * @type {Highcharts.ExportingAfterPrintCallbackFunction}
3678
+ * @since 4.1.0
3679
+ * @context Highcharts.Chart
3680
+ * @requires modules/exporting
2954
3681
  * @apioption chart.events.afterPrint
2955
3682
  */
2956
3683
  /**
@@ -2958,12 +3685,12 @@ var Exporting;
2958
3685
  * the `Chart.print` method.
2959
3686
  *
2960
3687
  * @sample highcharts/chart/events-beforeprint-afterprint/
2961
- * Rescale the chart to print
3688
+ * Rescale the chart to print
2962
3689
  *
2963
- * @type {Highcharts.ExportingBeforePrintCallbackFunction}
2964
- * @since 4.1.0
2965
- * @context Highcharts.Chart
2966
- * @requires modules/exporting
3690
+ * @type {Highcharts.ExportingBeforePrintCallbackFunction}
3691
+ * @since 4.1.0
3692
+ * @context Highcharts.Chart
3693
+ * @requires modules/exporting
2967
3694
  * @apioption chart.events.beforePrint
2968
3695
  */
2969
3696
  (''); // Keeps doclets above in transpiled file
@@ -2975,10 +3702,14 @@ var Exporting;
2975
3702
 
2976
3703
 
2977
3704
  const G = (external_highcharts_src_js_default_default());
3705
+ // Class
3706
+ G.Exporting = Exporting_Exporting;
3707
+ // Compatibility
2978
3708
  G.HttpUtilities = G.HttpUtilities || Core_HttpUtilities;
2979
3709
  G.ajax = G.HttpUtilities.ajax;
2980
3710
  G.getJSON = G.HttpUtilities.getJSON;
2981
3711
  G.post = G.HttpUtilities.post;
3712
+ // Compose
2982
3713
  Exporting_Exporting.compose(G.Chart, G.Renderer);
2983
3714
  /* harmony default export */ const exporting_src = ((external_highcharts_src_js_default_default()));
2984
3715