highcharts 9.2.1 → 9.3.2

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 (896) 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 +239 -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 +200 -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 +77 -115
  151. package/es-modules/Extensions/DataGrouping.js +54 -32
  152. package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
  153. package/es-modules/Extensions/DownloadURL.js +2 -2
  154. package/es-modules/Extensions/DragPanes.js +1 -2
  155. package/es-modules/Extensions/DraggablePoints.js +7 -8
  156. package/es-modules/Extensions/Drilldown.js +11 -7
  157. package/es-modules/Extensions/ExportData.js +6 -5
  158. package/es-modules/Extensions/Exporting/Exporting.js +35 -48
  159. package/es-modules/Extensions/Exporting/ExportingDefaults.js +8 -15
  160. package/es-modules/Extensions/FullScreen.js +4 -3
  161. package/es-modules/Extensions/GeoJSON.js +42 -66
  162. package/es-modules/Extensions/MarkerClusters.js +118 -98
  163. package/es-modules/Extensions/Math3D.js +4 -4
  164. package/es-modules/Extensions/NoDataToDisplay.js +1 -2
  165. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +33 -33
  166. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  167. package/es-modules/Extensions/Oldie/Oldie.js +14 -79
  168. package/es-modules/Extensions/Oldie/VMLAxis3D.js +5 -1
  169. package/es-modules/Extensions/OverlappingDataLabels.js +10 -6
  170. package/es-modules/Extensions/Pane.js +11 -12
  171. package/es-modules/Extensions/ParallelCoordinates.js +5 -3
  172. package/es-modules/Extensions/PatternFill.js +17 -11
  173. package/es-modules/Extensions/Polar.js +7 -4
  174. package/es-modules/Extensions/PriceIndication.js +2 -1
  175. package/es-modules/Extensions/RangeSelector.js +22 -59
  176. package/es-modules/Extensions/ScrollablePlotArea.js +2 -2
  177. package/es-modules/Extensions/SeriesLabel.js +1 -1
  178. package/es-modules/Extensions/Sonification/ChartSonify.js +279 -663
  179. package/es-modules/Extensions/Sonification/Earcon.js +136 -102
  180. package/es-modules/Extensions/Sonification/Instrument.js +493 -426
  181. package/es-modules/Extensions/Sonification/MusicalFrequencies.js +10 -0
  182. package/es-modules/Extensions/Sonification/Options.js +10 -0
  183. package/es-modules/Extensions/Sonification/PointSonify.js +207 -152
  184. package/es-modules/Extensions/Sonification/SeriesSonify.js +474 -0
  185. package/es-modules/Extensions/Sonification/SignalHandler.js +122 -0
  186. package/es-modules/Extensions/Sonification/Sonification.js +27 -53
  187. package/es-modules/Extensions/Sonification/{Utilities.js → SonificationUtilities.js} +70 -88
  188. package/es-modules/Extensions/Sonification/Timeline.js +250 -567
  189. package/es-modules/Extensions/Sonification/TimelineEvent.js +157 -0
  190. package/es-modules/Extensions/Sonification/TimelinePath.js +311 -0
  191. package/es-modules/Extensions/Stacking.js +5 -23
  192. package/es-modules/Extensions/Themes/BrandDark.js +293 -0
  193. package/es-modules/Extensions/Themes/BrandLight.js +259 -0
  194. package/es-modules/Extensions/Themes/DarkUnica.js +4 -2
  195. package/es-modules/Extensions/Themes/Grid.js +4 -2
  196. package/es-modules/Extensions/Themes/GridLight.js +4 -2
  197. package/es-modules/Gantt/Connection.js +2 -2
  198. package/es-modules/Gantt/Pathfinder.js +6 -5
  199. package/es-modules/Gantt/PathfinderAlgorithms.js +12 -12
  200. package/es-modules/Maps/MapNavigation.js +30 -68
  201. package/es-modules/Maps/MapNavigationOptionsDefault.js +3 -0
  202. package/es-modules/Maps/MapPointer.js +8 -5
  203. package/es-modules/Maps/MapSymbols.js +23 -3
  204. package/es-modules/Maps/MapView.js +450 -0
  205. package/es-modules/Maps/MapViewOptionsDefault.js +97 -0
  206. package/es-modules/Maps/Projection.js +436 -0
  207. package/es-modules/Maps/ProjectionDefinition.js +9 -0
  208. package/es-modules/Maps/Projections/EqualEarth.js +42 -0
  209. package/es-modules/Maps/Projections/LambertConformalConic.js +52 -0
  210. package/es-modules/Maps/Projections/Miller.js +16 -0
  211. package/es-modules/Maps/Projections/Orthographic.js +26 -0
  212. package/es-modules/Maps/Projections/ProjectionRegistry.js +19 -0
  213. package/es-modules/Maps/Projections/WebMercator.js +24 -0
  214. package/es-modules/Series/Area/AreaSeries.js +13 -13
  215. package/es-modules/Series/Area3DSeries.js +4 -2
  216. package/es-modules/Series/AreaRange/AreaRangeSeries.js +28 -17
  217. package/es-modules/Series/Bellcurve/BellcurveSeries.js +4 -9
  218. package/es-modules/Series/BoxPlot/BoxPlotSeries.js +1 -2
  219. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +1 -2
  220. package/es-modules/Series/Bubble/BubbleLegendItem.js +5 -15
  221. package/es-modules/Series/Bubble/BubblePoint.js +5 -0
  222. package/es-modules/Series/Bubble/BubbleSeries.js +90 -50
  223. package/es-modules/Series/Candlestick/CandlestickSeries.js +10 -19
  224. package/es-modules/{Mixins/CenteredSeries.js → Series/CenteredUtilities.js} +45 -23
  225. package/es-modules/{Mixins/ColorMapSeries.js → Series/ColorMapMixin.js} +10 -8
  226. package/es-modules/Series/Column/ColumnDataLabel.js +5 -5
  227. package/es-modules/Series/Column/ColumnSeries.js +19 -18
  228. package/es-modules/Series/Column3D/Column3DComposition.js +1 -2
  229. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +11 -8
  230. package/es-modules/Series/ColumnRange/ColumnRangeSeries.js +2 -1
  231. package/es-modules/Series/Cylinder/CylinderComposition.js +36 -4
  232. package/es-modules/Series/DataModifyComposition.js +539 -0
  233. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +2 -6
  234. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +1 -1
  235. package/es-modules/Series/DerivedComposition.js +137 -0
  236. package/es-modules/Series/DrawPointComposition.js +111 -0
  237. package/es-modules/Series/Dumbbell/DumbbellPoint.js +0 -1
  238. package/es-modules/Series/Dumbbell/DumbbellSeries.js +2 -6
  239. package/es-modules/Series/ErrorBar/ErrorBarSeries.js +1 -2
  240. package/es-modules/Series/Flags/FlagsSeries.js +18 -25
  241. package/es-modules/Series/Flags/FlagsSymbols.js +2 -2
  242. package/es-modules/Series/Funnel/FunnelSeries.js +6 -5
  243. package/es-modules/Series/Funnel3D/Funnel3DComposition.js +14 -8
  244. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +2 -1
  245. package/es-modules/Series/Gantt/GanttPoint.js +1 -1
  246. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  247. package/es-modules/Series/Gauge/GaugePoint.js +1 -1
  248. package/es-modules/Series/Gauge/GaugeSeries.js +7 -7
  249. package/es-modules/Series/HLC/HLCPoint.js +55 -0
  250. package/es-modules/Series/HLC/HLCSeries.js +378 -0
  251. package/es-modules/Series/Heatmap/HeatmapPoint.js +13 -14
  252. package/es-modules/Series/Heatmap/HeatmapSeries.js +24 -12
  253. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +10 -9
  254. package/es-modules/Series/Histogram/HistogramSeries.js +7 -11
  255. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +1 -4
  256. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +28 -30
  257. package/es-modules/Series/Item/ItemSeries.js +4 -5
  258. package/es-modules/Series/Line/LineSeries.js +1 -2
  259. package/es-modules/Series/Map/MapPoint.js +27 -14
  260. package/es-modules/Series/Map/MapSeries.js +283 -322
  261. package/es-modules/Series/MapBubble/MapBubblePoint.js +0 -3
  262. package/es-modules/Series/MapBubble/MapBubbleSeries.js +10 -1
  263. package/es-modules/Series/MapLine/MapLineSeries.js +2 -4
  264. package/es-modules/Series/MapPoint/MapPointPoint.js +5 -1
  265. package/es-modules/Series/MapPoint/MapPointSeries.js +99 -14
  266. package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -4
  267. package/es-modules/Series/Networkgraph/Integrations.js +8 -22
  268. package/es-modules/Series/Networkgraph/Networkgraph.js +6 -10
  269. package/es-modules/Series/Networkgraph/QuadTree.js +1 -3
  270. package/es-modules/{Mixins/Nodes.js → Series/NodesComposition.js} +78 -30
  271. package/es-modules/Series/OHLC/OHLCPoint.js +2 -7
  272. package/es-modules/Series/OHLC/OHLCSeries.js +55 -183
  273. package/es-modules/{Mixins/OnSeries.js → Series/OnSeriesComposition.js} +53 -21
  274. package/es-modules/Series/Organization/OrganizationSeries.js +6 -5
  275. package/es-modules/Series/PackedBubble/PackedBubbleComposition.js +1 -0
  276. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +1 -1
  277. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +48 -10
  278. package/es-modules/Series/ParetoSeries/ParetoSeries.js +3 -7
  279. package/es-modules/Series/Pie/PieDataLabel.js +1 -2
  280. package/es-modules/Series/Pie/PiePoint.js +2 -2
  281. package/es-modules/Series/Pie/PieSeries.js +7 -8
  282. package/es-modules/Series/Pie3D/Pie3DComposition.js +2 -1
  283. package/es-modules/Series/Pie3D/Pie3DPoint.js +2 -1
  284. package/es-modules/Series/Pie3D/Pie3DSeries.js +1 -1
  285. package/es-modules/Series/Pyramid3D/Pyramid3DSeries.js +2 -1
  286. package/es-modules/Series/Sankey/SankeyPoint.js +0 -4
  287. package/es-modules/Series/Sankey/SankeySeries.js +92 -22
  288. package/es-modules/Series/SolidGauge/SolidGaugeComposition.js +3 -1
  289. package/es-modules/Series/Spline/SplineSeries.js +0 -8
  290. package/es-modules/Series/Sunburst/SunburstPoint.js +2 -3
  291. package/es-modules/Series/Sunburst/SunburstSeries.js +6 -6
  292. package/es-modules/Series/Sunburst/SunburstUtilities.js +3 -2
  293. package/es-modules/Series/Tilemap/TilemapPoint.js +2 -5
  294. package/es-modules/Series/Tilemap/TilemapShapes.js +0 -7
  295. package/es-modules/Series/Timeline/TimelineSeries.js +3 -4
  296. package/es-modules/{Mixins/TreeSeries.js → Series/TreeUtilities.js} +88 -78
  297. package/es-modules/Series/Treemap/TreemapPoint.js +2 -2
  298. package/es-modules/Series/Treemap/TreemapSeries.js +22 -25
  299. package/es-modules/Series/Variwide/VariwideSeries.js +5 -1
  300. package/es-modules/Series/Venn/VennPoint.js +16 -7
  301. package/es-modules/Series/Venn/VennSeries.js +11 -17
  302. package/es-modules/Series/Venn/VennUtils.js +551 -439
  303. package/es-modules/Series/Waterfall/WaterfallSeries.js +8 -6
  304. package/es-modules/Series/Windbarb/WindbarbSeries.js +23 -24
  305. package/es-modules/Series/Wordcloud/WordcloudPoint.js +8 -6
  306. package/es-modules/Series/Wordcloud/WordcloudSeries.js +26 -22
  307. package/es-modules/Series/Wordcloud/WordcloudUtils.js +669 -484
  308. package/es-modules/Series/XRange/XRangePoint.js +7 -12
  309. package/es-modules/Series/XRange/XRangeSeries.js +4 -20
  310. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +15 -6
  311. package/es-modules/Stock/Indicators/AO/AOIndicator.js +2 -3
  312. package/es-modules/Stock/Indicators/APO/APOIndicator.js +14 -20
  313. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +4 -6
  314. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +11 -13
  315. package/es-modules/Stock/Indicators/ArrayUtilities.js +47 -0
  316. package/es-modules/Stock/Indicators/BB/BBIndicator.js +39 -11
  317. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +35 -15
  318. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +6 -12
  319. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +1 -11
  320. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +28 -16
  321. package/es-modules/Stock/Indicators/DisparityIndex/DisparityIndexIndicator.js +18 -11
  322. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +1 -3
  323. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +6 -6
  324. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +23 -9
  325. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +16 -19
  326. package/es-modules/Stock/Indicators/LinearRegression/LinearRegression.js +32 -14
  327. package/es-modules/Stock/Indicators/LinearRegressionAngle/LinearRegressionAngle.js +2 -2
  328. package/es-modules/Stock/Indicators/LinearRegressionIntercept/LinearRegressionIntercept.js +2 -2
  329. package/es-modules/Stock/Indicators/LinearRegressionSlopes/LinearRegressionSlopes.js +2 -2
  330. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +2 -3
  331. package/es-modules/Stock/Indicators/MultipleLinesComposition.js +294 -0
  332. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +1 -3
  333. package/es-modules/Stock/Indicators/PC/PCIndicator.js +25 -13
  334. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +1 -11
  335. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +2 -1
  336. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +2 -1
  337. package/es-modules/Stock/Indicators/SMA/SMAComposition.js +0 -26
  338. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +32 -50
  339. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +0 -8
  340. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +18 -9
  341. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +4 -6
  342. package/es-modules/Stock/Indicators/TEMA/TEMAIndicator.js +26 -11
  343. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +6 -12
  344. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +26 -10
  345. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +19 -7
  346. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +2 -3
  347. package/es-modules/Stock/StockToolsBindings.js +156 -47
  348. package/es-modules/Stock/StockToolsGui.js +442 -37
  349. package/es-modules/masters/highcharts-3d.src.js +1 -1
  350. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  351. package/es-modules/masters/highcharts-more.src.js +1 -1
  352. package/es-modules/masters/highcharts.src.js +1 -1
  353. package/es-modules/masters/highmaps.src.js +1 -1
  354. package/es-modules/masters/highstock.src.js +1 -1
  355. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  356. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  357. package/es-modules/masters/indicators/ao.src.js +1 -1
  358. package/es-modules/masters/indicators/apo.src.js +1 -1
  359. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  360. package/es-modules/masters/indicators/aroon.src.js +1 -1
  361. package/es-modules/masters/indicators/atr.src.js +1 -1
  362. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  363. package/es-modules/masters/indicators/cci.src.js +1 -1
  364. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  365. package/es-modules/masters/indicators/cmf.src.js +1 -1
  366. package/es-modules/masters/indicators/cmo.src.js +1 -1
  367. package/es-modules/masters/indicators/dema.src.js +1 -1
  368. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  369. package/es-modules/masters/indicators/dmi.src.js +1 -1
  370. package/es-modules/masters/indicators/dpo.src.js +1 -1
  371. package/es-modules/masters/indicators/ema.src.js +4 -10
  372. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  373. package/es-modules/masters/indicators/indicators-all.src.js +2 -2
  374. package/es-modules/masters/indicators/indicators.src.js +2 -1
  375. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  376. package/es-modules/masters/indicators/klinger.src.js +1 -1
  377. package/es-modules/masters/indicators/macd.src.js +1 -1
  378. package/es-modules/masters/indicators/mfi.src.js +1 -1
  379. package/es-modules/masters/indicators/momentum.src.js +1 -1
  380. package/es-modules/masters/indicators/natr.src.js +1 -1
  381. package/es-modules/masters/indicators/obv.src.js +1 -1
  382. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  383. package/es-modules/masters/indicators/ppo.src.js +1 -1
  384. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  385. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  386. package/es-modules/masters/indicators/psar.src.js +1 -1
  387. package/es-modules/masters/indicators/regressions.src.js +1 -1
  388. package/es-modules/masters/indicators/roc.src.js +1 -1
  389. package/es-modules/masters/indicators/rsi.src.js +1 -1
  390. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  391. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  392. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  393. package/es-modules/masters/indicators/tema.src.js +1 -1
  394. package/es-modules/masters/indicators/trendline.src.js +1 -1
  395. package/es-modules/masters/indicators/trix.src.js +1 -1
  396. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  397. package/es-modules/masters/indicators/vwap.src.js +1 -1
  398. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  399. package/es-modules/masters/indicators/wma.src.js +1 -1
  400. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  401. package/es-modules/masters/modules/accessibility.src.js +16 -2
  402. package/es-modules/masters/modules/annotations-advanced.src.js +3 -1
  403. package/es-modules/masters/modules/annotations.src.js +1 -1
  404. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  405. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  406. package/es-modules/masters/modules/boost.src.js +1 -1
  407. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  408. package/es-modules/masters/modules/bullet.src.js +1 -1
  409. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  410. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  411. package/es-modules/masters/modules/cylinder.src.js +1 -1
  412. package/es-modules/masters/modules/data.src.js +6 -3
  413. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  414. package/es-modules/masters/modules/debugger.src.js +1 -1
  415. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  416. package/es-modules/masters/modules/dotplot.src.js +1 -1
  417. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  418. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  419. package/es-modules/masters/modules/drilldown.src.js +1 -1
  420. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  421. package/es-modules/masters/modules/export-data.src.js +1 -1
  422. package/es-modules/masters/modules/exporting.src.js +1 -1
  423. package/es-modules/masters/modules/full-screen.src.js +1 -1
  424. package/es-modules/masters/modules/funnel.src.js +1 -1
  425. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  426. package/es-modules/masters/modules/gantt.src.js +1 -1
  427. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  428. package/es-modules/masters/modules/heatmap.src.js +1 -2
  429. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  430. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  431. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  432. package/es-modules/masters/modules/item-series.src.js +1 -1
  433. package/es-modules/masters/modules/lollipop.src.js +1 -1
  434. package/es-modules/masters/modules/map.src.js +1 -3
  435. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  436. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  437. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  438. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  439. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  440. package/es-modules/masters/modules/oldie.src.js +1 -1
  441. package/es-modules/masters/modules/organization.src.js +1 -1
  442. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  443. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  444. package/es-modules/masters/modules/pareto.src.js +1 -1
  445. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  446. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  447. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  448. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  449. package/es-modules/masters/modules/sankey.src.js +1 -1
  450. package/es-modules/masters/modules/series-label.src.js +1 -1
  451. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  452. package/es-modules/masters/modules/sonification.src.js +33 -2
  453. package/es-modules/masters/modules/static-scale.src.js +1 -1
  454. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  455. package/es-modules/masters/modules/stock.src.js +4 -1
  456. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  457. package/es-modules/masters/modules/sunburst.src.js +1 -1
  458. package/es-modules/masters/modules/tilemap.src.js +1 -1
  459. package/es-modules/masters/modules/timeline.src.js +1 -1
  460. package/es-modules/masters/modules/treegrid.src.js +1 -1
  461. package/es-modules/masters/modules/treemap.src.js +1 -1
  462. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  463. package/es-modules/masters/modules/variwide.src.js +1 -1
  464. package/es-modules/masters/modules/vector.src.js +1 -1
  465. package/es-modules/masters/modules/venn.src.js +1 -1
  466. package/es-modules/masters/modules/windbarb.src.js +1 -1
  467. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  468. package/es-modules/masters/modules/xrange.src.js +1 -1
  469. package/es-modules/masters/themes/avocado.src.js +1 -1
  470. package/es-modules/masters/themes/brand-dark.src.js +14 -0
  471. package/es-modules/masters/themes/brand-light.src.js +14 -0
  472. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  473. package/es-modules/masters/themes/dark-green.src.js +1 -1
  474. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  475. package/es-modules/masters/themes/gray.src.js +1 -1
  476. package/es-modules/masters/themes/grid-light.src.js +1 -1
  477. package/es-modules/masters/themes/grid.src.js +1 -1
  478. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  479. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  480. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  481. package/es-modules/masters/themes/skies.src.js +1 -1
  482. package/es-modules/masters/themes/sunset.src.js +1 -1
  483. package/highcharts-3d.js +1 -1
  484. package/highcharts-3d.js.map +1 -1
  485. package/highcharts-3d.src.js +65 -35
  486. package/highcharts-gantt.js +800 -803
  487. package/highcharts-gantt.js.map +1 -1
  488. package/highcharts-gantt.src.js +1359 -1429
  489. package/highcharts-more.js +194 -193
  490. package/highcharts-more.js.map +1 -1
  491. package/highcharts-more.src.js +280 -222
  492. package/highcharts.d.ts +10228 -768
  493. package/highcharts.js +585 -588
  494. package/highcharts.js.map +1 -1
  495. package/highcharts.src.d.ts +10228 -768
  496. package/highcharts.src.js +995 -1066
  497. package/highmaps.js +727 -707
  498. package/highmaps.js.map +1 -1
  499. package/highmaps.src.js +3243 -2135
  500. package/highstock.js +788 -783
  501. package/highstock.js.map +1 -1
  502. package/highstock.src.js +2492 -1981
  503. package/indicators/acceleration-bands.d.ts +17 -1
  504. package/indicators/acceleration-bands.js +11 -9
  505. package/indicators/acceleration-bands.js.map +1 -1
  506. package/indicators/acceleration-bands.src.d.ts +17 -1
  507. package/indicators/acceleration-bands.src.js +238 -112
  508. package/indicators/accumulation-distribution.js +1 -1
  509. package/indicators/accumulation-distribution.src.js +1 -1
  510. package/indicators/ao.js +6 -6
  511. package/indicators/ao.js.map +1 -1
  512. package/indicators/ao.src.js +4 -4
  513. package/indicators/apo.js +5 -6
  514. package/indicators/apo.js.map +1 -1
  515. package/indicators/apo.src.js +16 -84
  516. package/indicators/aroon-oscillator.d.ts +17 -1
  517. package/indicators/aroon-oscillator.js +10 -9
  518. package/indicators/aroon-oscillator.js.map +1 -1
  519. package/indicators/aroon-oscillator.src.d.ts +17 -1
  520. package/indicators/aroon-oscillator.src.js +230 -177
  521. package/indicators/aroon.d.ts +17 -1
  522. package/indicators/aroon.js +11 -9
  523. package/indicators/aroon.js.map +1 -1
  524. package/indicators/aroon.src.d.ts +17 -1
  525. package/indicators/aroon.src.js +227 -112
  526. package/indicators/atr.js +1 -1
  527. package/indicators/atr.src.js +1 -1
  528. package/indicators/bollinger-bands.d.ts +17 -1
  529. package/indicators/bollinger-bands.js +12 -9
  530. package/indicators/bollinger-bands.js.map +1 -1
  531. package/indicators/bollinger-bands.src.d.ts +17 -1
  532. package/indicators/bollinger-bands.src.js +262 -117
  533. package/indicators/cci.js +1 -1
  534. package/indicators/cci.src.js +1 -1
  535. package/indicators/chaikin.js +8 -9
  536. package/indicators/chaikin.js.map +1 -1
  537. package/indicators/chaikin.src.js +8 -76
  538. package/indicators/cmf.js +1 -1
  539. package/indicators/cmf.js.map +1 -1
  540. package/indicators/cmf.src.js +36 -16
  541. package/indicators/cmo.js +1 -1
  542. package/indicators/cmo.src.js +1 -1
  543. package/indicators/dema.js +5 -6
  544. package/indicators/dema.js.map +1 -1
  545. package/indicators/dema.src.js +3 -75
  546. package/indicators/disparity-index.js +6 -7
  547. package/indicators/disparity-index.js.map +1 -1
  548. package/indicators/disparity-index.src.js +20 -74
  549. package/indicators/dmi.js +12 -11
  550. package/indicators/dmi.js.map +1 -1
  551. package/indicators/dmi.src.js +252 -121
  552. package/indicators/dpo.js +1 -1
  553. package/indicators/dpo.src.js +1 -1
  554. package/indicators/ema.js +1 -13
  555. package/indicators/ema.js.map +1 -1
  556. package/indicators/ema.src.js +7 -188
  557. package/indicators/ichimoku-kinko-hyo.js +1 -1
  558. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  559. package/indicators/ichimoku-kinko-hyo.src.js +7 -7
  560. package/indicators/indicators-all.d.ts +17 -1
  561. package/indicators/indicators-all.js +198 -203
  562. package/indicators/indicators-all.js.map +1 -1
  563. package/indicators/indicators-all.src.d.ts +17 -1
  564. package/indicators/indicators-all.src.js +892 -777
  565. package/indicators/indicators.js +12 -12
  566. package/indicators/indicators.js.map +1 -1
  567. package/indicators/indicators.src.js +213 -144
  568. package/indicators/keltner-channels.d.ts +17 -1
  569. package/indicators/keltner-channels.js +11 -10
  570. package/indicators/keltner-channels.js.map +1 -1
  571. package/indicators/keltner-channels.src.d.ts +17 -1
  572. package/indicators/keltner-channels.src.js +246 -118
  573. package/indicators/klinger.js +14 -13
  574. package/indicators/klinger.js.map +1 -1
  575. package/indicators/klinger.src.js +239 -187
  576. package/indicators/macd.js +2 -2
  577. package/indicators/macd.js.map +1 -1
  578. package/indicators/macd.src.js +3 -4
  579. package/indicators/mfi.js +1 -1
  580. package/indicators/mfi.src.js +1 -1
  581. package/indicators/momentum.js +1 -1
  582. package/indicators/momentum.src.js +1 -1
  583. package/indicators/natr.js +3 -3
  584. package/indicators/natr.js.map +1 -1
  585. package/indicators/natr.src.js +2 -4
  586. package/indicators/obv.js +1 -1
  587. package/indicators/obv.src.js +1 -1
  588. package/indicators/pivot-points.js +1 -1
  589. package/indicators/pivot-points.js.map +1 -1
  590. package/indicators/pivot-points.src.js +3 -2
  591. package/indicators/ppo.js +5 -6
  592. package/indicators/ppo.js.map +1 -1
  593. package/indicators/ppo.src.js +3 -75
  594. package/indicators/price-channel.d.ts +17 -1
  595. package/indicators/price-channel.js +11 -9
  596. package/indicators/price-channel.js.map +1 -1
  597. package/indicators/price-channel.src.d.ts +17 -1
  598. package/indicators/price-channel.src.js +288 -168
  599. package/indicators/price-envelopes.js +1 -1
  600. package/indicators/price-envelopes.src.js +1 -1
  601. package/indicators/psar.js +1 -1
  602. package/indicators/psar.src.js +1 -1
  603. package/indicators/regressions.js +1 -1
  604. package/indicators/regressions.js.map +1 -1
  605. package/indicators/regressions.src.js +39 -21
  606. package/indicators/roc.js +1 -1
  607. package/indicators/roc.src.js +1 -1
  608. package/indicators/rsi.js +1 -1
  609. package/indicators/rsi.js.map +1 -1
  610. package/indicators/rsi.src.js +3 -2
  611. package/indicators/slow-stochastic.js +5 -6
  612. package/indicators/slow-stochastic.js.map +1 -1
  613. package/indicators/slow-stochastic.src.js +2 -72
  614. package/indicators/stochastic.d.ts +17 -1
  615. package/indicators/stochastic.js +12 -10
  616. package/indicators/stochastic.js.map +1 -1
  617. package/indicators/stochastic.src.d.ts +17 -1
  618. package/indicators/stochastic.src.js +282 -165
  619. package/indicators/supertrend.js +10 -10
  620. package/indicators/supertrend.js.map +1 -1
  621. package/indicators/supertrend.src.js +6 -7
  622. package/indicators/tema.js +6 -7
  623. package/indicators/tema.js.map +1 -1
  624. package/indicators/tema.src.js +28 -75
  625. package/indicators/trendline.js +1 -1
  626. package/indicators/trendline.src.js +1 -1
  627. package/indicators/trix.js +4 -5
  628. package/indicators/trix.js.map +1 -1
  629. package/indicators/trix.src.js +8 -76
  630. package/indicators/volume-by-price.js +16 -16
  631. package/indicators/volume-by-price.js.map +1 -1
  632. package/indicators/volume-by-price.src.js +27 -10
  633. package/indicators/vwap.js +1 -1
  634. package/indicators/vwap.js.map +1 -1
  635. package/indicators/vwap.src.js +20 -8
  636. package/indicators/williams-r.js +5 -6
  637. package/indicators/williams-r.js.map +1 -1
  638. package/indicators/williams-r.src.js +41 -51
  639. package/indicators/wma.js +1 -1
  640. package/indicators/wma.src.js +1 -1
  641. package/indicators/zigzag.js +1 -1
  642. package/indicators/zigzag.src.js +1 -1
  643. package/modules/accessibility.d.ts +0 -30
  644. package/modules/accessibility.js +240 -216
  645. package/modules/accessibility.js.map +1 -1
  646. package/modules/accessibility.src.d.ts +0 -30
  647. package/modules/accessibility.src.js +7807 -6400
  648. package/modules/annotations-advanced.d.ts +30 -0
  649. package/modules/annotations-advanced.js +192 -165
  650. package/modules/annotations-advanced.js.map +1 -1
  651. package/modules/annotations-advanced.src.d.ts +30 -0
  652. package/modules/annotations-advanced.src.js +1716 -416
  653. package/modules/annotations.js +125 -110
  654. package/modules/annotations.js.map +1 -1
  655. package/modules/annotations.src.js +1059 -304
  656. package/modules/arrow-symbols.js +1 -1
  657. package/modules/arrow-symbols.src.js +1 -1
  658. package/modules/boost-canvas.js +15 -15
  659. package/modules/boost-canvas.js.map +1 -1
  660. package/modules/boost-canvas.src.js +3 -3
  661. package/modules/boost.js +79 -79
  662. package/modules/boost.js.map +1 -1
  663. package/modules/boost.src.js +42 -51
  664. package/modules/broken-axis.js +1 -1
  665. package/modules/broken-axis.js.map +1 -1
  666. package/modules/broken-axis.src.js +18 -12
  667. package/modules/bullet.js +1 -1
  668. package/modules/bullet.src.js +1 -1
  669. package/modules/coloraxis.js +24 -24
  670. package/modules/coloraxis.js.map +1 -1
  671. package/modules/coloraxis.src.js +77 -103
  672. package/modules/current-date-indicator.js +4 -4
  673. package/modules/current-date-indicator.js.map +1 -1
  674. package/modules/current-date-indicator.src.js +4 -4
  675. package/modules/cylinder.js +1 -1
  676. package/modules/cylinder.js.map +1 -1
  677. package/modules/cylinder.src.js +37 -5
  678. package/modules/data.d.ts +6 -6
  679. package/modules/data.js +32 -32
  680. package/modules/data.js.map +1 -1
  681. package/modules/data.src.d.ts +6 -6
  682. package/modules/data.src.js +94 -140
  683. package/modules/datagrouping.js +20 -20
  684. package/modules/datagrouping.js.map +1 -1
  685. package/modules/datagrouping.src.js +56 -33
  686. package/modules/debugger.js +3 -3
  687. package/modules/debugger.js.map +1 -1
  688. package/modules/debugger.src.js +3 -3
  689. package/modules/dependency-wheel.js +11 -11
  690. package/modules/dependency-wheel.js.map +1 -1
  691. package/modules/dependency-wheel.src.js +5 -8
  692. package/modules/dotplot.js +1 -1
  693. package/modules/dotplot.src.js +1 -1
  694. package/modules/drag-panes.js +8 -8
  695. package/modules/drag-panes.js.map +1 -1
  696. package/modules/drag-panes.src.js +3 -3
  697. package/modules/draggable-points.js +1 -1
  698. package/modules/draggable-points.js.map +1 -1
  699. package/modules/draggable-points.src.js +8 -9
  700. package/modules/drilldown.js +24 -24
  701. package/modules/drilldown.js.map +1 -1
  702. package/modules/drilldown.src.js +13 -8
  703. package/modules/dumbbell.js +17 -17
  704. package/modules/dumbbell.js.map +1 -1
  705. package/modules/dumbbell.src.js +4 -8
  706. package/modules/export-data.js +19 -19
  707. package/modules/export-data.js.map +1 -1
  708. package/modules/export-data.src.js +9 -8
  709. package/modules/exporting.js +39 -38
  710. package/modules/exporting.js.map +1 -1
  711. package/modules/exporting.src.js +134 -116
  712. package/modules/full-screen.js +1 -1
  713. package/modules/full-screen.js.map +1 -1
  714. package/modules/full-screen.src.js +5 -4
  715. package/modules/funnel.js +12 -12
  716. package/modules/funnel.js.map +1 -1
  717. package/modules/funnel.src.js +9 -6
  718. package/modules/funnel3d.js +1 -1
  719. package/modules/funnel3d.js.map +1 -1
  720. package/modules/funnel3d.src.js +17 -10
  721. package/modules/gantt.js +217 -218
  722. package/modules/gantt.js.map +1 -1
  723. package/modules/gantt.src.js +364 -363
  724. package/modules/grid-axis.js +1 -1
  725. package/modules/grid-axis.js.map +1 -1
  726. package/modules/grid-axis.src.js +27 -19
  727. package/modules/heatmap.js +39 -39
  728. package/modules/heatmap.js.map +1 -1
  729. package/modules/heatmap.src.js +132 -141
  730. package/modules/heikinashi.js +1 -1
  731. package/modules/heikinashi.js.map +1 -1
  732. package/modules/heikinashi.src.js +12 -10
  733. package/modules/histogram-bellcurve.js +13 -13
  734. package/modules/histogram-bellcurve.js.map +1 -1
  735. package/modules/histogram-bellcurve.src.js +97 -91
  736. package/modules/hollowcandlestick.js +9 -9
  737. package/modules/hollowcandlestick.js.map +1 -1
  738. package/modules/hollowcandlestick.src.js +31 -35
  739. package/modules/item-series.js +6 -6
  740. package/modules/item-series.js.map +1 -1
  741. package/modules/item-series.src.js +6 -6
  742. package/modules/lollipop.js +1 -1
  743. package/modules/lollipop.src.js +1 -1
  744. package/modules/map.d.ts +138 -14
  745. package/modules/map.js +144 -122
  746. package/modules/map.js.map +1 -1
  747. package/modules/map.src.d.ts +138 -14
  748. package/modules/map.src.js +2253 -1074
  749. package/modules/marker-clusters.js +36 -36
  750. package/modules/marker-clusters.js.map +1 -1
  751. package/modules/marker-clusters.src.js +176 -143
  752. package/modules/networkgraph.d.ts +12 -1
  753. package/modules/networkgraph.js +49 -49
  754. package/modules/networkgraph.js.map +1 -1
  755. package/modules/networkgraph.src.d.ts +12 -1
  756. package/modules/networkgraph.src.js +103 -78
  757. package/modules/no-data-to-display.js +5 -5
  758. package/modules/no-data-to-display.js.map +1 -1
  759. package/modules/no-data-to-display.src.js +3 -3
  760. package/modules/offline-exporting.js +18 -17
  761. package/modules/offline-exporting.js.map +1 -1
  762. package/modules/offline-exporting.src.js +39 -44
  763. package/modules/oldie-polyfills.js +1 -1
  764. package/modules/oldie-polyfills.src.js +1 -1
  765. package/modules/oldie.js +26 -26
  766. package/modules/oldie.js.map +1 -1
  767. package/modules/oldie.src.js +21 -81
  768. package/modules/organization.js +13 -13
  769. package/modules/organization.js.map +1 -1
  770. package/modules/organization.src.js +8 -6
  771. package/modules/overlapping-datalabels.js +1 -1
  772. package/modules/overlapping-datalabels.src.js +1 -1
  773. package/modules/parallel-coordinates.js +1 -1
  774. package/modules/parallel-coordinates.js.map +1 -1
  775. package/modules/parallel-coordinates.src.js +6 -4
  776. package/modules/pareto.js +7 -7
  777. package/modules/pareto.js.map +1 -1
  778. package/modules/pareto.src.js +89 -78
  779. package/modules/pathfinder.js +1 -1
  780. package/modules/pathfinder.js.map +1 -1
  781. package/modules/pathfinder.src.js +21 -20
  782. package/modules/pattern-fill.js +1 -1
  783. package/modules/pattern-fill.js.map +1 -1
  784. package/modules/pattern-fill.src.js +18 -12
  785. package/modules/price-indicator.js +1 -1
  786. package/modules/price-indicator.js.map +1 -1
  787. package/modules/price-indicator.src.js +3 -2
  788. package/modules/pyramid3d.js +1 -1
  789. package/modules/pyramid3d.js.map +1 -1
  790. package/modules/pyramid3d.src.js +3 -2
  791. package/modules/sankey.d.ts +12 -1
  792. package/modules/sankey.js +29 -29
  793. package/modules/sankey.js.map +1 -1
  794. package/modules/sankey.src.d.ts +12 -1
  795. package/modules/sankey.src.js +307 -181
  796. package/modules/series-label.js +1 -1
  797. package/modules/series-label.js.map +1 -1
  798. package/modules/series-label.src.js +2 -2
  799. package/modules/solid-gauge.js +1 -1
  800. package/modules/solid-gauge.js.map +1 -1
  801. package/modules/solid-gauge.src.js +17 -2
  802. package/modules/sonification.js +59 -55
  803. package/modules/sonification.js.map +1 -1
  804. package/modules/sonification.src.js +3093 -2594
  805. package/modules/static-scale.js +1 -1
  806. package/modules/static-scale.src.js +1 -1
  807. package/modules/stock-tools.js +178 -163
  808. package/modules/stock-tools.js.map +1 -1
  809. package/modules/stock-tools.src.js +1136 -229
  810. package/modules/stock.d.ts +39 -6
  811. package/modules/stock.js +204 -196
  812. package/modules/stock.js.map +1 -1
  813. package/modules/stock.src.d.ts +39 -6
  814. package/modules/stock.src.js +1822 -1240
  815. package/modules/streamgraph.js +1 -1
  816. package/modules/streamgraph.src.js +1 -1
  817. package/modules/sunburst.js +60 -60
  818. package/modules/sunburst.js.map +1 -1
  819. package/modules/sunburst.src.js +281 -248
  820. package/modules/tilemap.js +17 -17
  821. package/modules/tilemap.js.map +1 -1
  822. package/modules/tilemap.src.js +3 -13
  823. package/modules/timeline.js +18 -18
  824. package/modules/timeline.js.map +1 -1
  825. package/modules/timeline.src.js +5 -5
  826. package/modules/treegrid.js +56 -57
  827. package/modules/treegrid.js.map +1 -1
  828. package/modules/treegrid.src.js +201 -169
  829. package/modules/treemap.js +41 -41
  830. package/modules/treemap.js.map +1 -1
  831. package/modules/treemap.src.js +266 -232
  832. package/modules/variable-pie.js +1 -1
  833. package/modules/variable-pie.src.js +1 -1
  834. package/modules/variwide.js +1 -1
  835. package/modules/variwide.js.map +1 -1
  836. package/modules/variwide.src.js +7 -3
  837. package/modules/vector.js +1 -1
  838. package/modules/vector.src.js +1 -1
  839. package/modules/venn.js +31 -31
  840. package/modules/venn.js.map +1 -1
  841. package/modules/venn.src.js +740 -731
  842. package/modules/windbarb.js +15 -15
  843. package/modules/windbarb.js.map +1 -1
  844. package/modules/windbarb.src.js +90 -62
  845. package/modules/wordcloud.js +23 -24
  846. package/modules/wordcloud.js.map +1 -1
  847. package/modules/wordcloud.src.js +898 -954
  848. package/modules/xrange.js +2 -2
  849. package/modules/xrange.js.map +1 -1
  850. package/modules/xrange.src.js +12 -33
  851. package/package.json +1 -1
  852. package/themes/avocado.js +1 -1
  853. package/themes/avocado.src.js +1 -1
  854. package/themes/brand-dark.js +15 -0
  855. package/themes/brand-dark.js.map +1 -0
  856. package/themes/brand-dark.src.js +328 -0
  857. package/themes/brand-light.js +15 -0
  858. package/themes/brand-light.js.map +1 -0
  859. package/themes/brand-light.src.js +294 -0
  860. package/themes/dark-blue.js +1 -1
  861. package/themes/dark-blue.src.js +1 -1
  862. package/themes/dark-green.js +1 -1
  863. package/themes/dark-green.src.js +1 -1
  864. package/themes/dark-unica.js +1 -1
  865. package/themes/dark-unica.js.map +1 -1
  866. package/themes/dark-unica.src.js +5 -3
  867. package/themes/gray.js +1 -1
  868. package/themes/gray.src.js +1 -1
  869. package/themes/grid-light.js +1 -1
  870. package/themes/grid-light.js.map +1 -1
  871. package/themes/grid-light.src.js +5 -3
  872. package/themes/grid.js +1 -1
  873. package/themes/grid.js.map +1 -1
  874. package/themes/grid.src.js +5 -3
  875. package/themes/high-contrast-dark.js +1 -1
  876. package/themes/high-contrast-dark.src.js +1 -1
  877. package/themes/high-contrast-light.js +1 -1
  878. package/themes/high-contrast-light.src.js +1 -1
  879. package/themes/sand-signika.js +1 -1
  880. package/themes/sand-signika.src.js +1 -1
  881. package/themes/skies.js +1 -1
  882. package/themes/skies.src.js +1 -1
  883. package/themes/sunset.js +1 -1
  884. package/themes/sunset.src.js +1 -1
  885. package/es-modules/Core/Axis/MapAxis.js +0 -157
  886. package/es-modules/Core/Color/Palette.js +0 -82
  887. package/es-modules/Extensions/Sonification/InstrumentDefinitions.js +0 -32
  888. package/es-modules/Mixins/ColorSeries.js +0 -77
  889. package/es-modules/Mixins/DerivedSeries.js +0 -118
  890. package/es-modules/Mixins/DrawPoint.js +0 -81
  891. package/es-modules/Mixins/IndicatorRequired.js +0 -56
  892. package/es-modules/Mixins/MultipleLines.js +0 -181
  893. package/es-modules/Mixins/Navigation.js +0 -54
  894. package/es-modules/Mixins/NelderMead.js +0 -132
  895. package/es-modules/Mixins/Polygon.js +0 -259
  896. package/es-modules/Mixins/ReduceArray.js +0 -54
