highcharts 9.2.2 → 9.3.3

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 (894) 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 +46 -1
  6. package/css/highcharts.scss +40 -0
  7. package/css/stocktools/gui.css +1 -1
  8. package/css/themes/dark-unica.css +46 -1
  9. package/css/themes/grid-light.css +46 -1
  10. package/css/themes/sand-signika.css +46 -1
  11. package/es-modules/Accessibility/A11yI18n.js +269 -224
  12. package/es-modules/Accessibility/Accessibility.js +244 -129
  13. package/es-modules/Accessibility/AccessibilityComponent.js +78 -313
  14. package/es-modules/Accessibility/Components/AnnotationsA11y.js +19 -5
  15. package/es-modules/Accessibility/Components/ContainerComponent.js +53 -28
  16. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +178 -120
  17. package/es-modules/Accessibility/Components/LegendComponent.js +251 -129
  18. package/es-modules/Accessibility/Components/MenuComponent.js +250 -154
  19. package/es-modules/Accessibility/Components/RangeSelectorComponent.js +172 -93
  20. package/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js +161 -115
  21. package/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js +138 -69
  22. package/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js +67 -28
  23. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +48 -56
  24. package/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js +387 -343
  25. package/es-modules/Accessibility/Components/ZoomComponent.js +156 -70
  26. package/es-modules/Accessibility/FocusBorder.js +192 -152
  27. package/es-modules/Accessibility/HighContrastMode.js +79 -66
  28. package/es-modules/Accessibility/HighContrastTheme.js +10 -0
  29. package/es-modules/Accessibility/KeyboardNavigation.js +151 -75
  30. package/es-modules/Accessibility/KeyboardNavigationHandler.js +71 -44
  31. package/es-modules/Accessibility/Options/DeprecatedOptions.js +21 -4
  32. package/es-modules/Accessibility/Options/LangOptions.js +4 -5
  33. package/es-modules/Accessibility/Options/Options.js +32 -17
  34. package/es-modules/Accessibility/ProxyElement.js +218 -0
  35. package/es-modules/Accessibility/ProxyProvider.js +302 -0
  36. package/es-modules/Accessibility/Utils/Announcer.js +17 -10
  37. package/es-modules/Accessibility/Utils/ChartUtilities.js +55 -45
  38. package/es-modules/Accessibility/Utils/DOMElementProvider.js +27 -15
  39. package/es-modules/Accessibility/Utils/EventProvider.js +27 -17
  40. package/es-modules/Accessibility/Utils/HTMLUtilities.js +125 -42
  41. package/es-modules/Core/Animation/Fx.js +5 -14
  42. package/es-modules/Core/Axis/Axis.js +77 -96
  43. package/es-modules/Core/Axis/Axis3D.js +10 -4
  44. package/es-modules/Core/Axis/AxisDefaults.js +35 -24
  45. package/es-modules/Core/Axis/BrokenAxis.js +17 -11
  46. package/es-modules/Core/Axis/Color/ColorAxis.js +7 -4
  47. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +55 -5
  48. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +5 -5
  49. package/es-modules/Core/Axis/DateTimeAxis.js +3 -14
  50. package/es-modules/Core/Axis/GridAxis.js +26 -16
  51. package/es-modules/Core/Axis/NavigatorAxis.js +0 -5
  52. package/es-modules/Core/Axis/OrdinalAxis.js +88 -92
  53. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +4 -5
  54. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +0 -5
  55. package/es-modules/Core/Axis/RadialAxis.js +7 -28
  56. package/es-modules/Core/Axis/ScrollbarAxis.js +27 -12
  57. package/es-modules/Core/Axis/StackingAxis.js +2 -1
  58. package/es-modules/Core/Axis/Tick.js +2 -4
  59. package/es-modules/Core/Axis/TreeGridAxis.js +28 -19
  60. package/es-modules/Core/Axis/TreeGridTick.js +5 -3
  61. package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
  62. package/es-modules/Core/Axis/ZAxis.js +1 -1
  63. package/es-modules/Core/Chart/Chart.js +44 -47
  64. package/es-modules/Core/Chart/Chart3D.js +23 -10
  65. package/es-modules/Core/Chart/ChartDefaults.js +3 -4
  66. package/es-modules/Core/Chart/ChartNavigationComposition.js +92 -0
  67. package/es-modules/Core/Chart/GanttChart.js +4 -4
  68. package/es-modules/Core/Chart/MapChart.js +13 -25
  69. package/es-modules/Core/Chart/StockChart.js +13 -316
  70. package/es-modules/Core/Color/Palettes.js +22 -0
  71. package/es-modules/Core/DefaultOptions.js +22 -19
  72. package/es-modules/Core/Foundation.js +39 -31
  73. package/es-modules/Core/Geometry/CircleUtilities.js +2 -1
  74. package/es-modules/Core/Globals.js +1 -1
  75. package/es-modules/Core/HttpUtilities.js +8 -7
  76. package/es-modules/Core/Legend/Legend.js +19 -16
  77. package/es-modules/Core/Navigator.js +41 -30
  78. package/es-modules/Core/Pointer.js +52 -45
  79. package/es-modules/Core/Renderer/HTML/AST.js +29 -14
  80. package/es-modules/Core/Renderer/HTML/HTMLElement.js +27 -20
  81. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +8 -6
  82. package/es-modules/Core/Renderer/RendererUtilities.js +2 -2
  83. package/es-modules/Core/Renderer/SVG/SVGElement.js +11 -20
  84. package/es-modules/Core/Renderer/SVG/SVGLabel.js +17 -8
  85. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +25 -29
  86. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +12 -5
  87. package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -12
  88. package/es-modules/Core/Responsive.js +2 -3
  89. package/es-modules/Core/Scrollbar.js +14 -12
  90. package/es-modules/Core/ScrollbarDefaults.js +10 -9
  91. package/es-modules/Core/Series/DataLabel.js +19 -15
  92. package/es-modules/Core/Series/Point.js +22 -19
  93. package/es-modules/Core/Series/Series.js +197 -235
  94. package/es-modules/Core/Series/SeriesDefaults.js +8 -8
  95. package/es-modules/Core/Series/SeriesRegistry.js +1 -2
  96. package/es-modules/Core/Time.js +14 -11
  97. package/es-modules/Core/Tooltip.js +63 -53
  98. package/es-modules/Core/Utilities.js +20 -24
  99. package/es-modules/Data/DataConverter.js +483 -0
  100. package/es-modules/Data/DataPromise.js +252 -0
  101. package/es-modules/Data/DataSeriesConverter.js +207 -0
  102. package/es-modules/Data/DataTable.js +1205 -0
  103. package/es-modules/Data/Modifiers/ChainModifier.js +299 -0
  104. package/es-modules/Data/Modifiers/DataModifier.js +303 -0
  105. package/es-modules/Data/Modifiers/GroupModifier.js +144 -0
  106. package/es-modules/Data/Modifiers/InvertModifier.js +254 -0
  107. package/es-modules/Data/Modifiers/RangeModifier.js +143 -0
  108. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +110 -0
  109. package/es-modules/Data/Modifiers/SortModifier.js +249 -0
  110. package/es-modules/Data/Parsers/CSVParser.js +400 -0
  111. package/es-modules/Data/Parsers/DataParser.js +101 -0
  112. package/es-modules/Data/Parsers/GoogleSheetsParser.js +223 -0
  113. package/es-modules/Data/Parsers/HTMLTableParser.js +213 -0
  114. package/es-modules/Data/Stores/CSVStore.js +317 -0
  115. package/es-modules/Data/Stores/DataStore.js +276 -0
  116. package/es-modules/Data/Stores/GoogleSheetsStore.js +169 -0
  117. package/es-modules/Data/Stores/HTMLTableStore.js +353 -0
  118. package/es-modules/Extensions/Annotations/Annotations.js +69 -18
  119. package/es-modules/Extensions/Annotations/ControlPoint.js +1 -3
  120. package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +1 -1
  121. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +199 -0
  122. package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +1 -1
  123. package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +3 -6
  124. package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +3 -2
  125. package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +1 -1
  126. package/es-modules/Extensions/Annotations/Mixins/ControllableMixin.js +13 -4
  127. package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +0 -1
  128. package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +5 -4
  129. package/es-modules/Extensions/Annotations/NavigationBindings.js +120 -53
  130. package/es-modules/Extensions/Annotations/Popup.js +494 -148
  131. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +51 -2
  132. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +5 -3
  133. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +1 -1
  134. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +2 -3
  135. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +219 -0
  136. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +1 -1
  137. package/es-modules/Extensions/Annotations/Types/Measure.js +29 -19
  138. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +7 -6
  139. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +211 -0
  140. package/es-modules/Extensions/Annotations/Types/Tunnel.js +13 -10
  141. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +1 -1
  142. package/es-modules/Extensions/Boost/BoostOptions.js +2 -2
  143. package/es-modules/Extensions/Boost/BoostOverrides.js +6 -10
  144. package/es-modules/Extensions/Boost/BoostUtils.js +0 -6
  145. package/es-modules/Extensions/Boost/WGLRenderer.js +16 -12
  146. package/es-modules/Extensions/Boost/WGLShader.js +13 -11
  147. package/es-modules/Extensions/Boost/WGLVBuffer.js +4 -7
  148. package/es-modules/Extensions/BoostCanvas.js +1 -2
  149. package/es-modules/Extensions/CurrentDateIndication.js +2 -3
  150. package/es-modules/Extensions/Data.js +4 -48
  151. package/es-modules/Extensions/DataGrouping.js +52 -32
  152. package/es-modules/Extensions/DownloadURL.js +2 -2
  153. package/es-modules/Extensions/DragPanes.js +1 -2
  154. package/es-modules/Extensions/DraggablePoints.js +7 -8
  155. package/es-modules/Extensions/Drilldown.js +11 -7
  156. package/es-modules/Extensions/ExportData.js +6 -5
  157. package/es-modules/Extensions/Exporting/Exporting.js +33 -46
  158. package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
  159. package/es-modules/Extensions/FullScreen.js +4 -3
  160. package/es-modules/Extensions/GeoJSON.js +42 -66
  161. package/es-modules/Extensions/MarkerClusters.js +118 -98
  162. package/es-modules/Extensions/Math3D.js +4 -4
  163. package/es-modules/Extensions/NoDataToDisplay.js +1 -2
  164. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +32 -32
  165. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  166. package/es-modules/Extensions/Oldie/Oldie.js +14 -79
  167. package/es-modules/Extensions/Oldie/VMLAxis3D.js +5 -1
  168. package/es-modules/Extensions/OverlappingDataLabels.js +10 -6
  169. package/es-modules/Extensions/Pane.js +11 -12
  170. package/es-modules/Extensions/ParallelCoordinates.js +5 -3
  171. package/es-modules/Extensions/PatternFill.js +17 -11
  172. package/es-modules/Extensions/Polar.js +7 -4
  173. package/es-modules/Extensions/PriceIndication.js +2 -1
  174. package/es-modules/Extensions/RangeSelector.js +22 -59
  175. package/es-modules/Extensions/ScrollablePlotArea.js +2 -2
  176. package/es-modules/Extensions/SeriesLabel.js +1 -1
  177. package/es-modules/Extensions/Sonification/ChartSonify.js +279 -663
  178. package/es-modules/Extensions/Sonification/Earcon.js +136 -102
  179. package/es-modules/Extensions/Sonification/Instrument.js +493 -426
  180. package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
  181. package/es-modules/Extensions/Sonification/Options.js +10 -0
  182. package/es-modules/Extensions/Sonification/PointSonify.js +207 -152
  183. package/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
  184. package/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
  185. package/es-modules/Extensions/Sonification/Sonification.js +27 -53
  186. package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +70 -88
  187. package/es-modules/Extensions/Sonification/Timeline.js +250 -567
  188. package/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
  189. package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
  190. package/es-modules/Extensions/Stacking.js +5 -23
  191. package/es-modules/Extensions/Themes/BrandDark.js +293 -0
  192. package/es-modules/Extensions/Themes/BrandLight.js +259 -0
  193. package/es-modules/Extensions/Themes/DarkUnica.js +4 -2
  194. package/es-modules/Extensions/Themes/Grid.js +4 -2
  195. package/es-modules/Extensions/Themes/GridLight.js +4 -2
  196. package/es-modules/Gantt/Connection.js +2 -2
  197. package/es-modules/Gantt/Pathfinder.js +6 -5
  198. package/es-modules/Gantt/PathfinderAlgorithms.js +12 -12
  199. package/es-modules/Maps/MapNavigation.js +30 -68
  200. package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
  201. package/es-modules/Maps/MapPointer.js +8 -5
  202. package/es-modules/Maps/MapSymbols.js +23 -3
  203. package/es-modules/Maps/MapView.js +450 -0
  204. package/es-modules/Maps/MapViewOptionsDefault.js +97 -0
  205. package/es-modules/Maps/Projection.js +436 -0
  206. package/es-modules/Maps/ProjectionDefinition.js +9 -0
  207. package/es-modules/Maps/Projections/EqualEarth.js +42 -0
  208. package/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
  209. package/es-modules/Maps/Projections/Miller.js +16 -0
  210. package/es-modules/Maps/Projections/Orthographic.js +26 -0
  211. package/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
  212. package/es-modules/Maps/Projections/WebMercator.js +24 -0
  213. package/es-modules/Series/Area/AreaSeries.js +13 -13
  214. package/es-modules/Series/Area3DSeries.js +4 -2
  215. package/es-modules/Series/AreaRange/AreaRangeSeries.js +28 -17
  216. package/es-modules/Series/Bellcurve/BellcurveSeries.js +4 -9
  217. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
  218. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
  219. package/es-modules/Series/Bubble/BubbleLegendItem.js +5 -15
  220. package/es-modules/Series/Bubble/BubblePoint.js +5 -0
  221. package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
  222. package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -19
  223. package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
  224. package/es-modules/{Mixins/ColorMapSeries.js → Series/ColorMapMixin.js} +10 -8
  225. package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
  226. package/es-modules/Series/Column/ColumnSeries.js +19 -18
  227. package/es-modules/Series/Column3D/Column3DComposition.js +1 -2
  228. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +11 -8
  229. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +2 -1
  230. package/es-modules/Series/Cylinder/CylinderComposition.js +36 -4
  231. package/es-modules/Series/DataModifyComposition.js +539 -0
  232. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
  233. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
  234. package/es-modules/Series/DerivedComposition.js +137 -0
  235. package/es-modules/Series/DrawPointComposition.js +111 -0
  236. package/es-modules/Series/Dumbbell/DumbbellPoint.js +0 -1
  237. package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -6
  238. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
  239. package/es-modules/Series/Flags/FlagsSeries.js +18 -25
  240. package/es-modules/Series/Flags/FlagsSymbols.js +2 -2
  241. package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
  242. package/es-modules/Series/Funnel3D/Funnel3DComposition.js +14 -8
  243. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +2 -1
  244. package/es-modules/Series/Gantt/GanttPoint.js +1 -1
  245. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  246. package/es-modules/Series/Gauge/GaugePoint.js +1 -1
  247. package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
  248. package/es-modules/Series/HLC/HLCPoint.js +55 -0
  249. package/es-modules/Series/HLC/HLCSeries.js +378 -0
  250. package/es-modules/Series/Heatmap/HeatmapPoint.js +13 -14
  251. package/es-modules/Series/Heatmap/HeatmapSeries.js +24 -12
  252. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +10 -9
  253. package/es-modules/Series/Histogram/HistogramSeries.js +7 -11
  254. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -4
  255. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +28 -30
  256. package/es-modules/Series/Item/ItemSeries.js +4 -5
  257. package/es-modules/Series/Line/LineSeries.js +1 -2
  258. package/es-modules/Series/Map/MapPoint.js +27 -14
  259. package/es-modules/Series/Map/MapSeries.js +283 -322
  260. package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
  261. package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
  262. package/es-modules/Series/MapLine/MapLineSeries.js +2 -4
  263. package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
  264. package/es-modules/Series/MapPoint/MapPointSeries.js +99 -14
  265. package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -4
  266. package/es-modules/Series/Networkgraph/Integrations.js +8 -22
  267. package/es-modules/Series/Networkgraph/Networkgraph.js +6 -10
  268. package/es-modules/Series/Networkgraph/QuadTree.js +1 -3
  269. package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +78 -30
  270. package/es-modules/Series/OHLC/OHLCPoint.js +2 -7
  271. package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
  272. package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
  273. package/es-modules/Series/Organization/OrganizationSeries.js +6 -5
  274. package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +1 -0
  275. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
  276. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +48 -10
  277. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
  278. package/es-modules/Series/Pie/PieDataLabel.js +1 -2
  279. package/es-modules/Series/Pie/PiePoint.js +2 -2
  280. package/es-modules/Series/Pie/PieSeries.js +7 -8
  281. package/es-modules/Series/Pie3D/Pie3DComposition.js +2 -1
  282. package/es-modules/Series/Pie3D/Pie3DPoint.js +2 -1
  283. package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
  284. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +2 -1
  285. package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
  286. package/es-modules/Series/Sankey/SankeySeries.js +92 -22
  287. package/es-modules/Series/SolidGauge/SolidGaugeComposition.js +3 -1
  288. package/es-modules/Series/Spline/SplineSeries.js +0 -8
  289. package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
  290. package/es-modules/Series/Sunburst/SunburstSeries.js +6 -6
  291. package/es-modules/Series/Sunburst/SunburstUtilities.js +3 -2
  292. package/es-modules/Series/Tilemap/TilemapPoint.js +2 -5
  293. package/es-modules/Series/Tilemap/TilemapShapes.js +0 -7
  294. package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
  295. package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +88 -78
  296. package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
  297. package/es-modules/Series/Treemap/TreemapSeries.js +22 -25
  298. package/es-modules/Series/Variwide/VariwideSeries.js +5 -1
  299. package/es-modules/Series/Venn/VennPoint.js +16 -7
  300. package/es-modules/Series/Venn/VennSeries.js +11 -17
  301. package/es-modules/Series/Venn/VennUtils.js +551 -439
  302. package/es-modules/Series/Waterfall/WaterfallSeries.js +8 -6
  303. package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
  304. package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
  305. package/es-modules/Series/Wordcloud/WordcloudSeries.js +26 -22
  306. package/es-modules/Series/Wordcloud/WordcloudUtils.js +669 -484
  307. package/es-modules/Series/XRange/XRangePoint.js +7 -12
  308. package/es-modules/Series/XRange/XRangeSeries.js +4 -20
  309. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +15 -6
  310. package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
  311. package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
  312. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +4 -6
  313. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
  314. package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
  315. package/es-modules/Stock/Indicators/BB/BBIndicator.js +39 -11
  316. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +35 -15
  317. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
  318. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
  319. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +28 -16
  320. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +18 -11
  321. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
  322. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +6 -6
  323. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +23 -9
  324. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +16 -19
  325. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +32 -14
  326. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
  327. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
  328. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
  329. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +2 -3
  330. package/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
  331. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
  332. package/es-modules/Stock/Indicators/PC/PCIndicator.js +25 -13
  333. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
  334. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +2 -1
  335. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +2 -1
  336. package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
  337. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +32 -50
  338. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
  339. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +18 -9
  340. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
  341. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
  342. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
  343. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +26 -10
  344. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +19 -7
  345. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
  346. package/es-modules/Stock/StockToolsBindings.js +156 -47
  347. package/es-modules/Stock/StockToolsGui.js +442 -37
  348. package/es-modules/masters/highcharts-3d.src.js +1 -1
  349. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  350. package/es-modules/masters/highcharts-more.src.js +1 -1
  351. package/es-modules/masters/highcharts.src.js +1 -1
  352. package/es-modules/masters/highmaps.src.js +1 -1
  353. package/es-modules/masters/highstock.src.js +1 -1
  354. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  355. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  356. package/es-modules/masters/indicators/ao.src.js +1 -1
  357. package/es-modules/masters/indicators/apo.src.js +1 -1
  358. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  359. package/es-modules/masters/indicators/aroon.src.js +1 -1
  360. package/es-modules/masters/indicators/atr.src.js +1 -1
  361. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  362. package/es-modules/masters/indicators/cci.src.js +1 -1
  363. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  364. package/es-modules/masters/indicators/cmf.src.js +1 -1
  365. package/es-modules/masters/indicators/cmo.src.js +1 -1
  366. package/es-modules/masters/indicators/dema.src.js +1 -1
  367. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  368. package/es-modules/masters/indicators/dmi.src.js +1 -1
  369. package/es-modules/masters/indicators/dpo.src.js +1 -1
  370. package/es-modules/masters/indicators/ema.src.js +4 -10
  371. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  372. package/es-modules/masters/indicators/indicators-all.src.js +2 -2
  373. package/es-modules/masters/indicators/indicators.src.js +2 -1
  374. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  375. package/es-modules/masters/indicators/klinger.src.js +1 -1
  376. package/es-modules/masters/indicators/macd.src.js +1 -1
  377. package/es-modules/masters/indicators/mfi.src.js +1 -1
  378. package/es-modules/masters/indicators/momentum.src.js +1 -1
  379. package/es-modules/masters/indicators/natr.src.js +1 -1
  380. package/es-modules/masters/indicators/obv.src.js +1 -1
  381. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  382. package/es-modules/masters/indicators/ppo.src.js +1 -1
  383. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  384. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  385. package/es-modules/masters/indicators/psar.src.js +1 -1
  386. package/es-modules/masters/indicators/regressions.src.js +1 -1
  387. package/es-modules/masters/indicators/roc.src.js +1 -1
  388. package/es-modules/masters/indicators/rsi.src.js +1 -1
  389. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  390. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  391. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  392. package/es-modules/masters/indicators/tema.src.js +1 -1
  393. package/es-modules/masters/indicators/trendline.src.js +1 -1
  394. package/es-modules/masters/indicators/trix.src.js +1 -1
  395. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  396. package/es-modules/masters/indicators/vwap.src.js +1 -1
  397. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  398. package/es-modules/masters/indicators/wma.src.js +1 -1
  399. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  400. package/es-modules/masters/modules/accessibility.src.js +16 -2
  401. package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
  402. package/es-modules/masters/modules/annotations.src.js +1 -1
  403. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  404. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  405. package/es-modules/masters/modules/boost.src.js +1 -1
  406. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  407. package/es-modules/masters/modules/bullet.src.js +1 -1
  408. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  409. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  410. package/es-modules/masters/modules/cylinder.src.js +1 -1
  411. package/es-modules/masters/modules/data.src.js +6 -3
  412. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  413. package/es-modules/masters/modules/debugger.src.js +1 -1
  414. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  415. package/es-modules/masters/modules/dotplot.src.js +1 -1
  416. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  417. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  418. package/es-modules/masters/modules/drilldown.src.js +1 -1
  419. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  420. package/es-modules/masters/modules/export-data.src.js +1 -1
  421. package/es-modules/masters/modules/exporting.src.js +1 -1
  422. package/es-modules/masters/modules/full-screen.src.js +1 -1
  423. package/es-modules/masters/modules/funnel.src.js +1 -1
  424. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  425. package/es-modules/masters/modules/gantt.src.js +1 -1
  426. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  427. package/es-modules/masters/modules/heatmap.src.js +1 -2
  428. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  429. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  430. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  431. package/es-modules/masters/modules/item-series.src.js +1 -1
  432. package/es-modules/masters/modules/lollipop.src.js +1 -1
  433. package/es-modules/masters/modules/map.src.js +1 -3
  434. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  435. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  436. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  437. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  438. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  439. package/es-modules/masters/modules/oldie.src.js +1 -1
  440. package/es-modules/masters/modules/organization.src.js +1 -1
  441. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  442. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  443. package/es-modules/masters/modules/pareto.src.js +1 -1
  444. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  445. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  446. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  447. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  448. package/es-modules/masters/modules/sankey.src.js +1 -1
  449. package/es-modules/masters/modules/series-label.src.js +1 -1
  450. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  451. package/es-modules/masters/modules/sonification.src.js +33 -2
  452. package/es-modules/masters/modules/static-scale.src.js +1 -1
  453. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  454. package/es-modules/masters/modules/stock.src.js +4 -1
  455. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  456. package/es-modules/masters/modules/sunburst.src.js +1 -1
  457. package/es-modules/masters/modules/tilemap.src.js +1 -1
  458. package/es-modules/masters/modules/timeline.src.js +1 -1
  459. package/es-modules/masters/modules/treegrid.src.js +1 -1
  460. package/es-modules/masters/modules/treemap.src.js +1 -1
  461. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  462. package/es-modules/masters/modules/variwide.src.js +1 -1
  463. package/es-modules/masters/modules/vector.src.js +1 -1
  464. package/es-modules/masters/modules/venn.src.js +1 -1
  465. package/es-modules/masters/modules/windbarb.src.js +1 -1
  466. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  467. package/es-modules/masters/modules/xrange.src.js +1 -1
  468. package/es-modules/masters/themes/avocado.src.js +1 -1
  469. package/es-modules/masters/themes/brand-dark.src.js +14 -0
  470. package/es-modules/masters/themes/brand-light.src.js +14 -0
  471. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  472. package/es-modules/masters/themes/dark-green.src.js +1 -1
  473. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  474. package/es-modules/masters/themes/gray.src.js +1 -1
  475. package/es-modules/masters/themes/grid-light.src.js +1 -1
  476. package/es-modules/masters/themes/grid.src.js +1 -1
  477. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  478. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  479. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  480. package/es-modules/masters/themes/skies.src.js +1 -1
  481. package/es-modules/masters/themes/sunset.src.js +1 -1
  482. package/highcharts-3d.js +1 -1
  483. package/highcharts-3d.js.map +1 -1
  484. package/highcharts-3d.src.js +65 -35
  485. package/highcharts-gantt.js +800 -803
  486. package/highcharts-gantt.js.map +1 -1
  487. package/highcharts-gantt.src.js +1356 -1429
  488. package/highcharts-more.js +194 -193
  489. package/highcharts-more.js.map +1 -1
  490. package/highcharts-more.src.js +280 -222
  491. package/highcharts.d.ts +10208 -761
  492. package/highcharts.js +585 -588
  493. package/highcharts.js.map +1 -1
  494. package/highcharts.src.d.ts +10208 -761
  495. package/highcharts.src.js +992 -1066
  496. package/highmaps.js +727 -707
  497. package/highmaps.js.map +1 -1
  498. package/highmaps.src.js +3240 -2135
  499. package/highstock.js +788 -783
  500. package/highstock.js.map +1 -1
  501. package/highstock.src.js +2487 -1981
  502. package/indicators/acceleration-bands.d.ts +17 -1
  503. package/indicators/acceleration-bands.js +11 -9
  504. package/indicators/acceleration-bands.js.map +1 -1
  505. package/indicators/acceleration-bands.src.d.ts +17 -1
  506. package/indicators/acceleration-bands.src.js +238 -112
  507. package/indicators/accumulation-distribution.js +1 -1
  508. package/indicators/accumulation-distribution.src.js +1 -1
  509. package/indicators/ao.js +6 -6
  510. package/indicators/ao.js.map +1 -1
  511. package/indicators/ao.src.js +4 -4
  512. package/indicators/apo.js +5 -6
  513. package/indicators/apo.js.map +1 -1
  514. package/indicators/apo.src.js +16 -84
  515. package/indicators/aroon-oscillator.d.ts +17 -1
  516. package/indicators/aroon-oscillator.js +10 -9
  517. package/indicators/aroon-oscillator.js.map +1 -1
  518. package/indicators/aroon-oscillator.src.d.ts +17 -1
  519. package/indicators/aroon-oscillator.src.js +230 -177
  520. package/indicators/aroon.d.ts +17 -1
  521. package/indicators/aroon.js +11 -9
  522. package/indicators/aroon.js.map +1 -1
  523. package/indicators/aroon.src.d.ts +17 -1
  524. package/indicators/aroon.src.js +227 -112
  525. package/indicators/atr.js +1 -1
  526. package/indicators/atr.src.js +1 -1
  527. package/indicators/bollinger-bands.d.ts +17 -1
  528. package/indicators/bollinger-bands.js +12 -9
  529. package/indicators/bollinger-bands.js.map +1 -1
  530. package/indicators/bollinger-bands.src.d.ts +17 -1
  531. package/indicators/bollinger-bands.src.js +262 -117
  532. package/indicators/cci.js +1 -1
  533. package/indicators/cci.src.js +1 -1
  534. package/indicators/chaikin.js +8 -9
  535. package/indicators/chaikin.js.map +1 -1
  536. package/indicators/chaikin.src.js +8 -76
  537. package/indicators/cmf.js +1 -1
  538. package/indicators/cmf.js.map +1 -1
  539. package/indicators/cmf.src.js +36 -16
  540. package/indicators/cmo.js +1 -1
  541. package/indicators/cmo.src.js +1 -1
  542. package/indicators/dema.js +5 -6
  543. package/indicators/dema.js.map +1 -1
  544. package/indicators/dema.src.js +3 -75
  545. package/indicators/disparity-index.js +6 -7
  546. package/indicators/disparity-index.js.map +1 -1
  547. package/indicators/disparity-index.src.js +20 -74
  548. package/indicators/dmi.js +12 -11
  549. package/indicators/dmi.js.map +1 -1
  550. package/indicators/dmi.src.js +252 -121
  551. package/indicators/dpo.js +1 -1
  552. package/indicators/dpo.src.js +1 -1
  553. package/indicators/ema.js +1 -13
  554. package/indicators/ema.js.map +1 -1
  555. package/indicators/ema.src.js +7 -188
  556. package/indicators/ichimoku-kinko-hyo.js +1 -1
  557. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  558. package/indicators/ichimoku-kinko-hyo.src.js +7 -7
  559. package/indicators/indicators-all.d.ts +17 -1
  560. package/indicators/indicators-all.js +198 -203
  561. package/indicators/indicators-all.js.map +1 -1
  562. package/indicators/indicators-all.src.d.ts +17 -1
  563. package/indicators/indicators-all.src.js +892 -777
  564. package/indicators/indicators.js +12 -12
  565. package/indicators/indicators.js.map +1 -1
  566. package/indicators/indicators.src.js +213 -144
  567. package/indicators/keltner-channels.d.ts +17 -1
  568. package/indicators/keltner-channels.js +11 -10
  569. package/indicators/keltner-channels.js.map +1 -1
  570. package/indicators/keltner-channels.src.d.ts +17 -1
  571. package/indicators/keltner-channels.src.js +246 -118
  572. package/indicators/klinger.js +14 -13
  573. package/indicators/klinger.js.map +1 -1
  574. package/indicators/klinger.src.js +239 -187
  575. package/indicators/macd.js +2 -2
  576. package/indicators/macd.js.map +1 -1
  577. package/indicators/macd.src.js +3 -4
  578. package/indicators/mfi.js +1 -1
  579. package/indicators/mfi.src.js +1 -1
  580. package/indicators/momentum.js +1 -1
  581. package/indicators/momentum.src.js +1 -1
  582. package/indicators/natr.js +3 -3
  583. package/indicators/natr.js.map +1 -1
  584. package/indicators/natr.src.js +2 -4
  585. package/indicators/obv.js +1 -1
  586. package/indicators/obv.src.js +1 -1
  587. package/indicators/pivot-points.js +1 -1
  588. package/indicators/pivot-points.js.map +1 -1
  589. package/indicators/pivot-points.src.js +3 -2
  590. package/indicators/ppo.js +5 -6
  591. package/indicators/ppo.js.map +1 -1
  592. package/indicators/ppo.src.js +3 -75
  593. package/indicators/price-channel.d.ts +17 -1
  594. package/indicators/price-channel.js +11 -9
  595. package/indicators/price-channel.js.map +1 -1
  596. package/indicators/price-channel.src.d.ts +17 -1
  597. package/indicators/price-channel.src.js +288 -168
  598. package/indicators/price-envelopes.js +1 -1
  599. package/indicators/price-envelopes.src.js +1 -1
  600. package/indicators/psar.js +1 -1
  601. package/indicators/psar.src.js +1 -1
  602. package/indicators/regressions.js +1 -1
  603. package/indicators/regressions.js.map +1 -1
  604. package/indicators/regressions.src.js +39 -21
  605. package/indicators/roc.js +1 -1
  606. package/indicators/roc.src.js +1 -1
  607. package/indicators/rsi.js +1 -1
  608. package/indicators/rsi.js.map +1 -1
  609. package/indicators/rsi.src.js +3 -2
  610. package/indicators/slow-stochastic.js +5 -6
  611. package/indicators/slow-stochastic.js.map +1 -1
  612. package/indicators/slow-stochastic.src.js +2 -72
  613. package/indicators/stochastic.d.ts +17 -1
  614. package/indicators/stochastic.js +12 -10
  615. package/indicators/stochastic.js.map +1 -1
  616. package/indicators/stochastic.src.d.ts +17 -1
  617. package/indicators/stochastic.src.js +282 -165
  618. package/indicators/supertrend.js +10 -10
  619. package/indicators/supertrend.js.map +1 -1
  620. package/indicators/supertrend.src.js +6 -7
  621. package/indicators/tema.js +6 -7
  622. package/indicators/tema.js.map +1 -1
  623. package/indicators/tema.src.js +28 -75
  624. package/indicators/trendline.js +1 -1
  625. package/indicators/trendline.src.js +1 -1
  626. package/indicators/trix.js +4 -5
  627. package/indicators/trix.js.map +1 -1
  628. package/indicators/trix.src.js +8 -76
  629. package/indicators/volume-by-price.js +16 -16
  630. package/indicators/volume-by-price.js.map +1 -1
  631. package/indicators/volume-by-price.src.js +27 -10
  632. package/indicators/vwap.js +1 -1
  633. package/indicators/vwap.js.map +1 -1
  634. package/indicators/vwap.src.js +20 -8
  635. package/indicators/williams-r.js +5 -6
  636. package/indicators/williams-r.js.map +1 -1
  637. package/indicators/williams-r.src.js +41 -51
  638. package/indicators/wma.js +1 -1
  639. package/indicators/wma.src.js +1 -1
  640. package/indicators/zigzag.js +1 -1
  641. package/indicators/zigzag.src.js +1 -1
  642. package/modules/accessibility.d.ts +0 -30
  643. package/modules/accessibility.js +241 -216
  644. package/modules/accessibility.js.map +1 -1
  645. package/modules/accessibility.src.d.ts +0 -30
  646. package/modules/accessibility.src.js +7818 -6398
  647. package/modules/annotations-advanced.d.ts +30 -0
  648. package/modules/annotations-advanced.js +192 -165
  649. package/modules/annotations-advanced.js.map +1 -1
  650. package/modules/annotations-advanced.src.d.ts +30 -0
  651. package/modules/annotations-advanced.src.js +1716 -416
  652. package/modules/annotations.js +125 -110
  653. package/modules/annotations.js.map +1 -1
  654. package/modules/annotations.src.js +1059 -304
  655. package/modules/arrow-symbols.js +1 -1
  656. package/modules/arrow-symbols.src.js +1 -1
  657. package/modules/boost-canvas.js +15 -15
  658. package/modules/boost-canvas.js.map +1 -1
  659. package/modules/boost-canvas.src.js +3 -3
  660. package/modules/boost.js +79 -79
  661. package/modules/boost.js.map +1 -1
  662. package/modules/boost.src.js +42 -51
  663. package/modules/broken-axis.js +1 -1
  664. package/modules/broken-axis.js.map +1 -1
  665. package/modules/broken-axis.src.js +18 -12
  666. package/modules/bullet.js +1 -1
  667. package/modules/bullet.src.js +1 -1
  668. package/modules/coloraxis.js +24 -24
  669. package/modules/coloraxis.js.map +1 -1
  670. package/modules/coloraxis.src.js +77 -103
  671. package/modules/current-date-indicator.js +4 -4
  672. package/modules/current-date-indicator.js.map +1 -1
  673. package/modules/current-date-indicator.src.js +4 -4
  674. package/modules/cylinder.js +1 -1
  675. package/modules/cylinder.js.map +1 -1
  676. package/modules/cylinder.src.js +37 -5
  677. package/modules/data.d.ts +6 -6
  678. package/modules/data.js +31 -31
  679. package/modules/data.js.map +1 -1
  680. package/modules/data.src.d.ts +6 -6
  681. package/modules/data.src.js +18 -58
  682. package/modules/datagrouping.js +20 -20
  683. package/modules/datagrouping.js.map +1 -1
  684. package/modules/datagrouping.src.js +54 -33
  685. package/modules/debugger.js +1 -1
  686. package/modules/debugger.src.js +1 -1
  687. package/modules/dependency-wheel.js +11 -11
  688. package/modules/dependency-wheel.js.map +1 -1
  689. package/modules/dependency-wheel.src.js +5 -8
  690. package/modules/dotplot.js +1 -1
  691. package/modules/dotplot.src.js +1 -1
  692. package/modules/drag-panes.js +8 -8
  693. package/modules/drag-panes.js.map +1 -1
  694. package/modules/drag-panes.src.js +3 -3
  695. package/modules/draggable-points.js +1 -1
  696. package/modules/draggable-points.js.map +1 -1
  697. package/modules/draggable-points.src.js +8 -9
  698. package/modules/drilldown.js +24 -24
  699. package/modules/drilldown.js.map +1 -1
  700. package/modules/drilldown.src.js +13 -8
  701. package/modules/dumbbell.js +17 -17
  702. package/modules/dumbbell.js.map +1 -1
  703. package/modules/dumbbell.src.js +4 -8
  704. package/modules/export-data.js +19 -19
  705. package/modules/export-data.js.map +1 -1
  706. package/modules/export-data.src.js +9 -8
  707. package/modules/exporting.js +39 -38
  708. package/modules/exporting.js.map +1 -1
  709. package/modules/exporting.src.js +132 -113
  710. package/modules/full-screen.js +1 -1
  711. package/modules/full-screen.js.map +1 -1
  712. package/modules/full-screen.src.js +5 -4
  713. package/modules/funnel.js +12 -12
  714. package/modules/funnel.js.map +1 -1
  715. package/modules/funnel.src.js +9 -6
  716. package/modules/funnel3d.js +1 -1
  717. package/modules/funnel3d.js.map +1 -1
  718. package/modules/funnel3d.src.js +17 -10
  719. package/modules/gantt.js +217 -218
  720. package/modules/gantt.js.map +1 -1
  721. package/modules/gantt.src.js +364 -363
  722. package/modules/grid-axis.js +1 -1
  723. package/modules/grid-axis.js.map +1 -1
  724. package/modules/grid-axis.src.js +27 -19
  725. package/modules/heatmap.js +39 -39
  726. package/modules/heatmap.js.map +1 -1
  727. package/modules/heatmap.src.js +132 -141
  728. package/modules/heikinashi.js +1 -1
  729. package/modules/heikinashi.js.map +1 -1
  730. package/modules/heikinashi.src.js +12 -10
  731. package/modules/histogram-bellcurve.js +13 -13
  732. package/modules/histogram-bellcurve.js.map +1 -1
  733. package/modules/histogram-bellcurve.src.js +97 -91
  734. package/modules/hollowcandlestick.js +9 -9
  735. package/modules/hollowcandlestick.js.map +1 -1
  736. package/modules/hollowcandlestick.src.js +31 -35
  737. package/modules/item-series.js +6 -6
  738. package/modules/item-series.js.map +1 -1
  739. package/modules/item-series.src.js +6 -6
  740. package/modules/lollipop.js +1 -1
  741. package/modules/lollipop.src.js +1 -1
  742. package/modules/map.d.ts +138 -14
  743. package/modules/map.js +144 -122
  744. package/modules/map.js.map +1 -1
  745. package/modules/map.src.d.ts +138 -14
  746. package/modules/map.src.js +2253 -1074
  747. package/modules/marker-clusters.js +36 -36
  748. package/modules/marker-clusters.js.map +1 -1
  749. package/modules/marker-clusters.src.js +176 -143
  750. package/modules/networkgraph.d.ts +12 -1
  751. package/modules/networkgraph.js +49 -49
  752. package/modules/networkgraph.js.map +1 -1
  753. package/modules/networkgraph.src.d.ts +12 -1
  754. package/modules/networkgraph.src.js +103 -78
  755. package/modules/no-data-to-display.js +5 -5
  756. package/modules/no-data-to-display.js.map +1 -1
  757. package/modules/no-data-to-display.src.js +3 -3
  758. package/modules/offline-exporting.js +18 -18
  759. package/modules/offline-exporting.js.map +1 -1
  760. package/modules/offline-exporting.src.js +38 -43
  761. package/modules/oldie-polyfills.js +1 -1
  762. package/modules/oldie-polyfills.src.js +1 -1
  763. package/modules/oldie.js +26 -26
  764. package/modules/oldie.js.map +1 -1
  765. package/modules/oldie.src.js +21 -81
  766. package/modules/organization.js +13 -13
  767. package/modules/organization.js.map +1 -1
  768. package/modules/organization.src.js +8 -6
  769. package/modules/overlapping-datalabels.js +1 -1
  770. package/modules/overlapping-datalabels.src.js +1 -1
  771. package/modules/parallel-coordinates.js +1 -1
  772. package/modules/parallel-coordinates.js.map +1 -1
  773. package/modules/parallel-coordinates.src.js +6 -4
  774. package/modules/pareto.js +7 -7
  775. package/modules/pareto.js.map +1 -1
  776. package/modules/pareto.src.js +89 -78
  777. package/modules/pathfinder.js +1 -1
  778. package/modules/pathfinder.js.map +1 -1
  779. package/modules/pathfinder.src.js +21 -20
  780. package/modules/pattern-fill.js +1 -1
  781. package/modules/pattern-fill.js.map +1 -1
  782. package/modules/pattern-fill.src.js +18 -12
  783. package/modules/price-indicator.js +1 -1
  784. package/modules/price-indicator.js.map +1 -1
  785. package/modules/price-indicator.src.js +3 -2
  786. package/modules/pyramid3d.js +1 -1
  787. package/modules/pyramid3d.js.map +1 -1
  788. package/modules/pyramid3d.src.js +3 -2
  789. package/modules/sankey.d.ts +12 -1
  790. package/modules/sankey.js +29 -29
  791. package/modules/sankey.js.map +1 -1
  792. package/modules/sankey.src.d.ts +12 -1
  793. package/modules/sankey.src.js +307 -181
  794. package/modules/series-label.js +1 -1
  795. package/modules/series-label.js.map +1 -1
  796. package/modules/series-label.src.js +2 -2
  797. package/modules/solid-gauge.js +1 -1
  798. package/modules/solid-gauge.js.map +1 -1
  799. package/modules/solid-gauge.src.js +17 -2
  800. package/modules/sonification.js +59 -55
  801. package/modules/sonification.js.map +1 -1
  802. package/modules/sonification.src.js +3093 -2594
  803. package/modules/static-scale.js +1 -1
  804. package/modules/static-scale.src.js +1 -1
  805. package/modules/stock-tools.js +178 -163
  806. package/modules/stock-tools.js.map +1 -1
  807. package/modules/stock-tools.src.js +1136 -229
  808. package/modules/stock.d.ts +39 -6
  809. package/modules/stock.js +204 -196
  810. package/modules/stock.js.map +1 -1
  811. package/modules/stock.src.d.ts +39 -6
  812. package/modules/stock.src.js +1820 -1240
  813. package/modules/streamgraph.js +1 -1
  814. package/modules/streamgraph.src.js +1 -1
  815. package/modules/sunburst.js +60 -60
  816. package/modules/sunburst.js.map +1 -1
  817. package/modules/sunburst.src.js +281 -248
  818. package/modules/tilemap.js +17 -17
  819. package/modules/tilemap.js.map +1 -1
  820. package/modules/tilemap.src.js +3 -13
  821. package/modules/timeline.js +18 -18
  822. package/modules/timeline.js.map +1 -1
  823. package/modules/timeline.src.js +5 -5
  824. package/modules/treegrid.js +56 -57
  825. package/modules/treegrid.js.map +1 -1
  826. package/modules/treegrid.src.js +201 -169
  827. package/modules/treemap.js +41 -41
  828. package/modules/treemap.js.map +1 -1
  829. package/modules/treemap.src.js +266 -232
  830. package/modules/variable-pie.js +1 -1
  831. package/modules/variable-pie.src.js +1 -1
  832. package/modules/variwide.js +1 -1
  833. package/modules/variwide.js.map +1 -1
  834. package/modules/variwide.src.js +7 -3
  835. package/modules/vector.js +1 -1
  836. package/modules/vector.src.js +1 -1
  837. package/modules/venn.js +31 -31
  838. package/modules/venn.js.map +1 -1
  839. package/modules/venn.src.js +740 -731
  840. package/modules/windbarb.js +15 -15
  841. package/modules/windbarb.js.map +1 -1
  842. package/modules/windbarb.src.js +90 -62
  843. package/modules/wordcloud.js +23 -24
  844. package/modules/wordcloud.js.map +1 -1
  845. package/modules/wordcloud.src.js +898 -954
  846. package/modules/xrange.js +2 -2
  847. package/modules/xrange.js.map +1 -1
  848. package/modules/xrange.src.js +12 -33
  849. package/package.json +1 -1
  850. package/themes/avocado.js +1 -1
  851. package/themes/avocado.src.js +1 -1
  852. package/themes/brand-dark.js +15 -0
  853. package/themes/brand-dark.js.map +1 -0
  854. package/themes/brand-dark.src.js +328 -0
  855. package/themes/brand-light.js +15 -0
  856. package/themes/brand-light.js.map +1 -0
  857. package/themes/brand-light.src.js +294 -0
  858. package/themes/dark-blue.js +1 -1
  859. package/themes/dark-blue.src.js +1 -1
  860. package/themes/dark-green.js +1 -1
  861. package/themes/dark-green.src.js +1 -1
  862. package/themes/dark-unica.js +1 -1
  863. package/themes/dark-unica.js.map +1 -1
  864. package/themes/dark-unica.src.js +5 -3
  865. package/themes/gray.js +1 -1
  866. package/themes/gray.src.js +1 -1
  867. package/themes/grid-light.js +1 -1
  868. package/themes/grid-light.js.map +1 -1
  869. package/themes/grid-light.src.js +5 -3
  870. package/themes/grid.js +1 -1
  871. package/themes/grid.js.map +1 -1
  872. package/themes/grid.src.js +5 -3
  873. package/themes/high-contrast-dark.js +1 -1
  874. package/themes/high-contrast-dark.src.js +1 -1
  875. package/themes/high-contrast-light.js +1 -1
  876. package/themes/high-contrast-light.src.js +1 -1
  877. package/themes/sand-signika.js +1 -1
  878. package/themes/sand-signika.src.js +1 -1
  879. package/themes/skies.js +1 -1
  880. package/themes/skies.src.js +1 -1
  881. package/themes/sunset.js +1 -1
  882. package/themes/sunset.src.js +1 -1
  883. package/es-modules/Core/Axis/MapAxis.js +0 -157
  884. package/es-modules/Core/Color/Palette.js +0 -82
  885. package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
  886. package/es-modules/Mixins/ColorSeries.js +0 -77
  887. package/es-modules/Mixins/DerivedSeries.js +0 -118
  888. package/es-modules/Mixins/DrawPoint.js +0 -81
  889. package/es-modules/Mixins/IndicatorRequired.js +0 -56
  890. package/es-modules/Mixins/MultipleLines.js +0 -181
  891. package/es-modules/Mixins/Navigation.js +0 -54
  892. package/es-modules/Mixins/NelderMead.js +0 -132
  893. package/es-modules/Mixins/Polygon.js +0 -259
  894. package/es-modules/Mixins/ReduceArray.js +0 -54
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v9.2.2 (2021-08-24)
2
+ * @license Highcharts JS v9.3.3 (2022-02-01)
3
3
  *
