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
@@ -9,525 +9,710 @@
9
9
  *
10
10
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
11
11
  * */
12
- import PolygonMixin from '../../Mixins/Polygon.js';
13
- var isPolygonsColliding = PolygonMixin.isPolygonsColliding, movePolygon = PolygonMixin.movePolygon;
12
+ 'use strict';
13
+ import H from '../../Core/Globals.js';
14
+ var deg2rad = H.deg2rad;
14
15
  import U from '../../Core/Utilities.js';
15
16
  var extend = U.extend, find = U.find, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge;
16
17
  /* *
17
- *
18
- * Namespace
19
- *
20
- * */
21
- var WordcloudUtils;
22
- (function (WordcloudUtils) {
23
- /* *
24
- *
25
- * Functions
26
- *
27
- * */
28
- /**
29
- * Detects if there is a collision between two rectangles.
30
- *
31
- * @private
32
- * @function isRectanglesIntersecting
33
- *
34
- * @param {Highcharts.PolygonBoxObject} r1
35
- * First rectangle.
36
- *
37
- * @param {Highcharts.PolygonBoxObject} r2
38
- * Second rectangle.
39
- *
40
- * @return {boolean}
41
- * Returns true if the rectangles overlap.
42
- */
43
- function isRectanglesIntersecting(r1, r2) {
44
- return !(r2.left > r1.right ||
45
- r2.right < r1.left ||
46
- r2.top > r1.bottom ||
47
- r2.bottom < r1.top);
18
+ *
19
+ * Functions
20
+ *
21
+ * */
22
+ /* eslint-disable valid-jsdoc */
23
+ /**
24
+ * Detects if there is a collision between two rectangles.
25
+ *
26
+ * @private
27
+ * @function isRectanglesIntersecting
28
+ *
29
+ * @param {Highcharts.PolygonBoxObject} r1
30
+ * First rectangle.
31
+ *
32
+ * @param {Highcharts.PolygonBoxObject} r2
33
+ * Second rectangle.
34
+ *
35
+ * @return {boolean}
36
+ * Returns true if the rectangles overlap.
37
+ */
38
+ function isRectanglesIntersecting(r1, r2) {
39
+ return !(r2.left > r1.right ||
40
+ r2.right < r1.left ||
41
+ r2.top > r1.bottom ||
42
+ r2.bottom < r1.top);
43
+ }
44
+ /**
45
+ * Calculates the normals to a line between two points.
46
+ *
47
+ * @private
48
+ * @function getNormals
49
+ * @param {Highcharts.PolygonPointObject} p1
50
+ * Start point for the line. Array of x and y value.
51
+ * @param {Highcharts.PolygonPointObject} p2
52
+ * End point for the line. Array of x and y value.
53
+ * @return {Highcharts.PolygonObject}
54
+ * Returns the two normals in an array.
55
+ */
56
+ function getNormals(p1, p2) {
57
+ var dx = p2[0] - p1[0], // x2 - x1
58
+ dy = p2[1] - p1[1]; // y2 - y1
59
+ return [
60
+ [-dy, dx],
61
+ [dy, -dx]
62
+ ];
63
+ }
64
+ /**
65
+ * @private
66
+ */
67
+ function getAxesFromPolygon(polygon) {
68
+ var points, axes = polygon.axes || [];
69
+ if (!axes.length) {
70
+ axes = [];
71
+ points = points = polygon.concat([polygon[0]]);
72
+ points.reduce(function findAxis(p1, p2) {
73
+ var normals = getNormals(p1, p2), axis = normals[0]; // Use the left normal as axis.
74
+ // Check that the axis is unique.
75
+ if (!find(axes, function (existing) {
76
+ return existing[0] === axis[0] &&
77
+ existing[1] === axis[1];
78
+ })) {
79
+ axes.push(axis);
80
+ }
81
+ // Return p2 to be used as p1 in next iteration.
82
+ return p2;
83
+ });
84
+ polygon.axes = axes;
48
85
  }
49
- WordcloudUtils.isRectanglesIntersecting = isRectanglesIntersecting;
50
- /**
51
- * Detects if a word collides with any previously placed words.
52
- *
53
- * @private
54
- * @function intersectsAnyWord
55
- *
56
- * @param {Highcharts.Point} point
57
- * Point which the word is connected to.
58
- *
59
- * @param {Array<Highcharts.Point>} points
60
- * Previously placed points to check against.
61
- *
62
- * @return {boolean}
63
- * Returns true if there is collision.
64
- */
65
- function intersectsAnyWord(point, points) {
66
- var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
67
- var result = isRectanglesIntersecting(rect, p.rect);
68
- if (result &&
69
- (point.rotation % 90 || p.rotation % 90)) {
70
- result = isPolygonsColliding(polygon, p.polygon);
86
+ return axes;
87
+ }
88
+ /**
89
+ * Projects a polygon onto a coordinate.
90
+ *
91
+ * @private
92
+ * @function project
93
+ * @param {Highcharts.PolygonObject} polygon
94
+ * Array of points in a polygon.
95
+ * @param {Highcharts.PolygonPointObject} target
96
+ * The coordinate of pr
97
+ */
98
+ function project(polygon, target) {
99
+ var products = polygon.map(function (point) {
100
+ var ax = point[0], ay = point[1], bx = target[0], by = target[1];
101
+ return ax * bx + ay * by;
102
+ });
103
+ return {
104
+ min: Math.min.apply(this, products),
105
+ max: Math.max.apply(this, products)
106
+ };
107
+ }
108
+ /**
109
+ * @private
110
+ */
111
+ function isPolygonsOverlappingOnAxis(axis, polygon1, polygon2) {
112
+ var projection1 = project(polygon1, axis), projection2 = project(polygon2, axis), isOverlapping = !(projection2.min > projection1.max ||
113
+ projection2.max < projection1.min);
114
+ return !isOverlapping;
115
+ }
116
+ /**
117
+ * Checks wether two convex polygons are colliding by using the Separating
118
+ * Axis Theorem.
119
+ *
120
+ * @private
121
+ * @function isPolygonsColliding
122
+ * @param {Highcharts.PolygonObject} polygon1
123
+ * First polygon.
124
+ *
125
+ * @param {Highcharts.PolygonObject} polygon2
126
+ * Second polygon.
127
+ *
128
+ * @return {boolean}
129
+ * Returns true if they are colliding, otherwise false.
130
+ */
131
+ function isPolygonsColliding(polygon1, polygon2) {
132
+ // Get the axis from both polygons.
133
+ var axes1 = getAxesFromPolygon(polygon1), axes2 = getAxesFromPolygon(polygon2), axes = axes1.concat(axes2), overlappingOnAllAxes = !find(axes, function (axis) { return isPolygonsOverlappingOnAxis(axis, polygon1, polygon2); });
134
+ return overlappingOnAllAxes;
135
+ }
136
+ /**
137
+ * Detects if a word collides with any previously placed words.
138
+ *
139
+ * @private
140
+ * @function intersectsAnyWord
141
+ *
142
+ * @param {Highcharts.Point} point
143
+ * Point which the word is connected to.
144
+ *
145
+ * @param {Array<Highcharts.Point>} points
146
+ * Previously placed points to check against.
147
+ *
148
+ * @return {boolean}
149
+ * Returns true if there is collision.
150
+ */
151
+ function intersectsAnyWord(point, points) {
152
+ var intersects = false, rect = point.rect, polygon = point.polygon, lastCollidedWith = point.lastCollidedWith, isIntersecting = function (p) {
153
+ var result = isRectanglesIntersecting(rect, p.rect);
154
+ if (result &&
155
+ (point.rotation % 90 || p.rotation % 90)) {
156
+ result = isPolygonsColliding(polygon, p.polygon);
157
+ }
158
+ return result;
159
+ };
160
+ // If the point has already intersected a different point, chances are
161
+ // they are still intersecting. So as an enhancement we check this
162
+ // first.
163
+ if (lastCollidedWith) {
164
+ intersects = isIntersecting(lastCollidedWith);
165
+ // If they no longer intersects, remove the cache from the point.
166
+ if (!intersects) {
167
+ delete point.lastCollidedWith;
168
+ }
169
+ }
170
+ // If not already found, then check if we can find a point that is
171
+ // intersecting.
172
+ if (!intersects) {
173
+ intersects = !!find(points, function (p) {
174
+ var result = isIntersecting(p);
175
+ if (result) {
176
+ point.lastCollidedWith = p;
71
177
  }
72
178
  return result;
179
+ });
180
+ }
181
+ return intersects;
182
+ }
183
+ /**
184
+ * Gives a set of cordinates for an Archimedian Spiral.
185
+ *
186
+ * @private
187
+ * @function archimedeanSpiral
188
+ *
189
+ * @param {number} attempt
190
+ * How far along the spiral we have traversed.
191
+ *
192
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
193
+ * Additional parameters.
194
+ *
195
+ * @return {boolean|Highcharts.PositionObject}
196
+ * Resulting coordinates, x and y. False if the word should be dropped from
197
+ * the visualization.
198
+ */
199
+ function archimedeanSpiral(attempt, params) {
200
+ var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
201
+ // Emergency brake. TODO make spiralling logic more foolproof.
202
+ if (attempt <= 10000) {
203
+ result = {
204
+ x: t * Math.cos(t),
205
+ y: t * Math.sin(t)
73
206
  };
74
- // If the point has already intersected a different point, chances are
75
- // they are still intersecting. So as an enhancement we check this
76
- // first.
77
- if (lastCollidedWith) {
78
- intersects = isIntersecting(lastCollidedWith);
79
- // If they no longer intersects, remove the cache from the point.
80
- if (!intersects) {
81
- delete point.lastCollidedWith;
82
- }
83
- }
84
- // If not already found, then check if we can find a point that is
85
- // intersecting.
86
- if (!intersects) {
87
- intersects = !!find(points, function (p) {
88
- var result = isIntersecting(p);
89
- if (result) {
90
- point.lastCollidedWith = p;
91
- }
92
- return result;
93
- });
207
+ if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
208
+ result = false;
94
209
  }
95
- return intersects;
96
210
  }
97
- WordcloudUtils.intersectsAnyWord = intersectsAnyWord;
98
- /**
99
- * Gives a set of cordinates for an Archimedian Spiral.
100
- *
101
- * @private
102
- * @function archimedeanSpiral
103
- *
104
- * @param {number} attempt
105
- * How far along the spiral we have traversed.
106
- *
107
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
108
- * Additional parameters.
109
- *
110
- * @return {boolean|Highcharts.PositionObject}
111
- * Resulting coordinates, x and y. False if the word should be dropped from
112
- * the visualization.
113
- */
114
- function archimedeanSpiral(attempt, params) {
115
- var field = params.field, result = false, maxDelta = (field.width * field.width) + (field.height * field.height), t = attempt * 0.8; // 0.2 * 4 = 0.8. Enlarging the spiral.
116
- // Emergency brake. TODO make spiralling logic more foolproof.
117
- if (attempt <= 10000) {
211
+ return result;
212
+ }
213
+ /**
214
+ * Gives a set of cordinates for an rectangular spiral.
215
+ *
216
+ * @private
217
+ * @function squareSpiral
218
+ *
219
+ * @param {number} attempt
220
+ * How far along the spiral we have traversed.
221
+ *
222
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
223
+ * Additional parameters.
224
+ *
225
+ * @return {boolean|Highcharts.PositionObject}
226
+ * Resulting coordinates, x and y. False if the word should be dropped from
227
+ * the visualization.
228
+ */
229
+ function squareSpiral(attempt, params) {
230
+ var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
231
+ return typeof x === 'boolean';
232
+ }, result = false;
233
+ t -= 1;
234
+ if (attempt <= 10000) {
235
+ if (isBoolean(result) && a >= m - t) {
118
236
  result = {
119
- x: t * Math.cos(t),
120
- y: t * Math.sin(t)
237
+ x: k - (m - a),
238
+ y: -k
121
239
  };
122
- if (!(Math.min(Math.abs(result.x), Math.abs(result.y)) < maxDelta)) {
123
- result = false;
124
- }
125
240
  }
126
- return result;
127
- }
128
- WordcloudUtils.archimedeanSpiral = archimedeanSpiral;
129
- /**
130
- * Gives a set of cordinates for an rectangular spiral.
131
- *
132
- * @private
133
- * @function squareSpiral
134
- *
135
- * @param {number} attempt
136
- * How far along the spiral we have traversed.
137
- *
138
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
139
- * Additional parameters.
140
- *
141
- * @return {boolean|Highcharts.PositionObject}
142
- * Resulting coordinates, x and y. False if the word should be dropped from
143
- * the visualization.
144
- */
145
- function squareSpiral(attempt, params) {
146
- var a = attempt * 4, k = Math.ceil((Math.sqrt(a) - 1) / 2), t = 2 * k + 1, m = Math.pow(t, 2), isBoolean = function (x) {
147
- return typeof x === 'boolean';
148
- }, result = false;
149
- t -= 1;
150
- if (attempt <= 10000) {
151
- if (isBoolean(result) && a >= m - t) {
241
+ m -= t;
242
+ if (isBoolean(result) && a >= m - t) {
243
+ result = {
244
+ x: -k,
245
+ y: -k + (m - a)
246
+ };
247
+ }
248
+ m -= t;
249
+ if (isBoolean(result)) {
250
+ if (a >= m - t) {
152
251
  result = {
153
- x: k - (m - a),
154
- y: -k
252
+ x: -k + (m - a),
253
+ y: k
155
254
  };
156
255
  }
157
- m -= t;
158
- if (isBoolean(result) && a >= m - t) {
256
+ else {
159
257
  result = {
160
- x: -k,
161
- y: -k + (m - a)
258
+ x: k,
259
+ y: k - (m - a - t)
162
260
  };
163
261
  }
164
- m -= t;
165
- if (isBoolean(result)) {
166
- if (a >= m - t) {
167
- result = {
168
- x: -k + (m - a),
169
- y: k
170
- };
171
- }
172
- else {
173
- result = {
174
- x: k,
175
- y: k - (m - a - t)
176
- };
177
- }
178
- }
179
- result.x *= 5;
180
- result.y *= 5;
181
262
  }
182
- return result;
263
+ result.x *= 5;
264
+ result.y *= 5;
183
265
  }
184
- WordcloudUtils.squareSpiral = squareSpiral;
185
- /**
186
- * Gives a set of cordinates for an rectangular spiral.
187
- *
188
- * @private
189
- * @function rectangularSpiral
190
- *
191
- * @param {number} attempt
192
- * How far along the spiral we have traversed.
193
- *
194
- * @param {Highcharts.WordcloudSpiralParamsObject} [params]
195
- * Additional parameters.
196
- *
197
- * @return {boolean|Higcharts.PositionObject}
198
- * Resulting coordinates, x and y. False if the word should be dropped from
199
- * the visualization.
200
- */
201
- function rectangularSpiral(attempt, params) {
202
- var result = squareSpiral(attempt, params), field = params.field;
203
- if (result) {
204
- result.x *= field.ratioX;
205
- result.y *= field.ratioY;
206
- }
207
- return result;
208
- }
209
- WordcloudUtils.rectangularSpiral = rectangularSpiral;
210
- /**
211
- * @private
212
- * @function getRandomPosition
213
- *
214
- * @param {number} size
215
- * Random factor.
216
- *
217
- * @return {number}
218
- * Random position.
219
- */
220
- function getRandomPosition(size) {
221
- return Math.round((size * (Math.random() + 0.5)) / 2);
266
+ return result;
267
+ }
268
+ /**
269
+ * Gives a set of cordinates for an rectangular spiral.
270
+ *
271
+ * @private
272
+ * @function rectangularSpiral
273
+ *
274
+ * @param {number} attempt
275
+ * How far along the spiral we have traversed.
276
+ *
277
+ * @param {Highcharts.WordcloudSpiralParamsObject} [params]
278
+ * Additional parameters.
279
+ *
280
+ * @return {boolean|Higcharts.PositionObject}
281
+ * Resulting coordinates, x and y. False if the word should be dropped from
282
+ * the visualization.
283
+ */
284
+ function rectangularSpiral(attempt, params) {
285
+ var result = squareSpiral(attempt, params), field = params.field;
286
+ if (result) {
287
+ result.x *= field.ratioX;
288
+ result.y *= field.ratioY;
222
289
  }
223
- WordcloudUtils.getRandomPosition = getRandomPosition;
290
+ return result;
291
+ }
292
+ /**
293
+ * @private
294
+ * @function getRandomPosition
295
+ *
296
+ * @param {number} size
297
+ * Random factor.
298
+ *
299
+ * @return {number}
300
+ * Random position.
301
+ */
302
+ function getRandomPosition(size) {
303
+ return Math.round((size * (Math.random() + 0.5)) / 2);
304
+ }
305
+ /**
306
+ * Calculates the proper scale to fit the cloud inside the plotting area.
307
+ *
308
+ * @private
309
+ * @function getScale
310
+ *
311
+ * @param {number} targetWidth
312
+ * Width of target area.
313
+ *
314
+ * @param {number} targetHeight
315
+ * Height of target area.
316
+ *
317
+ * @param {Object} field
318
+ * The playing field.
319
+ *
320
+ * @param {Highcharts.Series} series
321
+ * Series object.
322
+ *
323
+ * @return {number}
324
+ * Returns the value to scale the playing field up to the size of the target
325
+ * area.
326
+ */
327
+ function getScale(targetWidth, targetHeight, field) {
328
+ var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
329
+ return Math.min(scaleX, scaleY);
330
+ }
331
+ /**
332
+ * Calculates what is called the playing field. The field is the area which
333
+ * all the words are allowed to be positioned within. The area is
334
+ * proportioned to match the target aspect ratio.
335
+ *
336
+ * @private
337
+ * @function getPlayingField
338
+ *
339
+ * @param {number} targetWidth
340
+ * Width of the target area.
341
+ *
342
+ * @param {number} targetHeight
343
+ * Height of the target area.
344
+ *
345
+ * @param {Array<Highcharts.Point>} data
346
+ * Array of points.
347
+ *
348
+ * @param {Object} data.dimensions
349
+ * The height and width of the word.
350
+ *
351
+ * @return {Object}
352
+ * The width and height of the playing field.
353
+ */
354
+ function getPlayingField(targetWidth, targetHeight, data) {
355
+ var info = data.reduce(function (obj, point) {
356
+ var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
357
+ // Find largest height.
358
+ obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
359
+ // Find largest width.
360
+ obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
361
+ // Sum up the total maximum area of all the words.
362
+ obj.area += x * x;
363
+ return obj;
364
+ }, {
365
+ maxHeight: 0,
366
+ maxWidth: 0,
367
+ area: 0
368
+ }),
224
369
  /**
225
- * Calculates the proper scale to fit the cloud inside the plotting area.
226
- *
227
- * @private
228
- * @function getScale
229
- *
230
- * @param {number} targetWidth
231
- * Width of target area.
232
- *
233
- * @param {number} targetHeight
234
- * Height of target area.
235
- *
236
- * @param {object} field
237
- * The playing field.
238
- *
239
- * @param {Highcharts.Series} series
240
- * Series object.
241
- *
242
- * @return {number}
243
- * Returns the value to scale the playing field up to the size of the target
244
- * area.
370
+ * Use largest width, largest height, or root of total area to give
371
+ * size to the playing field.
245
372
  */
246
- function getScale(targetWidth, targetHeight, field) {
247
- var height = Math.max(Math.abs(field.top), Math.abs(field.bottom)) * 2, width = Math.max(Math.abs(field.left), Math.abs(field.right)) * 2, scaleX = width > 0 ? 1 / width * targetWidth : 1, scaleY = height > 0 ? 1 / height * targetHeight : 1;
248
- return Math.min(scaleX, scaleY);
373
+ x = Math.max(info.maxHeight, // Have enough space for the tallest word
374
+ info.maxWidth, // Have enough space for the broadest word
375
+ // Adjust 15% to account for close packing of words
376
+ Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
377
+ return {
378
+ width: x * ratioX,
379
+ height: x * ratioY,
380
+ ratioX: ratioX,
381
+ ratioY: ratioY
382
+ };
383
+ }
384
+ /**
385
+ * Calculates a number of degrees to rotate, based upon a number of
386
+ * orientations within a range from-to.
387
+ *
388
+ * @private
389
+ * @function getRotation
390
+ *
391
+ * @param {number} [orientations]
392
+ * Number of orientations.
393
+ *
394
+ * @param {number} [index]
395
+ * Index of point, used to decide orientation.
396
+ *
397
+ * @param {number} [from]
398
+ * The smallest degree of rotation.
399
+ *
400
+ * @param {number} [to]
401
+ * The largest degree of rotation.
402
+ *
403
+ * @return {boolean|number}
404
+ * Returns the resulting rotation for the word. Returns false if invalid
405
+ * input parameters.
406
+ */
407
+ function getRotation(orientations, index, from, to) {
408
+ var result = false, // Default to false
409
+ range, intervals, orientation;
410
+ // Check if we have valid input parameters.
411
+ if (isNumber(orientations) &&
412
+ isNumber(index) &&
413
+ isNumber(from) &&
414
+ isNumber(to) &&
415
+ orientations > 0 &&
416
+ index > -1 &&
417
+ to > from) {
418
+ range = to - from;
419
+ intervals = range / (orientations - 1 || 1);
420
+ orientation = index % orientations;
421
+ result = from + (orientation * intervals);
249
422
  }
250
- WordcloudUtils.getScale = getScale;
251
- /**
252
- * Calculates what is called the playing field. The field is the area which
253
- * all the words are allowed to be positioned within. The area is
254
- * proportioned to match the target aspect ratio.
255
- *
256
- * @private
257
- * @function getPlayingField
258
- *
259
- * @param {number} targetWidth
260
- * Width of the target area.
261
- *
262
- * @param {number} targetHeight
263
- * Height of the target area.
264
- *
265
- * @param {Array<Highcharts.Point>} data
266
- * Array of points.
267
- *
268
- * @param {object} data.dimensions
269
- * The height and width of the word.
270
- *
271
- * @return {object}
272
- * The width and height of the playing field.
273
- */
274
- function getPlayingField(targetWidth, targetHeight, data) {
275
- var info = data.reduce(function (obj, point) {
276
- var dimensions = point.dimensions, x = Math.max(dimensions.width, dimensions.height);
277
- // Find largest height.
278
- obj.maxHeight = Math.max(obj.maxHeight, dimensions.height);
279
- // Find largest width.
280
- obj.maxWidth = Math.max(obj.maxWidth, dimensions.width);
281
- // Sum up the total maximum area of all the words.
282
- obj.area += x * x;
283
- return obj;
284
- }, {
285
- maxHeight: 0,
286
- maxWidth: 0,
287
- area: 0
288
- }),
289
- /**
290
- * Use largest width, largest height, or root of total area to give
291
- * size to the playing field.
292
- */
293
- x = Math.max(info.maxHeight, // Have enough space for the tallest word
294
- info.maxWidth, // Have enough space for the broadest word
295
- // Adjust 15% to account for close packing of words
296
- Math.sqrt(info.area) * 0.85), ratioX = targetWidth > targetHeight ? targetWidth / targetHeight : 1, ratioY = targetHeight > targetWidth ? targetHeight / targetWidth : 1;
297
- return {
298
- width: x * ratioX,
299
- height: x * ratioY,
300
- ratioX: ratioX,
301
- ratioY: ratioY
302
- };
423
+ return result;
424
+ }
425
+ /**
426
+ * Calculates the spiral positions and store them in scope for quick access.
427
+ *
428
+ * @private
429
+ * @function getSpiral
430
+ *
431
+ * @param {Function} fn
432
+ * The spiral function.
433
+ *
434
+ * @param {Object} params
435
+ * Additional parameters for the spiral.
436
+ *
437
+ * @return {Function}
438
+ * Function with access to spiral positions.
439
+ */
440
+ function getSpiral(fn, params) {
441
+ var length = 10000, i, arr = [];
442
+ for (i = 1; i < length; i++) {
443
+ // @todo unnecessary amount of precaclulation
444
+ arr.push(fn(i, params));
303
445
  }
304
- WordcloudUtils.getPlayingField = getPlayingField;
305
- /**
306
- * Calculates a number of degrees to rotate, based upon a number of
307
- * orientations within a range from-to.
308
- *
309
- * @private
310
- * @function getRotation
311
- *
312
- * @param {number} [orientations]
313
- * Number of orientations.
314
- *
315
- * @param {number} [index]
316
- * Index of point, used to decide orientation.
317
- *
318
- * @param {number} [from]
319
- * The smallest degree of rotation.
320
- *
321
- * @param {number} [to]
322
- * The largest degree of rotation.
323
- *
324
- * @return {boolean|number}
325
- * Returns the resulting rotation for the word. Returns false if invalid
326
- * input parameters.
327
- */
328
- function getRotation(orientations, index, from, to) {
329
- var result = false, // Default to false
330
- range, intervals, orientation;
331
- // Check if we have valid input parameters.
332
- if (isNumber(orientations) &&
333
- isNumber(index) &&
334
- isNumber(from) &&
335
- isNumber(to) &&
336
- orientations > 0 &&
337
- index > -1 &&
338
- to > from) {
339
- range = to - from;
340
- intervals = range / (orientations - 1 || 1);
341
- orientation = index % orientations;
342
- result = from + (orientation * intervals);
446
+ return function (attempt) {
447
+ return attempt <= length ? arr[attempt - 1] : false;
448
+ };
449
+ }
450
+ /**
451
+ * Detects if a word is placed outside the playing field.
452
+ *
453
+ * @private
454
+ * @function outsidePlayingField
455
+ *
456
+ * @param {Highcharts.PolygonBoxObject} rect
457
+ * The word box.
458
+ *
459
+ * @param {Highcharts.WordcloudFieldObject} field
460
+ * The width and height of the playing field.
461
+ *
462
+ * @return {boolean}
463
+ * Returns true if the word is placed outside the field.
464
+ */
465
+ function outsidePlayingField(rect, field) {
466
+ var playingField = {
467
+ left: -(field.width / 2),
468
+ right: field.width / 2,
469
+ top: -(field.height / 2),
470
+ bottom: field.height / 2
471
+ };
472
+ return !(playingField.left < rect.left &&
473
+ playingField.right > rect.right &&
474
+ playingField.top < rect.top &&
475
+ playingField.bottom > rect.bottom);
476
+ }
477
+ /**
478
+ * @private
479
+ */
480
+ function movePolygon(deltaX, deltaY, polygon) {
481
+ return polygon.map(function (point) {
482
+ return [
483
+ point[0] + deltaX,
484
+ point[1] + deltaY
485
+ ];
486
+ });
487
+ }
488
+ /**
489
+ * Check if a point intersects with previously placed words, or if it goes
490
+ * outside the field boundaries. If a collision, then try to adjusts the
491
+ * position.
492
+ *
493
+ * @private
494
+ * @function intersectionTesting
495
+ *
496
+ * @param {Highcharts.Point} point
497
+ * Point to test for intersections.
498
+ *
499
+ * @param {Highcharts.WordcloudTestOptionsObject} options
500
+ * Options object.
501
+ *
502
+ * @return {boolean|Highcharts.PositionObject}
503
+ * Returns an object with how much to correct the positions. Returns false
504
+ * if the word should not be placed at all.
505
+ */
506
+ function intersectionTesting(point, options) {
507
+ var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
508
+ x: 0,
509
+ y: 0
510
+ },
511
+ // Make a copy to update values during intersection testing.
512
+ rect = point.rect = extend({}, rectangle);
513
+ point.polygon = polygon;
514
+ point.rotation = options.rotation;
515
+ /* while w intersects any previously placed words:
516
+ do {
517
+ move w a little bit along a spiral path
518
+ } while any part of w is outside the playing field and
519
+ the spiral radius is still smallish */
520
+ while (delta !== false &&
521
+ (intersectsAnyWord(point, placed) ||
522
+ outsidePlayingField(rect, field))) {
523
+ delta = spiral(attempt);
524
+ if (isObject(delta)) {
525
+ // Update the DOMRect with new positions.
526
+ rect.left = rectangle.left + delta.x;
527
+ rect.right = rectangle.right + delta.x;
528
+ rect.top = rectangle.top + delta.y;
529
+ rect.bottom = rectangle.bottom + delta.y;
530
+ point.polygon = movePolygon(delta.x, delta.y, polygon);
343
531
  }
344
- return result;
532
+ attempt++;
345
533
  }
346
- WordcloudUtils.getRotation = getRotation;
347
- /**
348
- * Calculates the spiral positions and store them in scope for quick access.
349
- *
350
- * @private
351
- * @function getSpiral
352
- *
353
- * @param {Function} fn
354
- * The spiral function.
355
- *
356
- * @param {object} params
357
- * Additional parameters for the spiral.
358
- *
359
- * @return {Function}
360
- * Function with access to spiral positions.
361
- */
362
- function getSpiral(fn, params) {
363
- var length = 10000, i, arr = [];
364
- for (i = 1; i < length; i++) {
365
- // @todo unnecessary amount of precaclulation
366
- arr.push(fn(i, params));
367
- }
368
- return function (attempt) {
369
- return attempt <= length ? arr[attempt - 1] : false;
370
- };
534
+ return delta;
535
+ }
536
+ /**
537
+ * Extends the playing field to have enough space to fit a given word.
538
+ *
539
+ * @private
540
+ * @function extendPlayingField
541
+ *
542
+ * @param {Highcharts.WordcloudFieldObject} field
543
+ * The width, height and ratios of a playing field.
544
+ *
545
+ * @param {Highcharts.PolygonBoxObject} rectangle
546
+ * The bounding box of the word to add space for.
547
+ *
548
+ * @return {Highcharts.WordcloudFieldObject}
549
+ * Returns the extended playing field with updated height and width.
550
+ */
551
+ function extendPlayingField(field, rectangle) {
552
+ var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
553
+ if (isObject(field) && isObject(rectangle)) {
554
+ height = (rectangle.bottom - rectangle.top);
555
+ width = (rectangle.right - rectangle.left);
556
+ ratioX = field.ratioX;
557
+ ratioY = field.ratioY;
558
+ // Use the same variable to extend both the height and width.
559
+ x = ((width * ratioX) > (height * ratioY)) ? width : height;
560
+ // Multiply variable with ratios to preserve aspect ratio.
561
+ extendWidth = x * ratioX;
562
+ extendHeight = x * ratioY;
563
+ // Calculate the size of the new field after adding
564
+ // space for the word.
565
+ result = merge(field, {
566
+ // Add space on the left and right.
567
+ width: field.width + (extendWidth * 2),
568
+ // Add space on the top and bottom.
569
+ height: field.height + (extendHeight * 2)
570
+ });
371
571
  }
372
- WordcloudUtils.getSpiral = getSpiral;
373
- /**
374
- * Detects if a word is placed outside the playing field.
375
- *
376
- * @private
377
- * @function outsidePlayingField
378
- *
379
- * @param {Highcharts.PolygonBoxObject} rect
380
- * The word box.
381
- *
382
- * @param {Highcharts.WordcloudFieldObject} field
383
- * The width and height of the playing field.
384
- *
385
- * @return {boolean}
386
- * Returns true if the word is placed outside the field.
387
- */
388
- function outsidePlayingField(rect, field) {
389
- var playingField = {
390
- left: -(field.width / 2),
391
- right: field.width / 2,
392
- top: -(field.height / 2),
393
- bottom: field.height / 2
394
- };
395
- return !(playingField.left < rect.left &&
396
- playingField.right > rect.right &&
397
- playingField.top < rect.top &&
398
- playingField.bottom > rect.bottom);
572
+ else {
573
+ result = field;
399
574
  }
400
- WordcloudUtils.outsidePlayingField = outsidePlayingField;
401
- /**
402
- * Check if a point intersects with previously placed words, or if it goes
403
- * outside the field boundaries. If a collision, then try to adjusts the
404
- * position.
405
- *
406
- * @private
407
- * @function intersectionTesting
408
- *
409
- * @param {Highcharts.Point} point
410
- * Point to test for intersections.
411
- *
412
- * @param {Highcharts.WordcloudTestOptionsObject} options
413
- * Options object.
414
- *
415
- * @return {boolean|Highcharts.PositionObject}
416
- * Returns an object with how much to correct the positions. Returns false
417
- * if the word should not be placed at all.
418
- */
419
- function intersectionTesting(point, options) {
420
- var placed = options.placed, field = options.field, rectangle = options.rectangle, polygon = options.polygon, spiral = options.spiral, attempt = 1, delta = {
421
- x: 0,
422
- y: 0
423
- },
424
- // Make a copy to update values during intersection testing.
425
- rect = point.rect = extend({}, rectangle);
426
- point.polygon = polygon;
427
- point.rotation = options.rotation;
428
- /* while w intersects any previously placed words:
429
- do {
430
- move w a little bit along a spiral path
431
- } while any part of w is outside the playing field and
432
- the spiral radius is still smallish */
433
- while (delta !== false &&
434
- (intersectsAnyWord(point, placed) ||
435
- outsidePlayingField(rect, field))) {
436
- delta = spiral(attempt);
437
- if (isObject(delta)) {
438
- // Update the DOMRect with new positions.
439
- rect.left = rectangle.left + delta.x;
440
- rect.right = rectangle.right + delta.x;
441
- rect.top = rectangle.top + delta.y;
442
- rect.bottom = rectangle.bottom + delta.y;
443
- point.polygon = movePolygon(delta.x, delta.y, polygon);
444
- }
445
- attempt++;
446
- }
447
- return delta;
575
+ // Return the new extended field.
576
+ return result;
577
+ }
578
+ /**
579
+ * If a rectangle is outside a give field, then the boundaries of the field
580
+ * is adjusted accordingly. Modifies the field object which is passed as the
581
+ * first parameter.
582
+ *
583
+ * @private
584
+ * @function updateFieldBoundaries
585
+ *
586
+ * @param {Highcharts.WordcloudFieldObject} field
587
+ * The bounding box of a playing field.
588
+ *
589
+ * @param {Highcharts.PolygonBoxObject} rectangle
590
+ * The bounding box for a placed point.
591
+ *
592
+ * @return {Highcharts.WordcloudFieldObject}
593
+ * Returns a modified field object.
594
+ */
595
+ function updateFieldBoundaries(field, rectangle) {
596
+ // @todo improve type checking.
597
+ if (!isNumber(field.left) || field.left > rectangle.left) {
598
+ field.left = rectangle.left;
448
599
  }
449
- WordcloudUtils.intersectionTesting = intersectionTesting;
450
- /**
451
- * Extends the playing field to have enough space to fit a given word.
452
- *
453
- * @private
454
- * @function extendPlayingField
455
- *
456
- * @param {Highcharts.WordcloudFieldObject} field
457
- * The width, height and ratios of a playing field.
458
- *
459
- * @param {Highcharts.PolygonBoxObject} rectangle
460
- * The bounding box of the word to add space for.
461
- *
462
- * @return {Highcharts.WordcloudFieldObject}
463
- * Returns the extended playing field with updated height and width.
464
- */
465
- function extendPlayingField(field, rectangle) {
466
- var height, width, ratioX, ratioY, x, extendWidth, extendHeight, result;
467
- if (isObject(field) && isObject(rectangle)) {
468
- height = (rectangle.bottom - rectangle.top);
469
- width = (rectangle.right - rectangle.left);
470
- ratioX = field.ratioX;
471
- ratioY = field.ratioY;
472
- // Use the same variable to extend both the height and width.
473
- x = ((width * ratioX) > (height * ratioY)) ? width : height;
474
- // Multiply variable with ratios to preserve aspect ratio.
475
- extendWidth = x * ratioX;
476
- extendHeight = x * ratioY;
477
- // Calculate the size of the new field after adding
478
- // space for the word.
479
- result = merge(field, {
480
- // Add space on the left and right.
481
- width: field.width + (extendWidth * 2),
482
- // Add space on the top and bottom.
483
- height: field.height + (extendHeight * 2)
484
- });
485
- }
486
- else {
487
- result = field;
488
- }
489
- // Return the new extended field.
490
- return result;
600
+ if (!isNumber(field.right) || field.right < rectangle.right) {
601
+ field.right = rectangle.right;
491
602
  }
492
- WordcloudUtils.extendPlayingField = extendPlayingField;
493
- /**
494
- * If a rectangle is outside a give field, then the boundaries of the field
495
- * is adjusted accordingly. Modifies the field object which is passed as the
496
- * first parameter.
497
- *
498
- * @private
499
- * @function updateFieldBoundaries
500
- *
501
- * @param {Highcharts.WordcloudFieldObject} field
502
- * The bounding box of a playing field.
503
- *
504
- * @param {Highcharts.PolygonBoxObject} rectangle
505
- * The bounding box for a placed point.
506
- *
507
- * @return {Highcharts.WordcloudFieldObject}
508
- * Returns a modified field object.
509
- */
510
- function updateFieldBoundaries(field, rectangle) {
511
- // @todo improve type checking.
512
- if (!isNumber(field.left) || field.left > rectangle.left) {
513
- field.left = rectangle.left;
514
- }
515
- if (!isNumber(field.right) || field.right < rectangle.right) {
516
- field.right = rectangle.right;
517
- }
518
- if (!isNumber(field.top) || field.top > rectangle.top) {
519
- field.top = rectangle.top;
520
- }
521
- if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
522
- field.bottom = rectangle.bottom;
523
- }
524
- return field;
603
+ if (!isNumber(field.top) || field.top > rectangle.top) {
604
+ field.top = rectangle.top;
525
605
  }
526
- WordcloudUtils.updateFieldBoundaries = updateFieldBoundaries;
527
- })(WordcloudUtils || (WordcloudUtils = {}));
606
+ if (!isNumber(field.bottom) || field.bottom < rectangle.bottom) {
607
+ field.bottom = rectangle.bottom;
608
+ }
609
+ return field;
610
+ }
611
+ /**
612
+ * Alternative solution to correctFloat.
613
+ * E.g Highcharts.correctFloat(123, 2) returns 120, when it should be 123.
614
+ *
615
+ * @private
616
+ * @function correctFloat
617
+ */
618
+ function correctFloat(number, precision) {
619
+ var p = isNumber(precision) ? precision : 14, magnitude = Math.pow(10, p);
620
+ return Math.round(number * magnitude) / magnitude;
621
+ }
622
+ /**
623
+ * @private
624
+ */
625
+ function getBoundingBoxFromPolygon(points) {
626
+ return points.reduce(function (obj, point) {
627
+ var x = point[0], y = point[1];
628
+ obj.left = Math.min(x, obj.left);
629
+ obj.right = Math.max(x, obj.right);
630
+ obj.bottom = Math.max(y, obj.bottom);
631
+ obj.top = Math.min(y, obj.top);
632
+ return obj;
633
+ }, {
634
+ left: Number.MAX_VALUE,
635
+ right: -Number.MAX_VALUE,
636
+ bottom: -Number.MAX_VALUE,
637
+ top: Number.MAX_VALUE
638
+ });
639
+ }
640
+ /**
641
+ * @private
642
+ */
643
+ function getPolygon(x, y, width, height, rotation) {
644
+ var origin = [x, y], left = x - (width / 2), right = x + (width / 2), top = y - (height / 2), bottom = y + (height / 2), polygon = [
645
+ [left, top],
646
+ [right, top],
647
+ [right, bottom],
648
+ [left, bottom]
649
+ ];
650
+ return polygon.map(function (point) {
651
+ return rotate2DToPoint(point, origin, -rotation);
652
+ });
653
+ }
654
+ /**
655
+ * Rotates a point clockwise around the origin.
656
+ *
657
+ * @private
658
+ * @function rotate2DToOrigin
659
+ * @param {Highcharts.PolygonPointObject} point
660
+ * The x and y coordinates for the point.
661
+ * @param {number} angle
662
+ * The angle of rotation.
663
+ * @return {Highcharts.PolygonPointObject}
664
+ * The x and y coordinate for the rotated point.
665
+ */
666
+ function rotate2DToOrigin(point, angle) {
667
+ var x = point[0], y = point[1], rad = deg2rad * -angle, cosAngle = Math.cos(rad), sinAngle = Math.sin(rad);
668
+ return [
669
+ correctFloat(x * cosAngle - y * sinAngle),
670
+ correctFloat(x * sinAngle + y * cosAngle)
671
+ ];
672
+ }
673
+ /**
674
+ * Rotate a point clockwise around another point.
675
+ *
676
+ * @private
677
+ * @function rotate2DToPoint
678
+ * @param {Highcharts.PolygonPointObject} point
679
+ * The x and y coordinates for the point.
680
+ * @param {Highcharts.PolygonPointObject} origin
681
+ * The point to rotate around.
682
+ * @param {number} angle
683
+ * The angle of rotation.
684
+ * @return {Highcharts.PolygonPointObject}
685
+ * The x and y coordinate for the rotated point.
686
+ */
687
+ function rotate2DToPoint(point, origin, angle) {
688
+ var x = point[0] - origin[0], y = point[1] - origin[1], rotated = rotate2DToOrigin([x, y], angle);
689
+ return [
690
+ rotated[0] + origin[0],
691
+ rotated[1] + origin[1]
692
+ ];
693
+ }
528
694
  /* *
529
695
  *
530
696
  * Default export
531
697
  *
532
698
  * */
699
+ var WordcloudUtils = {
700
+ archimedeanSpiral: archimedeanSpiral,
701
+ extendPlayingField: extendPlayingField,
702
+ getBoundingBoxFromPolygon: getBoundingBoxFromPolygon,
703
+ getPlayingField: getPlayingField,
704
+ getPolygon: getPolygon,
705
+ getRandomPosition: getRandomPosition,
706
+ getRotation: getRotation,
707
+ getScale: getScale,
708
+ getSpiral: getSpiral,
709
+ intersectionTesting: intersectionTesting,
710
+ isPolygonsColliding: isPolygonsColliding,
711
+ isRectanglesIntersecting: isRectanglesIntersecting,
712
+ rectangularSpiral: rectangularSpiral,
713
+ rotate2DToOrigin: rotate2DToOrigin,
714
+ rotate2DToPoint: rotate2DToPoint,
715
+ squareSpiral: squareSpiral,
716
+ updateFieldBoundaries: updateFieldBoundaries
717
+ };
533
718
  export default WordcloudUtils;