@@ -14,482 +14,594 @@
14
14
  * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
15
15
  *
16
16
  * */
17
+ 'use strict';
17
18
  import CU from '../../Core/Geometry/CircleUtilities.js';
18
19
  var getAreaOfCircle = CU.getAreaOfCircle, getCircleCircleIntersection = CU.getCircleCircleIntersection, getOverlapBetweenCirclesByDistance = CU.getOverlapBetweenCircles, isPointInsideAllCircles = CU.isPointInsideAllCircles, isPointInsideCircle = CU.isPointInsideCircle, isPointOutsideAllCircles = CU.isPointOutsideAllCircles;
19
20
  import GU from '../../Core/Geometry/GeometryUtilities.js';
20
21
  var getDistanceBetweenPoints = GU.getDistanceBetweenPoints;
21
- import NelderMeadMixin from '../../Mixins/NelderMead.js';
22
22
  import U from '../../Core/Utilities.js';
23
23
  var extend = U.extend, isArray = U.isArray, isNumber = U.isNumber, isObject = U.isObject, isString = U.isString;
24
24
  /* *
25
25
  *
26
- * Namespace
26
+ * Functions
27
27
  *
28
28
  * */
29
- var VennUtils;
30
- (function (VennUtils) {
31
- /* *
32
- *
33
- * Properties
34
- *
35
- * */
36
- VennUtils.geometry = GU;
37
- VennUtils.geometryCircles = CU;
38
- VennUtils.nelderMead = NelderMeadMixin;
39
- /* *
40
- *
41
- * Functions
42
- *
43
- * */
44
- /**
45
- * Takes an array of relations and adds the properties `totalOverlap` and
46
- * `overlapping` to each set. The property `totalOverlap` is the sum of
47
- * value for each relation where this set is included. The property
48
- * `overlapping` is a map of how much this set is overlapping another set.
49
- * NOTE: This algorithm ignores relations consisting of more than 2 sets.
50
- * @private
51
- * @param {Array<Highcharts.VennRelationObject>} relations
52
- * The list of relations that should be sorted.
53
- * @return {Array<Highcharts.VennRelationObject>}
54
- * Returns the modified input relations with added properties `totalOverlap`
55
- * and `overlapping`.
56
- */
57
- function addOverlapToSets(relations) {
58
- // Calculate the amount of overlap per set.
59
- var mapOfIdToProps = relations
60
- // Filter out relations consisting of 2 sets.
61
- .filter(function (relation) { return (relation.sets.length === 2); })
62
- // Sum up the amount of overlap for each set.
63
- .reduce(function (map, relation) {
64
- relation.sets.forEach(function (set, i, arr) {
65
- if (!isObject(map[set])) {
66
- map[set] = {
67
- overlapping: {},
68
- totalOverlap: 0
69
- };
70
- }
71
- map[set].totalOverlap += relation.value;
72
- map[set].overlapping[arr[1 - i]] = relation.value;
73
- });
74
- return map;
75
- }, {});
76
- relations
77
- // Filter out single sets
78
- .filter(isSet)
79
- // Extend the set with the calculated properties.
80
- .forEach(function (set) {
81
- var properties = mapOfIdToProps[set.sets[0]];
82
- extend(set, properties);
83
- });
84
- // Returns the modified relations.
85
- return relations;
86
- }
87
- VennUtils.addOverlapToSets = addOverlapToSets;
88
- /**
89
- * Finds the root of a given function. The root is the input value needed
90
- * for a function to return 0.
91
- *
92
- * See https://en.wikipedia.org/wiki/Bisection_method#Algorithm
93
- *
94
- * TODO: Add unit tests.
95
- *
96
- * @param {Function} f
97
- * The function to find the root of.
98
- * @param {number} a
99
- * The lowest number in the search range.
100
- * @param {number} b
101
- * The highest number in the search range.
102
- * @param {number} [tolerance=1e-10]
103
- * The allowed difference between the returned value and root.
104
- * @param {number} [maxIterations=100]
105
- * The maximum iterations allowed.
106
- * @return {number}
107
- * Root number.
108
- */
109
- function bisect(f, a, b, tolerance, maxIterations) {
110
- var fA = f(a), fB = f(b), nMax = maxIterations || 100, tol = tolerance || 1e-10, delta = b - a, n = 1, x, fX;
111
- if (a >= b) {
112
- throw new Error('a must be smaller than b.');
113
- }
114
- else if (fA * fB > 0) {
115
- throw new Error('f(a) and f(b) must have opposite signs.');
116
- }
117
- if (fA === 0) {
118
- x = a;
119
- }
120
- else if (fB === 0) {
121
- x = b;
122
- }
123
- else {
124
- while (n++ <= nMax && fX !== 0 && delta > tol) {
125
- delta = (b - a) / 2;
126
- x = a + delta;
127
- fX = f(x);
128
- // Update low and high for next search interval.
129
- if (fA * fX > 0) {
130
- a = x;
131
- }
132
- else {
133
- b = x;
134
- }
29
+ /* eslint-disable valid-jsdoc */
30
+ /**
31
+ * Takes an array of relations and adds the properties `totalOverlap` and
32
+ * `overlapping` to each set. The property `totalOverlap` is the sum of
33
+ * value for each relation where this set is included. The property
34
+ * `overlapping` is a map of how much this set is overlapping another set.
35
+ * NOTE: This algorithm ignores relations consisting of more than 2 sets.
36
+ * @private
37
+ * @param {Array<Highcharts.VennRelationObject>} relations
38
+ * The list of relations that should be sorted.
39
+ * @return {Array<Highcharts.VennRelationObject>}
40
+ * Returns the modified input relations with added properties `totalOverlap`
41
+ * and `overlapping`.
42
+ */
43
+ function addOverlapToSets(relations) {
44
+ // Calculate the amount of overlap per set.
45
+ var mapOfIdToProps = relations
46
+ // Filter out relations consisting of 2 sets.
47
+ .filter(function (relation) { return (relation.sets.length === 2); })
48
+ // Sum up the amount of overlap for each set.
49
+ .reduce(function (map, relation) {
50
+ relation.sets.forEach(function (set, i, arr) {
51
+ if (!isObject(map[set])) {
52
+ map[set] = {
53
+ overlapping: {},
54
+ totalOverlap: 0
55
+ };
135
56
  }
136
- }
137
- return x;
57
+ map[set].totalOverlap += relation.value;
58
+ map[set].overlapping[arr[1 - i]] = relation.value;
59
+ });
60
+ return map;
61
+ }, {});
62
+ relations
63
+ // Filter out single sets
64
+ .filter(isSet)
65
+ // Extend the set with the calculated properties.
66
+ .forEach(function (set) {
67
+ var properties = mapOfIdToProps[set.sets[0]];
68
+ extend(set, properties);
69
+ });
70
+ // Returns the modified relations.
71
+ return relations;
72
+ }
73
+ /**
74
+ * Finds the root of a given function. The root is the input value needed
75
+ * for a function to return 0.
76
+ *
77
+ * See https://en.wikipedia.org/wiki/Bisection_method#Algorithm
78
+ *
79
+ * TODO: Add unit tests.
80
+ *
81
+ * @param {Function} f
82
+ * The function to find the root of.
83
+ * @param {number} a
84
+ * The lowest number in the search range.
85
+ * @param {number} b
86
+ * The highest number in the search range.
87
+ * @param {number} [tolerance=1e-10]
88
+ * The allowed difference between the returned value and root.
89
+ * @param {number} [maxIterations=100]
90
+ * The maximum iterations allowed.
91
+ * @return {number}
92
+ * Root number.
93
+ */
94
+ function bisect(f, a, b, tolerance, maxIterations) {
95
+ var fA = f(a), fB = f(b), nMax = maxIterations || 100, tol = tolerance || 1e-10, delta = b - a, n = 1, x, fX;
96
+ if (a >= b) {
97
+ throw new Error('a must be smaller than b.');
138
98
  }
139
- /**
140
- * Uses the bisection method to make a best guess of the ideal distance
141
- * between two circles too get the desired overlap.
142
- * Currently there is no known formula to calculate the distance from the
143
- * area of overlap, which makes the bisection method preferred.
144
- * @private
145
- * @param {number} r1
146
- * Radius of the first circle.
147
- * @param {number} r2
148
- * Radiues of the second circle.
149
- * @param {number} overlap
150
- * The wanted overlap between the two circles.
151
- * @return {number}
152
- * Returns the distance needed to get the wanted overlap between the two
153
- * circles.
154
- */
155
- function getDistanceBetweenCirclesByOverlap(r1, r2, overlap) {
156
- var maxDistance = r1 + r2, distance;
157
- if (overlap <= 0) {
158
- // If overlap is below or equal to zero, then there is no overlap.
159
- distance = maxDistance;
160
- }
161
- else if (getAreaOfCircle(r1 < r2 ? r1 : r2) <= overlap) {
162
- // When area of overlap is larger than the area of the smallest
163
- // circle, then it is completely overlapping.
164
- distance = 0;
165
- }
166
- else {
167
- distance = bisect(function (x) {
168
- var actualOverlap = getOverlapBetweenCirclesByDistance(r1, r2, x);
169
- // Return the differance between wanted and actual overlap.
170
- return overlap - actualOverlap;
171
- }, 0, maxDistance);
172
- }
173
- return distance;
99
+ else if (fA * fB > 0) {
100
+ throw new Error('f(a) and f(b) must have opposite signs.');
174
101
  }
175
- VennUtils.getDistanceBetweenCirclesByOverlap = getDistanceBetweenCirclesByOverlap;
176
- /**
177
- * Finds the available width for a label, by taking the label position and
178
- * finding the largest distance, which is inside all internal circles, and
179
- * outside all external circles.
180
- *
181
- * @private
182
- * @param {Highcharts.PositionObject} pos
183
- * The x and y coordinate of the label.
184
- * @param {Array<Highcharts.CircleObject>} internal
185
- * Internal circles.
186
- * @param {Array<Highcharts.CircleObject>} external
187
- * External circles.
188
- * @return {number}
189
- * Returns available width for the label.
190
- */
191
- function getLabelWidth(pos, internal, external) {
192
- var radius = internal.reduce(function (min, circle) { return Math.min(circle.r, min); }, Infinity),
193
- // Filter out external circles that are completely overlapping.
194
- filteredExternals = external.filter(function (circle) {
195
- return !isPointInsideCircle(pos, circle);
196
- });
197
- var findDistance = function (maxDistance, direction) {
198
- return bisect(function (x) {
199
- var testPos = {
200
- x: pos.x + (direction * x),
201
- y: pos.y
202
- }, isValid = (isPointInsideAllCircles(testPos, internal) &&
203
- isPointOutsideAllCircles(testPos, filteredExternals));
204
- // If the position is valid, then we want to move towards the
205
- // max distance. If not, then we want to away from the max
206
- // distance.
207
- return -(maxDistance - x) + (isValid ? 0 : Number.MAX_VALUE);
208
- }, 0, maxDistance);
209
- };
210
- // Find the smallest distance of left and right.
211
- return Math.min(findDistance(radius, -1), findDistance(radius, 1)) * 2;
102
+ if (fA === 0) {
103
+ x = a;
212
104
  }
213
- VennUtils.getLabelWidth = getLabelWidth;
214
- /**
215
- * Calculates a margin for a point based on the iternal and external
216
- * circles. The margin describes if the point is well placed within the
217
- * internal circles, and away from the external.
218
- * @private
219
- * @todo add unit tests.
220
- * @param {Highcharts.PositionObject} point
221
- * The point to evaluate.
222
- * @param {Array<Highcharts.CircleObject>} internal
223
- * The internal circles.
224
- * @param {Array<Highcharts.CircleObject>} external
225
- * The external circles.
226
- * @return {number}
227
- * Returns the margin.
228
- */
229
- function getMarginFromCircles(point, internal, external) {
230
- var margin = internal.reduce(function (margin, circle) {
231
- var m = circle.r - getDistanceBetweenPoints(point, circle);
232
- return (m <= margin) ? m : margin;
233
- }, Number.MAX_VALUE);
234
- margin = external.reduce(function (margin, circle) {
235
- var m = getDistanceBetweenPoints(point, circle) - circle.r;
236
- return (m <= margin) ? m : margin;
237
- }, margin);
238
- return margin;
105
+ else if (fB === 0) {
106
+ x = b;
239
107
  }
240
- VennUtils.getMarginFromCircles = getMarginFromCircles;
241
- /**
242
- * Calculates the area of overlap between a list of circles.
243
- * @private
244
- * @todo add support for calculating overlap between more than 2 circles.
245
- * @param {Array<Highcharts.CircleObject>} circles
246
- * List of circles with their given positions.
247
- * @return {number}
248
- * Returns the area of overlap between all the circles.
249
- */
250
- function getOverlapBetweenCircles(circles) {
251
- var overlap = 0;
252
- // When there is only two circles we can find the overlap by using their
253
- // radiuses and the distance between them.
254
- if (circles.length === 2) {
255
- var circle1 = circles[0];
256
- var circle2 = circles[1];
257
- overlap = getOverlapBetweenCirclesByDistance(circle1.r, circle2.r, getDistanceBetweenPoints(circle1, circle2));
108
+ else {
109
+ while (n++ <= nMax && fX !== 0 && delta > tol) {
110
+ delta = (b - a) / 2;
111
+ x = a + delta;
112
+ fX = f(x);
113
+ // Update low and high for next search interval.
114
+ if (fA * fX > 0) {
115
+ a = x;
116
+ }
117
+ else {
118
+ b = x;
119
+ }
258
120
  }
259
- return overlap;
260
121
  }
261
- // eslint-disable-next-line require-jsdoc
262
- function isSet(x) {
263
- return isArray(x.sets) && x.sets.length === 1;
122
+ return x;
123
+ }
124
+ /**
125
+ * @private
126
+ */
127
+ function getCentroid(simplex) {
128
+ var arr = simplex.slice(0, -1), length = arr.length, result = [], sum = function (data, point) {
129
+ data.sum += point[data.i];
130
+ return data;
131
+ };
132
+ for (var i = 0; i < length; i++) {
133
+ result[i] = arr.reduce(sum, { sum: 0, i: i }).sum / length;
264
134
  }
265
- VennUtils.isSet = isSet;
266
- // eslint-disable-next-line require-jsdoc
267
- function isValidRelation(x) {
268
- var map = {};
269
- return (isObject(x) &&
270
- (isNumber(x.value) && x.value > -1) &&
271
- (isArray(x.sets) && x.sets.length > 0) &&
272
- !x.sets.some(function (set) {
273
- var invalid = false;
274
- if (!map[set] && isString(set)) {
275
- map[set] = true;
276
- }
277
- else {
278
- invalid = true;
279
- }
280
- return invalid;
281
- }));
135
+ return result;
136
+ }
137
+ /**
138
+ * Uses the bisection method to make a best guess of the ideal distance
139
+ * between two circles too get the desired overlap.
140
+ * Currently there is no known formula to calculate the distance from the
141
+ * area of overlap, which makes the bisection method preferred.
142
+ * @private
143
+ * @param {number} r1
144
+ * Radius of the first circle.
145
+ * @param {number} r2
146
+ * Radiues of the second circle.
147
+ * @param {number} overlap
148
+ * The wanted overlap between the two circles.
149
+ * @return {number}
150
+ * Returns the distance needed to get the wanted overlap between the two
151
+ * circles.
152
+ */
153
+ function getDistanceBetweenCirclesByOverlap(r1, r2, overlap) {
154
+ var maxDistance = r1 + r2, distance;
155
+ if (overlap <= 0) {
156
+ // If overlap is below or equal to zero, then there is no overlap.
157
+ distance = maxDistance;
158
+ }
159
+ else if (getAreaOfCircle(r1 < r2 ? r1 : r2) <= overlap) {
160
+ // When area of overlap is larger than the area of the smallest
161
+ // circle, then it is completely overlapping.
162
+ distance = 0;
163
+ }
164
+ else {
165
+ distance = bisect(function (x) {
166
+ var actualOverlap = getOverlapBetweenCirclesByDistance(r1, r2, x);
167
+ // Return the differance between wanted and actual overlap.
168
+ return overlap - actualOverlap;
169
+ }, 0, maxDistance);
282
170
  }
283
- // eslint-disable-next-line require-jsdoc
284
- function isValidSet(x) {
285
- return (isValidRelation(x) && isSet(x) && x.value > 0);
171
+ return distance;
172
+ }
173
+ /**
174
+ * Finds the available width for a label, by taking the label position and
175
+ * finding the largest distance, which is inside all internal circles, and
176
+ * outside all external circles.
177
+ *
178
+ * @private
179
+ * @param {Highcharts.PositionObject} pos
180
+ * The x and y coordinate of the label.
181
+ * @param {Array<Highcharts.CircleObject>} internal
182
+ * Internal circles.
183
+ * @param {Array<Highcharts.CircleObject>} external
184
+ * External circles.
185
+ * @return {number}
186
+ * Returns available width for the label.
187
+ */
188
+ function getLabelWidth(pos, internal, external) {
189
+ var radius = internal.reduce(function (min, circle) { return Math.min(circle.r, min); }, Infinity),
190
+ // Filter out external circles that are completely overlapping.
191
+ filteredExternals = external.filter(function (circle) {
192
+ return !isPointInsideCircle(pos, circle);
193
+ });
194
+ var findDistance = function (maxDistance, direction) {
195
+ return bisect(function (x) {
196
+ var testPos = {
197
+ x: pos.x + (direction * x),
198
+ y: pos.y
199
+ }, isValid = (isPointInsideAllCircles(testPos, internal) &&
200
+ isPointOutsideAllCircles(testPos, filteredExternals));
201
+ // If the position is valid, then we want to move towards the
202
+ // max distance. If not, then we want to away from the max
203
+ // distance.
204
+ return -(maxDistance - x) + (isValid ? 0 : Number.MAX_VALUE);
205
+ }, 0, maxDistance);
206
+ };
207
+ // Find the smallest distance of left and right.
208
+ return Math.min(findDistance(radius, -1), findDistance(radius, 1)) * 2;
209
+ }
210
+ /**
211
+ * Calculates a margin for a point based on the iternal and external
212
+ * circles. The margin describes if the point is well placed within the
213
+ * internal circles, and away from the external.
214
+ * @private
215
+ * @todo add unit tests.
216
+ * @param {Highcharts.PositionObject} point
217
+ * The point to evaluate.
218
+ * @param {Array<Highcharts.CircleObject>} internal
219
+ * The internal circles.
220
+ * @param {Array<Highcharts.CircleObject>} external
221
+ * The external circles.
222
+ * @return {number}
223
+ * Returns the margin.
224
+ */
225
+ function getMarginFromCircles(point, internal, external) {
226
+ var margin = internal.reduce(function (margin, circle) {
227
+ var m = circle.r - getDistanceBetweenPoints(point, circle);
228
+ return (m <= margin) ? m : margin;
229
+ }, Number.MAX_VALUE);
230
+ margin = external.reduce(function (margin, circle) {
231
+ var m = getDistanceBetweenPoints(point, circle) - circle.r;
232
+ return (m <= margin) ? m : margin;
233
+ }, margin);
234
+ return margin;
235
+ }
236
+ /**
237
+ * Calculates the area of overlap between a list of circles.
238
+ * @private
239
+ * @todo add support for calculating overlap between more than 2 circles.
240
+ * @param {Array<Highcharts.CircleObject>} circles
241
+ * List of circles with their given positions.
242
+ * @return {number}
243
+ * Returns the area of overlap between all the circles.
244
+ */
245
+ function getOverlapBetweenCircles(circles) {
246
+ var overlap = 0;
247
+ // When there is only two circles we can find the overlap by using their
248
+ // radiuses and the distance between them.
249
+ if (circles.length === 2) {
250
+ var circle1 = circles[0];
251
+ var circle2 = circles[1];
252
+ overlap = getOverlapBetweenCirclesByDistance(circle1.r, circle2.r, getDistanceBetweenPoints(circle1, circle2));
286
253
  }
254
+ return overlap;
255
+ }
256
+ // eslint-disable-next-line require-jsdoc
257
+ function isSet(x) {
258
+ return isArray(x.sets) && x.sets.length === 1;
259
+ }
260
+ // eslint-disable-next-line require-jsdoc
261
+ function isValidRelation(x) {
262
+ var map = {};
263
+ return (isObject(x) &&
264
+ (isNumber(x.value) && x.value > -1) &&
265
+ (isArray(x.sets) && x.sets.length > 0) &&
266
+ !x.sets.some(function (set) {
267
+ var invalid = false;
268
+ if (!map[set] && isString(set)) {
269
+ map[set] = true;
270
+ }
271
+ else {
272
+ invalid = true;
273
+ }
274
+ return invalid;
275
+ }));
276
+ }
277
+ // eslint-disable-next-line require-jsdoc
278
+ function isValidSet(x) {
279
+ return (isValidRelation(x) && isSet(x) && x.value > 0);
280
+ }
281
+ /**
282
+ * Uses a greedy approach to position all the sets. Works well with a small
283
+ * number of sets, and are in these cases a good choice aesthetically.
284
+ * @private
285
+ * @param {Array<object>} relations List of the overlap between two or more
286
+ * sets, or the size of a single set.
287
+ * @return {Array<object>} List of circles and their calculated positions.
288
+ */
289
+ function layoutGreedyVenn(relations) {
290
+ var positionedSets = [], mapOfIdToCircles = {};
291
+ // Define a circle for each set.
292
+ relations
293
+ .filter(function (relation) {
294
+ return relation.sets.length === 1;
295
+ }).forEach(function (relation) {
296
+ mapOfIdToCircles[relation.sets[0]] = relation.circle = {
297
+ x: Number.MAX_VALUE,
298
+ y: Number.MAX_VALUE,
299
+ r: Math.sqrt(relation.value / Math.PI)
300
+ };
301
+ });
287
302
  /**
288
- * Uses a greedy approach to position all the sets. Works well with a small
289
- * number of sets, and are in these cases a good choice aesthetically.
303
+ * Takes a set and updates the position, and add the set to the list of
304
+ * positioned sets.
290
305
  * @private
291
- * @param {Array<object>} relations List of the overlap between two or more
292
- * sets, or the size of a single set.
293
- * @return {Array<object>} List of circles and their calculated positions.
306
+ * @param {Object} set
307
+ * The set to add to its final position.
308
+ * @param {Object} coordinates
309
+ * The coordinates to position the set at.
294
310
  */
295
- function layoutGreedyVenn(relations) {
296
- var positionedSets = [], mapOfIdToCircles = {};
297
- // Define a circle for each set.
298
- relations
299
- .filter(function (relation) {
300
- return relation.sets.length === 1;
301
- }).forEach(function (relation) {
302
- mapOfIdToCircles[relation.sets[0]] = relation.circle = {
303
- x: Number.MAX_VALUE,
304
- y: Number.MAX_VALUE,
305
- r: Math.sqrt(relation.value / Math.PI)
306
- };
307
- });
308
- /**
309
- * Takes a set and updates the position, and add the set to the list of
310
- * positioned sets.
311
- * @private
312
- * @param {object} set
313
- * The set to add to its final position.
314
- * @param {object} coordinates
315
- * The coordinates to position the set at.
316
- * @return {void}
317
- */
318
- var positionSet = function positionSet(set, coordinates) {
319
- var circle = set.circle;
320
- circle.x = coordinates.x;
321
- circle.y = coordinates.y;
322
- positionedSets.push(set);
323
- };
324
- // Find overlap between sets. Ignore relations with more then 2 sets.
325
- addOverlapToSets(relations);
326
- // Sort sets by the sum of their size from large to small.
327
- var sortedByOverlap = relations
328
- .filter(isSet)
329
- .sort(sortByTotalOverlap);
330
- // Position the most overlapped set at 0,0.
331
- positionSet(sortedByOverlap.shift(), { x: 0, y: 0 });
332
- var relationsWithTwoSets = relations.filter(function (x) {
333
- return x.sets.length === 2;
334
- });
335
- // Iterate and position the remaining sets.
336
- sortedByOverlap.forEach(function (set) {
337
- var circle = set.circle, radius = circle.r, overlapping = set.overlapping;
338
- var bestPosition = positionedSets.reduce(function (best, positionedSet, i) {
339
- var positionedCircle = positionedSet.circle, overlap = overlapping[positionedSet.sets[0]];
340
- // Calculate the distance between the sets to get the
341
- // correct overlap
342
- var distance = getDistanceBetweenCirclesByOverlap(radius, positionedCircle.r, overlap);
343
- // Create a list of possible coordinates calculated from
344
- // distance.
345
- var possibleCoordinates = [
346
- { x: positionedCircle.x + distance, y: positionedCircle.y },
347
- { x: positionedCircle.x - distance, y: positionedCircle.y },
348
- { x: positionedCircle.x, y: positionedCircle.y + distance },
349
- { x: positionedCircle.x, y: positionedCircle.y - distance }
350
- ];
351
- // If there are more circles overlapping, then add the
352
- // intersection points as possible positions.
353
- positionedSets.slice(i + 1).forEach(function (positionedSet2) {
354
- var positionedCircle2 = positionedSet2.circle, overlap2 = overlapping[positionedSet2.sets[0]], distance2 = getDistanceBetweenCirclesByOverlap(radius, positionedCircle2.r, overlap2);
355
- // Add intersections to list of coordinates.
356
- possibleCoordinates = possibleCoordinates.concat(getCircleCircleIntersection({
357
- x: positionedCircle.x,
358
- y: positionedCircle.y,
359
- r: distance
360
- }, {
361
- x: positionedCircle2.x,
362
- y: positionedCircle2.y,
363
- r: distance2
364
- }));
365
- });
366
- // Iterate all suggested coordinates and find the best one.
367
- possibleCoordinates.forEach(function (coordinates) {
368
- circle.x = coordinates.x;
369
- circle.y = coordinates.y;
370
- // Calculate loss for the suggested coordinates.
371
- var currentLoss = loss(mapOfIdToCircles, relationsWithTwoSets);
372
- // If the loss is better, then use these new coordinates
373
- if (currentLoss < best.loss) {
374
- best.loss = currentLoss;
375
- best.coordinates = coordinates;
376
- }
377
- });
378
- // Return resulting coordinates.
379
- return best;
380
- }, {
381
- loss: Number.MAX_VALUE,
382
- coordinates: void 0
311
+ var positionSet = function positionSet(set, coordinates) {
312
+ var circle = set.circle;
313
+ circle.x = coordinates.x;
314
+ circle.y = coordinates.y;
315
+ positionedSets.push(set);
316
+ };
317
+ // Find overlap between sets. Ignore relations with more then 2 sets.
318
+ addOverlapToSets(relations);
319
+ // Sort sets by the sum of their size from large to small.
320
+ var sortedByOverlap = relations
321
+ .filter(isSet)
322
+ .sort(sortByTotalOverlap);
323
+ // Position the most overlapped set at 0,0.
324
+ positionSet(sortedByOverlap.shift(), { x: 0, y: 0 });
325
+ var relationsWithTwoSets = relations.filter(function (x) {
326
+ return x.sets.length === 2;
327
+ });
328
+ // Iterate and position the remaining sets.
329
+ sortedByOverlap.forEach(function (set) {
330
+ var circle = set.circle, radius = circle.r, overlapping = set.overlapping;
331
+ var bestPosition = positionedSets.reduce(function (best, positionedSet, i) {
332
+ var positionedCircle = positionedSet.circle, overlap = overlapping[positionedSet.sets[0]];
333
+ // Calculate the distance between the sets to get the
334
+ // correct overlap
335
+ var distance = getDistanceBetweenCirclesByOverlap(radius, positionedCircle.r, overlap);
336
+ // Create a list of possible coordinates calculated from
337
+ // distance.
338
+ var possibleCoordinates = [
339
+ { x: positionedCircle.x + distance, y: positionedCircle.y },
340
+ { x: positionedCircle.x - distance, y: positionedCircle.y },
341
+ { x: positionedCircle.x, y: positionedCircle.y + distance },
342
+ { x: positionedCircle.x, y: positionedCircle.y - distance }
343
+ ];
344
+ // If there are more circles overlapping, then add the
345
+ // intersection points as possible positions.
346
+ positionedSets.slice(i + 1).forEach(function (positionedSet2) {
347
+ var positionedCircle2 = positionedSet2.circle, overlap2 = overlapping[positionedSet2.sets[0]], distance2 = getDistanceBetweenCirclesByOverlap(radius, positionedCircle2.r, overlap2);
348
+ // Add intersections to list of coordinates.
349
+ possibleCoordinates = possibleCoordinates.concat(getCircleCircleIntersection({
350
+ x: positionedCircle.x,
351
+ y: positionedCircle.y,
352
+ r: distance
353
+ }, {
354
+ x: positionedCircle2.x,
355
+ y: positionedCircle2.y,
356
+ r: distance2
357
+ }));
383
358
  });
384
- // Add the set to its final position.
385
- positionSet(set, bestPosition.coordinates);
359
+ // Iterate all suggested coordinates and find the best one.
360
+ possibleCoordinates.forEach(function (coordinates) {
361
+ circle.x = coordinates.x;
362
+ circle.y = coordinates.y;
363
+ // Calculate loss for the suggested coordinates.
364
+ var currentLoss = loss(mapOfIdToCircles, relationsWithTwoSets);
365
+ // If the loss is better, then use these new coordinates
366
+ if (currentLoss < best.loss) {
367
+ best.loss = currentLoss;
368
+ best.coordinates = coordinates;
369
+ }
370
+ });
371
+ // Return resulting coordinates.
372
+ return best;
373
+ }, {
374
+ loss: Number.MAX_VALUE,
375
+ coordinates: void 0
386
376
  });
387
- // Return the positions of each set.
388
- return mapOfIdToCircles;
389
- }
390
- VennUtils.layoutGreedyVenn = layoutGreedyVenn;
377
+ // Add the set to its final position.
378
+ positionSet(set, bestPosition.coordinates);
379
+ });
380
+ // Return the positions of each set.
381
+ return mapOfIdToCircles;
382
+ }
383
+ /**
384
+ * Calculates the difference between the desired overlap and the actual
385
+ * overlap between two circles.
386
+ * @private
387
+ * @param {Dictionary<Highcharts.CircleObject>} mapOfIdToCircle
388
+ * Map from id to circle.
389
+ * @param {Array<Highcharts.VennRelationObject>} relations
390
+ * List of relations to calculate the loss of.
391
+ * @return {number}
392
+ * Returns the loss between positions of the circles for the given
393
+ * relations.
394
+ */
395
+ function loss(mapOfIdToCircle, relations) {
396
+ var precision = 10e10;
397
+ // Iterate all the relations and calculate their individual loss.
398
+ return relations.reduce(function (totalLoss, relation) {
399
+ var loss = 0;
400
+ if (relation.sets.length > 1) {
401
+ var wantedOverlap = relation.value;
402
+ // Calculate the actual overlap between the sets.
403
+ var actualOverlap = getOverlapBetweenCircles(
404
+ // Get the circles for the given sets.
405
+ relation.sets.map(function (set) {
406
+ return mapOfIdToCircle[set];
407
+ }));
408
+ var diff = wantedOverlap - actualOverlap;
409
+ loss = Math.round((diff * diff) * precision) / precision;
410
+ }
411
+ // Add calculated loss to the sum.
412
+ return totalLoss + loss;
413
+ }, 0);
414
+ }
415
+ /**
416
+ * Finds an optimal position for a given point.
417
+ * @todo add unit tests.
418
+ * @todo add constraints to optimize the algorithm.
419
+ * @private
420
+ * @param {Highcharts.NelderMeadTestFunction} fn
421
+ * The function to test a point.
422
+ * @param {Highcharts.NelderMeadPointArray} initial
423
+ * The initial point to optimize.
424
+ * @return {Highcharts.NelderMeadPointArray}
425
+ * Returns the opimized position of a point.
426
+ */
427
+ function nelderMead(fn, initial) {
428
+ var maxIterations = 100, sortByFx = function (a, b) {
429
+ return a.fx - b.fx;
430
+ }, pRef = 1, // Reflection parameter
431
+ pExp = 2, // Expansion parameter
432
+ pCon = -0.5, // Contraction parameter
433
+ pOCon = pCon * pRef, // Outwards contraction parameter
434
+ pShrink = 0.5; // Shrink parameter
391
435
  /**
392
- * Calculates the difference between the desired overlap and the actual
393
- * overlap between two circles.
394
436
  * @private
395
- * @param {Dictionary<Highcharts.CircleObject>} mapOfIdToCircle
396
- * Map from id to circle.
397
- * @param {Array<Highcharts.VennRelationObject>} relations
398
- * List of relations to calculate the loss of.
399
- * @return {number}
400
- * Returns the loss between positions of the circles for the given
401
- * relations.
402
437
  */
403
- function loss(mapOfIdToCircle, relations) {
404
- var precision = 10e10;
405
- // Iterate all the relations and calculate their individual loss.
406
- return relations.reduce(function (totalLoss, relation) {
407
- var loss = 0;
408
- if (relation.sets.length > 1) {
409
- var wantedOverlap = relation.value;
410
- // Calculate the actual overlap between the sets.
411
- var actualOverlap = getOverlapBetweenCircles(
412
- // Get the circles for the given sets.
413
- relation.sets.map(function (set) {
414
- return mapOfIdToCircle[set];
415
- }));
416
- var diff = wantedOverlap - actualOverlap;
417
- loss = Math.round((diff * diff) * precision) / precision;
418
- }
419
- // Add calculated loss to the sum.
420
- return totalLoss + loss;
421
- }, 0);
422
- }
423
- VennUtils.loss = loss;
438
+ var weightedSum = function (weight1, v1, weight2, v2) { return v1.map(function (x, i) { return weight1 * x + weight2 * v2[i]; }); };
424
439
  /**
425
- * Prepares the venn data so that it is usable for the layout function.
426
- * Filter out sets, or intersections that includes sets, that are missing in
427
- * the data or has (value < 1). Adds missing relations between sets in the
428
- * data as value = 0.
429
440
  * @private
430
- * @param {Array<object>} data The raw input data.
431
- * @return {Array<object>} Returns an array of valid venn data.
432
441
  */
433
- function processVennData(data) {
434
- var d = isArray(data) ? data : [];
435
- var validSets = d
436
- .reduce(function (arr, x) {
437
- // Check if x is a valid set, and that it is not an duplicate.
438
- if (isValidSet(x) && arr.indexOf(x.sets[0]) === -1) {
439
- arr.push(x.sets[0]);
440
- }
441
- return arr;
442
- }, [])
443
- .sort();
444
- var mapOfIdToRelation = d.reduce(function (mapOfIdToRelation, relation) {
445
- if (isValidRelation(relation) &&
446
- !relation.sets.some(function (set) {
447
- return validSets.indexOf(set) === -1;
448
- })) {
449
- mapOfIdToRelation[relation.sets.sort().join()] =
450
- relation;
442
+ var getSimplex = function (initial) {
443
+ var n = initial.length, simplex = new Array(n + 1);
444
+ // Initial point to the simplex.
445
+ simplex[0] = initial;
446
+ simplex[0].fx = fn(initial);
447
+ // Create a set of extra points based on the initial.
448
+ for (var i = 0; i < n; ++i) {
449
+ var point = initial.slice();
450
+ point[i] = point[i] ? point[i] * 1.05 : 0.001;
451
+ point.fx = fn(point);
452
+ simplex[i + 1] = point;
453
+ }
454
+ return simplex;
455
+ };
456
+ var updateSimplex = function (simplex, point) {
457
+ point.fx = fn(point);
458
+ simplex[simplex.length - 1] = point;
459
+ return simplex;
460
+ };
461
+ var shrinkSimplex = function (simplex) {
462
+ var best = simplex[0];
463
+ return simplex.map(function (point) {
464
+ var p = weightedSum(1 - pShrink, best, pShrink, point);
465
+ p.fx = fn(p);
466
+ return p;
467
+ });
468
+ };
469
+ var getPoint = function (centroid, worst, a, b) {
470
+ var point = weightedSum(a, centroid, b, worst);
471
+ point.fx = fn(point);
472
+ return point;
473
+ };
474
+ // Create a simplex
475
+ var simplex = getSimplex(initial);
476
+ // Iterate from 0 to max iterations
477
+ for (var i = 0; i < maxIterations; i++) {
478
+ // Sort the simplex
479
+ simplex.sort(sortByFx);
480
+ // Create a centroid from the simplex
481
+ var worst = simplex[simplex.length - 1];
482
+ var centroid = getCentroid(simplex);
483
+ // Calculate the reflected point.
484
+ var reflected = getPoint(centroid, worst, 1 + pRef, -pRef);
485
+ if (reflected.fx < simplex[0].fx) {
486
+ // If reflected point is the best, then possibly expand.
487
+ var expanded = getPoint(centroid, worst, 1 + pExp, -pExp);
488
+ simplex = updateSimplex(simplex, (expanded.fx < reflected.fx) ? expanded : reflected);
489
+ }
490
+ else if (reflected.fx >= simplex[simplex.length - 2].fx) {
491
+ // If the reflected point is worse than the second worse, then
492
+ // contract.
493
+ var contracted = void 0;
494
+ if (reflected.fx > worst.fx) {
495
+ // If the reflected is worse than the worst point, do a
496
+ // contraction
497
+ contracted = getPoint(centroid, worst, 1 + pCon, -pCon);
498
+ if (contracted.fx < worst.fx) {
499
+ simplex = updateSimplex(simplex, contracted);
500
+ }
501
+ else {
502
+ simplex = shrinkSimplex(simplex);
503
+ }
451
504
  }
452
- return mapOfIdToRelation;
453
- }, {});
454
- validSets.reduce(function (combinations, set, i, arr) {
455
- var remaining = arr.slice(i + 1);
456
- remaining.forEach(function (set2) {
457
- combinations.push(set + ',' + set2);
458
- });
459
- return combinations;
460
- }, []).forEach(function (combination) {
461
- if (!mapOfIdToRelation[combination]) {
462
- var obj = {
463
- sets: combination.split(','),
464
- value: 0
465
- };
466
- mapOfIdToRelation[combination] = obj;
505
+ else {
506
+ // Otherwise do an outwards contraction
507
+ contracted = getPoint(centroid, worst, 1 - pOCon, pOCon);
508
+ if (contracted.fx < reflected.fx) {
509
+ simplex = updateSimplex(simplex, contracted);
510
+ }
511
+ else {
512
+ simplex = shrinkSimplex(simplex);
513
+ }
467
514
  }
468
- });
469
- // Transform map into array.
470
- return Object
471
- .keys(mapOfIdToRelation)
472
- .map(function (id) {
473
- return mapOfIdToRelation[id];
474
- });
475
- }
476
- VennUtils.processVennData = processVennData;
477
- /**
478
- * Takes two sets and finds the one with the largest total overlap.
479
- * @private
480
- * @param {object} a The first set to compare.
481
- * @param {object} b The second set to compare.
482
- * @return {number} Returns 0 if a and b are equal, <0 if a is greater, >0 if b
483
- * is greater.
484
- */
485
- function sortByTotalOverlap(a, b) {
486
- return b.totalOverlap - a.totalOverlap;
515
+ }
516
+ else {
517
+ simplex = updateSimplex(simplex, reflected);
518
+ }
487
519
  }
488
- VennUtils.sortByTotalOverlap = sortByTotalOverlap;
489
- })(VennUtils || (VennUtils = {}));
520
+ return simplex[0];
521
+ }
522
+ /**
523
+ * Prepares the venn data so that it is usable for the layout function.
524
+ * Filter out sets, or intersections that includes sets, that are missing in
525
+ * the data or has (value < 1). Adds missing relations between sets in the
526
+ * data as value = 0.
527
+ * @private
528
+ * @param {Array<object>} data The raw input data.
529
+ * @return {Array<object>} Returns an array of valid venn data.
530
+ */
531
+ function processVennData(data) {
532
+ var d = isArray(data) ? data : [];
533
+ var validSets = d
534
+ .reduce(function (arr, x) {
535
+ // Check if x is a valid set, and that it is not an duplicate.
536
+ if (isValidSet(x) && arr.indexOf(x.sets[0]) === -1) {
537
+ arr.push(x.sets[0]);
538
+ }
539
+ return arr;
540
+ }, [])
541
+ .sort();
542
+ var mapOfIdToRelation = d.reduce(function (mapOfIdToRelation, relation) {
543
+ if (isValidRelation(relation) &&
544
+ !relation.sets.some(function (set) {
545
+ return validSets.indexOf(set) === -1;
546
+ })) {
547
+ mapOfIdToRelation[relation.sets.sort().join()] =
548
+ relation;
549
+ }
550
+ return mapOfIdToRelation;
551
+ }, {});
552
+ validSets.reduce(function (combinations, set, i, arr) {
553
+ var remaining = arr.slice(i + 1);
554
+ remaining.forEach(function (set2) {
555
+ combinations.push(set + ',' + set2);
556
+ });
557
+ return combinations;
558
+ }, []).forEach(function (combination) {
559
+ if (!mapOfIdToRelation[combination]) {
560
+ var obj = {
561
+ sets: combination.split(','),
562
+ value: 0
563
+ };
564
+ mapOfIdToRelation[combination] = obj;
565
+ }
566
+ });
567
+ // Transform map into array.
568
+ return Object
569
+ .keys(mapOfIdToRelation)
570
+ .map(function (id) {
571
+ return mapOfIdToRelation[id];
572
+ });
573
+ }
574
+ /**
575
+ * Takes two sets and finds the one with the largest total overlap.
576
+ * @private
577
+ * @param {Object} a
578
+ * The first set to compare.
579
+ * @param {Object} b
580
+ * The second set to compare.
581
+ * @return {number}
582
+ * Returns 0 if a and b are equal, <0 if a is greater, >0 if b is greater.
583
+ */
584
+ function sortByTotalOverlap(a, b) {
585
+ return b.totalOverlap - a.totalOverlap;
586
+ }
490
587
  /* *
491
588
  *
492
589
  * Default Export
493
590
  *
494
591
  * */
592
+ var VennUtils = {
593
+ geometry: GU,
594
+ geometryCircles: CU,
595
+ addOverlapToSets: addOverlapToSets,
596
+ getCentroid: getCentroid,
597
+ getDistanceBetweenCirclesByOverlap: getDistanceBetweenCirclesByOverlap,
598
+ getLabelWidth: getLabelWidth,
599
+ getMarginFromCircles: getMarginFromCircles,
600
+ isSet: isSet,
601
+ layoutGreedyVenn: layoutGreedyVenn,
602
+ loss: loss,
603
+ nelderMead: nelderMead,
604
+ processVennData: processVennData,
605
+ sortByTotalOverlap: sortByTotalOverlap
606
+ };
495
607
  export default VennUtils;