4
4
  * (c) 2016-2021 Highsoft AS
5
5
  * Authors: Jon Arild Nygard
@@ -27,417 +27,123 @@
27
27
  obj[path] = fn.apply(null, args);
28
28
  }
29
29
  }
30
- _registerModule(_modules, 'Mixins/Polygon.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
30
+ _registerModule(_modules, 'Series/DrawPointComposition.js', [], function () {
31
31
  /* *
32
32
  *
33
33
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
34
34
  *
35
35
  * */
36
- /**
37
- * @private
38
- * @interface Highcharts.PolygonPointObject
39
- */ /**
40
- * @name Highcharts.PolygonPointObject#0
41
- * @type {number}
42
- */ /**
43
- * @name Highcharts.PolygonPointObject#1
44
- * @type {number}
45
- */
46
- /**
47
- * @private
48
- * @interface Highcharts.PolygonObject
49
- * @extends Array<Highcharts.PolygonPointObject>
50
- */ /**
51
- * @name Highcharts.PolygonObject#axes
52
- * @type {Array<PolygonPointObject>}
53
- */
54
- var find = U.find,
55
- isArray = U.isArray,
56
- isNumber = U.isNumber;
57
- var deg2rad = H.deg2rad;
58
- /* eslint-disable no-invalid-this, valid-jsdoc */
59
- /**
60
- * Alternative solution to correctFloat.
61
- * E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
62
- *
63
- * @private
64
- * @function correctFloat
65
- * @param {number} number
66
- * @param {number} [precision]
67
- * @return {number}
68
- */
69
- var correctFloat = function (number,
70
- precision) {
71
- var p = isNumber(precision) ? precision : 14,
72
- magnitude = Math.pow(10,
73
- p);
74
- return Math.round(number * magnitude) / magnitude;
75
- };
76
- /**
77
- * Calculates the normals to a line between two points.
78
- *
79
- * @private
80
- * @function getNormals
81
- * @param {Highcharts.PolygonPointObject} p1
82
- * Start point for the line. Array of x and y value.
83
- * @param {Highcharts.PolygonPointObject} p2
84
- * End point for the line. Array of x and y value.
85
- * @return {Highcharts.PolygonObject}
86
- * Returns the two normals in an array.
87
- */
88
- var getNormals = function getNormal(p1,
89
- p2) {
90
- var dx = p2[0] - p1[0], // x2 - x1
91
- dy = p2[1] - p1[1]; // y2 - y1
92
- return [
93
- [-dy,
94
- dx],
95
- [dy, -dx]
96
- ];
97
- };
98
- /**
99
- * Calculates the dot product of two coordinates. The result is a scalar value.
100
- *
101
- * @private
102
- * @function dotProduct
103
- * @param {Highcharts.PolygonPointObject} a
104
- * The x and y coordinates of the first point.
105
- *
106
- * @param {Highcharts.PolygonPointObject} b
107
- * The x and y coordinates of the second point.
108
- *
109
- * @return {number}
110
- * Returns the dot product of a and b.
111
- */
112
- var dotProduct = function dotProduct(a,
113
- b) {
114
- var ax = a[0],
115
- ay = a[1],
116
- bx = b[0],
117
- by = b[1];
118
- return ax * bx + ay * by;
119
- };
120
- /**
121
- * Projects a polygon onto a coordinate.
122
- *
123
- * @private
124
- * @function project
125
- * @param {Highcharts.PolygonObject} polygon
126
- * Array of points in a polygon.
127
- * @param {Highcharts.PolygonPointObject} target
128
- * The coordinate of pr
129
- * @return {Highcharts.RangeObject}
130
- */
131
- var project = function project(polygon,
132
- target) {
133
- var products = polygon.map(function (point) {
134
- return dotProduct(point,
135
- target);
136
- });
137
- return {
138
- min: Math.min.apply(this, products),
139
- max: Math.max.apply(this, products)
140
- };
141
- };
142
- /**
143
- * Rotates a point clockwise around the origin.
144
- *
145
- * @private
146
- * @function rotate2DToOrigin
147
- * @param {Highcharts.PolygonPointObject} point
148
- * The x and y coordinates for the point.
149
- * @param {number} angle
150
- * The angle of rotation.
151
- * @return {Highcharts.PolygonPointObject}
152
- * The x and y coordinate for the rotated point.
153
- */
154
- var rotate2DToOrigin = function (point,
155
- angle) {
156
- var x = point[0],
157
- y = point[1],
158
- rad = deg2rad * -angle,
159
- cosAngle = Math.cos(rad),
160
- sinAngle = Math.sin(rad);
161
- return [
162
- correctFloat(x * cosAngle - y * sinAngle),
163
- correctFloat(x * sinAngle + y * cosAngle)
164
- ];
165
- };
166
- /**
167
- * Rotate a point clockwise around another point.
168
- *
169
- * @private
170
- * @function rotate2DToPoint
171
- * @param {Highcharts.PolygonPointObject} point
172
- * The x and y coordinates for the point.
173
- * @param {Highcharts.PolygonPointObject} origin
174
- * The point to rotate around.
175
- * @param {number} angle
176
- * The angle of rotation.
177
- * @return {Highcharts.PolygonPointObject}
178
- * The x and y coordinate for the rotated point.
179
- */
180
- var rotate2DToPoint = function (point,
181
- origin,
182
- angle) {
183
- var x = point[0] - origin[0],
184
- y = point[1] - origin[1],
185
- rotated = rotate2DToOrigin([x,
186
- y],
187
- angle);
188
- return [
189
- rotated[0] + origin[0],
190
- rotated[1] + origin[1]
191
- ];
192
- };
193
- /**
194
- * @private
195
- */
196
- var isAxesEqual = function (axis1,
197
- axis2) {
198
- return (axis1[0] === axis2[0] &&
199
- axis1[1] === axis2[1]);
200
- };
201
- /**
202
- * @private
203
- */
204
- var getAxesFromPolygon = function (polygon) {
205
- var points,
206
- axes = polygon.axes;
207
- if (!isArray(axes)) {
208
- axes = [];
209
- points = points = polygon.concat([polygon[0]]);
210
- points.reduce(function findAxis(p1, p2) {
211
- var normals = getNormals(p1,
212
- p2),
213
- axis = normals[0]; // Use the left normal as axis.
214
- // Check that the axis is unique.
215
- if (!find(axes,
216
- function (existing) {
217
- return isAxesEqual(existing,
218
- axis);
219
- })) {
220
- axes.push(axis);
221
- }
222
- // Return p2 to be used as p1 in next iteration.
223
- return p2;
224
- });
225
- polygon.axes = axes;
226
- }
227
- return axes;
228
- };
229
- /**
230
- * @private
231
- */
232
- var getAxes = function (polygon1,
233
- polygon2) {
234
- // Get the axis from both polygons.
235
- var axes1 = getAxesFromPolygon(polygon1),
236
- axes2 = getAxesFromPolygon(polygon2);
237
- return axes1.concat(axes2);
238
- };
239
- /**
240
- * @private
241
- */
242
- var getPolygon = function (x,
243
- y,
244
- width,
245
- height,
246
- rotation) {
247
- var origin = [x,
248
- y],
249
- left = x - (width / 2),
250
- right = x + (width / 2),
251
- top = y - (height / 2),
252
- bottom = y + (height / 2),
253
- polygon = [
254
- [left,
255
- top],
256
- [right,
257
- top],
258
- [right,
259
- bottom],
260
- [left,
261
- bottom]
262
- ];
263
- return polygon.map(function (point) {
264
- return rotate2DToPoint(point, origin, -rotation);
265
- });
266
- };
267
- /**
268
- * @private
269
- */
270
- var getBoundingBoxFromPolygon = function (points) {
271
- return points.reduce(function (obj,
272
- point) {
273
- var x = point[0],
274
- y = point[1];
275
- obj.left = Math.min(x, obj.left);
276
- obj.right = Math.max(x, obj.right);
277
- obj.bottom = Math.max(y, obj.bottom);
278
- obj.top = Math.min(y, obj.top);
279
- return obj;
280
- }, {
281
- left: Number.MAX_VALUE,
282
- right: -Number.MAX_VALUE,
283
- bottom: -Number.MAX_VALUE,
284
- top: Number.MAX_VALUE
285
- });
286
- };
287
- /**
288
- * @private
289
- */
290
- var isPolygonsOverlappingOnAxis = function (axis,
291
- polygon1,
292
- polygon2) {
293
- var projection1 = project(polygon1,
294
- axis),
295
- projection2 = project(polygon2,
296
- axis),
297
- isOverlapping = !(projection2.min > projection1.max ||
298
- projection2.max < projection1.min);
299
- return !isOverlapping;
300
- };
301
- /**
302
- * Checks wether two convex polygons are colliding by using the Separating Axis
303
- * Theorem.
304
- *
305
- * @private
306
- * @function isPolygonsColliding
307
- * @param {Highcharts.PolygonObject} polygon1
308
- * First polygon.
309
- *
310
- * @param {Highcharts.PolygonObject} polygon2
311
- * Second polygon.
312
- *
313
- * @return {boolean}
314
- * Returns true if they are colliding, otherwise false.
315
- */
316
- var isPolygonsColliding = function isPolygonsColliding(polygon1,
317
- polygon2) {
318
- var axes = getAxes(polygon1,
319
- polygon2),
320
- overlappingOnAllAxes = !find(axes,
321
- function (axis) {
322
- return isPolygonsOverlappingOnAxis(axis,
323
- polygon1,
324
- polygon2);
325
- });
326
- return overlappingOnAllAxes;
327
- };
328
- /**
329
- * @private
330
- */
331
- var movePolygon = function (deltaX,
332
- deltaY,
333
- polygon) {
334
- return polygon.map(function (point) {
335
- return [
336
- point[0] + deltaX,
337
- point[1] + deltaY
338
- ];
339
- });
340
- };
341
- var collision = {
342
- getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
343
- getPolygon: getPolygon,
344
- isPolygonsColliding: isPolygonsColliding,
345
- movePolygon: movePolygon,
346
- rotate2DToOrigin: rotate2DToOrigin,
347
- rotate2DToPoint: rotate2DToPoint
348
- };
349
-
350
- return collision;
351
- });
352
- _registerModule(_modules, 'Mixins/DrawPoint.js', [], function () {
353
36
  /* *
354
37
  *
355
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
38
+ * Composition
356
39
  *
357
40
  * */
358
- var isFn = function (x) {
359
- return typeof x === 'function';
360
- };
361
- /* eslint-disable no-invalid-this, valid-jsdoc */
362
- /**
363
- * Handles the drawing of a component.
364
- * Can be used for any type of component that reserves the graphic property, and
365
- * provides a shouldDraw on its context.
366
- *
367
- * @private
368
- * @function draw
369
- * @param {DrawPointParams} params
370
- * Parameters.
371
- *
372
- * @todo add type checking.
373
- * @todo export this function to enable usage
374
- */
375
- var draw = function draw(params) {
376
- var _this = this;
377
- var animatableAttribs = params.animatableAttribs,
378
- onComplete = params.onComplete,
379
- css = params.css,
380
- renderer = params.renderer;
381
- var animation = (this.series && this.series.chart.hasRendered) ?
382
- // Chart-level animation on updates
383
- void 0 :
384
- // Series-level animation on new points
385
- (this.series &&
386
- this.series.options.animation);
387
- var graphic = this.graphic;
388
- if (this.shouldDraw()) {
389
- if (!graphic) {
390
- this.graphic = graphic =
391
- renderer[params.shapeType](params.shapeArgs)
392
- .add(params.group);
41
+ var DrawPointComposition;
42
+ (function (DrawPointComposition) {
43
+ /* *
44
+ *
45
+ * Declarations
46
+ *
47
+ * */
48
+ /* *
49
+ *
50
+ * Constants
51
+ *
52
+ * */
53
+ var composedClasses = [];
54
+ /* *
55
+ *
56
+ * Functions
57
+ *
58
+ * */
59
+ /* eslint-disable valid-jsdoc */
60
+ /**
61
+ * @private
62
+ */
63
+ function compose(PointClass) {
64
+ if (composedClasses.indexOf(PointClass) === -1) {
65
+ composedClasses.push(PointClass);
66
+ var pointProto = PointClass.prototype;
67
+ pointProto.draw = draw;
68
+ if (!pointProto.shouldDraw) {
69
+ pointProto.shouldDraw = shouldDraw;
70
+ }
393
71
  }
394
- graphic
395
- .css(css)
396
- .attr(params.attribs)
397
- .animate(animatableAttribs, params.isNew ? false : animation, onComplete);
72
+ return PointClass;
398
73
  }
399
- else if (graphic) {
400
- var destroy_1 = function () {
401
- _this.graphic = graphic = (graphic && graphic.destroy());
402
- if (isFn(onComplete)) {
403
- onComplete();
74
+ DrawPointComposition.compose = compose;
75
+ /**
76
+ * Handles the drawing of a component.
77
+ * Can be used for any type of component that reserves the graphic property,
78
+ * and provides a shouldDraw on its context.
79
+ *
80
+ * @private
81
+ *
82
+ * @todo add type checking.
83
+ * @todo export this function to enable usage
84
+ */
85
+ function draw(params) {
86
+ var _this = this;
87
+ var animatableAttribs = params.animatableAttribs,
88
+ onComplete = params.onComplete,
89
+ css = params.css,
90
+ renderer = params.renderer;
91
+ var animation = (this.series && this.series.chart.hasRendered) ?
92
+ // Chart-level animation on updates
93
+ void 0 :
94
+ // Series-level animation on new points
95
+ (this.series &&
96
+ this.series.options.animation);
97
+ var graphic = this.graphic;
98
+ params.attribs = params.attribs || {};
99
+ // Assigning class in dot notation does go well in IE8
100
+ // eslint-disable-next-line dot-notation
101
+ params.attribs['class'] = this.getClassName();
102
+ if (this.shouldDraw()) {
103
+ if (!graphic) {
104
+ this.graphic = graphic =
105
+ renderer[params.shapeType](params.shapeArgs)
106
+ .add(params.group);
404
107
  }
405
- };
406
- // animate only runs complete callback if something was animated.
407
- if (Object.keys(animatableAttribs).length) {
408
- graphic.animate(animatableAttribs, void 0, function () {
409
- destroy_1();
410
- });
108
+ graphic
109
+ .css(css)
110
+ .attr(params.attribs)
111
+ .animate(animatableAttribs, params.isNew ? false : animation, onComplete);
411
112
  }
412
- else {
413
- destroy_1();
113
+ else if (graphic) {
114
+ var destroy_1 = function () {
115
+ _this.graphic = graphic = (graphic && graphic.destroy());
116
+ if (typeof onComplete === 'function') {
117
+ onComplete();
118
+ }
119
+ };
120
+ // animate only runs complete callback if something was animated.
121
+ if (Object.keys(animatableAttribs).length) {
122
+ graphic.animate(animatableAttribs, void 0, function () {
123
+ destroy_1();
124
+ });
125
+ }
126
+ else {
127
+ destroy_1();
128
+ }
414
129
  }
415
130
  }
416
- };
417
- /**
418
- * An extended version of draw customized for points.
419
- * It calls additional methods that is expected when rendering a point.
420
- * @private
421
- * @param {Highcharts.Dictionary<any>} params Parameters
422
- */
423
- var drawPoint = function drawPoint(params) {
424
- var point = this,
425
- attribs = params.attribs = params.attribs || {};
426
- // Assigning class in dot notation does go well in IE8
427
- // eslint-disable-next-line dot-notation
428
- attribs['class'] = point.getClassName();
429
- // Call draw to render component
430
- draw.call(point, params);
431
- };
432
- var drawPointModule = {
433
- draw: draw,
434
- drawPoint: drawPoint,
435
- isFn: isFn
436
- };
131
+ /**
132
+ * @private
133
+ */
134
+ function shouldDraw() {
135
+ return !this.isNull;
136
+ }
137
+ })(DrawPointComposition || (DrawPointComposition = {}));
138
+ /* *
139
+ *
140
+ * Default Export
141
+ *
142
+ * */
437
143
 
438
- return drawPointModule;
144
+ return DrawPointComposition;
439
145
  });
440
- _registerModule(_modules, 'Series/Wordcloud/WordcloudPoint.js', [_modules['Mixins/DrawPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (DrawPointMixin, SeriesRegistry, U) {
146
+ _registerModule(_modules, 'Series/Wordcloud/WordcloudPoint.js', [_modules['Series/DrawPointComposition.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (DrawPointComposition, SeriesRegistry, U) {
441
147
  /* *
442
148
  *
443
149
  * Experimental Highcharts module which enables visualization of a word cloud.
@@ -489,23 +195,24 @@
489
195
  * Functions
490
196
  *
491
197
  * */
492
- WordcloudPoint.prototype.shouldDraw = function () {
493
- var point = this;
494
- return !point.isNull;
495
- };
496
198
  WordcloudPoint.prototype.isValid = function () {
497
199
  return true;
498
200
  };
499
201
  return WordcloudPoint;
500
202
  }(ColumnSeries.prototype.pointClass));
501
203
  extend(WordcloudPoint.prototype, {
502
- draw: DrawPointMixin.drawPoint,
503
204
  weight: 1
504
205
  });
206
+ DrawPointComposition.compose(WordcloudPoint);
207
+ /* *
208
+ *
209
+ * Default Export
210
+ *
211
+ * */
505
212
 
506
213
  return WordcloudPoint;
507
214
  });
508
- _registerModule(_modules, 'Series/Wordcloud/WordcloudUtils.js', [_modules['Mixins/Polygon.js'], _modules['Core/Utilities.js']], function (PolygonMixin, U) {
215
+ _registerModule(_modules, 'Series/Wordcloud/WordcloudUtils.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
509
216
  /* *
510
217
  *
511
218
  * Experimental Highcharts module which enables visualization of a word cloud.
@@ -517,574 +224,796 @@
517
224
  *
518
225
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
519
226
  * */
520
- var isPolygonsColliding = PolygonMixin.isPolygonsColliding,
521
- movePolygon = PolygonMixin.movePolygon;
227
+ var deg2rad = H.deg2rad;
522
228
  var extend = U.extend,
523
229
  find = U.find,
524
230
  isNumber = U.isNumber,
525
231
  isObject = U.isObject,
526
232
  merge = U.merge;
527
233
  /* *
528
- *
529
- * Namespace
530
- *
531
- * */
532
- var WordcloudUtils;
533
- (function (WordcloudUtils) {
534
- /* *
535
- *
536
- * Functions
537
- *
538
- * */
539
- /**
540
- * Detects if there is a collision between two rectangles.
541
- *
542
- * @private
543
- * @function isRectanglesIntersecting
544
- *
545
- * @param {Highcharts.PolygonBoxObject} r1
546
- * First rectangle.
547
- *
548
- * @param {Highcharts.PolygonBoxObject} r2
549
- * Second rectangle.
550
- *
551
- * @return {boolean}
552
- * Returns true if the rectangles overlap.
553
- */
554
- function isRectanglesIntersecting(r1, r2) {
555
- return !(r2.left > r1.right ||
556
- r2.right < r1.left ||
557
- r2.top > r1.bottom ||
558
- r2.bottom < r1.top);
559
- }
560
- WordcloudUtils.isRectanglesIntersecting = isRectanglesIntersecting;
561
- /**
562
- * Detects if a word collides with any previously placed words.
563
- *
564
- * @private
565
- * @function intersectsAnyWord
566
- *
567
- * @param {Highcharts.Point} point
568
- * Point which the word is connected to.
569
- *
570
- * @param {Array<Highcharts.Point>} points
571
- * Previously placed points to check against.
572
- *
573
- * @return {boolean}
574
- * Returns true if there is collision.
575
- */
576
- function intersectsAnyWord(point, points) {
577
- var intersects = false,
578
- rect = point.rect,
579
- polygon = point.polygon,
580
- lastCollidedWith = point.lastCollidedWith,
581
- isIntersecting = function (p) {
582
- var result = isRectanglesIntersecting(rect,
583
- p.rect);
584
- if (result &&
585
- (point.rotation % 90 || p.rotation % 90)) {
586
- result = isPolygonsColliding(polygon, p.polygon);
587
- }
588
- return result;
589
- };
590
- // If the point has already intersected a different point, chances are
591
- // they are still intersecting. So as an enhancement we check this
592
- // first.
593
- if (lastCollidedWith) {
594
- intersects = isIntersecting(lastCollidedWith);
595
- // If they no longer intersects, remove the cache from the point.
596
- if (!intersects) {
597
- delete point.lastCollidedWith;
598
- }
599
- }
600
- // If not already found, then check if we can find a point that is
601
- // intersecting.
602
- if (!intersects) {
603
- intersects = !!find(points, function (p) {
604
- var result = isIntersecting(p);
605
- if (result) {
606
- point.lastCollidedWith = p;
607
- }
608
- return result;
609
- });
610
- }
611
- return intersects;
612
- }
613
- WordcloudUtils.intersectsAnyWord = intersectsAnyWord;
614
- /**
615
- * Gives a set of cordinates for an Archimedian Spiral.
616
- *
617
- * @private
618
- * @function archimedeanSpiral
619
- *
620
- * @param {number} attempt
621
- * How far along the spiral we have traversed.
622
- *
623
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
624
- * Additional parameters.
625
- *
626
- * @return {boolean|Highcharts.PositionObject}
627
- * Resulting coordinates, x and y. False if the word should be dropped from
628
- * the visualization.
629
- */
630
- function archimedeanSpiral(attempt, params) {
631
- var field = params.field,
632
- result = false,
633
- maxDelta = (field.width * field.width) + (field.height * field.height),
634
- t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
635
- // Emergency brake. TODO make spiralling logic more foolproof.
636
- if (attempt <= 10000) {
637
- result = {
638
- x: t * Math.cos(t),
639
- y: t * Math.sin(t)
640
- };
641
- if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
642
- result = false;
234
+ *
235
+ * Functions
236
+ *
237
+ * */
238
+ /* eslint-disable valid-jsdoc */
239
+ /**
240
+ * Detects if there is a collision between two rectangles.
241
+ *
242
+ * @private
243
+ * @function isRectanglesIntersecting
244
+ *
245
+ * @param {Highcharts.PolygonBoxObject} r1
246
+ * First rectangle.
247
+ *
248
+ * @param {Highcharts.PolygonBoxObject} r2
249
+ * Second rectangle.
250
+ *
251
+ * @return {boolean}
252
+ * Returns true if the rectangles overlap.
253
+ */
254
+ function isRectanglesIntersecting(r1, r2) {
255
+ return !(r2.left > r1.right ||
256
+ r2.right < r1.left ||
257
+ r2.top > r1.bottom ||
258
+ r2.bottom < r1.top);
259
+ }
260
+ /**
261
+ * Calculates the normals to a line between two points.
262
+ *
263
+ * @private
264
+ * @function getNormals
265
+ * @param {Highcharts.PolygonPointObject} p1
266
+ * Start point for the line. Array of x and y value.
267
+ * @param {Highcharts.PolygonPointObject} p2
268
+ * End point for the line. Array of x and y value.
269
+ * @return {Highcharts.PolygonObject}
270
+ * Returns the two normals in an array.
271
+ */
272
+ function getNormals(p1, p2) {
273
+ var dx = p2[0] - p1[0], // x2 - x1
274
+ dy = p2[1] - p1[1]; // y2 - y1
275
+ return [
276
+ [-dy,
277
+ dx],
278
+ [dy, -dx]
279
+ ];
280
+ }
281
+ /**
282
+ * @private
283
+ */
284
+ function getAxesFromPolygon(polygon) {
285
+ var points,
286
+ axes = polygon.axes || [];
287
+ if (!axes.length) {
288
+ axes = [];
289
+ points = points = polygon.concat([polygon[0]]);
290
+ points.reduce(function findAxis(p1, p2) {
291
+ var normals = getNormals(p1,
292
+ p2),
293
+ axis = normals[0]; // Use the left normal as axis.
294
+ // Check that the axis is unique.
295
+ if (!find(axes,
296
+ function (existing) {
297
+ return existing[0] === axis[0] &&
298
+ existing[1] === axis[1];
299
+ })) {
300
+ axes.push(axis);
643
301
  }
302
+ // Return p2 to be used as p1 in next iteration.
303
+ return p2;
304
+ });
305
+ polygon.axes = axes;
306
+ }
307
+ return axes;
308
+ }
309
+ /**
310
+ * Projects a polygon onto a coordinate.
311
+ *
312
+ * @private
313
+ * @function project
314
+ * @param {Highcharts.PolygonObject} polygon
315
+ * Array of points in a polygon.
316
+ * @param {Highcharts.PolygonPointObject} target
317
+ * The coordinate of pr
318
+ */
319
+ function project(polygon, target) {
320
+ var products = polygon.map(function (point) {
321
+ var ax = point[0],
322
+ ay = point[1],
323
+ bx = target[0],
324
+ by = target[1];
325
+ return ax * bx + ay * by;
326
+ });
327
+ return {
328
+ min: Math.min.apply(this, products),
329
+ max: Math.max.apply(this, products)
330
+ };
331
+ }
332
+ /**
333
+ * @private
334
+ */
335
+ function isPolygonsOverlappingOnAxis(axis, polygon1, polygon2) {
336
+ var projection1 = project(polygon1,
337
+ axis),
338
+ projection2 = project(polygon2,
339
+ axis),
340
+ isOverlapping = !(projection2.min > projection1.max ||
341
+ projection2.max < projection1.min);
342
+ return !isOverlapping;
343
+ }
344
+ /**
345
+ * Checks wether two convex polygons are colliding by using the Separating
346
+ * Axis Theorem.
347
+ *
348
+ * @private
349
+ * @function isPolygonsColliding
350
+ * @param {Highcharts.PolygonObject} polygon1
351
+ * First polygon.
352
+ *
353
+ * @param {Highcharts.PolygonObject} polygon2
354
+ * Second polygon.
355
+ *
356
+ * @return {boolean}
357
+ * Returns true if they are colliding, otherwise false.
358
+ */
359
+ function isPolygonsColliding(polygon1, polygon2) {
360
+ // Get the axis from both polygons.
361
+ var axes1 = getAxesFromPolygon(polygon1),
362
+ axes2 = getAxesFromPolygon(polygon2),
363
+ axes = axes1.concat(axes2),
364
+ overlappingOnAllAxes = !find(axes,
365
+ function (axis) { return isPolygonsOverlappingOnAxis(axis,
366
+ polygon1,
367
+ polygon2); });
368
+ return overlappingOnAllAxes;
369
+ }
370
+ /**
371
+ * Detects if a word collides with any previously placed words.
372
+ *
373
+ * @private
374
+ * @function intersectsAnyWord
375
+ *
376
+ * @param {Highcharts.Point} point
377
+ * Point which the word is connected to.
378
+ *
379
+ * @param {Array<Highcharts.Point>} points
380
+ * Previously placed points to check against.
381
+ *
382
+ * @return {boolean}
383
+ * Returns true if there is collision.
384
+ */
385
+ function intersectsAnyWord(point, points) {
386
+ var intersects = false,
387
+ rect = point.rect,
388
+ polygon = point.polygon,
389
+ lastCollidedWith = point.lastCollidedWith,
390
+ isIntersecting = function (p) {
391
+ var result = isRectanglesIntersecting(rect,
392
+ p.rect);
393
+ if (result &&
394
+ (point.rotation % 90 || p.rotation % 90)) {
395
+ result = isPolygonsColliding(polygon, p.polygon);
644
396
  }
645
397
  return result;
398
+ };
399
+ // If the point has already intersected a different point, chances are
400
+ // they are still intersecting. So as an enhancement we check this
401
+ // first.
402
+ if (lastCollidedWith) {
403
+ intersects = isIntersecting(lastCollidedWith);
404
+ // If they no longer intersects, remove the cache from the point.
405
+ if (!intersects) {
406
+ delete point.lastCollidedWith;
407
+ }
646
408
  }
647
- WordcloudUtils.archimedeanSpiral = archimedeanSpiral;
648
- /**
649
- * Gives a set of cordinates for an rectangular spiral.
650
- *
651
- * @private
652
- * @function squareSpiral
653
- *
654
- * @param {number} attempt
655
- * How far along the spiral we have traversed.
656
- *
657
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
658
- * Additional parameters.
659
- *
660
- * @return {boolean|Highcharts.PositionObject}
661
- * Resulting coordinates, x and y. False if the word should be dropped from
662
- * the visualization.
663
- */
664
- function squareSpiral(attempt, params) {
665
- var a = attempt * 4,
666
- k = Math.ceil((Math.sqrt(a) - 1) / 2),
667
- t = 2 * k + 1,
668
- m = Math.pow(t, 2),
669
- isBoolean = function (x) {
670
- return typeof x === 'boolean';
671
- }, result = false;
672
- t -= 1;
409
+ // If not already found, then check if we can find a point that is
410
+ // intersecting.
411
+ if (!intersects) {
412
+ intersects = !!find(points, function (p) {
413
+ var result = isIntersecting(p);
414
+ if (result) {
415
+ point.lastCollidedWith = p;
416
+ }
417
+ return result;
418
+ });
419
+ }
420
+ return intersects;
421
+ }
422
+ /**
423
+ * Gives a set of cordinates for an Archimedian Spiral.
424
+ *
425
+ * @private
426
+ * @function archimedeanSpiral
427
+ *
428
+ * @param {number} attempt
429
+ * How far along the spiral we have traversed.
430
+ *
431
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
432
+ * Additional parameters.
433
+ *
434
+ * @return {boolean|Highcharts.PositionObject}
435
+ * Resulting coordinates, x and y. False if the word should be dropped from
436
+ * the visualization.
437
+ */
438
+ function archimedeanSpiral(attempt, params) {
439
+ var field = params.field,
440
+ result = false,
441
+ maxDelta = (field.width * field.width) + (field.height * field.height),
442
+ t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
443
+ // Emergency brake. TODO make spiralling logic more foolproof.
673
444
  if (attempt <= 10000) {
674
- if (isBoolean(result) && a >= m - t) {
445
+ result = {
446
+ x: t * Math.cos(t),
447
+ y: t * Math.sin(t)
448
+ };
449
+ if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
450
+ result = false;
451
+ }
452
+ }
453
+ return result;
454
+ }
455
+ /**
456
+ * Gives a set of cordinates for an rectangular spiral.
457
+ *
458
+ * @private
459
+ * @function squareSpiral
460
+ *
461
+ * @param {number} attempt
462
+ * How far along the spiral we have traversed.
463
+ *
464
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
465
+ * Additional parameters.
466
+ *
467
+ * @return {boolean|Highcharts.PositionObject}
468
+ * Resulting coordinates, x and y. False if the word should be dropped from
469
+ * the visualization.
470
+ */
471
+ function squareSpiral(attempt, params) {
472
+ var a = attempt * 4,
473
+ k = Math.ceil((Math.sqrt(a) - 1) / 2),
474
+ t = 2 * k + 1,
475
+ m = Math.pow(t, 2),
476
+ isBoolean = function (x) {
477
+ return typeof x === 'boolean';
478
+ }, result = false;
479
+ t -= 1;
480
+ if (attempt <= 10000) {
481
+ if (isBoolean(result) && a >= m - t) {
482
+ result = {
483
+ x: k - (m - a),
484
+ y: -k
485
+ };
486
+ }
487
+ m -= t;
488
+ if (isBoolean(result) && a >= m - t) {
489
+ result = {
490
+ x: -k,
491
+ y: -k + (m - a)
492
+ };
493
+ }
494
+ m -= t;
495
+ if (isBoolean(result)) {
496
+ if (a >= m - t) {
675
497
  result = {
676
- x: k - (m - a),
677
- y: -k
498
+ x: -k + (m - a),
499
+ y: k
678
500
  };
679
501
  }
680
- m -= t;
681
- if (isBoolean(result) && a >= m - t) {
502
+ else {
682
503
  result = {
683
- x: -k,
684
- y: -k + (m - a)
504
+ x: k,
505
+ y: k - (m - a - t)
685
506
  };
686
507
  }
687
- m -= t;
688
- if (isBoolean(result)) {
689
- if (a >= m - t) {
690
- result = {
691
- x: -k + (m - a),
692
- y: k
693
- };
694
- }
695
- else {
696
- result = {
697
- x: k,
698
- y: k - (m - a - t)
699
- };
700
- }
701
- }
702
- result.x *= 5;
703
- result.y *= 5;
704
508
  }
705
- return result;
509
+ result.x *= 5;
510
+ result.y *= 5;
706
511
  }
707
- WordcloudUtils.squareSpiral = squareSpiral;
708
- /**
709
- * Gives a set of cordinates for an rectangular spiral.
710
- *
711
- * @private
712
- * @function rectangularSpiral
713
- *
714
- * @param {number} attempt
715
- * How far along the spiral we have traversed.
716
- *
717
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
718
- * Additional parameters.
719
- *
720
- * @return {boolean|Higcharts.PositionObject}
721
- * Resulting coordinates, x and y. False if the word should be dropped from
722
- * the visualization.
723
- */
724
- function rectangularSpiral(attempt, params) {
725
- var result = squareSpiral(attempt,
726
- params),
727
- field = params.field;
728
- if (result) {
729
- result.x *= field.ratioX;
730
- result.y *= field.ratioY;
731
- }
732
- return result;
512
+ return result;
513
+ }
514
+ /**
515
+ * Gives a set of cordinates for an rectangular spiral.
516
+ *
517
+ * @private
518
+ * @function rectangularSpiral
519
+ *
520
+ * @param {number} attempt
521
+ * How far along the spiral we have traversed.
522
+ *
523
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
524
+ * Additional parameters.
525
+ *
526
+ * @return {boolean|Higcharts.PositionObject}
527
+ * Resulting coordinates, x and y. False if the word should be dropped from
528
+ * the visualization.
529
+ */
530
+ function rectangularSpiral(attempt, params) {
531
+ var result = squareSpiral(attempt,
532
+ params),
533
+ field = params.field;
534
+ if (result) {
535
+ result.x *= field.ratioX;
536
+ result.y *= field.ratioY;
733
537
  }
734
- WordcloudUtils.rectangularSpiral = rectangularSpiral;
538
+ return result;
539
+ }
540
+ /**
541
+ * @private
542
+ * @function getRandomPosition
543
+ *
544
+ * @param {number} size
545
+ * Random factor.
546
+ *
547
+ * @return {number}
548
+ * Random position.
549
+ */
550
+ function getRandomPosition(size) {
551
+ return Math.round((size * (Math.random() + 0.5)) / 2);
552
+ }
553
+ /**
554
+ * Calculates the proper scale to fit the cloud inside the plotting area.
555
+ *
556
+ * @private
557
+ * @function getScale
558
+ *
559
+ * @param {number} targetWidth
560
+ * Width of target area.
561
+ *
562
+ * @param {number} targetHeight
563
+ * Height of target area.
564
+ *
565
+ * @param {Object} field
566
+ * The playing field.
567
+ *
568
+ * @param {Highcharts.Series} series
569
+ * Series object.
570
+ *
571
+ * @return {number}
572
+ * Returns the value to scale the playing field up to the size of the target
573
+ * area.
574
+ */
575
+ function getScale(targetWidth, targetHeight, field) {
576
+ var height = Math.max(Math.abs(field.top),
577
+ Math.abs(field.bottom)) * 2,
578
+ width = Math.max(Math.abs(field.left),
579
+ Math.abs(field.right)) * 2,
580
+ scaleX = width > 0 ? 1 / width * targetWidth : 1,
581
+ scaleY = height > 0 ? 1 / height * targetHeight : 1;
582
+ return Math.min(scaleX, scaleY);
583
+ }
584
+ /**
585
+ * Calculates what is called the playing field. The field is the area which
586
+ * all the words are allowed to be positioned within. The area is
587
+ * proportioned to match the target aspect ratio.
588
+ *
589
+ * @private
590
+ * @function getPlayingField
591
+ *
592
+ * @param {number} targetWidth
593
+ * Width of the target area.
594
+ *
595
+ * @param {number} targetHeight
596
+ * Height of the target area.
597
+ *
598
+ * @param {Array<Highcharts.Point>} data
599
+ * Array of points.
600
+ *
601
+ * @param {Object} data.dimensions
602
+ * The height and width of the word.
603
+ *
604
+ * @return {Object}
605
+ * The width and height of the playing field.
606
+ */
607
+ function getPlayingField(targetWidth, targetHeight, data) {
608
+ var info = data.reduce(function (obj,
609
+ point) {
610
+ var dimensions = point.dimensions,
611
+ x = Math.max(dimensions.width,
612
+ dimensions.height);
613
+ // Find largest height.
614
+ obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
615
+ // Find largest width.
616
+ obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
617
+ // Sum up the total maximum area of all the words.
618
+ obj.area += x * x;
619
+ return obj;
620
+ }, {
621
+ maxHeight: 0,
622
+ maxWidth: 0,
623
+ area: 0
624
+ }),
735
625
  /**
736
- * @private
737
- * @function getRandomPosition
738
- *
739
- * @param {number} size
740
- * Random factor.
741
- *
742
- * @return {number}
743
- * Random position.
626
+ * Use largest width, largest height, or root of total area to give
627
+ * size to the playing field.
744
628
  */
745
- function getRandomPosition(size) {
746
- return Math.round((size * (Math.random() + 0.5)) / 2);
629
+ x = Math.max(info.maxHeight, // Have enough space for the tallest word
630
+ info.maxWidth, // Have enough space for the broadest word
631
+ // Adjust 15% to account for close packing of words
632
+ Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
633
+ return {
634
+ width: x * ratioX,
635
+ height: x * ratioY,
636
+ ratioX: ratioX,
637
+ ratioY: ratioY
638
+ };
639
+ }
640
+ /**
641
+ * Calculates a number of degrees to rotate, based upon a number of
642
+ * orientations within a range from-to.
643
+ *
644
+ * @private
645
+ * @function getRotation
646
+ *
647
+ * @param {number} [orientations]
648
+ * Number of orientations.
649
+ *
650
+ * @param {number} [index]
651
+ * Index of point, used to decide orientation.
652
+ *
653
+ * @param {number} [from]
654
+ * The smallest degree of rotation.
655
+ *
656
+ * @param {number} [to]
657
+ * The largest degree of rotation.
658
+ *
659
+ * @return {boolean|number}
660
+ * Returns the resulting rotation for the word. Returns false if invalid
661
+ * input parameters.
662
+ */
663
+ function getRotation(orientations, index, from, to) {
664
+ var result = false, // Default to false
665
+ range,
666
+ intervals,
667
+ orientation;
668
+ // Check if we have valid input parameters.
669
+ if (isNumber(orientations) &&
670
+ isNumber(index) &&
671
+ isNumber(from) &&
672
+ isNumber(to) &&
673
+ orientations > 0 &&
674
+ index > -1 &&
675
+ to > from) {
676
+ range = to - from;
677
+ intervals = range / (orientations - 1 || 1);
678
+ orientation = index % orientations;
679
+ result = from + (orientation * intervals);
747
680
  }
748
- WordcloudUtils.getRandomPosition = getRandomPosition;
749
- /**
750
- * Calculates the proper scale to fit the cloud inside the plotting area.
751
- *
752
- * @private
753
- * @function getScale
754
- *
755
- * @param {number} targetWidth
756
- * Width of target area.
757
- *
758
- * @param {number} targetHeight
759
- * Height of target area.
760
- *
761
- * @param {object} field
762
- * The playing field.
763
- *
764
- * @param {Highcharts.Series} series
765
- * Series object.
766
- *
767
- * @return {number}
768
- * Returns the value to scale the playing field up to the size of the target
769
- * area.
770
- */
771
- function getScale(targetWidth, targetHeight, field) {
772
- var height = Math.max(Math.abs(field.top),
773
- Math.abs(field.bottom)) * 2,
774
- width = Math.max(Math.abs(field.left),
775
- Math.abs(field.right)) * 2,
776
- scaleX = width > 0 ? 1 / width * targetWidth : 1,
777
- scaleY = height > 0 ? 1 / height * targetHeight : 1;
778
- return Math.min(scaleX, scaleY);
681
+ return result;
682
+ }
683
+ /**
684
+ * Calculates the spiral positions and store them in scope for quick access.
685
+ *
686
+ * @private
687
+ * @function getSpiral
688
+ *
689
+ * @param {Function} fn
690
+ * The spiral function.
691
+ *
692
+ * @param {Object} params
693
+ * Additional parameters for the spiral.
694
+ *
695
+ * @return {Function}
696
+ * Function with access to spiral positions.
697
+ */
698
+ function getSpiral(fn, params) {
699
+ var length = 10000,
700
+ i,
701
+ arr = [];
702
+ for (i = 1; i < length; i++) {
703
+ // @todo unnecessary amount of precaclulation
704
+ arr.push(fn(i, params));
779
705
  }
780
- WordcloudUtils.getScale = getScale;
781
- /**
782
- * Calculates what is called the playing field. The field is the area which
783
- * all the words are allowed to be positioned within. The area is
784
- * proportioned to match the target aspect ratio.
785
- *
786
- * @private
787
- * @function getPlayingField
788
- *
789
- * @param {number} targetWidth
790
- * Width of the target area.
791
- *
792
- * @param {number} targetHeight
793
- * Height of the target area.
794
- *
795
- * @param {Array<Highcharts.Point>} data
796
- * Array of points.
797
- *
798
- * @param {object} data.dimensions
799
- * The height and width of the word.
800
- *
801
- * @return {object}
802
- * The width and height of the playing field.
803
- */
804
- function getPlayingField(targetWidth, targetHeight, data) {
805
- var info = data.reduce(function (obj,
806
- point) {
807
- var dimensions = point.dimensions,
808
- x = Math.max(dimensions.width,
809
- dimensions.height);
810
- // Find largest height.
811
- obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
812
- // Find largest width.
813
- obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
814
- // Sum up the total maximum area of all the words.
815
- obj.area += x * x;
816
- return obj;
817
- }, {
818
- maxHeight: 0,
819
- maxWidth: 0,
820
- area: 0
821
- }),
822
- /**
823
- * Use largest width, largest height, or root of total area to give
824
- * size to the playing field.
825
- */
826
- x = Math.max(info.maxHeight, // Have enough space for the tallest word
827
- info.maxWidth, // Have enough space for the broadest word
828
- // Adjust 15% to account for close packing of words
829
- Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
830
- return {
831
- width: x * ratioX,
832
- height: x * ratioY,
833
- ratioX: ratioX,
834
- ratioY: ratioY
706
+ return function (attempt) {
707
+ return attempt <= length ? arr[attempt - 1] : false;
708
+ };
709
+ }
710
+ /**
711
+ * Detects if a word is placed outside the playing field.
712
+ *
713
+ * @private
714
+ * @function outsidePlayingField
715
+ *
716
+ * @param {Highcharts.PolygonBoxObject} rect
717
+ * The word box.
718
+ *
719
+ * @param {Highcharts.WordcloudFieldObject} field
720
+ * The width and height of the playing field.
721
+ *
722
+ * @return {boolean}
723
+ * Returns true if the word is placed outside the field.
724
+ */
725
+ function outsidePlayingField(rect, field) {
726
+ var playingField = {
727
+ left: -(field.width / 2),
728
+ right: field.width / 2,
729
+ top: -(field.height / 2),
730
+ bottom: field.height / 2
835
731
  };
836
- }
837
- WordcloudUtils.getPlayingField = getPlayingField;
838
- /**
839
- * Calculates a number of degrees to rotate, based upon a number of
840
- * orientations within a range from-to.
841
- *
842
- * @private
843
- * @function getRotation
844
- *
845
- * @param {number} [orientations]
846
- * Number of orientations.
847
- *
848
- * @param {number} [index]
849
- * Index of point, used to decide orientation.
850
- *
851
- * @param {number} [from]
852
- * The smallest degree of rotation.
853
- *
854
- * @param {number} [to]
855
- * The largest degree of rotation.
856
- *
857
- * @return {boolean|number}
858
- * Returns the resulting rotation for the word. Returns false if invalid
859
- * input parameters.
860
- */
861
- function getRotation(orientations, index, from, to) {
862
- var result = false, // Default to false
863
- range,
864
- intervals,
865
- orientation;
866
- // Check if we have valid input parameters.
867
- if (isNumber(orientations) &&
868
- isNumber(index) &&
869
- isNumber(from) &&
870
- isNumber(to) &&
871
- orientations > 0 &&
872
- index > -1 &&
873
- to > from) {
874
- range = to - from;
875
- intervals = range / (orientations - 1 || 1);
876
- orientation = index % orientations;
877
- result = from + (orientation * intervals);
732
+ return !(playingField.left < rect.left &&
733
+ playingField.right > rect.right &&
734
+ playingField.top < rect.top &&
735
+ playingField.bottom > rect.bottom);
736
+ }
737
+ /**
738
+ * @private
739
+ */
740
+ function movePolygon(deltaX, deltaY, polygon) {
741
+ return polygon.map(function (point) {
742
+ return [
743
+ point[0] + deltaX,
744
+ point[1] + deltaY
745
+ ];
746
+ });
747
+ }
748
+ /**
749
+ * Check if a point intersects with previously placed words, or if it goes
750
+ * outside the field boundaries. If a collision, then try to adjusts the
751
+ * position.
752
+ *
753
+ * @private
754
+ * @function intersectionTesting
755
+ *
756
+ * @param {Highcharts.Point} point
757
+ * Point to test for intersections.
758
+ *
759
+ * @param {Highcharts.WordcloudTestOptionsObject} options
760
+ * Options object.
761
+ *
762
+ * @return {boolean|Highcharts.PositionObject}
763
+ * Returns an object with how much to correct the positions. Returns false
764
+ * if the word should not be placed at all.
765
+ */
766
+ function intersectionTesting(point, options) {
767
+ var placed = options.placed,
768
+ field = options.field,
769
+ rectangle = options.rectangle,
770
+ polygon = options.polygon,
771
+ spiral = options.spiral,
772
+ attempt = 1,
773
+ delta = {
774
+ x: 0,
775
+ y: 0
776
+ },
777
+ // Make a copy to update values during intersection testing.
778
+ rect = point.rect = extend({},
779
+ rectangle);
780
+ point.polygon = polygon;
781
+ point.rotation = options.rotation;
782
+ /* while w intersects any previously placed words:
783
+ do {
784
+ move w a little bit along a spiral path
785
+ } while any part of w is outside the playing field and
786
+ the spiral radius is still smallish */
787
+ while (delta !== false &&
788
+ (intersectsAnyWord(point, placed) ||
789
+ outsidePlayingField(rect, field))) {
790
+ delta = spiral(attempt);
791
+ if (isObject(delta)) {
792
+ // Update the DOMRect with new positions.
793
+ rect.left = rectangle.left + delta.x;
794
+ rect.right = rectangle.right + delta.x;
795
+ rect.top = rectangle.top + delta.y;
796
+ rect.bottom = rectangle.bottom + delta.y;
797
+ point.polygon = movePolygon(delta.x, delta.y, polygon);
878
798
  }
879
- return result;
799
+ attempt++;
880
800
  }
881
- WordcloudUtils.getRotation = getRotation;
882
- /**
883
- * Calculates the spiral positions and store them in scope for quick access.
884
- *
885
- * @private
886
- * @function getSpiral
887
- *
888
- * @param {Function} fn
889
- * The spiral function.
890
- *
891
- * @param {object} params
892
- * Additional parameters for the spiral.
893
- *
894
- * @return {Function}
895
- * Function with access to spiral positions.
896
- */
897
- function getSpiral(fn, params) {
898
- var length = 10000,
899
- i,
900
- arr = [];
901
- for (i = 1; i < length; i++) {
902
- // @todo unnecessary amount of precaclulation
903
- arr.push(fn(i, params));
904
- }
905
- return function (attempt) {
906
- return attempt <= length ? arr[attempt - 1] : false;
907
- };
801
+ return delta;
802
+ }
803
+ /**
804
+ * Extends the playing field to have enough space to fit a given word.
805
+ *
806
+ * @private
807
+ * @function extendPlayingField
808
+ *
809
+ * @param {Highcharts.WordcloudFieldObject} field
810
+ * The width, height and ratios of a playing field.
811
+ *
812
+ * @param {Highcharts.PolygonBoxObject} rectangle
813
+ * The bounding box of the word to add space for.
814
+ *
815
+ * @return {Highcharts.WordcloudFieldObject}
816
+ * Returns the extended playing field with updated height and width.
817
+ */
818
+ function extendPlayingField(field, rectangle) {
819
+ var height,
820
+ width,
821
+ ratioX,
822
+ ratioY,
823
+ x,
824
+ extendWidth,
825
+ extendHeight,
826
+ result;
827
+ if (isObject(field) && isObject(rectangle)) {
828
+ height = (rectangle.bottom - rectangle.top);
829
+ width = (rectangle.right - rectangle.left);
830
+ ratioX = field.ratioX;
831
+ ratioY = field.ratioY;
832
+ // Use the same variable to extend both the height and width.
833
+ x = ((width * ratioX) > (height * ratioY)) ? width : height;
834
+ // Multiply variable with ratios to preserve aspect ratio.
835
+ extendWidth = x * ratioX;
836
+ extendHeight = x * ratioY;
837
+ // Calculate the size of the new field after adding
838
+ // space for the word.
839
+ result = merge(field, {
840
+ // Add space on the left and right.
841
+ width: field.width + (extendWidth * 2),
842
+ // Add space on the top and bottom.
843
+ height: field.height + (extendHeight * 2)
844
+ });
908
845
  }
909
- WordcloudUtils.getSpiral = getSpiral;
910
- /**
911
- * Detects if a word is placed outside the playing field.
912
- *
913
- * @private
914
- * @function outsidePlayingField
915
- *
916
- * @param {Highcharts.PolygonBoxObject} rect
917
- * The word box.
918
- *
919
- * @param {Highcharts.WordcloudFieldObject} field
920
- * The width and height of the playing field.
921
- *
922
- * @return {boolean}
923
- * Returns true if the word is placed outside the field.
924
- */
925
- function outsidePlayingField(rect, field) {
926
- var playingField = {
927
- left: -(field.width / 2),
928
- right: field.width / 2,
929
- top: -(field.height / 2),
930
- bottom: field.height / 2
931
- };
932
- return !(playingField.left < rect.left &&
933
- playingField.right > rect.right &&
934
- playingField.top < rect.top &&
935
- playingField.bottom > rect.bottom);
846
+ else {
847
+ result = field;
936
848
  }
937
- WordcloudUtils.outsidePlayingField = outsidePlayingField;
938
- /**
939
- * Check if a point intersects with previously placed words, or if it goes
940
- * outside the field boundaries. If a collision, then try to adjusts the
941
- * position.
942
- *
943
- * @private
944
- * @function intersectionTesting
945
- *
946
- * @param {Highcharts.Point} point
947
- * Point to test for intersections.
948
- *
949
- * @param {Highcharts.WordcloudTestOptionsObject} options
950
- * Options object.
951
- *
952
- * @return {boolean|Highcharts.PositionObject}
953
- * Returns an object with how much to correct the positions. Returns false
954
- * if the word should not be placed at all.
955
- */
956
- function intersectionTesting(point, options) {
957
- var placed = options.placed,
958
- field = options.field,
959
- rectangle = options.rectangle,
960
- polygon = options.polygon,
961
- spiral = options.spiral,
962
- attempt = 1,
963
- delta = {
964
- x: 0,
965
- y: 0
966
- },
967
- // Make a copy to update values during intersection testing.
968
- rect = point.rect = extend({},
969
- rectangle);
970
- point.polygon = polygon;
971
- point.rotation = options.rotation;
972
- /* while w intersects any previously placed words:
973
- do {
974
- move w a little bit along a spiral path
975
- } while any part of w is outside the playing field and
976
- the spiral radius is still smallish */
977
- while (delta !== false &&
978
- (intersectsAnyWord(point, placed) ||
979
- outsidePlayingField(rect, field))) {
980
- delta = spiral(attempt);
981
- if (isObject(delta)) {
982
- // Update the DOMRect with new positions.
983
- rect.left = rectangle.left + delta.x;
984
- rect.right = rectangle.right + delta.x;
985
- rect.top = rectangle.top + delta.y;
986
- rect.bottom = rectangle.bottom + delta.y;
987
- point.polygon = movePolygon(delta.x, delta.y, polygon);
988
- }
989
- attempt++;
990
- }
991
- return delta;
849
+ // Return the new extended field.
850
+ return result;
851
+ }
852
+ /**
853
+ * If a rectangle is outside a give field, then the boundaries of the field
854
+ * is adjusted accordingly. Modifies the field object which is passed as the
855
+ * first parameter.
856
+ *
857
+ * @private
858
+ * @function updateFieldBoundaries
859
+ *
860
+ * @param {Highcharts.WordcloudFieldObject} field
861
+ * The bounding box of a playing field.
862
+ *
863
+ * @param {Highcharts.PolygonBoxObject} rectangle
864
+ * The bounding box for a placed point.
865
+ *
866
+ * @return {Highcharts.WordcloudFieldObject}
867
+ * Returns a modified field object.
868
+ */
869
+ function updateFieldBoundaries(field, rectangle) {
870
+ // @todo improve type checking.
871
+ if (!isNumber(field.left) || field.left > rectangle.left) {
872
+ field.left = rectangle.left;
992
873
  }
993
- WordcloudUtils.intersectionTesting = intersectionTesting;
994
- /**
995
- * Extends the playing field to have enough space to fit a given word.
996
- *
997
- * @private
998
- * @function extendPlayingField
999
- *
1000
- * @param {Highcharts.WordcloudFieldObject} field
1001
- * The width, height and ratios of a playing field.
1002
- *
1003
- * @param {Highcharts.PolygonBoxObject} rectangle
1004
- * The bounding box of the word to add space for.
1005
- *
1006
- * @return {Highcharts.WordcloudFieldObject}
1007
- * Returns the extended playing field with updated height and width.
1008
- */
1009
- function extendPlayingField(field, rectangle) {
1010
- var height,
1011
- width,
1012
- ratioX,
1013
- ratioY,
1014
- x,
1015
- extendWidth,
1016
- extendHeight,
1017
- result;
1018
- if (isObject(field) && isObject(rectangle)) {
1019
- height = (rectangle.bottom - rectangle.top);
1020
- width = (rectangle.right - rectangle.left);
1021
- ratioX = field.ratioX;
1022
- ratioY = field.ratioY;
1023
- // Use the same variable to extend both the height and width.
1024
- x = ((width * ratioX) > (height * ratioY)) ? width : height;
1025
- // Multiply variable with ratios to preserve aspect ratio.
1026
- extendWidth = x * ratioX;
1027
- extendHeight = x * ratioY;
1028
- // Calculate the size of the new field after adding
1029
- // space for the word.
1030
- result = merge(field, {
1031
- // Add space on the left and right.
1032
- width: field.width + (extendWidth * 2),
1033
- // Add space on the top and bottom.
1034
- height: field.height + (extendHeight * 2)
1035
- });
1036
- }
1037
- else {
1038
- result = field;
1039
- }
1040
- // Return the new extended field.
1041
- return result;
874
+ if (!isNumber(field.right) || field.right < rectangle.right) {
875
+ field.right = rectangle.right;
1042
876
  }
1043
- WordcloudUtils.extendPlayingField = extendPlayingField;
1044
- /**
1045
- * If a rectangle is outside a give field, then the boundaries of the field
1046
- * is adjusted accordingly. Modifies the field object which is passed as the
1047
- * first parameter.
1048
- *
1049
- * @private
1050
- * @function updateFieldBoundaries
1051
- *
1052
- * @param {Highcharts.WordcloudFieldObject} field
1053
- * The bounding box of a playing field.
1054
- *
1055
- * @param {Highcharts.PolygonBoxObject} rectangle
1056
- * The bounding box for a placed point.
1057
- *
1058
- * @return {Highcharts.WordcloudFieldObject}
1059
- * Returns a modified field object.
1060
- */
1061
- function updateFieldBoundaries(field, rectangle) {
1062
- // @todo improve type checking.
1063
- if (!isNumber(field.left) || field.left > rectangle.left) {
1064
- field.left = rectangle.left;
1065
- }
1066
- if (!isNumber(field.right) || field.right < rectangle.right) {
1067
- field.right = rectangle.right;
1068
- }
1069
- if (!isNumber(field.top) || field.top > rectangle.top) {
1070
- field.top = rectangle.top;
1071
- }
1072
- if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
1073
- field.bottom = rectangle.bottom;
1074
- }
1075
- return field;
877
+ if (!isNumber(field.top) || field.top > rectangle.top) {
878
+ field.top = rectangle.top;
879
+ }
880
+ if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
881
+ field.bottom = rectangle.bottom;
1076
882
  }
1077
- WordcloudUtils.updateFieldBoundaries = updateFieldBoundaries;
1078
- })(WordcloudUtils || (WordcloudUtils = {}));
883
+ return field;
884
+ }
885
+ /**
886
+ * Alternative solution to correctFloat.
887
+ * E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
888
+ *
889
+ * @private
890
+ * @function correctFloat
891
+ */
892
+ function correctFloat(number, precision) {
893
+ var p = isNumber(precision) ? precision : 14,
894
+ magnitude = Math.pow(10,
895
+ p);
896
+ return Math.round(number * magnitude) / magnitude;
897
+ }
898
+ /**
899
+ * @private
900
+ */
901
+ function getBoundingBoxFromPolygon(points) {
902
+ return points.reduce(function (obj, point) {
903
+ var x = point[0],
904
+ y = point[1];
905
+ obj.left = Math.min(x, obj.left);
906
+ obj.right = Math.max(x, obj.right);
907
+ obj.bottom = Math.max(y, obj.bottom);
908
+ obj.top = Math.min(y, obj.top);
909
+ return obj;
910
+ }, {
911
+ left: Number.MAX_VALUE,
912
+ right: -Number.MAX_VALUE,
913
+ bottom: -Number.MAX_VALUE,
914
+ top: Number.MAX_VALUE
915
+ });
916
+ }
917
+ /**
918
+ * @private
919
+ */
920
+ function getPolygon(x, y, width, height, rotation) {
921
+ var origin = [x,
922
+ y],
923
+ left = x - (width / 2),
924
+ right = x + (width / 2),
925
+ top = y - (height / 2),
926
+ bottom = y + (height / 2),
927
+ polygon = [
928
+ [left,
929
+ top],
930
+ [right,
931
+ top],
932
+ [right,
933
+ bottom],
934
+ [left,
935
+ bottom]
936
+ ];
937
+ return polygon.map(function (point) {
938
+ return rotate2DToPoint(point, origin, -rotation);
939
+ });
940
+ }
941
+ /**
942
+ * Rotates a point clockwise around the origin.
943
+ *
944
+ * @private
945
+ * @function rotate2DToOrigin
946
+ * @param {Highcharts.PolygonPointObject} point
947
+ * The x and y coordinates for the point.
948
+ * @param {number} angle
949
+ * The angle of rotation.
950
+ * @return {Highcharts.PolygonPointObject}
951
+ * The x and y coordinate for the rotated point.
952
+ */
953
+ function rotate2DToOrigin(point, angle) {
954
+ var x = point[0],
955
+ y = point[1],
956
+ rad = deg2rad * -angle,
957
+ cosAngle = Math.cos(rad),
958
+ sinAngle = Math.sin(rad);
959
+ return [
960
+ correctFloat(x * cosAngle - y * sinAngle),
961
+ correctFloat(x * sinAngle + y * cosAngle)
962
+ ];
963
+ }
964
+ /**
965
+ * Rotate a point clockwise around another point.
966
+ *
967
+ * @private
968
+ * @function rotate2DToPoint
969
+ * @param {Highcharts.PolygonPointObject} point
970
+ * The x and y coordinates for the point.
971
+ * @param {Highcharts.PolygonPointObject} origin
972
+ * The point to rotate around.
973
+ * @param {number} angle
974
+ * The angle of rotation.
975
+ * @return {Highcharts.PolygonPointObject}
976
+ * The x and y coordinate for the rotated point.
977
+ */
978
+ function rotate2DToPoint(point, origin, angle) {
979
+ var x = point[0] - origin[0],
980
+ y = point[1] - origin[1],
981
+ rotated = rotate2DToOrigin([x,
982
+ y],
983
+ angle);
984
+ return [
985
+ rotated[0] + origin[0],
986
+ rotated[1] + origin[1]
987
+ ];
988
+ }
1079
989
  /* *
1080
990
  *
1081
991
  * Default export
1082
992
  *
1083
993
  * */
994
+ var WordcloudUtils = {
995
+ archimedeanSpiral: archimedeanSpiral,
996
+ extendPlayingField: extendPlayingField,
997
+ getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
998
+ getPlayingField: getPlayingField,
999
+ getPolygon: getPolygon,
1000
+ getRandomPosition: getRandomPosition,
1001
+ getRotation: getRotation,
1002
+ getScale: getScale,
1003
+ getSpiral: getSpiral,
1004
+ intersectionTesting: intersectionTesting,
1005
+ isPolygonsColliding: isPolygonsColliding,
1006
+ isRectanglesIntersecting: isRectanglesIntersecting,
1007
+ rectangularSpiral: rectangularSpiral,
1008
+ rotate2DToOrigin: rotate2DToOrigin,
1009
+ rotate2DToPoint: rotate2DToPoint,
1010
+ squareSpiral: squareSpiral,
1011
+ updateFieldBoundaries: updateFieldBoundaries
1012
+ };
1084
1013
 
1085
1014
  return WordcloudUtils;
1086
1015
  });
1087
- _registerModule(_modules, 'Series/Wordcloud/WordcloudSeries.js', [_modules['Core/Globals.js'], _modules['Mixins/Polygon.js'], _modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/Wordcloud/WordcloudPoint.js'], _modules['Series/Wordcloud/WordcloudUtils.js']], function (H, PolygonMixin, Series, SeriesRegistry, U, WordcloudPoint, WordcloudUtils) {
1016
+ _registerModule(_modules, 'Series/Wordcloud/WordcloudSeries.js', [_modules['Core/Globals.js'], _modules['Core/Series/Series.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/Wordcloud/WordcloudPoint.js'], _modules['Series/Wordcloud/WordcloudUtils.js']], function (H, Series, SeriesRegistry, U, WordcloudPoint, WordcloudUtils) {
1088
1017
  /* *
1089
1018
  *
1090
1019
  * Experimental Highcharts module which enables visualization of a word cloud.
@@ -1113,18 +1042,33 @@
1113
1042
  };
1114
1043
  })();
1115
1044
  var noop = H.noop;
1116
- var getBoundingBoxFromPolygon = PolygonMixin.getBoundingBoxFromPolygon,
1117
- getPolygon = PolygonMixin.getPolygon,
1118
- isPolygonsColliding = PolygonMixin.isPolygonsColliding,
1119
- rotate2DToOrigin = PolygonMixin.rotate2DToOrigin,
1120
- rotate2DToPoint = PolygonMixin.rotate2DToPoint;
1121
1045
  var ColumnSeries = SeriesRegistry.seriesTypes.column;
1122
1046
  var extend = U.extend,
1123
- find = U.find,
1124
1047
  isArray = U.isArray,
1125
1048
  isNumber = U.isNumber,
1126
1049
  isObject = U.isObject,
1127
1050
  merge = U.merge;
1051
+ var archimedeanSpiral = WordcloudUtils.archimedeanSpiral,
1052
+ extendPlayingField = WordcloudUtils.extendPlayingField,
1053
+ getBoundingBoxFromPolygon = WordcloudUtils.getBoundingBoxFromPolygon,
1054
+ getPlayingField = WordcloudUtils.getPlayingField,
1055
+ getPolygon = WordcloudUtils.getPolygon,
1056
+ getRandomPosition = WordcloudUtils.getRandomPosition,
1057
+ getRotation = WordcloudUtils.getRotation,
1058
+ getScale = WordcloudUtils.getScale,
1059
+ getSpiral = WordcloudUtils.getSpiral,
1060
+ intersectionTesting = WordcloudUtils.intersectionTesting,
1061
+ isPolygonsColliding = WordcloudUtils.isPolygonsColliding,
1062
+ rectangularSpiral = WordcloudUtils.rectangularSpiral,
1063
+ rotate2DToOrigin = WordcloudUtils.rotate2DToOrigin,
1064
+ rotate2DToPoint = WordcloudUtils.rotate2DToPoint,
1065
+ squareSpiral = WordcloudUtils.squareSpiral,
1066
+ updateFieldBoundaries = WordcloudUtils.updateFieldBoundaries;
1067
+ /* *
1068
+ *
1069
+ * Class
1070
+ *
1071
+ * */
1128
1072
  /**
1129
1073
  * @private
1130
1074
  * @class
@@ -1262,8 +1206,8 @@
1262
1206
  };
1263
1207
  });
1264
1208
  // Calculate the playing field.
1265
- field = WordcloudUtils.getPlayingField(xAxis.len, yAxis.len, data);
1266
- spiral = WordcloudUtils.getSpiral(series.spirals[options.spiral], {
1209
+ field = getPlayingField(xAxis.len, yAxis.len, data);
1210
+ spiral = getSpiral(series.spirals[options.spiral], {
1267
1211
  field: field
1268
1212
  });
1269
1213
  // Draw all the points.
@@ -1299,7 +1243,7 @@
1299
1243
  point.dimensions.height,
1300
1244
  placement.rotation),
1301
1245
  rectangle = getBoundingBoxFromPolygon(polygon),
1302
- delta = WordcloudUtils.intersectionTesting(point, {
1246
+ delta = intersectionTesting(point, {
1303
1247
  rectangle: rectangle,
1304
1248
  polygon: polygon,
1305
1249
  field: field,
@@ -1311,9 +1255,9 @@
1311
1255
  // If there is no space for the word, extend the playing field.
1312
1256
  if (!delta && allowExtendPlayingField) {
1313
1257
  // Extend the playing field to fit the word.
1314
- field = WordcloudUtils.extendPlayingField(field, rectangle);
1258
+ field = extendPlayingField(field, rectangle);
1315
1259
  // Run intersection testing one more time to place the word.
1316
- delta = WordcloudUtils.intersectionTesting(point, {
1260
+ delta = intersectionTesting(point, {
1317
1261
  rectangle: rectangle,
1318
1262
  polygon: polygon,
1319
1263
  field: field,
@@ -1331,7 +1275,7 @@
1331
1275
  rectangle.right += delta.x;
1332
1276
  rectangle.top += delta.y;
1333
1277
  rectangle.bottom += delta.y;
1334
- field = WordcloudUtils.updateFieldBoundaries(field, rectangle);
1278
+ field = updateFieldBoundaries(field, rectangle);
1335
1279
  placed.push(point);
1336
1280
  point.isNull = false;
1337
1281
  point.isInside = true; // #15447
@@ -1369,7 +1313,7 @@
1369
1313
  // Destroy the element after use.
1370
1314
  testElement = testElement.destroy();
1371
1315
  // Scale the series group to fit within the plotArea.
1372
- scale = WordcloudUtils.getScale(xAxis.len, yAxis.len, field);
1316
+ scale = getScale(xAxis.len, yAxis.len, field);
1373
1317
  series.group.attr({
1374
1318
  scaleX: scale,
1375
1319
  scaleY: scale
@@ -1455,7 +1399,7 @@
1455
1399
  * cloud. Read more about it in our
1456
1400
  * [documentation](https://www.highcharts.com/docs/chart-and-series-types/word-cloud-series#custom-placement-strategies)
1457
1401
  *
1458
- * @validvalue: ["center", "random"]
1402
+ * @validvalue ["center", "random"]
1459
1403
  */
1460
1404
  placementStrategy: 'center',
1461
1405
  /**
@@ -1488,7 +1432,7 @@
1488
1432
  * algorithms for use in word cloud. Read more about it in our
1489
1433
  * [documentation](https://www.highcharts.com/docs/chart-and-series-types/word-cloud-series#custom-spiralling-algorithm)
1490
1434
  *
1491
- * @validvalue: ["archimedean", "rectangular", "square"]
1435
+ * @validvalue ["archimedean", "rectangular", "square"]
1492
1436
  */
1493
1437
  spiral: 'rectangular',
1494
1438
  /**
@@ -1513,7 +1457,7 @@
1513
1457
  return WordcloudSeries;
1514
1458
  }(ColumnSeries));
1515
1459
  extend(WordcloudSeries.prototype, {
1516
- animate: Series.prototype.animate,
1460
+ animate: noop,
1517
1461
  animateDrilldown: noop,
1518
1462
  animateDrillupFrom: noop,
1519
1463
  pointClass: WordcloudPoint,
@@ -1526,9 +1470,9 @@
1526
1470
  var field = options.field,
1527
1471
  r = options.rotation;
1528
1472
  return {
1529
- x: WordcloudUtils.getRandomPosition(field.width) - (field.width / 2),
1530
- y: WordcloudUtils.getRandomPosition(field.height) - (field.height / 2),
1531
- rotation: WordcloudUtils.getRotation(r.orientations, point.index, r.from, r.to)
1473
+ x: getRandomPosition(field.width) - (field.width / 2),
1474
+ y: getRandomPosition(field.height) - (field.height / 2),
1475
+ rotation: getRotation(r.orientations, point.index, r.from, r.to)
1532
1476
  };
1533
1477
  },
1534
1478
  center: function (point, options) {
@@ -1536,7 +1480,7 @@
1536
1480
  return {
1537
1481
  x: 0,
1538
1482
  y: 0,
1539
- rotation: WordcloudUtils.getRotation(r.orientations, point.index, r.from, r.to)
1483
+ rotation: getRotation(r.orientations, point.index, r.from, r.to)
1540
1484
  };
1541
1485
  }
1542
1486
  },
@@ -1545,13 +1489,13 @@
1545
1489
  // collision with either another word or the borders. To implement a custom
1546
1490
  // spiral, look at the function archimedeanSpiral for example.
1547
1491
  spirals: {
1548
- 'archimedean': WordcloudUtils.archimedeanSpiral,
1549
- 'rectangular': WordcloudUtils.rectangularSpiral,
1550
- 'square': WordcloudUtils.squareSpiral
1492
+ 'archimedean': archimedeanSpiral,
1493
+ 'rectangular': rectangularSpiral,
1494
+ 'square': squareSpiral
1551
1495
  },
1552
1496
  utils: {
1553
- extendPlayingField: WordcloudUtils.extendPlayingField,
1554
- getRotation: WordcloudUtils.getRotation,
1497
+ extendPlayingField: extendPlayingField,
1498
+ getRotation: getRotation,
1555
1499
  isPolygonsColliding: isPolygonsColliding,
1556
1500
  rotate2DToOrigin: rotate2DToOrigin,
1557
1501
  rotate2DToPoint: rotate2DToPoint