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) 2017-2021 Highsoft AS
5
5
  * Authors: Jon Arild Nygard
@@ -192,7 +192,8 @@
192
192
  * Returns the area of the circular segment.
193
193
  */
194
194
  function getCircularSegmentArea(r, h) {
195
- return r * r * Math.acos(1 - h / r) - (r - h) * Math.sqrt(h * (2 * r - h));
195
+ return (r * r * Math.acos(1 - h / r) -
196
+ (r - h) * Math.sqrt(h * (2 * r - h)));
196
197
  }
197
198
  CircleUtilities.getCircularSegmentArea = getCircularSegmentArea;
198
199
  /**
@@ -528,257 +529,137 @@
528
529
 
529
530
  return CircleUtilities;
530
531
  });
531
- _registerModule(_modules, 'Mixins/NelderMead.js', [], function () {
532
+ _registerModule(_modules, 'Series/DrawPointComposition.js', [], function () {
532
533
  /* *
533
534
  *
534
535
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
535
536
  *
536
537
  * */
537
- /* eslint-disable valid-jsdoc */
538
- var getCentroid = function (simplex) {
539
- var arr = simplex.slice(0, -1),
540
- length = arr.length,
541
- result = [],
542
- sum = function (data,
543
- point) {
544
- data.sum += point[data.i];
545
- return data;
546
- };
547
- for (var i = 0; i < length; i++) {
548
- result[i] = arr.reduce(sum, { sum: 0, i: i }).sum / length;
549
- }
550
- return result;
551
- };
552
- /**
553
- * Finds an optimal position for a given point.
554
- * @todo add unit tests.
555
- * @todo add constraints to optimize the algorithm.
556
- * @private
557
- * @param {Highcharts.NelderMeadTestFunction} fn
558
- * The function to test a point.
559
- * @param {Highcharts.NelderMeadPointArray} initial
560
- * The initial point to optimize.
561
- * @return {Highcharts.NelderMeadPointArray}
562
- * Returns the opimized position of a point.
563
- */
564
- var nelderMead = function nelderMead(fn,
565
- initial) {
566
- var maxIterations = 100,
567
- sortByFx = function (a,
568
- b) {
569
- return a.fx - b.fx;
570
- }, pRef = 1, // Reflection parameter
571
- pExp = 2, // Expansion parameter
572
- pCon = -0.5, // Contraction parameter
573
- pOCon = pCon * pRef, // Outwards contraction parameter
574
- pShrink = 0.5; // Shrink parameter
538
+ /* *
539
+ *
540
+ * Composition
541
+ *
542
+ * */
543
+ var DrawPointComposition;
544
+ (function (DrawPointComposition) {
545
+ /* *
546
+ *
547
+ * Declarations
548
+ *
549
+ * */
550
+ /* *
551
+ *
552
+ * Constants
553
+ *
554
+ * */
555
+ var composedClasses = [];
556
+ /* *
557
+ *
558
+ * Functions
559
+ *
560
+ * */
561
+ /* eslint-disable valid-jsdoc */
575
562
  /**
576
563
  * @private
577
564
  */
578
- var weightedSum = function weightedSum(weight1,
579
- v1,
580
- weight2,
581
- v2) {
582
- return v1.map(function (x,
583
- i) {
584
- return weight1 * x + weight2 * v2[i];
585
- });
586
- };
565
+ function compose(PointClass) {
566
+ if (composedClasses.indexOf(PointClass) === -1) {
567
+ composedClasses.push(PointClass);
568
+ var pointProto = PointClass.prototype;
569
+ pointProto.draw = draw;
570
+ if (!pointProto.shouldDraw) {
571
+ pointProto.shouldDraw = shouldDraw;
572
+ }
573
+ }
574
+ return PointClass;
575
+ }
576
+ DrawPointComposition.compose = compose;
587
577
  /**
578
+ * Handles the drawing of a component.
579
+ * Can be used for any type of component that reserves the graphic property,
580
+ * and provides a shouldDraw on its context.
581
+ *
588
582
  * @private
583
+ *
584
+ * @todo add type checking.
585
+ * @todo export this function to enable usage
589
586
  */
590
- var getSimplex = function getSimplex(initial) {
591
- var n = initial.length,
592
- simplex = new Array(n + 1);
593
- // Initial point to the simplex.
594
- simplex[0] = initial;
595
- simplex[0].fx = fn(initial);
596
- // Create a set of extra points based on the initial.
597
- for (var i = 0; i < n; ++i) {
598
- var point = initial.slice();
599
- point[i] = point[i] ? point[i] * 1.05 : 0.001;
600
- point.fx = fn(point);
601
- simplex[i + 1] = point;
602
- }
603
- return simplex;
604
- };
605
- var updateSimplex = function (simplex,
606
- point) {
607
- point.fx = fn(point);
608
- simplex[simplex.length - 1] = point;
609
- return simplex;
610
- };
611
- var shrinkSimplex = function (simplex) {
612
- var best = simplex[0];
613
- return simplex.map(function (point) {
614
- var p = weightedSum(1 - pShrink,
615
- best,
616
- pShrink,
617
- point);
618
- p.fx = fn(p);
619
- return p;
620
- });
621
- };
622
- var getPoint = function (centroid,
623
- worst,
624
- a,
625
- b) {
626
- var point = weightedSum(a,
627
- centroid,
628
- b,
629
- worst);
630
- point.fx = fn(point);
631
- return point;
632
- };
633
- // Create a simplex
634
- var simplex = getSimplex(initial);
635
- // Iterate from 0 to max iterations
636
- for (var i = 0; i < maxIterations; i++) {
637
- // Sort the simplex
638
- simplex.sort(sortByFx);
639
- // Create a centroid from the simplex
640
- var worst = simplex[simplex.length - 1];
641
- var centroid = getCentroid(simplex);
642
- // Calculate the reflected point.
643
- var reflected = getPoint(centroid,
644
- worst, 1 + pRef, -pRef);
645
- if (reflected.fx < simplex[0].fx) {
646
- // If reflected point is the best, then possibly expand.
647
- var expanded = getPoint(centroid,
648
- worst, 1 + pExp, -pExp);
649
- simplex = updateSimplex(simplex, (expanded.fx < reflected.fx) ? expanded : reflected);
587
+ function draw(params) {
588
+ var _this = this;
589
+ var animatableAttribs = params.animatableAttribs,
590
+ onComplete = params.onComplete,
591
+ css = params.css,
592
+ renderer = params.renderer;
593
+ var animation = (this.series && this.series.chart.hasRendered) ?
594
+ // Chart-level animation on updates
595
+ void 0 :
596
+ // Series-level animation on new points
597
+ (this.series &&
598
+ this.series.options.animation);
599
+ var graphic = this.graphic;
600
+ params.attribs = params.attribs || {};
601
+ // Assigning class in dot notation does go well in IE8
602
+ // eslint-disable-next-line dot-notation
603
+ params.attribs['class'] = this.getClassName();
604
+ if (this.shouldDraw()) {
605
+ if (!graphic) {
606
+ this.graphic = graphic =
607
+ renderer[params.shapeType](params.shapeArgs)
608
+ .add(params.group);
609
+ }
610
+ graphic
611
+ .css(css)
612
+ .attr(params.attribs)
613
+ .animate(animatableAttribs, params.isNew ? false : animation, onComplete);
650
614
  }
651
- else if (reflected.fx >= simplex[simplex.length - 2].fx) {
652
- // If the reflected point is worse than the second worse, then
653
- // contract.
654
- var contracted = void 0;
655
- if (reflected.fx > worst.fx) {
656
- // If the reflected is worse than the worst point, do a
657
- // contraction
658
- contracted = getPoint(centroid, worst, 1 + pCon, -pCon);
659
- if (contracted.fx < worst.fx) {
660
- simplex = updateSimplex(simplex, contracted);
661
- }
662
- else {
663
- simplex = shrinkSimplex(simplex);
615
+ else if (graphic) {
616
+ var destroy_1 = function () {
617
+ _this.graphic = graphic = (graphic && graphic.destroy());
618
+ if (typeof onComplete === 'function') {
619
+ onComplete();
664
620
  }
621
+ };
622
+ // animate only runs complete callback if something was animated.
623
+ if (Object.keys(animatableAttribs).length) {
624
+ graphic.animate(animatableAttribs, void 0, function () {
625
+ destroy_1();
626
+ });
665
627
  }
666
628
  else {
667
- // Otherwise do an outwards contraction
668
- contracted = getPoint(centroid, worst, 1 - pOCon, pOCon);
669
- if (contracted.fx < reflected.fx) {
670
- simplex = updateSimplex(simplex, contracted);
671
- }
672
- else {
673
- simplex = shrinkSimplex(simplex);
674
- }
629
+ destroy_1();
675
630
  }
676
631
  }
677
- else {
678
- simplex = updateSimplex(simplex, reflected);
679
- }
680
632
  }
681
- return simplex[0];
682
- };
683
- var nelderMeadMixin = {
684
- getCentroid: getCentroid,
685
- nelderMead: nelderMead
686
- };
687
-
688
- return nelderMeadMixin;
689
- });
690
- _registerModule(_modules, 'Mixins/DrawPoint.js', [], function () {
633
+ /**
634
+ * @private
635
+ */
636
+ function shouldDraw() {
637
+ return !this.isNull;
638
+ }
639
+ })(DrawPointComposition || (DrawPointComposition = {}));
691
640
  /* *
692
641
  *
693
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
642
+ * Default Export
694
643
  *
695
644
  * */
696
- var isFn = function (x) {
697
- return typeof x === 'function';
698
- };
699
- /* eslint-disable no-invalid-this, valid-jsdoc */
700
- /**
701
- * Handles the drawing of a component.
702
- * Can be used for any type of component that reserves the graphic property, and
703
- * provides a shouldDraw on its context.
704
- *
705
- * @private
706
- * @function draw
707
- * @param {DrawPointParams} params
708
- * Parameters.
709
- *
710
- * @todo add type checking.
711
- * @todo export this function to enable usage
712
- */
713
- var draw = function draw(params) {
714
- var _this = this;
715
- var animatableAttribs = params.animatableAttribs,
716
- onComplete = params.onComplete,
717
- css = params.css,
718
- renderer = params.renderer;
719
- var animation = (this.series && this.series.chart.hasRendered) ?
720
- // Chart-level animation on updates
721
- void 0 :
722
- // Series-level animation on new points
723
- (this.series &&
724
- this.series.options.animation);
725
- var graphic = this.graphic;
726
- if (this.shouldDraw()) {
727
- if (!graphic) {
728
- this.graphic = graphic =
729
- renderer[params.shapeType](params.shapeArgs)
730
- .add(params.group);
731
- }
732
- graphic
733
- .css(css)
734
- .attr(params.attribs)
735
- .animate(animatableAttribs, params.isNew ? false : animation, onComplete);
736
- }
737
- else if (graphic) {
738
- var destroy_1 = function () {
739
- _this.graphic = graphic = (graphic && graphic.destroy());
740
- if (isFn(onComplete)) {
741
- onComplete();
742
- }
743
- };
744
- // animate only runs complete callback if something was animated.
745
- if (Object.keys(animatableAttribs).length) {
746
- graphic.animate(animatableAttribs, void 0, function () {
747
- destroy_1();
748
- });
749
- }
750
- else {
751
- destroy_1();
752
- }
753
- }
754
- };
755
- /**
756
- * An extended version of draw customized for points.
757
- * It calls additional methods that is expected when rendering a point.
758
- * @private
759
- * @param {Highcharts.Dictionary<any>} params Parameters
760
- */
761
- var drawPoint = function drawPoint(params) {
762
- var point = this,
763
- attribs = params.attribs = params.attribs || {};
764
- // Assigning class in dot notation does go well in IE8
765
- // eslint-disable-next-line dot-notation
766
- attribs['class'] = point.getClassName();
767
- // Call draw to render component
768
- draw.call(point, params);
769
- };
770
- var drawPointModule = {
771
- draw: draw,
772
- drawPoint: drawPoint,
773
- isFn: isFn
774
- };
775
645
 
776
- return drawPointModule;
646
+ return DrawPointComposition;
777
647
  });
778
- _registerModule(_modules, 'Series/Venn/VennPoint.js', [_modules['Mixins/DrawPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (DrawPointMixin, SeriesRegistry, U) {
648
+ _registerModule(_modules, 'Series/Venn/VennPoint.js', [_modules['Series/DrawPointComposition.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (DrawPointComposition, SeriesRegistry, U) {
779
649
  /* *
780
650
  *
781
- * Imports
651
+ * Experimental Highcharts module which enables visualization of a Venn
652
+ * diagram.
653
+ *
654
+ * (c) 2016-2021 Highsoft AS
655
+ * Authors: Jon Arild Nygard
656
+ *
657
+ * Layout algorithm by Ben Frederickson:
658
+ * https://www.benfrederickson.com/better-venn-diagrams/
659
+ *
660
+ * License: www.highcharts.com/license
661
+ *
662
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
782
663
  *
783
664
  * */
784
665
  var __extends = (this && this.__extends) || (function () {
@@ -830,15 +711,12 @@
830
711
  return isNumber(this.value);
831
712
  };
832
713
  VennPoint.prototype.shouldDraw = function () {
833
- var point = this;
834
714
  // Only draw points with single sets.
835
- return !!point.shapeArgs;
715
+ return !!this.shapeArgs;
836
716
  };
837
717
  return VennPoint;
838
718
  }(ScatterSeries.prototype.pointClass));
839
- extend(VennPoint.prototype, {
840
- draw: DrawPointMixin.drawPoint
841
- });
719
+ DrawPointComposition.compose(VennPoint);
842
720
  /* *
843
721
  *
844
722
  * Default Export
@@ -847,7 +725,7 @@
847
725
 
848
726
  return VennPoint;
849
727
  });
850
- _registerModule(_modules, 'Series/Venn/VennUtils.js', [_modules['Core/Geometry/CircleUtilities.js'], _modules['Core/Geometry/GeometryUtilities.js'], _modules['Mixins/NelderMead.js'], _modules['Core/Utilities.js']], function (CU, GU, NelderMeadMixin, U) {
728
+ _registerModule(_modules, 'Series/Venn/VennUtils.js', [_modules['Core/Geometry/CircleUtilities.js'], _modules['Core/Geometry/GeometryUtilities.js'], _modules['Core/Utilities.js']], function (CU, GU, U) {
851
729
  /* *
852
730
  *
853
731
  * Experimental Highcharts module which enables visualization of a Venn
@@ -878,523 +756,658 @@
878
756
  isString = U.isString;
879
757
  /* *
880
758
  *
881
- * Namespace
759
+ * Functions
882
760
  *
883
761
  * */
884
- var VennUtils;
885
- (function (VennUtils) {
886
- /* *
887
- *
888
- * Properties
889
- *
890
- * */
891
- VennUtils.geometry = GU;
892
- VennUtils.geometryCircles = CU;
893
- VennUtils.nelderMead = NelderMeadMixin;
894
- /* *
895
- *
896
- * Functions
897
- *
898
- * */
899
- /**
900
- * Takes an array of relations and adds the properties `totalOverlap` and
901
- * `overlapping` to each set. The property `totalOverlap` is the sum of
902
- * value for each relation where this set is included. The property
903
- * `overlapping` is a map of how much this set is overlapping another set.
904
- * NOTE: This algorithm ignores relations consisting of more than 2 sets.
905
- * @private
906
- * @param {Array<Highcharts.VennRelationObject>} relations
907
- * The list of relations that should be sorted.
908
- * @return {Array<Highcharts.VennRelationObject>}
909
- * Returns the modified input relations with added properties `totalOverlap`
910
- * and `overlapping`.
911
- */
912
- function addOverlapToSets(relations) {
913
- // Calculate the amount of overlap per set.
914
- var mapOfIdToProps = relations
915
- // Filter out relations consisting of 2 sets.
916
- .filter(function (relation) { return (relation.sets.length === 2); })
917
- // Sum up the amount of overlap for each set.
918
- .reduce(function (map,
919
- relation) {
920
- relation.sets.forEach(function (set,
921
- i,
922
- arr) {
923
- if (!isObject(map[set])) {
924
- map[set] = {
925
- overlapping: {},
926
- totalOverlap: 0
927
- };
928
- }
929
- map[set].totalOverlap += relation.value;
930
- map[set].overlapping[arr[1 - i]] = relation.value;
931
- });
932
- return map;
933
- }, {});
934
- relations
935
- // Filter out single sets
936
- .filter(isSet)
937
- // Extend the set with the calculated properties.
938
- .forEach(function (set) {
939
- var properties = mapOfIdToProps[set.sets[0]];
940
- extend(set, properties);
762
+ /* eslint-disable valid-jsdoc */
763
+ /**
764
+ * Takes an array of relations and adds the properties `totalOverlap` and
765
+ * `overlapping` to each set. The property `totalOverlap` is the sum of
766
+ * value for each relation where this set is included. The property
767
+ * `overlapping` is a map of how much this set is overlapping another set.
768
+ * NOTE: This algorithm ignores relations consisting of more than 2 sets.
769
+ * @private
770
+ * @param {Array<Highcharts.VennRelationObject>} relations
771
+ * The list of relations that should be sorted.
772
+ * @return {Array<Highcharts.VennRelationObject>}
773
+ * Returns the modified input relations with added properties `totalOverlap`
774
+ * and `overlapping`.
775
+ */
776
+ function addOverlapToSets(relations) {
777
+ // Calculate the amount of overlap per set.
778
+ var mapOfIdToProps = relations
779
+ // Filter out relations consisting of 2 sets.
780
+ .filter(function (relation) { return (relation.sets.length === 2); })
781
+ // Sum up the amount of overlap for each set.
782
+ .reduce(function (map,
783
+ relation) {
784
+ relation.sets.forEach(function (set,
785
+ i,
786
+ arr) {
787
+ if (!isObject(map[set])) {
788
+ map[set] = {
789
+ overlapping: {},
790
+ totalOverlap: 0
791
+ };
792
+ }
793
+ map[set].totalOverlap += relation.value;
794
+ map[set].overlapping[arr[1 - i]] = relation.value;
941
795
  });
942
- // Returns the modified relations.
943
- return relations;
796
+ return map;
797
+ }, {});
798
+ relations
799
+ // Filter out single sets
800
+ .filter(isSet)
801
+ // Extend the set with the calculated properties.
802
+ .forEach(function (set) {
803
+ var properties = mapOfIdToProps[set.sets[0]];
804
+ extend(set, properties);
805
+ });
806
+ // Returns the modified relations.
807
+ return relations;
808
+ }
809
+ /**
810
+ * Finds the root of a given function. The root is the input value needed
811
+ * for a function to return 0.
812
+ *
813
+ * See https://en.wikipedia.org/wiki/Bisection_method#Algorithm
814
+ *
815
+ * TODO: Add unit tests.
816
+ *
817
+ * @param {Function} f
818
+ * The function to find the root of.
819
+ * @param {number} a
820
+ * The lowest number in the search range.
821
+ * @param {number} b
822
+ * The highest number in the search range.
823
+ * @param {number} [tolerance=1e-10]
824
+ * The allowed difference between the returned value and root.
825
+ * @param {number} [maxIterations=100]
826
+ * The maximum iterations allowed.
827
+ * @return {number}
828
+ * Root number.
829
+ */
830
+ function bisect(f, a, b, tolerance, maxIterations) {
831
+ var fA = f(a),
832
+ fB = f(b),
833
+ nMax = maxIterations || 100,
834
+ tol = tolerance || 1e-10,
835
+ delta = b - a,
836
+ n = 1,
837
+ x,
838
+ fX;
839
+ if (a >= b) {
840
+ throw new Error('a must be smaller than b.');
944
841
  }
945
- VennUtils.addOverlapToSets = addOverlapToSets;
946
- /**
947
- * Finds the root of a given function. The root is the input value needed
948
- * for a function to return 0.
949
- *
950
- * See https://en.wikipedia.org/wiki/Bisection_method#Algorithm
951
- *
952
- * TODO: Add unit tests.
953
- *
954
- * @param {Function} f
955
- * The function to find the root of.
956
- * @param {number} a
957
- * The lowest number in the search range.
958
- * @param {number} b
959
- * The highest number in the search range.
960
- * @param {number} [tolerance=1e-10]
961
- * The allowed difference between the returned value and root.
962
- * @param {number} [maxIterations=100]
963
- * The maximum iterations allowed.
964
- * @return {number}
965
- * Root number.
966
- */
967
- function bisect(f, a, b, tolerance, maxIterations) {
968
- var fA = f(a),
969
- fB = f(b),
970
- nMax = maxIterations || 100,
971
- tol = tolerance || 1e-10,
972
- delta = b - a,
973
- n = 1,
974
- x,
975
- fX;
976
- if (a >= b) {
977
- throw new Error('a must be smaller than b.');
978
- }
979
- else if (fA * fB > 0) {
980
- throw new Error('f(a) and f(b) must have opposite signs.');
981
- }
982
- if (fA === 0) {
983
- x = a;
984
- }
985
- else if (fB === 0) {
986
- x = b;
987
- }
988
- else {
989
- while (n++ <= nMax && fX !== 0 && delta > tol) {
990
- delta = (b - a) / 2;
991
- x = a + delta;
992
- fX = f(x);
993
- // Update low and high for next search interval.
994
- if (fA * fX > 0) {
995
- a = x;
996
- }
997
- else {
998
- b = x;
999
- }
1000
- }
1001
- }
1002
- return x;
842
+ else if (fA * fB > 0) {
843
+ throw new Error('f(a) and f(b) must have opposite signs.');
1003
844
  }
1004
- /**
1005
- * Uses the bisection method to make a best guess of the ideal distance
1006
- * between two circles too get the desired overlap.
1007
- * Currently there is no known formula to calculate the distance from the
1008
- * area of overlap, which makes the bisection method preferred.
1009
- * @private
1010
- * @param {number} r1
1011
- * Radius of the first circle.
1012
- * @param {number} r2
1013
- * Radiues of the second circle.
1014
- * @param {number} overlap
1015
- * The wanted overlap between the two circles.
1016
- * @return {number}
1017
- * Returns the distance needed to get the wanted overlap between the two
1018
- * circles.
1019
- */
1020
- function getDistanceBetweenCirclesByOverlap(r1, r2, overlap) {
1021
- var maxDistance = r1 + r2,
1022
- distance;
1023
- if (overlap <= 0) {
1024
- // If overlap is below or equal to zero, then there is no overlap.
1025
- distance = maxDistance;
1026
- }
1027
- else if (getAreaOfCircle(r1 < r2 ? r1 : r2) <= overlap) {
1028
- // When area of overlap is larger than the area of the smallest
1029
- // circle, then it is completely overlapping.
1030
- distance = 0;
1031
- }
1032
- else {
1033
- distance = bisect(function (x) {
1034
- var actualOverlap = getOverlapBetweenCirclesByDistance(r1,
1035
- r2,
1036
- x);
1037
- // Return the differance between wanted and actual overlap.
1038
- return overlap - actualOverlap;
1039
- }, 0, maxDistance);
1040
- }
1041
- return distance;
845
+ if (fA === 0) {
846
+ x = a;
1042
847
  }
1043
- VennUtils.getDistanceBetweenCirclesByOverlap = getDistanceBetweenCirclesByOverlap;
1044
- /**
1045
- * Finds the available width for a label, by taking the label position and
1046
- * finding the largest distance, which is inside all internal circles, and
1047
- * outside all external circles.
1048
- *
1049
- * @private
1050
- * @param {Highcharts.PositionObject} pos
1051
- * The x and y coordinate of the label.
1052
- * @param {Array<Highcharts.CircleObject>} internal
1053
- * Internal circles.
1054
- * @param {Array<Highcharts.CircleObject>} external
1055
- * External circles.
1056
- * @return {number}
1057
- * Returns available width for the label.
1058
- */
1059
- function getLabelWidth(pos, internal, external) {
1060
- var radius = internal.reduce(function (min,
1061
- circle) { return Math.min(circle.r,
1062
- min); },
1063
- Infinity),
1064
- // Filter out external circles that are completely overlapping.
1065
- filteredExternals = external.filter(function (circle) {
1066
- return !isPointInsideCircle(pos,
1067
- circle);
1068
- });
1069
- var findDistance = function (maxDistance,
1070
- direction) {
1071
- return bisect(function (x) {
1072
- var testPos = {
1073
- x: pos.x + (direction * x),
1074
- y: pos.y
1075
- },
1076
- isValid = (isPointInsideAllCircles(testPos,
1077
- internal) &&
1078
- isPointOutsideAllCircles(testPos,
1079
- filteredExternals));
1080
- // If the position is valid, then we want to move towards the
1081
- // max distance. If not, then we want to away from the max
1082
- // distance.
1083
- return -(maxDistance - x) + (isValid ? 0 : Number.MAX_VALUE);
1084
- }, 0, maxDistance);
1085
- };
1086
- // Find the smallest distance of left and right.
1087
- return Math.min(findDistance(radius, -1), findDistance(radius, 1)) * 2;
1088
- }
1089
- VennUtils.getLabelWidth = getLabelWidth;
1090
- /**
1091
- * Calculates a margin for a point based on the iternal and external
1092
- * circles. The margin describes if the point is well placed within the
1093
- * internal circles, and away from the external.
1094
- * @private
1095
- * @todo add unit tests.
1096
- * @param {Highcharts.PositionObject} point
1097
- * The point to evaluate.
1098
- * @param {Array<Highcharts.CircleObject>} internal
1099
- * The internal circles.
1100
- * @param {Array<Highcharts.CircleObject>} external
1101
- * The external circles.
1102
- * @return {number}
1103
- * Returns the margin.
1104
- */
1105
- function getMarginFromCircles(point, internal, external) {
1106
- var margin = internal.reduce(function (margin,
1107
- circle) {
1108
- var m = circle.r - getDistanceBetweenPoints(point,
1109
- circle);
1110
- return (m <= margin) ? m : margin;
1111
- }, Number.MAX_VALUE);
1112
- margin = external.reduce(function (margin, circle) {
1113
- var m = getDistanceBetweenPoints(point,
1114
- circle) - circle.r;
1115
- return (m <= margin) ? m : margin;
1116
- }, margin);
1117
- return margin;
848
+ else if (fB === 0) {
849
+ x = b;
1118
850
  }
1119
- VennUtils.getMarginFromCircles = getMarginFromCircles;
1120
- /**
1121
- * Calculates the area of overlap between a list of circles.
1122
- * @private
1123
- * @todo add support for calculating overlap between more than 2 circles.
1124
- * @param {Array<Highcharts.CircleObject>} circles
1125
- * List of circles with their given positions.
1126
- * @return {number}
1127
- * Returns the area of overlap between all the circles.
1128
- */
1129
- function getOverlapBetweenCircles(circles) {
1130
- var overlap = 0;
1131
- // When there is only two circles we can find the overlap by using their
1132
- // radiuses and the distance between them.
1133
- if (circles.length === 2) {
1134
- var circle1 = circles[0];
1135
- var circle2 = circles[1];
1136
- overlap = getOverlapBetweenCirclesByDistance(circle1.r, circle2.r, getDistanceBetweenPoints(circle1, circle2));
851
+ else {
852
+ while (n++ <= nMax && fX !== 0 && delta > tol) {
853
+ delta = (b - a) / 2;
854
+ x = a + delta;
855
+ fX = f(x);
856
+ // Update low and high for next search interval.
857
+ if (fA * fX > 0) {
858
+ a = x;
859
+ }
860
+ else {
861
+ b = x;
862
+ }
1137
863
  }
1138
- return overlap;
1139
864
  }
1140
- // eslint-disable-next-line require-jsdoc
1141
- function isSet(x) {
1142
- return isArray(x.sets) && x.sets.length === 1;
865
+ return x;
866
+ }
867
+ /**
868
+ * @private
869
+ */
870
+ function getCentroid(simplex) {
871
+ var arr = simplex.slice(0, -1),
872
+ length = arr.length,
873
+ result = [],
874
+ sum = function (data,
875
+ point) {
876
+ data.sum += point[data.i];
877
+ return data;
878
+ };
879
+ for (var i = 0; i < length; i++) {
880
+ result[i] = arr.reduce(sum, { sum: 0, i: i }).sum / length;
1143
881
  }
1144
- VennUtils.isSet = isSet;
1145
- // eslint-disable-next-line require-jsdoc
1146
- function isValidRelation(x) {
1147
- var map = {};
1148
- return (isObject(x) &&
1149
- (isNumber(x.value) && x.value > -1) &&
1150
- (isArray(x.sets) && x.sets.length > 0) &&
1151
- !x.sets.some(function (set) {
1152
- var invalid = false;
1153
- if (!map[set] && isString(set)) {
1154
- map[set] = true;
1155
- }
1156
- else {
1157
- invalid = true;
1158
- }
1159
- return invalid;
1160
- }));
882
+ return result;
883
+ }
884
+ /**
885
+ * Uses the bisection method to make a best guess of the ideal distance
886
+ * between two circles too get the desired overlap.
887
+ * Currently there is no known formula to calculate the distance from the
888
+ * area of overlap, which makes the bisection method preferred.
889
+ * @private
890
+ * @param {number} r1
891
+ * Radius of the first circle.
892
+ * @param {number} r2
893
+ * Radiues of the second circle.
894
+ * @param {number} overlap
895
+ * The wanted overlap between the two circles.
896
+ * @return {number}
897
+ * Returns the distance needed to get the wanted overlap between the two
898
+ * circles.
899
+ */
900
+ function getDistanceBetweenCirclesByOverlap(r1, r2, overlap) {
901
+ var maxDistance = r1 + r2,
902
+ distance;
903
+ if (overlap <= 0) {
904
+ // If overlap is below or equal to zero, then there is no overlap.
905
+ distance = maxDistance;
906
+ }
907
+ else if (getAreaOfCircle(r1 < r2 ? r1 : r2) <= overlap) {
908
+ // When area of overlap is larger than the area of the smallest
909
+ // circle, then it is completely overlapping.
910
+ distance = 0;
1161
911
  }
1162
- // eslint-disable-next-line require-jsdoc
1163
- function isValidSet(x) {
1164
- return (isValidRelation(x) && isSet(x) && x.value > 0);
912
+ else {
913
+ distance = bisect(function (x) {
914
+ var actualOverlap = getOverlapBetweenCirclesByDistance(r1,
915
+ r2,
916
+ x);
917
+ // Return the differance between wanted and actual overlap.
918
+ return overlap - actualOverlap;
919
+ }, 0, maxDistance);
920
+ }
921
+ return distance;
922
+ }
923
+ /**
924
+ * Finds the available width for a label, by taking the label position and
925
+ * finding the largest distance, which is inside all internal circles, and
926
+ * outside all external circles.
927
+ *
928
+ * @private
929
+ * @param {Highcharts.PositionObject} pos
930
+ * The x and y coordinate of the label.
931
+ * @param {Array<Highcharts.CircleObject>} internal
932
+ * Internal circles.
933
+ * @param {Array<Highcharts.CircleObject>} external
934
+ * External circles.
935
+ * @return {number}
936
+ * Returns available width for the label.
937
+ */
938
+ function getLabelWidth(pos, internal, external) {
939
+ var radius = internal.reduce(function (min,
940
+ circle) { return Math.min(circle.r,
941
+ min); },
942
+ Infinity),
943
+ // Filter out external circles that are completely overlapping.
944
+ filteredExternals = external.filter(function (circle) {
945
+ return !isPointInsideCircle(pos,
946
+ circle);
947
+ });
948
+ var findDistance = function (maxDistance,
949
+ direction) {
950
+ return bisect(function (x) {
951
+ var testPos = {
952
+ x: pos.x + (direction * x),
953
+ y: pos.y
954
+ },
955
+ isValid = (isPointInsideAllCircles(testPos,
956
+ internal) &&
957
+ isPointOutsideAllCircles(testPos,
958
+ filteredExternals));
959
+ // If the position is valid, then we want to move towards the
960
+ // max distance. If not, then we want to away from the max
961
+ // distance.
962
+ return -(maxDistance - x) + (isValid ? 0 : Number.MAX_VALUE);
963
+ }, 0, maxDistance);
964
+ };
965
+ // Find the smallest distance of left and right.
966
+ return Math.min(findDistance(radius, -1), findDistance(radius, 1)) * 2;
967
+ }
968
+ /**
969
+ * Calculates a margin for a point based on the iternal and external
970
+ * circles. The margin describes if the point is well placed within the
971
+ * internal circles, and away from the external.
972
+ * @private
973
+ * @todo add unit tests.
974
+ * @param {Highcharts.PositionObject} point
975
+ * The point to evaluate.
976
+ * @param {Array<Highcharts.CircleObject>} internal
977
+ * The internal circles.
978
+ * @param {Array<Highcharts.CircleObject>} external
979
+ * The external circles.
980
+ * @return {number}
981
+ * Returns the margin.
982
+ */
983
+ function getMarginFromCircles(point, internal, external) {
984
+ var margin = internal.reduce(function (margin,
985
+ circle) {
986
+ var m = circle.r - getDistanceBetweenPoints(point,
987
+ circle);
988
+ return (m <= margin) ? m : margin;
989
+ }, Number.MAX_VALUE);
990
+ margin = external.reduce(function (margin, circle) {
991
+ var m = getDistanceBetweenPoints(point,
992
+ circle) - circle.r;
993
+ return (m <= margin) ? m : margin;
994
+ }, margin);
995
+ return margin;
996
+ }
997
+ /**
998
+ * Calculates the area of overlap between a list of circles.
999
+ * @private
1000
+ * @todo add support for calculating overlap between more than 2 circles.
1001
+ * @param {Array<Highcharts.CircleObject>} circles
1002
+ * List of circles with their given positions.
1003
+ * @return {number}
1004
+ * Returns the area of overlap between all the circles.
1005
+ */
1006
+ function getOverlapBetweenCircles(circles) {
1007
+ var overlap = 0;
1008
+ // When there is only two circles we can find the overlap by using their
1009
+ // radiuses and the distance between them.
1010
+ if (circles.length === 2) {
1011
+ var circle1 = circles[0];
1012
+ var circle2 = circles[1];
1013
+ overlap = getOverlapBetweenCirclesByDistance(circle1.r, circle2.r, getDistanceBetweenPoints(circle1, circle2));
1165
1014
  }
1015
+ return overlap;
1016
+ }
1017
+ // eslint-disable-next-line require-jsdoc
1018
+ function isSet(x) {
1019
+ return isArray(x.sets) && x.sets.length === 1;
1020
+ }
1021
+ // eslint-disable-next-line require-jsdoc
1022
+ function isValidRelation(x) {
1023
+ var map = {};
1024
+ return (isObject(x) &&
1025
+ (isNumber(x.value) && x.value > -1) &&
1026
+ (isArray(x.sets) && x.sets.length > 0) &&
1027
+ !x.sets.some(function (set) {
1028
+ var invalid = false;
1029
+ if (!map[set] && isString(set)) {
1030
+ map[set] = true;
1031
+ }
1032
+ else {
1033
+ invalid = true;
1034
+ }
1035
+ return invalid;
1036
+ }));
1037
+ }
1038
+ // eslint-disable-next-line require-jsdoc
1039
+ function isValidSet(x) {
1040
+ return (isValidRelation(x) && isSet(x) && x.value > 0);
1041
+ }
1042
+ /**
1043
+ * Uses a greedy approach to position all the sets. Works well with a small
1044
+ * number of sets, and are in these cases a good choice aesthetically.
1045
+ * @private
1046
+ * @param {Array<object>} relations List of the overlap between two or more
1047
+ * sets, or the size of a single set.
1048
+ * @return {Array<object>} List of circles and their calculated positions.
1049
+ */
1050
+ function layoutGreedyVenn(relations) {
1051
+ var positionedSets = [],
1052
+ mapOfIdToCircles = {};
1053
+ // Define a circle for each set.
1054
+ relations
1055
+ .filter(function (relation) {
1056
+ return relation.sets.length === 1;
1057
+ }).forEach(function (relation) {
1058
+ mapOfIdToCircles[relation.sets[0]] = relation.circle = {
1059
+ x: Number.MAX_VALUE,
1060
+ y: Number.MAX_VALUE,
1061
+ r: Math.sqrt(relation.value / Math.PI)
1062
+ };
1063
+ });
1166
1064
  /**
1167
- * Uses a greedy approach to position all the sets. Works well with a small
1168
- * number of sets, and are in these cases a good choice aesthetically.
1065
+ * Takes a set and updates the position, and add the set to the list of
1066
+ * positioned sets.
1169
1067
  * @private
1170
- * @param {Array<object>} relations List of the overlap between two or more
1171
- * sets, or the size of a single set.
1172
- * @return {Array<object>} List of circles and their calculated positions.
1068
+ * @param {Object} set
1069
+ * The set to add to its final position.
1070
+ * @param {Object} coordinates
1071
+ * The coordinates to position the set at.
1173
1072
  */
1174
- function layoutGreedyVenn(relations) {
1175
- var positionedSets = [],
1176
- mapOfIdToCircles = {};
1177
- // Define a circle for each set.
1178
- relations
1179
- .filter(function (relation) {
1180
- return relation.sets.length === 1;
1181
- }).forEach(function (relation) {
1182
- mapOfIdToCircles[relation.sets[0]] = relation.circle = {
1183
- x: Number.MAX_VALUE,
1184
- y: Number.MAX_VALUE,
1185
- r: Math.sqrt(relation.value / Math.PI)
1186
- };
1187
- });
1188
- /**
1189
- * Takes a set and updates the position, and add the set to the list of
1190
- * positioned sets.
1191
- * @private
1192
- * @param {object} set
1193
- * The set to add to its final position.
1194
- * @param {object} coordinates
1195
- * The coordinates to position the set at.
1196
- * @return {void}
1197
- */
1198
- var positionSet = function positionSet(set,
1199
- coordinates) {
1200
- var circle = set.circle;
1201
- circle.x = coordinates.x;
1202
- circle.y = coordinates.y;
1203
- positionedSets.push(set);
1204
- };
1205
- // Find overlap between sets. Ignore relations with more then 2 sets.
1206
- addOverlapToSets(relations);
1207
- // Sort sets by the sum of their size from large to small.
1208
- var sortedByOverlap = relations
1209
- .filter(isSet)
1210
- .sort(sortByTotalOverlap);
1211
- // Position the most overlapped set at 0,0.
1212
- positionSet(sortedByOverlap.shift(), { x: 0, y: 0 });
1213
- var relationsWithTwoSets = relations.filter(function (x) {
1214
- return x.sets.length === 2;
1215
- });
1216
- // Iterate and position the remaining sets.
1217
- sortedByOverlap.forEach(function (set) {
1218
- var circle = set.circle,
1219
- radius = circle.r,
1220
- overlapping = set.overlapping;
1221
- var bestPosition = positionedSets.reduce(function (best,
1222
- positionedSet,
1223
- i) {
1224
- var positionedCircle = positionedSet.circle,
1225
- overlap = overlapping[positionedSet.sets[0]];
1226
- // Calculate the distance between the sets to get the
1227
- // correct overlap
1228
- var distance = getDistanceBetweenCirclesByOverlap(radius,
1229
- positionedCircle.r,
1230
- overlap);
1231
- // Create a list of possible coordinates calculated from
1232
- // distance.
1233
- var possibleCoordinates = [
1234
- { x: positionedCircle.x + distance,
1235
- y: positionedCircle.y },
1236
- { x: positionedCircle.x - distance,
1237
- y: positionedCircle.y },
1238
- { x: positionedCircle.x,
1239
- y: positionedCircle.y + distance },
1240
- { x: positionedCircle.x,
1241
- y: positionedCircle.y - distance }
1242
- ];
1243
- // If there are more circles overlapping, then add the
1244
- // intersection points as possible positions.
1245
- positionedSets.slice(i + 1).forEach(function (positionedSet2) {
1246
- var positionedCircle2 = positionedSet2.circle,
1247
- overlap2 = overlapping[positionedSet2.sets[0]],
1248
- distance2 = getDistanceBetweenCirclesByOverlap(radius,
1249
- positionedCircle2.r,
1250
- overlap2);
1251
- // Add intersections to list of coordinates.
1252
- possibleCoordinates = possibleCoordinates.concat(getCircleCircleIntersection({
1253
- x: positionedCircle.x,
1254
- y: positionedCircle.y,
1255
- r: distance
1256
- }, {
1257
- x: positionedCircle2.x,
1258
- y: positionedCircle2.y,
1259
- r: distance2
1260
- }));
1261
- });
1262
- // Iterate all suggested coordinates and find the best one.
1263
- possibleCoordinates.forEach(function (coordinates) {
1264
- circle.x = coordinates.x;
1265
- circle.y = coordinates.y;
1266
- // Calculate loss for the suggested coordinates.
1267
- var currentLoss = loss(mapOfIdToCircles,
1268
- relationsWithTwoSets);
1269
- // If the loss is better, then use these new coordinates
1270
- if (currentLoss < best.loss) {
1271
- best.loss = currentLoss;
1272
- best.coordinates = coordinates;
1273
- }
1274
- });
1275
- // Return resulting coordinates.
1276
- return best;
1277
- }, {
1278
- loss: Number.MAX_VALUE,
1279
- coordinates: void 0
1073
+ var positionSet = function positionSet(set,
1074
+ coordinates) {
1075
+ var circle = set.circle;
1076
+ circle.x = coordinates.x;
1077
+ circle.y = coordinates.y;
1078
+ positionedSets.push(set);
1079
+ };
1080
+ // Find overlap between sets. Ignore relations with more then 2 sets.
1081
+ addOverlapToSets(relations);
1082
+ // Sort sets by the sum of their size from large to small.
1083
+ var sortedByOverlap = relations
1084
+ .filter(isSet)
1085
+ .sort(sortByTotalOverlap);
1086
+ // Position the most overlapped set at 0,0.
1087
+ positionSet(sortedByOverlap.shift(), { x: 0, y: 0 });
1088
+ var relationsWithTwoSets = relations.filter(function (x) {
1089
+ return x.sets.length === 2;
1090
+ });
1091
+ // Iterate and position the remaining sets.
1092
+ sortedByOverlap.forEach(function (set) {
1093
+ var circle = set.circle,
1094
+ radius = circle.r,
1095
+ overlapping = set.overlapping;
1096
+ var bestPosition = positionedSets.reduce(function (best,
1097
+ positionedSet,
1098
+ i) {
1099
+ var positionedCircle = positionedSet.circle,
1100
+ overlap = overlapping[positionedSet.sets[0]];
1101
+ // Calculate the distance between the sets to get the
1102
+ // correct overlap
1103
+ var distance = getDistanceBetweenCirclesByOverlap(radius,
1104
+ positionedCircle.r,
1105
+ overlap);
1106
+ // Create a list of possible coordinates calculated from
1107
+ // distance.
1108
+ var possibleCoordinates = [
1109
+ { x: positionedCircle.x + distance,
1110
+ y: positionedCircle.y },
1111
+ { x: positionedCircle.x - distance,
1112
+ y: positionedCircle.y },
1113
+ { x: positionedCircle.x,
1114
+ y: positionedCircle.y + distance },
1115
+ { x: positionedCircle.x,
1116
+ y: positionedCircle.y - distance }
1117
+ ];
1118
+ // If there are more circles overlapping, then add the
1119
+ // intersection points as possible positions.
1120
+ positionedSets.slice(i + 1).forEach(function (positionedSet2) {
1121
+ var positionedCircle2 = positionedSet2.circle,
1122
+ overlap2 = overlapping[positionedSet2.sets[0]],
1123
+ distance2 = getDistanceBetweenCirclesByOverlap(radius,
1124
+ positionedCircle2.r,
1125
+ overlap2);
1126
+ // Add intersections to list of coordinates.
1127
+ possibleCoordinates = possibleCoordinates.concat(getCircleCircleIntersection({
1128
+ x: positionedCircle.x,
1129
+ y: positionedCircle.y,
1130
+ r: distance
1131
+ }, {
1132
+ x: positionedCircle2.x,
1133
+ y: positionedCircle2.y,
1134
+ r: distance2
1135
+ }));
1280
1136
  });
1281
- // Add the set to its final position.
1282
- positionSet(set, bestPosition.coordinates);
1137
+ // Iterate all suggested coordinates and find the best one.
1138
+ possibleCoordinates.forEach(function (coordinates) {
1139
+ circle.x = coordinates.x;
1140
+ circle.y = coordinates.y;
1141
+ // Calculate loss for the suggested coordinates.
1142
+ var currentLoss = loss(mapOfIdToCircles,
1143
+ relationsWithTwoSets);
1144
+ // If the loss is better, then use these new coordinates
1145
+ if (currentLoss < best.loss) {
1146
+ best.loss = currentLoss;
1147
+ best.coordinates = coordinates;
1148
+ }
1149
+ });
1150
+ // Return resulting coordinates.
1151
+ return best;
1152
+ }, {
1153
+ loss: Number.MAX_VALUE,
1154
+ coordinates: void 0
1283
1155
  });
1284
- // Return the positions of each set.
1285
- return mapOfIdToCircles;
1286
- }
1287
- VennUtils.layoutGreedyVenn = layoutGreedyVenn;
1156
+ // Add the set to its final position.
1157
+ positionSet(set, bestPosition.coordinates);
1158
+ });
1159
+ // Return the positions of each set.
1160
+ return mapOfIdToCircles;
1161
+ }
1162
+ /**
1163
+ * Calculates the difference between the desired overlap and the actual
1164
+ * overlap between two circles.
1165
+ * @private
1166
+ * @param {Dictionary<Highcharts.CircleObject>} mapOfIdToCircle
1167
+ * Map from id to circle.
1168
+ * @param {Array<Highcharts.VennRelationObject>} relations
1169
+ * List of relations to calculate the loss of.
1170
+ * @return {number}
1171
+ * Returns the loss between positions of the circles for the given
1172
+ * relations.
1173
+ */
1174
+ function loss(mapOfIdToCircle, relations) {
1175
+ var precision = 10e10;
1176
+ // Iterate all the relations and calculate their individual loss.
1177
+ return relations.reduce(function (totalLoss, relation) {
1178
+ var loss = 0;
1179
+ if (relation.sets.length > 1) {
1180
+ var wantedOverlap = relation.value;
1181
+ // Calculate the actual overlap between the sets.
1182
+ var actualOverlap = getOverlapBetweenCircles(
1183
+ // Get the circles for the given sets.
1184
+ relation.sets.map(function (set) {
1185
+ return mapOfIdToCircle[set];
1186
+ }));
1187
+ var diff = wantedOverlap - actualOverlap;
1188
+ loss = Math.round((diff * diff) * precision) / precision;
1189
+ }
1190
+ // Add calculated loss to the sum.
1191
+ return totalLoss + loss;
1192
+ }, 0);
1193
+ }
1194
+ /**
1195
+ * Finds an optimal position for a given point.
1196
+ * @todo add unit tests.
1197
+ * @todo add constraints to optimize the algorithm.
1198
+ * @private
1199
+ * @param {Highcharts.NelderMeadTestFunction} fn
1200
+ * The function to test a point.
1201
+ * @param {Highcharts.NelderMeadPointArray} initial
1202
+ * The initial point to optimize.
1203
+ * @return {Highcharts.NelderMeadPointArray}
1204
+ * Returns the opimized position of a point.
1205
+ */
1206
+ function nelderMead(fn, initial) {
1207
+ var maxIterations = 100,
1208
+ sortByFx = function (a,
1209
+ b) {
1210
+ return a.fx - b.fx;
1211
+ }, pRef = 1, // Reflection parameter
1212
+ pExp = 2, // Expansion parameter
1213
+ pCon = -0.5, // Contraction parameter
1214
+ pOCon = pCon * pRef, // Outwards contraction parameter
1215
+ pShrink = 0.5; // Shrink parameter
1288
1216
  /**
1289
- * Calculates the difference between the desired overlap and the actual
1290
- * overlap between two circles.
1291
1217
  * @private
1292
- * @param {Dictionary<Highcharts.CircleObject>} mapOfIdToCircle
1293
- * Map from id to circle.
1294
- * @param {Array<Highcharts.VennRelationObject>} relations
1295
- * List of relations to calculate the loss of.
1296
- * @return {number}
1297
- * Returns the loss between positions of the circles for the given
1298
- * relations.
1299
1218
  */
1300
- function loss(mapOfIdToCircle, relations) {
1301
- var precision = 10e10;
1302
- // Iterate all the relations and calculate their individual loss.
1303
- return relations.reduce(function (totalLoss, relation) {
1304
- var loss = 0;
1305
- if (relation.sets.length > 1) {
1306
- var wantedOverlap = relation.value;
1307
- // Calculate the actual overlap between the sets.
1308
- var actualOverlap = getOverlapBetweenCircles(
1309
- // Get the circles for the given sets.
1310
- relation.sets.map(function (set) {
1311
- return mapOfIdToCircle[set];
1312
- }));
1313
- var diff = wantedOverlap - actualOverlap;
1314
- loss = Math.round((diff * diff) * precision) / precision;
1315
- }
1316
- // Add calculated loss to the sum.
1317
- return totalLoss + loss;
1318
- }, 0);
1319
- }
1320
- VennUtils.loss = loss;
1219
+ var weightedSum = function (weight1,
1220
+ v1,
1221
+ weight2,
1222
+ v2) { return v1.map(function (x,
1223
+ i) { return weight1 * x + weight2 * v2[i]; }); };
1321
1224
  /**
1322
- * Prepares the venn data so that it is usable for the layout function.
1323
- * Filter out sets, or intersections that includes sets, that are missing in
1324
- * the data or has (value < 1). Adds missing relations between sets in the
1325
- * data as value = 0.
1326
1225
  * @private
1327
- * @param {Array<object>} data The raw input data.
1328
- * @return {Array<object>} Returns an array of valid venn data.
1329
1226
  */
1330
- function processVennData(data) {
1331
- var d = isArray(data) ? data : [];
1332
- var validSets = d
1333
- .reduce(function (arr,
1334
- x) {
1335
- // Check if x is a valid set, and that it is not an duplicate.
1336
- if (isValidSet(x) && arr.indexOf(x.sets[0]) === -1) {
1337
- arr.push(x.sets[0]);
1338
- }
1339
- return arr;
1340
- }, [])
1341
- .sort();
1342
- var mapOfIdToRelation = d.reduce(function (mapOfIdToRelation,
1343
- relation) {
1344
- if (isValidRelation(relation) &&
1345
- !relation.sets.some(function (set) {
1346
- return validSets.indexOf(set) === -1;
1347
- })) {
1348
- mapOfIdToRelation[relation.sets.sort().join()] =
1349
- relation;
1227
+ var getSimplex = function (initial) {
1228
+ var n = initial.length,
1229
+ simplex = new Array(n + 1);
1230
+ // Initial point to the simplex.
1231
+ simplex[0] = initial;
1232
+ simplex[0].fx = fn(initial);
1233
+ // Create a set of extra points based on the initial.
1234
+ for (var i = 0; i < n; ++i) {
1235
+ var point = initial.slice();
1236
+ point[i] = point[i] ? point[i] * 1.05 : 0.001;
1237
+ point.fx = fn(point);
1238
+ simplex[i + 1] = point;
1239
+ }
1240
+ return simplex;
1241
+ };
1242
+ var updateSimplex = function (simplex,
1243
+ point) {
1244
+ point.fx = fn(point);
1245
+ simplex[simplex.length - 1] = point;
1246
+ return simplex;
1247
+ };
1248
+ var shrinkSimplex = function (simplex) {
1249
+ var best = simplex[0];
1250
+ return simplex.map(function (point) {
1251
+ var p = weightedSum(1 - pShrink,
1252
+ best,
1253
+ pShrink,
1254
+ point);
1255
+ p.fx = fn(p);
1256
+ return p;
1257
+ });
1258
+ };
1259
+ var getPoint = function (centroid,
1260
+ worst,
1261
+ a,
1262
+ b) {
1263
+ var point = weightedSum(a,
1264
+ centroid,
1265
+ b,
1266
+ worst);
1267
+ point.fx = fn(point);
1268
+ return point;
1269
+ };
1270
+ // Create a simplex
1271
+ var simplex = getSimplex(initial);
1272
+ // Iterate from 0 to max iterations
1273
+ for (var i = 0; i < maxIterations; i++) {
1274
+ // Sort the simplex
1275
+ simplex.sort(sortByFx);
1276
+ // Create a centroid from the simplex
1277
+ var worst = simplex[simplex.length - 1];
1278
+ var centroid = getCentroid(simplex);
1279
+ // Calculate the reflected point.
1280
+ var reflected = getPoint(centroid,
1281
+ worst, 1 + pRef, -pRef);
1282
+ if (reflected.fx < simplex[0].fx) {
1283
+ // If reflected point is the best, then possibly expand.
1284
+ var expanded = getPoint(centroid,
1285
+ worst, 1 + pExp, -pExp);
1286
+ simplex = updateSimplex(simplex, (expanded.fx < reflected.fx) ? expanded : reflected);
1287
+ }
1288
+ else if (reflected.fx >= simplex[simplex.length - 2].fx) {
1289
+ // If the reflected point is worse than the second worse, then
1290
+ // contract.
1291
+ var contracted = void 0;
1292
+ if (reflected.fx > worst.fx) {
1293
+ // If the reflected is worse than the worst point, do a
1294
+ // contraction
1295
+ contracted = getPoint(centroid, worst, 1 + pCon, -pCon);
1296
+ if (contracted.fx < worst.fx) {
1297
+ simplex = updateSimplex(simplex, contracted);
1298
+ }
1299
+ else {
1300
+ simplex = shrinkSimplex(simplex);
1301
+ }
1350
1302
  }
1351
- return mapOfIdToRelation;
1352
- }, {});
1353
- validSets.reduce(function (combinations, set, i, arr) {
1354
- var remaining = arr.slice(i + 1);
1355
- remaining.forEach(function (set2) {
1356
- combinations.push(set + ',' + set2);
1357
- });
1358
- return combinations;
1359
- }, []).forEach(function (combination) {
1360
- if (!mapOfIdToRelation[combination]) {
1361
- var obj = {
1362
- sets: combination.split(','),
1363
- value: 0
1364
- };
1365
- mapOfIdToRelation[combination] = obj;
1303
+ else {
1304
+ // Otherwise do an outwards contraction
1305
+ contracted = getPoint(centroid, worst, 1 - pOCon, pOCon);
1306
+ if (contracted.fx < reflected.fx) {
1307
+ simplex = updateSimplex(simplex, contracted);
1308
+ }
1309
+ else {
1310
+ simplex = shrinkSimplex(simplex);
1311
+ }
1366
1312
  }
1367
- });
1368
- // Transform map into array.
1369
- return Object
1370
- .keys(mapOfIdToRelation)
1371
- .map(function (id) {
1372
- return mapOfIdToRelation[id];
1373
- });
1374
- }
1375
- VennUtils.processVennData = processVennData;
1376
- /**
1377
- * Takes two sets and finds the one with the largest total overlap.
1378
- * @private
1379
- * @param {object} a The first set to compare.
1380
- * @param {object} b The second set to compare.
1381
- * @return {number} Returns 0 if a and b are equal, <0 if a is greater, >0 if b
1382
- * is greater.
1383
- */
1384
- function sortByTotalOverlap(a, b) {
1385
- return b.totalOverlap - a.totalOverlap;
1313
+ }
1314
+ else {
1315
+ simplex = updateSimplex(simplex, reflected);
1316
+ }
1386
1317
  }
1387
- VennUtils.sortByTotalOverlap = sortByTotalOverlap;
1388
- })(VennUtils || (VennUtils = {}));
1318
+ return simplex[0];
1319
+ }
1320
+ /**
1321
+ * Prepares the venn data so that it is usable for the layout function.
1322
+ * Filter out sets, or intersections that includes sets, that are missing in
1323
+ * the data or has (value < 1). Adds missing relations between sets in the
1324
+ * data as value = 0.
1325
+ * @private
1326
+ * @param {Array<object>} data The raw input data.
1327
+ * @return {Array<object>} Returns an array of valid venn data.
1328
+ */
1329
+ function processVennData(data) {
1330
+ var d = isArray(data) ? data : [];
1331
+ var validSets = d
1332
+ .reduce(function (arr,
1333
+ x) {
1334
+ // Check if x is a valid set, and that it is not an duplicate.
1335
+ if (isValidSet(x) && arr.indexOf(x.sets[0]) === -1) {
1336
+ arr.push(x.sets[0]);
1337
+ }
1338
+ return arr;
1339
+ }, [])
1340
+ .sort();
1341
+ var mapOfIdToRelation = d.reduce(function (mapOfIdToRelation,
1342
+ relation) {
1343
+ if (isValidRelation(relation) &&
1344
+ !relation.sets.some(function (set) {
1345
+ return validSets.indexOf(set) === -1;
1346
+ })) {
1347
+ mapOfIdToRelation[relation.sets.sort().join()] =
1348
+ relation;
1349
+ }
1350
+ return mapOfIdToRelation;
1351
+ }, {});
1352
+ validSets.reduce(function (combinations, set, i, arr) {
1353
+ var remaining = arr.slice(i + 1);
1354
+ remaining.forEach(function (set2) {
1355
+ combinations.push(set + ',' + set2);
1356
+ });
1357
+ return combinations;
1358
+ }, []).forEach(function (combination) {
1359
+ if (!mapOfIdToRelation[combination]) {
1360
+ var obj = {
1361
+ sets: combination.split(','),
1362
+ value: 0
1363
+ };
1364
+ mapOfIdToRelation[combination] = obj;
1365
+ }
1366
+ });
1367
+ // Transform map into array.
1368
+ return Object
1369
+ .keys(mapOfIdToRelation)
1370
+ .map(function (id) {
1371
+ return mapOfIdToRelation[id];
1372
+ });
1373
+ }
1374
+ /**
1375
+ * Takes two sets and finds the one with the largest total overlap.
1376
+ * @private
1377
+ * @param {Object} a
1378
+ * The first set to compare.
1379
+ * @param {Object} b
1380
+ * The second set to compare.
1381
+ * @return {number}
1382
+ * Returns 0 if a and b are equal, <0 if a is greater, >0 if b is greater.
1383
+ */
1384
+ function sortByTotalOverlap(a, b) {
1385
+ return b.totalOverlap - a.totalOverlap;
1386
+ }
1389
1387
  /* *
1390
1388
  *
1391
1389
  * Default Export
1392
1390
  *
1393
1391
  * */
1392
+ var VennUtils = {
1393
+ geometry: GU,
1394
+ geometryCircles: CU,
1395
+ addOverlapToSets: addOverlapToSets,
1396
+ getCentroid: getCentroid,
1397
+ getDistanceBetweenCirclesByOverlap: getDistanceBetweenCirclesByOverlap,
1398
+ getLabelWidth: getLabelWidth,
1399
+ getMarginFromCircles: getMarginFromCircles,
1400
+ isSet: isSet,
1401
+ layoutGreedyVenn: layoutGreedyVenn,
1402
+ loss: loss,
1403
+ nelderMead: nelderMead,
1404
+ processVennData: processVennData,
1405
+ sortByTotalOverlap: sortByTotalOverlap
1406
+ };
1394
1407
 
1395
1408
  return VennUtils;
1396
1409
  });
1397
- _registerModule(_modules, 'Series/Venn/VennSeries.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Color/Color.js'], _modules['Core/Geometry/CircleUtilities.js'], _modules['Core/Geometry/GeometryUtilities.js'], _modules['Mixins/NelderMead.js'], _modules['Core/Color/Palette.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Series/Venn/VennPoint.js'], _modules['Series/Venn/VennUtils.js'], _modules['Core/Utilities.js']], function (A, Color, CU, GU, NelderMeadMixin, palette, SeriesRegistry, VennPoint, VennUtils, U) {
1410
+ _registerModule(_modules, 'Series/Venn/VennSeries.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Color/Color.js'], _modules['Core/Geometry/CircleUtilities.js'], _modules['Core/Geometry/GeometryUtilities.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Series/Venn/VennPoint.js'], _modules['Series/Venn/VennUtils.js'], _modules['Core/Utilities.js']], function (A, Color, CU, GU, SeriesRegistry, VennPoint, VennUtils, U) {
1398
1411
  /* *
1399
1412
  *
1400
1413
  * Experimental Highcharts module which enables visualization of a Venn
@@ -1435,7 +1448,6 @@
1435
1448
  isPointInsideAllCircles = CU.isPointInsideAllCircles,
1436
1449
  isPointOutsideAllCircles = CU.isPointOutsideAllCircles;
1437
1450
  var getCenterOfPoints = GU.getCenterOfPoints;
1438
- var nelderMead = NelderMeadMixin.nelderMead;
1439
1451
  var ScatterSeries = SeriesRegistry.seriesTypes.scatter;
1440
1452
  var addEvent = U.addEvent,
1441
1453
  extend = U.extend,
@@ -1511,14 +1523,14 @@
1511
1523
  { x: circle.x, y: circle.y + d },
1512
1524
  { x: circle.x, y: circle.y - d }
1513
1525
  ]
1514
- // Iterate the given points and return the one with the largest
1515
- // margin.
1526
+ // Iterate the given points and return the one with the
1527
+ // largest margin.
1516
1528
  .reduce(function (best, point) {
1517
1529
  var margin = VennUtils.getMarginFromCircles(point,
1518
1530
  internal,
1519
1531
  external);
1520
- // If the margin better than the current best, then update
1521
- // sbest.
1532
+ // If the margin better than the current best, then
1533
+ // update sbest.
1522
1534
  if (best.margin < margin) {
1523
1535
  best.point = point;
1524
1536
  best.margin = margin;
@@ -1530,7 +1542,7 @@
1530
1542
  margin: -Number.MAX_VALUE
1531
1543
  }).point;
1532
1544
  // Use nelder mead to optimize the initial label position.
1533
- var optimal = nelderMead(function (p) {
1545
+ var optimal = VennUtils.nelderMead(function (p) {
1534
1546
  return -(VennUtils.getMarginFromCircles({ x: p[0],
1535
1547
  y: p[1] },
1536
1548
  internal,
@@ -1623,16 +1635,13 @@
1623
1635
  if (relations.length > 0) {
1624
1636
  var mapOfIdToCircles_1 = VennUtils.layoutGreedyVenn(relations);
1625
1637
  var setRelations_1 = relations.filter(VennUtils.isSet);
1626
- relations
1627
- .forEach(function (relation) {
1638
+ relations.forEach(function (relation) {
1628
1639
  var sets = relation.sets;
1629
1640
  var id = sets.join();
1630
1641
  // Get shape from map of circles, or calculate intersection.
1631
1642
  var shape = VennUtils.isSet(relation) ?
1632
1643
  mapOfIdToCircles_1[id] :
1633
- getAreaOfIntersectionBetweenCircles(sets.map(function (set) {
1634
- return mapOfIdToCircles_1[set];
1635
- }));
1644
+ getAreaOfIntersectionBetweenCircles(sets.map(function (set) { return mapOfIdToCircles_1[set]; }));
1636
1645
  // Calculate label values if the set has a shape
1637
1646
  if (shape) {
1638
1647
  mapOfIdToShape[id] = shape;
@@ -1923,7 +1932,7 @@
1923
1932
  * @optionparent plotOptions.venn
1924
1933
  */
1925
1934
  VennSeries.defaultOptions = merge(ScatterSeries.defaultOptions, {
1926
- borderColor: palette.neutralColor20,
1935
+ borderColor: "#cccccc" /* neutralColor20 */,
1927
1936
  borderDashStyle: 'solid',
1928
1937
  borderWidth: 1,
1929
1938
  brighten: 0,
@@ -1950,14 +1959,14 @@
1950
1959
  */
1951
1960
  hover: {
1952
1961
  opacity: 1,
1953
- borderColor: palette.neutralColor80
1962
+ borderColor: "#333333" /* neutralColor80 */
1954
1963
  },
1955
1964
  /**
1956
1965
  * @excluding halo
1957
1966
  */
1958
1967
  select: {
1959
- color: palette.neutralColor20,
1960
- borderColor: palette.neutralColor100,
1968
+ color: "#cccccc" /* neutralColor20 */,
1969
+ borderColor: "#000000" /* neutralColor100 */,
1961
1970
  animation: false
1962
1971
  },
1963
1972
  inactive: {