highcharts 9.2.2 → 9.3.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 (747) hide show
  1. package/README.md +13 -6
  2. package/bower.json +1 -1
  3. package/css/annotations/popup.css +48 -8
  4. package/css/annotations/popup.scss +70 -22
  5. package/css/highcharts.css +45 -0
  6. package/css/highcharts.scss +40 -0
  7. package/css/themes/dark-unica.css +45 -0
  8. package/css/themes/grid-light.css +45 -0
  9. package/css/themes/sand-signika.css +45 -0
  10. package/es-modules/Accessibility/A11yI18n.js +273 -224
  11. package/es-modules/Accessibility/Accessibility.js +233 -128
  12. package/es-modules/Accessibility/AccessibilityComponent.js +79 -314
  13. package/es-modules/Accessibility/Components/AnnotationsA11y.js +10 -0
  14. package/es-modules/Accessibility/Components/ContainerComponent.js +52 -27
  15. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +46 -23
  16. package/es-modules/Accessibility/Components/LegendComponent.js +97 -65
  17. package/es-modules/Accessibility/Components/MenuComponent.js +59 -40
  18. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +5 -8
  19. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +152 -115
  20. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +133 -68
  21. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +64 -27
  22. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +38 -21
  23. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +380 -325
  24. package/es-modules/Accessibility/Components/ZoomComponent.js +28 -20
  25. package/es-modules/Accessibility/FocusBorder.js +192 -147
  26. package/es-modules/Accessibility/HighContrastMode.js +78 -66
  27. package/es-modules/Accessibility/HighContrastTheme.js +10 -0
  28. package/es-modules/Accessibility/KeyboardNavigation.js +144 -70
  29. package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
  30. package/es-modules/Accessibility/Options/DeprecatedOptions.js +11 -1
  31. package/es-modules/Accessibility/Options/LangOptions.js +1 -2
  32. package/es-modules/Accessibility/Options/Options.js +32 -17
  33. package/es-modules/Accessibility/ProxyElement.js +212 -0
  34. package/es-modules/Accessibility/ProxyProvider.js +305 -0
  35. package/es-modules/Accessibility/Utils/Announcer.js +15 -8
  36. package/es-modules/Accessibility/Utils/ChartUtilities.js +41 -16
  37. package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
  38. package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
  39. package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -30
  40. package/es-modules/Core/Axis/Axis.js +37 -30
  41. package/es-modules/Core/Axis/AxisDefaults.js +35 -24
  42. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +54 -4
  43. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
  44. package/es-modules/Core/Axis/OrdinalAxis.js +8 -12
  45. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
  46. package/es-modules/Core/Axis/ScrollbarAxis.js +10 -3
  47. package/es-modules/Core/Axis/TreeGridAxis.js +2 -2
  48. package/es-modules/Core/Axis/TreeGridTick.js +1 -2
  49. package/es-modules/Core/Chart/Chart.js +2 -3
  50. package/es-modules/Core/Chart/ChartDefaults.js +3 -4
  51. package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
  52. package/es-modules/Core/Chart/MapChart.js +10 -22
  53. package/es-modules/Core/Chart/StockChart.js +3 -293
  54. package/es-modules/Core/Color/Palettes.js +22 -0
  55. package/es-modules/Core/DefaultOptions.js +19 -17
  56. package/es-modules/Core/Foundation.js +39 -31
  57. package/es-modules/Core/Globals.js +1 -1
  58. package/es-modules/Core/HttpUtilities.js +3 -3
  59. package/es-modules/Core/Legend/Legend.js +7 -3
  60. package/es-modules/Core/Navigator.js +7 -8
  61. package/es-modules/Core/Pointer.js +39 -36
  62. package/es-modules/Core/Renderer/HTML/AST.js +2 -0
  63. package/es-modules/Core/Renderer/HTML/HTMLElement.js +23 -18
  64. package/es-modules/Core/Renderer/SVG/SVGElement.js +3 -4
  65. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +21 -18
  66. package/es-modules/Core/Renderer/SVG/TextBuilder.js +3 -3
  67. package/es-modules/Core/ScrollbarDefaults.js +10 -9
  68. package/es-modules/Core/Series/DataLabel.js +2 -3
  69. package/es-modules/Core/Series/Point.js +5 -3
  70. package/es-modules/Core/Series/Series.js +153 -162
  71. package/es-modules/Core/Series/SeriesDefaults.js +3 -4
  72. package/es-modules/Core/Series/SeriesRegistry.js +1 -2
  73. package/es-modules/Core/Tooltip.js +44 -17
  74. package/es-modules/Core/Utilities.js +15 -7
  75. package/es-modules/Data/DataConverter.js +489 -0
  76. package/es-modules/Data/DataPromise.js +252 -0
  77. package/es-modules/Data/DataSeriesConverter.js +203 -0
  78. package/es-modules/Data/DataTable.js +1204 -0
  79. package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
  80. package/es-modules/Data/Modifiers/DataModifier.js +303 -0
  81. package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
  82. package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
  83. package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
  84. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
  85. package/es-modules/Data/Modifiers/SortModifier.js +249 -0
  86. package/es-modules/Data/Parsers/CSVParser.js +399 -0
  87. package/es-modules/Data/Parsers/DataParser.js +101 -0
  88. package/es-modules/Data/Parsers/GoogleSheetsParser.js +220 -0
  89. package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
  90. package/es-modules/Data/Stores/CSVStore.js +317 -0
  91. package/es-modules/Data/Stores/DataStore.js +276 -0
  92. package/es-modules/Data/Stores/GoogleSheetsStore.js +167 -0
  93. package/es-modules/Data/Stores/HTMLTableStore.js +351 -0
  94. package/es-modules/Extensions/Annotations/Annotations.js +61 -11
  95. package/es-modules/Extensions/Annotations/ControlPoint.js +1 -1
  96. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
  97. package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +7 -1
  98. package/es-modules/Extensions/Annotations/NavigationBindings.js +68 -19
  99. package/es-modules/Extensions/Annotations/Popup.js +479 -141
  100. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
  101. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +1 -1
  102. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
  103. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
  104. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
  105. package/es-modules/Extensions/Annotations/Types/Measure.js +14 -8
  106. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +5 -5
  107. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +207 -0
  108. package/es-modules/Extensions/Annotations/Types/Tunnel.js +3 -5
  109. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
  110. package/es-modules/Extensions/Boost/BoostOverrides.js +3 -1
  111. package/es-modules/Extensions/Boost/WGLShader.js +4 -3
  112. package/es-modules/Extensions/BoostCanvas.js +1 -2
  113. package/es-modules/Extensions/CurrentDateIndication.js +2 -3
  114. package/es-modules/Extensions/DataGrouping.js +31 -18
  115. package/es-modules/Extensions/DownloadURL.js +2 -2
  116. package/es-modules/Extensions/DragPanes.js +1 -2
  117. package/es-modules/Extensions/Drilldown.js +2 -3
  118. package/es-modules/Extensions/Exporting/Exporting.js +8 -7
  119. package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
  120. package/es-modules/Extensions/GeoJSON.js +39 -63
  121. package/es-modules/Extensions/MarkerClusters.js +115 -97
  122. package/es-modules/Extensions/NoDataToDisplay.js +1 -2
  123. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +9 -8
  124. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  125. package/es-modules/Extensions/Oldie/Oldie.js +2 -3
  126. package/es-modules/Extensions/Pane.js +5 -6
  127. package/es-modules/Extensions/RangeSelector.js +3 -4
  128. package/es-modules/Extensions/Sonification/ChartSonify.js +247 -637
  129. package/es-modules/Extensions/Sonification/Earcon.js +136 -102
  130. package/es-modules/Extensions/Sonification/Instrument.js +496 -426
  131. package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
  132. package/es-modules/Extensions/Sonification/Options.js +10 -0
  133. package/es-modules/Extensions/Sonification/PointSonify.js +203 -152
  134. package/es-modules/Extensions/Sonification/SeriesSonify.js +459 -0
  135. package/es-modules/Extensions/Sonification/SignalHandler.js +124 -0
  136. package/es-modules/Extensions/Sonification/Sonification.js +26 -52
  137. package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +62 -84
  138. package/es-modules/Extensions/Sonification/Timeline.js +255 -567
  139. package/es-modules/Extensions/Sonification/TimelineEvent.js +158 -0
  140. package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
  141. package/es-modules/Maps/MapNavigation.js +27 -64
  142. package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
  143. package/es-modules/Maps/MapPointer.js +7 -5
  144. package/es-modules/Maps/MapView.js +450 -0
  145. package/es-modules/Maps/MapViewOptionsDefault.js +95 -0
  146. package/es-modules/Maps/Projection.js +433 -0
  147. package/es-modules/Maps/ProjectionDefinition.js +9 -0
  148. package/es-modules/Maps/Projections/EqualEarth.js +42 -0
  149. package/es-modules/Maps/Projections/Miller.js +17 -0
  150. package/es-modules/Maps/Projections/Orthographic.js +26 -0
  151. package/es-modules/Maps/Projections/ProjectionRegistry.js +17 -0
  152. package/es-modules/Maps/Projections/WebMercator.js +25 -0
  153. package/es-modules/Series/AreaRange/AreaRangeSeries.js +4 -5
  154. package/es-modules/Series/Bellcurve/BellcurveSeries.js +2 -8
  155. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
  156. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
  157. package/es-modules/Series/Bubble/BubbleLegendItem.js +3 -3
  158. package/es-modules/Series/Bubble/BubblePoint.js +5 -0
  159. package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
  160. package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -18
  161. package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
  162. package/es-modules/Series/ColorMapComposition.js +109 -0
  163. package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
  164. package/es-modules/Series/Column/ColumnSeries.js +3 -4
  165. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +6 -6
  166. package/es-modules/Series/DataModifyComposition.js +539 -0
  167. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
  168. package/es-modules/Series/DerivedComposition.js +137 -0
  169. package/es-modules/Series/DrawPointComposition.js +111 -0
  170. package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -3
  171. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
  172. package/es-modules/Series/Flags/FlagsSeries.js +18 -25
  173. package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
  174. package/es-modules/Series/Gantt/GanttSeries.js +0 -2
  175. package/es-modules/Series/Gauge/GaugePoint.js +1 -1
  176. package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
  177. package/es-modules/Series/HLC/HLCPoint.js +55 -0
  178. package/es-modules/Series/HLC/HLCSeries.js +383 -0
  179. package/es-modules/Series/Heatmap/HeatmapPoint.js +3 -4
  180. package/es-modules/Series/Heatmap/HeatmapSeries.js +19 -6
  181. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +2 -3
  182. package/es-modules/Series/Histogram/HistogramSeries.js +3 -7
  183. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +9 -10
  184. package/es-modules/Series/Line/LineSeries.js +1 -2
  185. package/es-modules/Series/Map/MapPoint.js +23 -16
  186. package/es-modules/Series/Map/MapSeries.js +268 -309
  187. package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
  188. package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
  189. package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
  190. package/es-modules/Series/MapPoint/MapPointSeries.js +87 -4
  191. package/es-modules/Series/Networkgraph/Networkgraph.js +5 -5
  192. package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +76 -29
  193. package/es-modules/Series/OHLC/OHLCPoint.js +2 -6
  194. package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
  195. package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
  196. package/es-modules/Series/Organization/OrganizationSeries.js +2 -3
  197. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +46 -6
  198. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
  199. package/es-modules/Series/Pie/PieDataLabel.js +1 -2
  200. package/es-modules/Series/Pie/PieSeries.js +6 -7
  201. package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
  202. package/es-modules/Series/Sankey/SankeySeries.js +89 -20
  203. package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
  204. package/es-modules/Series/Sunburst/SunburstSeries.js +4 -4
  205. package/es-modules/Series/Tilemap/TilemapPoint.js +2 -3
  206. package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
  207. package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +86 -76
  208. package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
  209. package/es-modules/Series/Treemap/TreemapSeries.js +8 -8
  210. package/es-modules/Series/Venn/VennPoint.js +16 -7
  211. package/es-modules/Series/Venn/VennSeries.js +5 -8
  212. package/es-modules/Series/Venn/VennUtils.js +550 -439
  213. package/es-modules/Series/Waterfall/WaterfallSeries.js +2 -3
  214. package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
  215. package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
  216. package/es-modules/Series/Wordcloud/WordcloudSeries.js +24 -20
  217. package/es-modules/Series/Wordcloud/WordcloudUtils.js +673 -484
  218. package/es-modules/Series/XRange/XRangePoint.js +1 -0
  219. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +3 -6
  220. package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
  221. package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
  222. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +3 -6
  223. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
  224. package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
  225. package/es-modules/Stock/Indicators/BB/BBIndicator.js +27 -11
  226. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
  227. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
  228. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +19 -11
  229. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +17 -11
  230. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
  231. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +11 -9
  232. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +8 -16
  233. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +2 -2
  234. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
  235. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
  236. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
  237. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +1 -2
  238. package/es-modules/{Mixins/MultipleLines.js → Stock/Indicators/MultipleLinesComposition.js} +136 -87
  239. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
  240. package/es-modules/Stock/Indicators/PC/PCIndicator.js +14 -13
  241. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
  242. package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
  243. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +9 -32
  244. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
  245. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +15 -8
  246. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
  247. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
  248. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
  249. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +20 -3
  250. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
  251. package/es-modules/Stock/StockToolsBindings.js +144 -42
  252. package/es-modules/Stock/StockToolsGui.js +405 -11
  253. package/es-modules/masters/highcharts-3d.src.js +1 -1
  254. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  255. package/es-modules/masters/highcharts-more.src.js +1 -1
  256. package/es-modules/masters/highcharts.src.js +1 -1
  257. package/es-modules/masters/highmaps.src.js +1 -1
  258. package/es-modules/masters/highstock.src.js +1 -1
  259. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  260. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  261. package/es-modules/masters/indicators/ao.src.js +1 -1
  262. package/es-modules/masters/indicators/apo.src.js +1 -1
  263. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  264. package/es-modules/masters/indicators/aroon.src.js +1 -1
  265. package/es-modules/masters/indicators/atr.src.js +1 -1
  266. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  267. package/es-modules/masters/indicators/cci.src.js +1 -1
  268. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  269. package/es-modules/masters/indicators/cmf.src.js +1 -1
  270. package/es-modules/masters/indicators/cmo.src.js +1 -1
  271. package/es-modules/masters/indicators/dema.src.js +1 -1
  272. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  273. package/es-modules/masters/indicators/dmi.src.js +1 -1
  274. package/es-modules/masters/indicators/dpo.src.js +1 -1
  275. package/es-modules/masters/indicators/ema.src.js +4 -10
  276. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  277. package/es-modules/masters/indicators/indicators-all.src.js +2 -2
  278. package/es-modules/masters/indicators/indicators.src.js +2 -1
  279. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  280. package/es-modules/masters/indicators/klinger.src.js +1 -1
  281. package/es-modules/masters/indicators/macd.src.js +1 -1
  282. package/es-modules/masters/indicators/mfi.src.js +1 -1
  283. package/es-modules/masters/indicators/momentum.src.js +1 -1
  284. package/es-modules/masters/indicators/natr.src.js +1 -1
  285. package/es-modules/masters/indicators/obv.src.js +1 -1
  286. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  287. package/es-modules/masters/indicators/ppo.src.js +1 -1
  288. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  289. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  290. package/es-modules/masters/indicators/psar.src.js +1 -1
  291. package/es-modules/masters/indicators/regressions.src.js +1 -1
  292. package/es-modules/masters/indicators/roc.src.js +1 -1
  293. package/es-modules/masters/indicators/rsi.src.js +1 -1
  294. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  295. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  296. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  297. package/es-modules/masters/indicators/tema.src.js +1 -1
  298. package/es-modules/masters/indicators/trendline.src.js +1 -1
  299. package/es-modules/masters/indicators/trix.src.js +1 -1
  300. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  301. package/es-modules/masters/indicators/vwap.src.js +1 -1
  302. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  303. package/es-modules/masters/indicators/wma.src.js +1 -1
  304. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  305. package/es-modules/masters/modules/accessibility.src.js +16 -2
  306. package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
  307. package/es-modules/masters/modules/annotations.src.js +1 -1
  308. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  309. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  310. package/es-modules/masters/modules/boost.src.js +1 -1
  311. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  312. package/es-modules/masters/modules/bullet.src.js +1 -1
  313. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  314. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  315. package/es-modules/masters/modules/cylinder.src.js +1 -1
  316. package/es-modules/masters/modules/data.src.js +6 -3
  317. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  318. package/es-modules/masters/modules/debugger.src.js +1 -1
  319. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  320. package/es-modules/masters/modules/dotplot.src.js +1 -1
  321. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  322. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  323. package/es-modules/masters/modules/drilldown.src.js +1 -1
  324. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  325. package/es-modules/masters/modules/export-data.src.js +1 -1
  326. package/es-modules/masters/modules/exporting.src.js +1 -1
  327. package/es-modules/masters/modules/full-screen.src.js +1 -1
  328. package/es-modules/masters/modules/funnel.src.js +1 -1
  329. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  330. package/es-modules/masters/modules/gantt.src.js +1 -1
  331. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  332. package/es-modules/masters/modules/heatmap.src.js +1 -2
  333. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  334. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  335. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  336. package/es-modules/masters/modules/item-series.src.js +1 -1
  337. package/es-modules/masters/modules/lollipop.src.js +1 -1
  338. package/es-modules/masters/modules/map.src.js +1 -3
  339. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  340. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  341. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  342. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  343. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  344. package/es-modules/masters/modules/oldie.src.js +1 -1
  345. package/es-modules/masters/modules/organization.src.js +1 -1
  346. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  347. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  348. package/es-modules/masters/modules/pareto.src.js +1 -1
  349. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  350. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  351. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  352. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  353. package/es-modules/masters/modules/sankey.src.js +1 -1
  354. package/es-modules/masters/modules/series-label.src.js +1 -1
  355. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  356. package/es-modules/masters/modules/sonification.src.js +33 -2
  357. package/es-modules/masters/modules/static-scale.src.js +1 -1
  358. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  359. package/es-modules/masters/modules/stock.src.js +4 -1
  360. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  361. package/es-modules/masters/modules/sunburst.src.js +1 -1
  362. package/es-modules/masters/modules/tilemap.src.js +1 -1
  363. package/es-modules/masters/modules/timeline.src.js +1 -1
  364. package/es-modules/masters/modules/treegrid.src.js +1 -1
  365. package/es-modules/masters/modules/treemap.src.js +1 -1
  366. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  367. package/es-modules/masters/modules/variwide.src.js +1 -1
  368. package/es-modules/masters/modules/vector.src.js +1 -1
  369. package/es-modules/masters/modules/venn.src.js +1 -1
  370. package/es-modules/masters/modules/windbarb.src.js +1 -1
  371. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  372. package/es-modules/masters/modules/xrange.src.js +1 -1
  373. package/es-modules/masters/themes/avocado.src.js +1 -1
  374. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  375. package/es-modules/masters/themes/dark-green.src.js +1 -1
  376. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  377. package/es-modules/masters/themes/gray.src.js +1 -1
  378. package/es-modules/masters/themes/grid-light.src.js +1 -1
  379. package/es-modules/masters/themes/grid.src.js +1 -1
  380. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  381. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  382. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  383. package/es-modules/masters/themes/skies.src.js +1 -1
  384. package/es-modules/masters/themes/sunset.src.js +1 -1
  385. package/highcharts-3d.js +1 -1
  386. package/highcharts-3d.src.js +1 -1
  387. package/highcharts-gantt.js +801 -804
  388. package/highcharts-gantt.js.map +1 -1
  389. package/highcharts-gantt.src.js +775 -739
  390. package/highcharts-more.js +194 -193
  391. package/highcharts-more.js.map +1 -1
  392. package/highcharts-more.src.js +207 -119
  393. package/highcharts.d.ts +9670 -4217
  394. package/highcharts.js +585 -588
  395. package/highcharts.js.map +1 -1
  396. package/highcharts.src.d.ts +9670 -4217
  397. package/highcharts.src.js +608 -587
  398. package/highmaps.js +726 -708
  399. package/highmaps.js.map +1 -1
  400. package/highmaps.src.js +2708 -1587
  401. package/highstock.js +788 -783
  402. package/highstock.js.map +1 -1
  403. package/highstock.src.js +1896 -1267
  404. package/indicators/acceleration-bands.js +10 -9
  405. package/indicators/acceleration-bands.js.map +1 -1
  406. package/indicators/acceleration-bands.src.js +156 -112
  407. package/indicators/accumulation-distribution.js +1 -1
  408. package/indicators/accumulation-distribution.src.js +1 -1
  409. package/indicators/ao.js +6 -6
  410. package/indicators/ao.js.map +1 -1
  411. package/indicators/ao.src.js +4 -4
  412. package/indicators/apo.js +5 -6
  413. package/indicators/apo.js.map +1 -1
  414. package/indicators/apo.src.js +16 -84
  415. package/indicators/aroon-oscillator.js +9 -9
  416. package/indicators/aroon-oscillator.js.map +1 -1
  417. package/indicators/aroon-oscillator.src.js +160 -177
  418. package/indicators/aroon.js +9 -9
  419. package/indicators/aroon.js.map +1 -1
  420. package/indicators/aroon.src.js +156 -112
  421. package/indicators/atr.js +1 -1
  422. package/indicators/atr.src.js +1 -1
  423. package/indicators/bollinger-bands.js +10 -9
  424. package/indicators/bollinger-bands.js.map +1 -1
  425. package/indicators/bollinger-bands.src.js +180 -117
  426. package/indicators/cci.js +1 -1
  427. package/indicators/cci.src.js +1 -1
  428. package/indicators/chaikin.js +8 -9
  429. package/indicators/chaikin.js.map +1 -1
  430. package/indicators/chaikin.src.js +8 -76
  431. package/indicators/cmf.js +1 -1
  432. package/indicators/cmf.src.js +1 -1
  433. package/indicators/cmo.js +1 -1
  434. package/indicators/cmo.src.js +1 -1
  435. package/indicators/dema.js +5 -6
  436. package/indicators/dema.js.map +1 -1
  437. package/indicators/dema.src.js +3 -75
  438. package/indicators/disparity-index.js +6 -7
  439. package/indicators/disparity-index.js.map +1 -1
  440. package/indicators/disparity-index.src.js +19 -74
  441. package/indicators/dmi.js +11 -11
  442. package/indicators/dmi.js.map +1 -1
  443. package/indicators/dmi.src.js +173 -116
  444. package/indicators/dpo.js +1 -1
  445. package/indicators/dpo.src.js +1 -1
  446. package/indicators/ema.js +1 -13
  447. package/indicators/ema.js.map +1 -1
  448. package/indicators/ema.src.js +7 -188
  449. package/indicators/ichimoku-kinko-hyo.js +1 -1
  450. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  451. package/indicators/indicators-all.js +197 -203
  452. package/indicators/indicators-all.js.map +1 -1
  453. package/indicators/indicators-all.src.js +649 -720
  454. package/indicators/indicators.js +12 -12
  455. package/indicators/indicators.js.map +1 -1
  456. package/indicators/indicators.src.js +188 -124
  457. package/indicators/keltner-channels.js +10 -10
  458. package/indicators/keltner-channels.js.map +1 -1
  459. package/indicators/keltner-channels.src.js +164 -118
  460. package/indicators/klinger.js +12 -13
  461. package/indicators/klinger.js.map +1 -1
  462. package/indicators/klinger.src.js +161 -184
  463. package/indicators/macd.js +2 -2
  464. package/indicators/macd.js.map +1 -1
  465. package/indicators/macd.src.js +2 -3
  466. package/indicators/mfi.js +1 -1
  467. package/indicators/mfi.src.js +1 -1
  468. package/indicators/momentum.js +1 -1
  469. package/indicators/momentum.src.js +1 -1
  470. package/indicators/natr.js +3 -3
  471. package/indicators/natr.js.map +1 -1
  472. package/indicators/natr.src.js +2 -4
  473. package/indicators/obv.js +1 -1
  474. package/indicators/obv.src.js +1 -1
  475. package/indicators/pivot-points.js +1 -1
  476. package/indicators/pivot-points.src.js +1 -1
  477. package/indicators/ppo.js +5 -6
  478. package/indicators/ppo.js.map +1 -1
  479. package/indicators/ppo.src.js +3 -75
  480. package/indicators/price-channel.js +9 -9
  481. package/indicators/price-channel.js.map +1 -1
  482. package/indicators/price-channel.src.js +207 -168
  483. package/indicators/price-envelopes.js +1 -1
  484. package/indicators/price-envelopes.src.js +1 -1
  485. package/indicators/psar.js +1 -1
  486. package/indicators/psar.src.js +1 -1
  487. package/indicators/regressions.js +1 -1
  488. package/indicators/regressions.src.js +9 -9
  489. package/indicators/roc.js +1 -1
  490. package/indicators/roc.src.js +1 -1
  491. package/indicators/rsi.js +1 -1
  492. package/indicators/rsi.src.js +1 -1
  493. package/indicators/slow-stochastic.js +5 -6
  494. package/indicators/slow-stochastic.js.map +1 -1
  495. package/indicators/slow-stochastic.src.js +2 -72
  496. package/indicators/stochastic.js +10 -10
  497. package/indicators/stochastic.js.map +1 -1
  498. package/indicators/stochastic.src.js +209 -164
  499. package/indicators/supertrend.js +10 -10
  500. package/indicators/supertrend.js.map +1 -1
  501. package/indicators/supertrend.src.js +6 -7
  502. package/indicators/tema.js +6 -7
  503. package/indicators/tema.js.map +1 -1
  504. package/indicators/tema.src.js +28 -75
  505. package/indicators/trendline.js +1 -1
  506. package/indicators/trendline.src.js +1 -1
  507. package/indicators/trix.js +4 -5
  508. package/indicators/trix.js.map +1 -1
  509. package/indicators/trix.src.js +8 -76
  510. package/indicators/volume-by-price.js +16 -16
  511. package/indicators/volume-by-price.js.map +1 -1
  512. package/indicators/volume-by-price.src.js +21 -3
  513. package/indicators/vwap.js +1 -1
  514. package/indicators/vwap.src.js +1 -1
  515. package/indicators/williams-r.js +5 -6
  516. package/indicators/williams-r.js.map +1 -1
  517. package/indicators/williams-r.src.js +41 -51
  518. package/indicators/wma.js +1 -1
  519. package/indicators/wma.src.js +1 -1
  520. package/indicators/zigzag.js +1 -1
  521. package/indicators/zigzag.src.js +1 -1
  522. package/modules/accessibility.d.ts +5 -0
  523. package/modules/accessibility.js +234 -216
  524. package/modules/accessibility.js.map +1 -1
  525. package/modules/accessibility.src.d.ts +5 -0
  526. package/modules/accessibility.src.js +9709 -8608
  527. package/modules/annotations-advanced.d.ts +30 -0
  528. package/modules/annotations-advanced.js +191 -165
  529. package/modules/annotations-advanced.js.map +1 -1
  530. package/modules/annotations-advanced.src.d.ts +30 -0
  531. package/modules/annotations-advanced.src.js +1578 -320
  532. package/modules/annotations.js +121 -107
  533. package/modules/annotations.js.map +1 -1
  534. package/modules/annotations.src.js +958 -229
  535. package/modules/arrow-symbols.js +1 -1
  536. package/modules/arrow-symbols.src.js +1 -1
  537. package/modules/boost-canvas.js +15 -15
  538. package/modules/boost-canvas.js.map +1 -1
  539. package/modules/boost-canvas.src.js +3 -3
  540. package/modules/boost.js +79 -79
  541. package/modules/boost.js.map +1 -1
  542. package/modules/boost.src.js +10 -9
  543. package/modules/broken-axis.js +1 -1
  544. package/modules/broken-axis.src.js +1 -1
  545. package/modules/bullet.js +1 -1
  546. package/modules/bullet.src.js +1 -1
  547. package/modules/coloraxis.js +24 -24
  548. package/modules/coloraxis.js.map +1 -1
  549. package/modules/coloraxis.src.js +69 -98
  550. package/modules/current-date-indicator.js +4 -4
  551. package/modules/current-date-indicator.js.map +1 -1
  552. package/modules/current-date-indicator.src.js +4 -4
  553. package/modules/cylinder.js +1 -1
  554. package/modules/cylinder.src.js +1 -1
  555. package/modules/data.js +19 -19
  556. package/modules/data.js.map +1 -1
  557. package/modules/data.src.js +9 -6
  558. package/modules/datagrouping.js +20 -20
  559. package/modules/datagrouping.js.map +1 -1
  560. package/modules/datagrouping.src.js +33 -19
  561. package/modules/debugger.js +1 -1
  562. package/modules/debugger.src.js +1 -1
  563. package/modules/dependency-wheel.js +11 -11
  564. package/modules/dependency-wheel.js.map +1 -1
  565. package/modules/dependency-wheel.src.js +4 -7
  566. package/modules/dotplot.js +1 -1
  567. package/modules/dotplot.src.js +1 -1
  568. package/modules/drag-panes.js +8 -8
  569. package/modules/drag-panes.js.map +1 -1
  570. package/modules/drag-panes.src.js +3 -3
  571. package/modules/draggable-points.js +1 -1
  572. package/modules/draggable-points.src.js +1 -1
  573. package/modules/drilldown.js +24 -24
  574. package/modules/drilldown.js.map +1 -1
  575. package/modules/drilldown.src.js +4 -4
  576. package/modules/dumbbell.js +17 -17
  577. package/modules/dumbbell.js.map +1 -1
  578. package/modules/dumbbell.src.js +4 -4
  579. package/modules/export-data.js +1 -1
  580. package/modules/export-data.js.map +1 -1
  581. package/modules/export-data.src.js +3 -3
  582. package/modules/exporting.js +39 -38
  583. package/modules/exporting.js.map +1 -1
  584. package/modules/exporting.src.js +98 -67
  585. package/modules/full-screen.js +1 -1
  586. package/modules/full-screen.src.js +1 -1
  587. package/modules/funnel.js +12 -12
  588. package/modules/funnel.js.map +1 -1
  589. package/modules/funnel.src.js +9 -6
  590. package/modules/funnel3d.js +1 -1
  591. package/modules/funnel3d.src.js +1 -1
  592. package/modules/gantt.js +217 -218
  593. package/modules/gantt.js.map +1 -1
  594. package/modules/gantt.src.js +167 -152
  595. package/modules/grid-axis.js +1 -1
  596. package/modules/grid-axis.src.js +1 -1
  597. package/modules/heatmap.js +39 -39
  598. package/modules/heatmap.js.map +1 -1
  599. package/modules/heatmap.src.js +177 -162
  600. package/modules/heikinashi.js +1 -1
  601. package/modules/heikinashi.src.js +4 -4
  602. package/modules/histogram-bellcurve.js +13 -13
  603. package/modules/histogram-bellcurve.js.map +1 -1
  604. package/modules/histogram-bellcurve.src.js +91 -86
  605. package/modules/hollowcandlestick.js +9 -9
  606. package/modules/hollowcandlestick.js.map +1 -1
  607. package/modules/hollowcandlestick.src.js +11 -11
  608. package/modules/item-series.js +1 -1
  609. package/modules/item-series.src.js +1 -1
  610. package/modules/lollipop.js +1 -1
  611. package/modules/lollipop.src.js +1 -1
  612. package/modules/map.d.ts +136 -14
  613. package/modules/map.js +142 -122
  614. package/modules/map.js.map +1 -1
  615. package/modules/map.src.d.ts +136 -14
  616. package/modules/map.src.js +2129 -1029
  617. package/modules/marker-clusters.js +36 -36
  618. package/modules/marker-clusters.js.map +1 -1
  619. package/modules/marker-clusters.src.js +173 -142
  620. package/modules/networkgraph.d.ts +12 -1
  621. package/modules/networkgraph.js +49 -49
  622. package/modules/networkgraph.js.map +1 -1
  623. package/modules/networkgraph.src.d.ts +12 -1
  624. package/modules/networkgraph.src.js +91 -43
  625. package/modules/no-data-to-display.js +5 -5
  626. package/modules/no-data-to-display.js.map +1 -1
  627. package/modules/no-data-to-display.src.js +3 -3
  628. package/modules/offline-exporting.js +17 -17
  629. package/modules/offline-exporting.js.map +1 -1
  630. package/modules/offline-exporting.src.js +13 -13
  631. package/modules/oldie-polyfills.js +1 -1
  632. package/modules/oldie-polyfills.src.js +1 -1
  633. package/modules/oldie.js +26 -26
  634. package/modules/oldie.js.map +1 -1
  635. package/modules/oldie.src.js +4 -4
  636. package/modules/organization.js +13 -13
  637. package/modules/organization.js.map +1 -1
  638. package/modules/organization.src.js +4 -4
  639. package/modules/overlapping-datalabels.js +1 -1
  640. package/modules/overlapping-datalabels.src.js +1 -1
  641. package/modules/parallel-coordinates.js +1 -1
  642. package/modules/parallel-coordinates.src.js +1 -1
  643. package/modules/pareto.js +7 -7
  644. package/modules/pareto.js.map +1 -1
  645. package/modules/pareto.src.js +89 -78
  646. package/modules/pathfinder.js +1 -1
  647. package/modules/pathfinder.src.js +1 -1
  648. package/modules/pattern-fill.js +1 -1
  649. package/modules/pattern-fill.src.js +1 -1
  650. package/modules/price-indicator.js +1 -1
  651. package/modules/price-indicator.src.js +1 -1
  652. package/modules/pyramid3d.js +1 -1
  653. package/modules/pyramid3d.src.js +1 -1
  654. package/modules/sankey.d.ts +12 -1
  655. package/modules/sankey.js +29 -29
  656. package/modules/sankey.js.map +1 -1
  657. package/modules/sankey.src.d.ts +12 -1
  658. package/modules/sankey.src.js +300 -176
  659. package/modules/series-label.js +1 -1
  660. package/modules/series-label.src.js +1 -1
  661. package/modules/solid-gauge.js +1 -1
  662. package/modules/solid-gauge.src.js +1 -1
  663. package/modules/sonification.js +59 -55
  664. package/modules/sonification.js.map +1 -1
  665. package/modules/sonification.src.js +3034 -2553
  666. package/modules/static-scale.js +1 -1
  667. package/modules/static-scale.src.js +1 -1
  668. package/modules/stock-tools.js +177 -164
  669. package/modules/stock-tools.js.map +1 -1
  670. package/modules/stock-tools.src.js +1001 -131
  671. package/modules/stock.d.ts +39 -6
  672. package/modules/stock.js +204 -196
  673. package/modules/stock.js.map +1 -1
  674. package/modules/stock.src.d.ts +39 -6
  675. package/modules/stock.src.js +1689 -1081
  676. package/modules/streamgraph.js +1 -1
  677. package/modules/streamgraph.src.js +1 -1
  678. package/modules/sunburst.js +61 -60
  679. package/modules/sunburst.js.map +1 -1
  680. package/modules/sunburst.src.js +329 -266
  681. package/modules/tilemap.js +17 -17
  682. package/modules/tilemap.js.map +1 -1
  683. package/modules/tilemap.src.js +3 -4
  684. package/modules/timeline.js +18 -18
  685. package/modules/timeline.js.map +1 -1
  686. package/modules/timeline.src.js +5 -5
  687. package/modules/treegrid.js +56 -57
  688. package/modules/treegrid.js.map +1 -1
  689. package/modules/treegrid.src.js +126 -120
  690. package/modules/treemap.js +41 -41
  691. package/modules/treemap.js.map +1 -1
  692. package/modules/treemap.src.js +319 -254
  693. package/modules/variable-pie.js +1 -1
  694. package/modules/variable-pie.src.js +1 -1
  695. package/modules/variwide.js +1 -1
  696. package/modules/variwide.src.js +1 -1
  697. package/modules/vector.js +1 -1
  698. package/modules/vector.src.js +1 -1
  699. package/modules/venn.js +31 -31
  700. package/modules/venn.js.map +1 -1
  701. package/modules/venn.src.js +731 -721
  702. package/modules/windbarb.js +15 -15
  703. package/modules/windbarb.js.map +1 -1
  704. package/modules/windbarb.src.js +90 -62
  705. package/modules/wordcloud.js +23 -24
  706. package/modules/wordcloud.js.map +1 -1
  707. package/modules/wordcloud.src.js +897 -949
  708. package/modules/xrange.js +2 -2
  709. package/modules/xrange.js.map +1 -1
  710. package/modules/xrange.src.js +2 -1
  711. package/package.json +1 -1
  712. package/themes/avocado.js +1 -1
  713. package/themes/avocado.src.js +1 -1
  714. package/themes/dark-blue.js +1 -1
  715. package/themes/dark-blue.src.js +1 -1
  716. package/themes/dark-green.js +1 -1
  717. package/themes/dark-green.src.js +1 -1
  718. package/themes/dark-unica.js +1 -1
  719. package/themes/dark-unica.src.js +1 -1
  720. package/themes/gray.js +1 -1
  721. package/themes/gray.src.js +1 -1
  722. package/themes/grid-light.js +1 -1
  723. package/themes/grid-light.src.js +1 -1
  724. package/themes/grid.js +1 -1
  725. package/themes/grid.src.js +1 -1
  726. package/themes/high-contrast-dark.js +1 -1
  727. package/themes/high-contrast-dark.src.js +1 -1
  728. package/themes/high-contrast-light.js +1 -1
  729. package/themes/high-contrast-light.src.js +1 -1
  730. package/themes/sand-signika.js +1 -1
  731. package/themes/sand-signika.src.js +1 -1
  732. package/themes/skies.js +1 -1
  733. package/themes/skies.src.js +1 -1
  734. package/themes/sunset.js +1 -1
  735. package/themes/sunset.src.js +1 -1
  736. package/es-modules/Core/Axis/MapAxis.js +0 -157
  737. package/es-modules/Core/Color/Palette.js +0 -82
  738. package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
  739. package/es-modules/Mixins/ColorMapSeries.js +0 -82
  740. package/es-modules/Mixins/ColorSeries.js +0 -77
  741. package/es-modules/Mixins/DerivedSeries.js +0 -118
  742. package/es-modules/Mixins/DrawPoint.js +0 -81
  743. package/es-modules/Mixins/IndicatorRequired.js +0 -56
  744. package/es-modules/Mixins/Navigation.js +0 -54
  745. package/es-modules/Mixins/NelderMead.js +0 -132
  746. package/es-modules/Mixins/Polygon.js +0 -259
  747. package/es-modules/Mixins/ReduceArray.js +0 -54
@@ -9,525 +9,714 @@
9
9
  *
10
10
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
11
11
  * */
12
- import PolygonMixin from '../../Mixins/Polygon.js';
13
- var isPolygonsColliding = PolygonMixin.isPolygonsColliding, movePolygon = PolygonMixin.movePolygon;
12
+ 'use strict';
13
+ import H from '../../Core/Globals.js';
14
+ var deg2rad = H.deg2rad;
14
15
  import U from '../../Core/Utilities.js';
15
16
  var extend = U.extend, find = U.find, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge;
16
17
  /* *
17
- *
18
- * Namespace
19
- *
20
- * */
21
- var WordcloudUtils;
22
- (function (WordcloudUtils) {
23
- /* *
24
- *
25
- * Functions
26
- *
27
- * */
28
- /**
29
- * Detects if there is a collision between two rectangles.
30
- *
31
- * @private
32
- * @function isRectanglesIntersecting
33
- *
34
- * @param {Highcharts.PolygonBoxObject} r1
35
- * First rectangle.
36
- *
37
- * @param {Highcharts.PolygonBoxObject} r2
38
- * Second rectangle.
39
- *
40
- * @return {boolean}
41
- * Returns true if the rectangles overlap.
42
- */
43
- function isRectanglesIntersecting(r1, r2) {
44
- return !(r2.left > r1.right ||
45
- r2.right < r1.left ||
46
- r2.top > r1.bottom ||
47
- r2.bottom < r1.top);
18
+ *
19
+ * Functions
20
+ *
21
+ * */
22
+ /* eslint-disable valid-jsdoc */
23
+ /**
24
+ * Detects if there is a collision between two rectangles.
25
+ *
26
+ * @private
27
+ * @function isRectanglesIntersecting
28
+ *
29
+ * @param {Highcharts.PolygonBoxObject} r1
30
+ * First rectangle.
31
+ *
32
+ * @param {Highcharts.PolygonBoxObject} r2
33
+ * Second rectangle.
34
+ *
35
+ * @return {boolean}
36
+ * Returns true if the rectangles overlap.
37
+ */
38
+ function isRectanglesIntersecting(r1, r2) {
39
+ return !(r2.left > r1.right ||
40
+ r2.right < r1.left ||
41
+ r2.top > r1.bottom ||
42
+ r2.bottom < r1.top);
43
+ }
44
+ /**
45
+ * Calculates the normals to a line between two points.
46
+ *
47
+ * @private
48
+ * @function getNormals
49
+ * @param {Highcharts.PolygonPointObject} p1
50
+ * Start point for the line. Array of x and y value.
51
+ * @param {Highcharts.PolygonPointObject} p2
52
+ * End point for the line. Array of x and y value.
53
+ * @return {Highcharts.PolygonObject}
54
+ * Returns the two normals in an array.
55
+ */
56
+ function getNormals(p1, p2) {
57
+ var dx = p2[0] - p1[0], // x2 - x1
58
+ dy = p2[1] - p1[1]; // y2 - y1
59
+ return [
60
+ [-dy, dx],
61
+ [dy, -dx]
62
+ ];
63
+ }
64
+ /**
65
+ * @private
66
+ */
67
+ function getAxesFromPolygon(polygon) {
68
+ var points, axes = polygon.axes || [];
69
+ if (!axes.length) {
70
+ axes = [];
71
+ points = points = polygon.concat([polygon[0]]);
72
+ points.reduce(function findAxis(p1, p2) {
73
+ var normals = getNormals(p1, p2), axis = normals[0]; // Use the left normal as axis.
74
+ // Check that the axis is unique.
75
+ if (!find(axes, function (existing) {
76
+ return existing[0] === axis[0] &&
77
+ existing[1] === axis[1];
78
+ })) {
79
+ axes.push(axis);
80
+ }
81
+ // Return p2 to be used as p1 in next iteration.
82
+ return p2;
83
+ });
84
+ polygon.axes = axes;
48
85
  }
49
- WordcloudUtils.isRectanglesIntersecting = isRectanglesIntersecting;
50
- /**
51
- * Detects if a word collides with any previously placed words.
52
- *
53
- * @private
54
- * @function intersectsAnyWord
55
- *
56
- * @param {Highcharts.Point} point
57
- * Point which the word is connected to.
58
- *
59
- * @param {Array<Highcharts.Point>} points
60
- * Previously placed points to check against.
61
- *
62
- * @return {boolean}
63
- * Returns true if there is collision.
64
- */
65
- function intersectsAnyWord(point, points) {
66
- var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
67
- var result = isRectanglesIntersecting(rect, p.rect);
68
- if (result &&
69
- (point.rotation % 90 || p.rotation % 90)) {
70
- result = isPolygonsColliding(polygon, p.polygon);
86
+ return axes;
87
+ }
88
+ /**
89
+ * Projects a polygon onto a coordinate.
90
+ *
91
+ * @private
92
+ * @function project
93
+ * @param {Highcharts.PolygonObject} polygon
94
+ * Array of points in a polygon.
95
+ * @param {Highcharts.PolygonPointObject} target
96
+ * The coordinate of pr
97
+ * @return {Highcharts.RangeObject}
98
+ */
99
+ function project(polygon, target) {
100
+ var products = polygon.map(function (point) {
101
+ var ax = point[0], ay = point[1], bx = target[0], by = target[1];
102
+ return ax * bx + ay * by;
103
+ });
104
+ return {
105
+ min: Math.min.apply(this, products),
106
+ max: Math.max.apply(this, products)
107
+ };
108
+ }
109
+ /**
110
+ * @private
111
+ */
112
+ function isPolygonsOverlappingOnAxis(axis, polygon1, polygon2) {
113
+ var projection1 = project(polygon1, axis), projection2 = project(polygon2, axis), isOverlapping = !(projection2.min > projection1.max ||
114
+ projection2.max < projection1.min);
115
+ return !isOverlapping;
116
+ }
117
+ /**
118
+ * Checks wether two convex polygons are colliding by using the Separating
119
+ * Axis Theorem.
120
+ *
121
+ * @private
122
+ * @function isPolygonsColliding
123
+ * @param {Highcharts.PolygonObject} polygon1
124
+ * First polygon.
125
+ *
126
+ * @param {Highcharts.PolygonObject} polygon2
127
+ * Second polygon.
128
+ *
129
+ * @return {boolean}
130
+ * Returns true if they are colliding, otherwise false.
131
+ */
132
+ function isPolygonsColliding(polygon1, polygon2) {
133
+ // Get the axis from both polygons.
134
+ var axes1 = getAxesFromPolygon(polygon1), axes2 = getAxesFromPolygon(polygon2), axes = axes1.concat(axes2), overlappingOnAllAxes = !find(axes, function (axis) { return isPolygonsOverlappingOnAxis(axis, polygon1, polygon2); });
135
+ return overlappingOnAllAxes;
136
+ }
137
+ /**
138
+ * Detects if a word collides with any previously placed words.
139
+ *
140
+ * @private
141
+ * @function intersectsAnyWord
142
+ *
143
+ * @param {Highcharts.Point} point
144
+ * Point which the word is connected to.
145
+ *
146
+ * @param {Array<Highcharts.Point>} points
147
+ * Previously placed points to check against.
148
+ *
149
+ * @return {boolean}
150
+ * Returns true if there is collision.
151
+ */
152
+ function intersectsAnyWord(point, points) {
153
+ var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
154
+ var result = isRectanglesIntersecting(rect, p.rect);
155
+ if (result &&
156
+ (point.rotation % 90 || p.rotation % 90)) {
157
+ result = isPolygonsColliding(polygon, p.polygon);
158
+ }
159
+ return result;
160
+ };
161
+ // If the point has already intersected a different point, chances are
162
+ // they are still intersecting. So as an enhancement we check this
163
+ // first.
164
+ if (lastCollidedWith) {
165
+ intersects = isIntersecting(lastCollidedWith);
166
+ // If they no longer intersects, remove the cache from the point.
167
+ if (!intersects) {
168
+ delete point.lastCollidedWith;
169
+ }
170
+ }
171
+ // If not already found, then check if we can find a point that is
172
+ // intersecting.
173
+ if (!intersects) {
174
+ intersects = !!find(points, function (p) {
175
+ var result = isIntersecting(p);
176
+ if (result) {
177
+ point.lastCollidedWith = p;
71
178
  }
72
179
  return result;
180
+ });
181
+ }
182
+ return intersects;
183
+ }
184
+ /**
185
+ * Gives a set of cordinates for an Archimedian Spiral.
186
+ *
187
+ * @private
188
+ * @function archimedeanSpiral
189
+ *
190
+ * @param {number} attempt
191
+ * How far along the spiral we have traversed.
192
+ *
193
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
194
+ * Additional parameters.
195
+ *
196
+ * @return {boolean|Highcharts.PositionObject}
197
+ * Resulting coordinates, x and y. False if the word should be dropped from
198
+ * the visualization.
199
+ */
200
+ function archimedeanSpiral(attempt, params) {
201
+ var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
202
+ // Emergency brake. TODO make spiralling logic more foolproof.
203
+ if (attempt <= 10000) {
204
+ result = {
205
+ x: t * Math.cos(t),
206
+ y: t * Math.sin(t)
73
207
  };
74
- // If the point has already intersected a different point, chances are
75
- // they are still intersecting. So as an enhancement we check this
76
- // first.
77
- if (lastCollidedWith) {
78
- intersects = isIntersecting(lastCollidedWith);
79
- // If they no longer intersects, remove the cache from the point.
80
- if (!intersects) {
81
- delete point.lastCollidedWith;
82
- }
83
- }
84
- // If not already found, then check if we can find a point that is
85
- // intersecting.
86
- if (!intersects) {
87
- intersects = !!find(points, function (p) {
88
- var result = isIntersecting(p);
89
- if (result) {
90
- point.lastCollidedWith = p;
91
- }
92
- return result;
93
- });
208
+ if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
209
+ result = false;
94
210
  }
95
- return intersects;
96
211
  }
97
- WordcloudUtils.intersectsAnyWord = intersectsAnyWord;
98
- /**
99
- * Gives a set of cordinates for an Archimedian Spiral.
100
- *
101
- * @private
102
- * @function archimedeanSpiral
103
- *
104
- * @param {number} attempt
105
- * How far along the spiral we have traversed.
106
- *
107
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
108
- * Additional parameters.
109
- *
110
- * @return {boolean|Highcharts.PositionObject}
111
- * Resulting coordinates, x and y. False if the word should be dropped from
112
- * the visualization.
113
- */
114
- function archimedeanSpiral(attempt, params) {
115
- var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
116
- // Emergency brake. TODO make spiralling logic more foolproof.
117
- if (attempt <= 10000) {
212
+ return result;
213
+ }
214
+ /**
215
+ * Gives a set of cordinates for an rectangular spiral.
216
+ *
217
+ * @private
218
+ * @function squareSpiral
219
+ *
220
+ * @param {number} attempt
221
+ * How far along the spiral we have traversed.
222
+ *
223
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
224
+ * Additional parameters.
225
+ *
226
+ * @return {boolean|Highcharts.PositionObject}
227
+ * Resulting coordinates, x and y. False if the word should be dropped from
228
+ * the visualization.
229
+ */
230
+ function squareSpiral(attempt, params) {
231
+ var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
232
+ return typeof x === 'boolean';
233
+ }, result = false;
234
+ t -= 1;
235
+ if (attempt <= 10000) {
236
+ if (isBoolean(result) && a >= m - t) {
118
237
  result = {
119
- x: t * Math.cos(t),
120
- y: t * Math.sin(t)
238
+ x: k - (m - a),
239
+ y: -k
121
240
  };
122
- if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
123
- result = false;
124
- }
125
241
  }
126
- return result;
127
- }
128
- WordcloudUtils.archimedeanSpiral = archimedeanSpiral;
129
- /**
130
- * Gives a set of cordinates for an rectangular spiral.
131
- *
132
- * @private
133
- * @function squareSpiral
134
- *
135
- * @param {number} attempt
136
- * How far along the spiral we have traversed.
137
- *
138
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
139
- * Additional parameters.
140
- *
141
- * @return {boolean|Highcharts.PositionObject}
142
- * Resulting coordinates, x and y. False if the word should be dropped from
143
- * the visualization.
144
- */
145
- function squareSpiral(attempt, params) {
146
- var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
147
- return typeof x === 'boolean';
148
- }, result = false;
149
- t -= 1;
150
- if (attempt <= 10000) {
151
- if (isBoolean(result) && a >= m - t) {
242
+ m -= t;
243
+ if (isBoolean(result) && a >= m - t) {
244
+ result = {
245
+ x: -k,
246
+ y: -k + (m - a)
247
+ };
248
+ }
249
+ m -= t;
250
+ if (isBoolean(result)) {
251
+ if (a >= m - t) {
152
252
  result = {
153
- x: k - (m - a),
154
- y: -k
253
+ x: -k + (m - a),
254
+ y: k
155
255
  };
156
256
  }
157
- m -= t;
158
- if (isBoolean(result) && a >= m - t) {
257
+ else {
159
258
  result = {
160
- x: -k,
161
- y: -k + (m - a)
259
+ x: k,
260
+ y: k - (m - a - t)
162
261
  };
163
262
  }
164
- m -= t;
165
- if (isBoolean(result)) {
166
- if (a >= m - t) {
167
- result = {
168
- x: -k + (m - a),
169
- y: k
170
- };
171
- }
172
- else {
173
- result = {
174
- x: k,
175
- y: k - (m - a - t)
176
- };
177
- }
178
- }
179
- result.x *= 5;
180
- result.y *= 5;
181
263
  }
182
- return result;
264
+ result.x *= 5;
265
+ result.y *= 5;
183
266
  }
184
- WordcloudUtils.squareSpiral = squareSpiral;
185
- /**
186
- * Gives a set of cordinates for an rectangular spiral.
187
- *
188
- * @private
189
- * @function rectangularSpiral
190
- *
191
- * @param {number} attempt
192
- * How far along the spiral we have traversed.
193
- *
194
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
195
- * Additional parameters.
196
- *
197
- * @return {boolean|Higcharts.PositionObject}
198
- * Resulting coordinates, x and y. False if the word should be dropped from
199
- * the visualization.
200
- */
201
- function rectangularSpiral(attempt, params) {
202
- var result = squareSpiral(attempt, params), field = params.field;
203
- if (result) {
204
- result.x *= field.ratioX;
205
- result.y *= field.ratioY;
206
- }
207
- return result;
208
- }
209
- WordcloudUtils.rectangularSpiral = rectangularSpiral;
210
- /**
211
- * @private
212
- * @function getRandomPosition
213
- *
214
- * @param {number} size
215
- * Random factor.
216
- *
217
- * @return {number}
218
- * Random position.
219
- */
220
- function getRandomPosition(size) {
221
- return Math.round((size * (Math.random() + 0.5)) / 2);
267
+ return result;
268
+ }
269
+ /**
270
+ * Gives a set of cordinates for an rectangular spiral.
271
+ *
272
+ * @private
273
+ * @function rectangularSpiral
274
+ *
275
+ * @param {number} attempt
276
+ * How far along the spiral we have traversed.
277
+ *
278
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
279
+ * Additional parameters.
280
+ *
281
+ * @return {boolean|Higcharts.PositionObject}
282
+ * Resulting coordinates, x and y. False if the word should be dropped from
283
+ * the visualization.
284
+ */
285
+ function rectangularSpiral(attempt, params) {
286
+ var result = squareSpiral(attempt, params), field = params.field;
287
+ if (result) {
288
+ result.x *= field.ratioX;
289
+ result.y *= field.ratioY;
222
290
  }
223
- WordcloudUtils.getRandomPosition = getRandomPosition;
291
+ return result;
292
+ }
293
+ /**
294
+ * @private
295
+ * @function getRandomPosition
296
+ *
297
+ * @param {number} size
298
+ * Random factor.
299
+ *
300
+ * @return {number}
301
+ * Random position.
302
+ */
303
+ function getRandomPosition(size) {
304
+ return Math.round((size * (Math.random() + 0.5)) / 2);
305
+ }
306
+ /**
307
+ * Calculates the proper scale to fit the cloud inside the plotting area.
308
+ *
309
+ * @private
310
+ * @function getScale
311
+ *
312
+ * @param {number} targetWidth
313
+ * Width of target area.
314
+ *
315
+ * @param {number} targetHeight
316
+ * Height of target area.
317
+ *
318
+ * @param {object} field
319
+ * The playing field.
320
+ *
321
+ * @param {Highcharts.Series} series
322
+ * Series object.
323
+ *
324
+ * @return {number}
325
+ * Returns the value to scale the playing field up to the size of the target
326
+ * area.
327
+ */
328
+ function getScale(targetWidth, targetHeight, field) {
329
+ var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
330
+ return Math.min(scaleX, scaleY);
331
+ }
332
+ /**
333
+ * Calculates what is called the playing field. The field is the area which
334
+ * all the words are allowed to be positioned within. The area is
335
+ * proportioned to match the target aspect ratio.
336
+ *
337
+ * @private
338
+ * @function getPlayingField
339
+ *
340
+ * @param {number} targetWidth
341
+ * Width of the target area.
342
+ *
343
+ * @param {number} targetHeight
344
+ * Height of the target area.
345
+ *
346
+ * @param {Array<Highcharts.Point>} data
347
+ * Array of points.
348
+ *
349
+ * @param {object} data.dimensions
350
+ * The height and width of the word.
351
+ *
352
+ * @return {object}
353
+ * The width and height of the playing field.
354
+ */
355
+ function getPlayingField(targetWidth, targetHeight, data) {
356
+ var info = data.reduce(function (obj, point) {
357
+ var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
358
+ // Find largest height.
359
+ obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
360
+ // Find largest width.
361
+ obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
362
+ // Sum up the total maximum area of all the words.
363
+ obj.area += x * x;
364
+ return obj;
365
+ }, {
366
+ maxHeight: 0,
367
+ maxWidth: 0,
368
+ area: 0
369
+ }),
224
370
  /**
225
- * Calculates the proper scale to fit the cloud inside the plotting area.
226
- *
227
- * @private
228
- * @function getScale
229
- *
230
- * @param {number} targetWidth
231
- * Width of target area.
232
- *
233
- * @param {number} targetHeight
234
- * Height of target area.
235
- *
236
- * @param {object} field
237
- * The playing field.
238
- *
239
- * @param {Highcharts.Series} series
240
- * Series object.
241
- *
242
- * @return {number}
243
- * Returns the value to scale the playing field up to the size of the target
244
- * area.
371
+ * Use largest width, largest height, or root of total area to give
372
+ * size to the playing field.
245
373
  */
246
- function getScale(targetWidth, targetHeight, field) {
247
- var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
248
- return Math.min(scaleX, scaleY);
374
+ x = Math.max(info.maxHeight, // Have enough space for the tallest word
375
+ info.maxWidth, // Have enough space for the broadest word
376
+ // Adjust 15% to account for close packing of words
377
+ Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
378
+ return {
379
+ width: x * ratioX,
380
+ height: x * ratioY,
381
+ ratioX: ratioX,
382
+ ratioY: ratioY
383
+ };
384
+ }
385
+ /**
386
+ * Calculates a number of degrees to rotate, based upon a number of
387
+ * orientations within a range from-to.
388
+ *
389
+ * @private
390
+ * @function getRotation
391
+ *
392
+ * @param {number} [orientations]
393
+ * Number of orientations.
394
+ *
395
+ * @param {number} [index]
396
+ * Index of point, used to decide orientation.
397
+ *
398
+ * @param {number} [from]
399
+ * The smallest degree of rotation.
400
+ *
401
+ * @param {number} [to]
402
+ * The largest degree of rotation.
403
+ *
404
+ * @return {boolean|number}
405
+ * Returns the resulting rotation for the word. Returns false if invalid
406
+ * input parameters.
407
+ */
408
+ function getRotation(orientations, index, from, to) {
409
+ var result = false, // Default to false
410
+ range, intervals, orientation;
411
+ // Check if we have valid input parameters.
412
+ if (isNumber(orientations) &&
413
+ isNumber(index) &&
414
+ isNumber(from) &&
415
+ isNumber(to) &&
416
+ orientations > 0 &&
417
+ index > -1 &&
418
+ to > from) {
419
+ range = to - from;
420
+ intervals = range / (orientations - 1 || 1);
421
+ orientation = index % orientations;
422
+ result = from + (orientation * intervals);
249
423
  }
250
- WordcloudUtils.getScale = getScale;
251
- /**
252
- * Calculates what is called the playing field. The field is the area which
253
- * all the words are allowed to be positioned within. The area is
254
- * proportioned to match the target aspect ratio.
255
- *
256
- * @private
257
- * @function getPlayingField
258
- *
259
- * @param {number} targetWidth
260
- * Width of the target area.
261
- *
262
- * @param {number} targetHeight
263
- * Height of the target area.
264
- *
265
- * @param {Array<Highcharts.Point>} data
266
- * Array of points.
267
- *
268
- * @param {object} data.dimensions
269
- * The height and width of the word.
270
- *
271
- * @return {object}
272
- * The width and height of the playing field.
273
- */
274
- function getPlayingField(targetWidth, targetHeight, data) {
275
- var info = data.reduce(function (obj, point) {
276
- var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
277
- // Find largest height.
278
- obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
279
- // Find largest width.
280
- obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
281
- // Sum up the total maximum area of all the words.
282
- obj.area += x * x;
283
- return obj;
284
- }, {
285
- maxHeight: 0,
286
- maxWidth: 0,
287
- area: 0
288
- }),
289
- /**
290
- * Use largest width, largest height, or root of total area to give
291
- * size to the playing field.
292
- */
293
- x = Math.max(info.maxHeight, // Have enough space for the tallest word
294
- info.maxWidth, // Have enough space for the broadest word
295
- // Adjust 15% to account for close packing of words
296
- Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
297
- return {
298
- width: x * ratioX,
299
- height: x * ratioY,
300
- ratioX: ratioX,
301
- ratioY: ratioY
302
- };
424
+ return result;
425
+ }
426
+ /**
427
+ * Calculates the spiral positions and store them in scope for quick access.
428
+ *
429
+ * @private
430
+ * @function getSpiral
431
+ *
432
+ * @param {Function} fn
433
+ * The spiral function.
434
+ *
435
+ * @param {object} params
436
+ * Additional parameters for the spiral.
437
+ *
438
+ * @return {Function}
439
+ * Function with access to spiral positions.
440
+ */
441
+ function getSpiral(fn, params) {
442
+ var length = 10000, i, arr = [];
443
+ for (i = 1; i < length; i++) {
444
+ // @todo unnecessary amount of precaclulation
445
+ arr.push(fn(i, params));
303
446
  }
304
- WordcloudUtils.getPlayingField = getPlayingField;
305
- /**
306
- * Calculates a number of degrees to rotate, based upon a number of
307
- * orientations within a range from-to.
308
- *
309
- * @private
310
- * @function getRotation
311
- *
312
- * @param {number} [orientations]
313
- * Number of orientations.
314
- *
315
- * @param {number} [index]
316
- * Index of point, used to decide orientation.
317
- *
318
- * @param {number} [from]
319
- * The smallest degree of rotation.
320
- *
321
- * @param {number} [to]
322
- * The largest degree of rotation.
323
- *
324
- * @return {boolean|number}
325
- * Returns the resulting rotation for the word. Returns false if invalid
326
- * input parameters.
327
- */
328
- function getRotation(orientations, index, from, to) {
329
- var result = false, // Default to false
330
- range, intervals, orientation;
331
- // Check if we have valid input parameters.
332
- if (isNumber(orientations) &&
333
- isNumber(index) &&
334
- isNumber(from) &&
335
- isNumber(to) &&
336
- orientations > 0 &&
337
- index > -1 &&
338
- to > from) {
339
- range = to - from;
340
- intervals = range / (orientations - 1 || 1);
341
- orientation = index % orientations;
342
- result = from + (orientation * intervals);
447
+ return function (attempt) {
448
+ return attempt <= length ? arr[attempt - 1] : false;
449
+ };
450
+ }
451
+ /**
452
+ * Detects if a word is placed outside the playing field.
453
+ *
454
+ * @private
455
+ * @function outsidePlayingField
456
+ *
457
+ * @param {Highcharts.PolygonBoxObject} rect
458
+ * The word box.
459
+ *
460
+ * @param {Highcharts.WordcloudFieldObject} field
461
+ * The width and height of the playing field.
462
+ *
463
+ * @return {boolean}
464
+ * Returns true if the word is placed outside the field.
465
+ */
466
+ function outsidePlayingField(rect, field) {
467
+ var playingField = {
468
+ left: -(field.width / 2),
469
+ right: field.width / 2,
470
+ top: -(field.height / 2),
471
+ bottom: field.height / 2
472
+ };
473
+ return !(playingField.left < rect.left &&
474
+ playingField.right > rect.right &&
475
+ playingField.top < rect.top &&
476
+ playingField.bottom > rect.bottom);
477
+ }
478
+ /**
479
+ * @private
480
+ */
481
+ function movePolygon(deltaX, deltaY, polygon) {
482
+ return polygon.map(function (point) {
483
+ return [
484
+ point[0] + deltaX,
485
+ point[1] + deltaY
486
+ ];
487
+ });
488
+ }
489
+ /**
490
+ * Check if a point intersects with previously placed words, or if it goes
491
+ * outside the field boundaries. If a collision, then try to adjusts the
492
+ * position.
493
+ *
494
+ * @private
495
+ * @function intersectionTesting
496
+ *
497
+ * @param {Highcharts.Point} point
498
+ * Point to test for intersections.
499
+ *
500
+ * @param {Highcharts.WordcloudTestOptionsObject} options
501
+ * Options object.
502
+ *
503
+ * @return {boolean|Highcharts.PositionObject}
504
+ * Returns an object with how much to correct the positions. Returns false
505
+ * if the word should not be placed at all.
506
+ */
507
+ function intersectionTesting(point, options) {
508
+ var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
509
+ x: 0,
510
+ y: 0
511
+ },
512
+ // Make a copy to update values during intersection testing.
513
+ rect = point.rect = extend({}, rectangle);
514
+ point.polygon = polygon;
515
+ point.rotation = options.rotation;
516
+ /* while w intersects any previously placed words:
517
+ do {
518
+ move w a little bit along a spiral path
519
+ } while any part of w is outside the playing field and
520
+ the spiral radius is still smallish */
521
+ while (delta !== false &&
522
+ (intersectsAnyWord(point, placed) ||
523
+ outsidePlayingField(rect, field))) {
524
+ delta = spiral(attempt);
525
+ if (isObject(delta)) {
526
+ // Update the DOMRect with new positions.
527
+ rect.left = rectangle.left + delta.x;
528
+ rect.right = rectangle.right + delta.x;
529
+ rect.top = rectangle.top + delta.y;
530
+ rect.bottom = rectangle.bottom + delta.y;
531
+ point.polygon = movePolygon(delta.x, delta.y, polygon);
343
532
  }
344
- return result;
533
+ attempt++;
345
534
  }
346
- WordcloudUtils.getRotation = getRotation;
347
- /**
348
- * Calculates the spiral positions and store them in scope for quick access.
349
- *
350
- * @private
351
- * @function getSpiral
352
- *
353
- * @param {Function} fn
354
- * The spiral function.
355
- *
356
- * @param {object} params
357
- * Additional parameters for the spiral.
358
- *
359
- * @return {Function}
360
- * Function with access to spiral positions.
361
- */
362
- function getSpiral(fn, params) {
363
- var length = 10000, i, arr = [];
364
- for (i = 1; i < length; i++) {
365
- // @todo unnecessary amount of precaclulation
366
- arr.push(fn(i, params));
367
- }
368
- return function (attempt) {
369
- return attempt <= length ? arr[attempt - 1] : false;
370
- };
535
+ return delta;
536
+ }
537
+ /**
538
+ * Extends the playing field to have enough space to fit a given word.
539
+ *
540
+ * @private
541
+ * @function extendPlayingField
542
+ *
543
+ * @param {Highcharts.WordcloudFieldObject} field
544
+ * The width, height and ratios of a playing field.
545
+ *
546
+ * @param {Highcharts.PolygonBoxObject} rectangle
547
+ * The bounding box of the word to add space for.
548
+ *
549
+ * @return {Highcharts.WordcloudFieldObject}
550
+ * Returns the extended playing field with updated height and width.
551
+ */
552
+ function extendPlayingField(field, rectangle) {
553
+ var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
554
+ if (isObject(field) && isObject(rectangle)) {
555
+ height = (rectangle.bottom - rectangle.top);
556
+ width = (rectangle.right - rectangle.left);
557
+ ratioX = field.ratioX;
558
+ ratioY = field.ratioY;
559
+ // Use the same variable to extend both the height and width.
560
+ x = ((width * ratioX) > (height * ratioY)) ? width : height;
561
+ // Multiply variable with ratios to preserve aspect ratio.
562
+ extendWidth = x * ratioX;
563
+ extendHeight = x * ratioY;
564
+ // Calculate the size of the new field after adding
565
+ // space for the word.
566
+ result = merge(field, {
567
+ // Add space on the left and right.
568
+ width: field.width + (extendWidth * 2),
569
+ // Add space on the top and bottom.
570
+ height: field.height + (extendHeight * 2)
571
+ });
371
572
  }
372
- WordcloudUtils.getSpiral = getSpiral;
373
- /**
374
- * Detects if a word is placed outside the playing field.
375
- *
376
- * @private
377
- * @function outsidePlayingField
378
- *
379
- * @param {Highcharts.PolygonBoxObject} rect
380
- * The word box.
381
- *
382
- * @param {Highcharts.WordcloudFieldObject} field
383
- * The width and height of the playing field.
384
- *
385
- * @return {boolean}
386
- * Returns true if the word is placed outside the field.
387
- */
388
- function outsidePlayingField(rect, field) {
389
- var playingField = {
390
- left: -(field.width / 2),
391
- right: field.width / 2,
392
- top: -(field.height / 2),
393
- bottom: field.height / 2
394
- };
395
- return !(playingField.left < rect.left &&
396
- playingField.right > rect.right &&
397
- playingField.top < rect.top &&
398
- playingField.bottom > rect.bottom);
573
+ else {
574
+ result = field;
399
575
  }
400
- WordcloudUtils.outsidePlayingField = outsidePlayingField;
401
- /**
402
- * Check if a point intersects with previously placed words, or if it goes
403
- * outside the field boundaries. If a collision, then try to adjusts the
404
- * position.
405
- *
406
- * @private
407
- * @function intersectionTesting
408
- *
409
- * @param {Highcharts.Point} point
410
- * Point to test for intersections.
411
- *
412
- * @param {Highcharts.WordcloudTestOptionsObject} options
413
- * Options object.
414
- *
415
- * @return {boolean|Highcharts.PositionObject}
416
- * Returns an object with how much to correct the positions. Returns false
417
- * if the word should not be placed at all.
418
- */
419
- function intersectionTesting(point, options) {
420
- var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
421
- x: 0,
422
- y: 0
423
- },
424
- // Make a copy to update values during intersection testing.
425
- rect = point.rect = extend({}, rectangle);
426
- point.polygon = polygon;
427
- point.rotation = options.rotation;
428
- /* while w intersects any previously placed words:
429
- do {
430
- move w a little bit along a spiral path
431
- } while any part of w is outside the playing field and
432
- the spiral radius is still smallish */
433
- while (delta !== false &&
434
- (intersectsAnyWord(point, placed) ||
435
- outsidePlayingField(rect, field))) {
436
- delta = spiral(attempt);
437
- if (isObject(delta)) {
438
- // Update the DOMRect with new positions.
439
- rect.left = rectangle.left + delta.x;
440
- rect.right = rectangle.right + delta.x;
441
- rect.top = rectangle.top + delta.y;
442
- rect.bottom = rectangle.bottom + delta.y;
443
- point.polygon = movePolygon(delta.x, delta.y, polygon);
444
- }
445
- attempt++;
446
- }
447
- return delta;
576
+ // Return the new extended field.
577
+ return result;
578
+ }
579
+ /**
580
+ * If a rectangle is outside a give field, then the boundaries of the field
581
+ * is adjusted accordingly. Modifies the field object which is passed as the
582
+ * first parameter.
583
+ *
584
+ * @private
585
+ * @function updateFieldBoundaries
586
+ *
587
+ * @param {Highcharts.WordcloudFieldObject} field
588
+ * The bounding box of a playing field.
589
+ *
590
+ * @param {Highcharts.PolygonBoxObject} rectangle
591
+ * The bounding box for a placed point.
592
+ *
593
+ * @return {Highcharts.WordcloudFieldObject}
594
+ * Returns a modified field object.
595
+ */
596
+ function updateFieldBoundaries(field, rectangle) {
597
+ // @todo improve type checking.
598
+ if (!isNumber(field.left) || field.left > rectangle.left) {
599
+ field.left = rectangle.left;
448
600
  }
449
- WordcloudUtils.intersectionTesting = intersectionTesting;
450
- /**
451
- * Extends the playing field to have enough space to fit a given word.
452
- *
453
- * @private
454
- * @function extendPlayingField
455
- *
456
- * @param {Highcharts.WordcloudFieldObject} field
457
- * The width, height and ratios of a playing field.
458
- *
459
- * @param {Highcharts.PolygonBoxObject} rectangle
460
- * The bounding box of the word to add space for.
461
- *
462
- * @return {Highcharts.WordcloudFieldObject}
463
- * Returns the extended playing field with updated height and width.
464
- */
465
- function extendPlayingField(field, rectangle) {
466
- var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
467
- if (isObject(field) && isObject(rectangle)) {
468
- height = (rectangle.bottom - rectangle.top);
469
- width = (rectangle.right - rectangle.left);
470
- ratioX = field.ratioX;
471
- ratioY = field.ratioY;
472
- // Use the same variable to extend both the height and width.
473
- x = ((width * ratioX) > (height * ratioY)) ? width : height;
474
- // Multiply variable with ratios to preserve aspect ratio.
475
- extendWidth = x * ratioX;
476
- extendHeight = x * ratioY;
477
- // Calculate the size of the new field after adding
478
- // space for the word.
479
- result = merge(field, {
480
- // Add space on the left and right.
481
- width: field.width + (extendWidth * 2),
482
- // Add space on the top and bottom.
483
- height: field.height + (extendHeight * 2)
484
- });
485
- }
486
- else {
487
- result = field;
488
- }
489
- // Return the new extended field.
490
- return result;
601
+ if (!isNumber(field.right) || field.right < rectangle.right) {
602
+ field.right = rectangle.right;
491
603
  }
492
- WordcloudUtils.extendPlayingField = extendPlayingField;
493
- /**
494
- * If a rectangle is outside a give field, then the boundaries of the field
495
- * is adjusted accordingly. Modifies the field object which is passed as the
496
- * first parameter.
497
- *
498
- * @private
499
- * @function updateFieldBoundaries
500
- *
501
- * @param {Highcharts.WordcloudFieldObject} field
502
- * The bounding box of a playing field.
503
- *
504
- * @param {Highcharts.PolygonBoxObject} rectangle
505
- * The bounding box for a placed point.
506
- *
507
- * @return {Highcharts.WordcloudFieldObject}
508
- * Returns a modified field object.
509
- */
510
- function updateFieldBoundaries(field, rectangle) {
511
- // @todo improve type checking.
512
- if (!isNumber(field.left) || field.left > rectangle.left) {
513
- field.left = rectangle.left;
514
- }
515
- if (!isNumber(field.right) || field.right < rectangle.right) {
516
- field.right = rectangle.right;
517
- }
518
- if (!isNumber(field.top) || field.top > rectangle.top) {
519
- field.top = rectangle.top;
520
- }
521
- if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
522
- field.bottom = rectangle.bottom;
523
- }
524
- return field;
604
+ if (!isNumber(field.top) || field.top > rectangle.top) {
605
+ field.top = rectangle.top;
525
606
  }
526
- WordcloudUtils.updateFieldBoundaries = updateFieldBoundaries;
527
- })(WordcloudUtils || (WordcloudUtils = {}));
607
+ if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
608
+ field.bottom = rectangle.bottom;
609
+ }
610
+ return field;
611
+ }
612
+ /**
613
+ * Alternative solution to correctFloat.
614
+ * E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
615
+ *
616
+ * @private
617
+ * @function correctFloat
618
+ * @param {number} number
619
+ * @param {number} [precision]
620
+ * @return {number}
621
+ */
622
+ function correctFloat(number, precision) {
623
+ var p = isNumber(precision) ? precision : 14, magnitude = Math.pow(10, p);
624
+ return Math.round(number * magnitude) / magnitude;
625
+ }
626
+ /**
627
+ * @private
628
+ */
629
+ function getBoundingBoxFromPolygon(points) {
630
+ return points.reduce(function (obj, point) {
631
+ var x = point[0], y = point[1];
632
+ obj.left = Math.min(x, obj.left);
633
+ obj.right = Math.max(x, obj.right);
634
+ obj.bottom = Math.max(y, obj.bottom);
635
+ obj.top = Math.min(y, obj.top);
636
+ return obj;
637
+ }, {
638
+ left: Number.MAX_VALUE,
639
+ right: -Number.MAX_VALUE,
640
+ bottom: -Number.MAX_VALUE,
641
+ top: Number.MAX_VALUE
642
+ });
643
+ }
644
+ /**
645
+ * @private
646
+ */
647
+ function getPolygon(x, y, width, height, rotation) {
648
+ var origin = [x, y], left = x - (width / 2), right = x + (width / 2), top = y - (height / 2), bottom = y + (height / 2), polygon = [
649
+ [left, top],
650
+ [right, top],
651
+ [right, bottom],
652
+ [left, bottom]
653
+ ];
654
+ return polygon.map(function (point) {
655
+ return rotate2DToPoint(point, origin, -rotation);
656
+ });
657
+ }
658
+ /**
659
+ * Rotates a point clockwise around the origin.
660
+ *
661
+ * @private
662
+ * @function rotate2DToOrigin
663
+ * @param {Highcharts.PolygonPointObject} point
664
+ * The x and y coordinates for the point.
665
+ * @param {number} angle
666
+ * The angle of rotation.
667
+ * @return {Highcharts.PolygonPointObject}
668
+ * The x and y coordinate for the rotated point.
669
+ */
670
+ function rotate2DToOrigin(point, angle) {
671
+ var x = point[0], y = point[1], rad = deg2rad * -angle, cosAngle = Math.cos(rad), sinAngle = Math.sin(rad);
672
+ return [
673
+ correctFloat(x * cosAngle - y * sinAngle),
674
+ correctFloat(x * sinAngle + y * cosAngle)
675
+ ];
676
+ }
677
+ /**
678
+ * Rotate a point clockwise around another point.
679
+ *
680
+ * @private
681
+ * @function rotate2DToPoint
682
+ * @param {Highcharts.PolygonPointObject} point
683
+ * The x and y coordinates for the point.
684
+ * @param {Highcharts.PolygonPointObject} origin
685
+ * The point to rotate around.
686
+ * @param {number} angle
687
+ * The angle of rotation.
688
+ * @return {Highcharts.PolygonPointObject}
689
+ * The x and y coordinate for the rotated point.
690
+ */
691
+ function rotate2DToPoint(point, origin, angle) {
692
+ var x = point[0] - origin[0], y = point[1] - origin[1], rotated = rotate2DToOrigin([x, y], angle);
693
+ return [
694
+ rotated[0] + origin[0],
695
+ rotated[1] + origin[1]
696
+ ];
697
+ }
528
698
  /* *
529
699
  *
530
700
  * Default export
531
701
  *
532
702
  * */
703
+ var WordcloudUtils = {
704
+ archimedeanSpiral: archimedeanSpiral,
705
+ extendPlayingField: extendPlayingField,
706
+ getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
707
+ getPlayingField: getPlayingField,
708
+ getPolygon: getPolygon,
709
+ getRandomPosition: getRandomPosition,
710
+ getRotation: getRotation,
711
+ getScale: getScale,
712
+ getSpiral: getSpiral,
713
+ intersectionTesting: intersectionTesting,
714
+ isPolygonsColliding: isPolygonsColliding,
715
+ isRectanglesIntersecting: isRectanglesIntersecting,
716
+ rectangularSpiral: rectangularSpiral,
717
+ rotate2DToOrigin: rotate2DToOrigin,
718
+ rotate2DToPoint: rotate2DToPoint,
719
+ squareSpiral: squareSpiral,
720
+ updateFieldBoundaries: updateFieldBoundaries
721
+ };
533
722
  export default WordcloudUtils;