highcharts 10.2.0 → 10.2.1

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 (763) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +10 -20
  3. package/css/themes/dark-unica.css +10 -20
  4. package/css/themes/grid-light.css +10 -20
  5. package/css/themes/sand-signika.css +10 -20
  6. package/es-modules/Accessibility/Accessibility.js +6 -0
  7. package/es-modules/Accessibility/Components/LegendComponent.js +8 -8
  8. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +3 -2
  9. package/es-modules/Accessibility/Options/A11yDefaults.js +1 -1
  10. package/es-modules/Core/Axis/Axis.js +3 -0
  11. package/es-modules/Core/Axis/Axis3D.js +1 -1
  12. package/es-modules/Core/Axis/AxisDefaults.js +1 -1
  13. package/es-modules/Core/Axis/BrokenAxis.js +1 -1
  14. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +4 -0
  15. package/es-modules/Core/Axis/NavigatorAxis.js +2 -2
  16. package/es-modules/Core/Axis/OrdinalAxis.js +2 -2
  17. package/es-modules/Core/Axis/RadialAxis.js +1 -1
  18. package/es-modules/Core/Axis/Stacking/StackItem.js +262 -0
  19. package/es-modules/Core/Axis/Stacking/StackingAxis.js +468 -0
  20. package/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js +732 -0
  21. package/es-modules/Core/Axis/TreeGrid/TreeGridTick.js +313 -0
  22. package/es-modules/Core/Axis/WaterfallAxis.js +1 -1
  23. package/es-modules/Core/Axis/ZAxis.js +73 -70
  24. package/es-modules/Core/Chart/Chart.js +16 -2
  25. package/es-modules/Core/Chart/Chart3D.js +2 -2
  26. package/es-modules/Core/Chart/ChartDefaults.js +151 -2
  27. package/es-modules/Core/Chart/StockChart.js +5 -3
  28. package/es-modules/Core/DefaultOptions.js +2 -1
  29. package/es-modules/Core/Geometry/CircleUtilities.js +4 -4
  30. package/es-modules/Core/Globals.js +2 -1
  31. package/es-modules/{Extensions → Core}/Math3D.js +48 -43
  32. package/es-modules/Core/Navigator.js +24 -7
  33. package/es-modules/Core/Pointer.js +7 -9
  34. package/es-modules/Core/Renderer/HTML/AST.js +4 -1
  35. package/es-modules/Core/Renderer/SVG/SVGElement.js +103 -163
  36. package/es-modules/Core/Renderer/SVG/SVGLabel.js +29 -27
  37. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +3 -3
  38. package/es-modules/Core/Renderer/SVG/SVGRenderer3D.js +1 -1
  39. package/es-modules/Core/Renderer/SVG/TextBuilder.js +5 -3
  40. package/es-modules/Core/Scrollbar.js +3 -1
  41. package/es-modules/Core/Series/DataLabel.js +8 -6
  42. package/es-modules/Core/Series/Point.js +2 -2
  43. package/es-modules/Core/Series/Series.js +36 -31
  44. package/es-modules/Core/Series/Series3D.js +1 -1
  45. package/es-modules/Core/Series/SeriesDefaults.js +8 -3
  46. package/es-modules/Core/Series/SeriesRegistry.js +6 -29
  47. package/es-modules/Core/Tooltip.js +14 -3
  48. package/es-modules/Core/Utilities.js +1 -3
  49. package/es-modules/Data/DataConverter.js +5 -0
  50. package/es-modules/Data/DataPromise.js +1 -1
  51. package/es-modules/Data/DataSeriesComposition.js +288 -0
  52. package/es-modules/Data/DataSeriesConverter.js +1 -1
  53. package/es-modules/Data/DataTable.js +2 -2
  54. package/es-modules/Data/Modifiers/ChainModifier.js +1 -1
  55. package/es-modules/Data/Modifiers/DataModifier.js +1 -1
  56. package/es-modules/Data/Modifiers/GroupModifier.js +1 -1
  57. package/es-modules/Data/Modifiers/InvertModifier.js +1 -1
  58. package/es-modules/Data/Modifiers/RangeModifier.js +1 -1
  59. package/es-modules/Data/Modifiers/SeriesPointsModifier.js +1 -1
  60. package/es-modules/Data/Modifiers/SortModifier.js +1 -1
  61. package/es-modules/Data/Parsers/DataParser.js +1 -1
  62. package/es-modules/Data/Stores/DataStore.js +1 -1
  63. package/es-modules/Extensions/Annotations/Annotation.js +347 -1156
  64. package/es-modules/Extensions/Annotations/AnnotationChart.js +291 -0
  65. package/es-modules/Extensions/Annotations/AnnotationDefaults.js +624 -0
  66. package/es-modules/Extensions/Annotations/ControlPoint.js +89 -64
  67. package/es-modules/Extensions/Annotations/{Mixins/ControllableMixin.js → Controllables/Controllable.js} +300 -241
  68. package/es-modules/Extensions/Annotations/Controllables/ControllableCircle.js +63 -50
  69. package/es-modules/Extensions/Annotations/Controllables/ControllableDefaults.js +95 -0
  70. package/es-modules/Extensions/Annotations/Controllables/ControllableEllipse.js +90 -61
  71. package/es-modules/Extensions/Annotations/Controllables/ControllableImage.js +50 -44
  72. package/es-modules/Extensions/Annotations/Controllables/ControllableLabel.js +95 -78
  73. package/es-modules/Extensions/Annotations/Controllables/ControllablePath.js +167 -51
  74. package/es-modules/Extensions/Annotations/Controllables/ControllableRect.js +53 -52
  75. package/es-modules/Extensions/Annotations/{Mixins/EventEmitterMixin.js → EventEmitter.js} +136 -116
  76. package/es-modules/Extensions/Annotations/MockPoint.js +210 -145
  77. package/es-modules/Extensions/Annotations/NavigationBindings.js +272 -674
  78. package/es-modules/Extensions/Annotations/NavigationBindingsDefaults.js +396 -0
  79. package/es-modules/Extensions/Annotations/NavigationBindingsUtilities.js +98 -0
  80. package/es-modules/Extensions/Annotations/Popup/Popup.js +295 -0
  81. package/es-modules/Extensions/Annotations/Popup/PopupAnnotations.js +177 -0
  82. package/es-modules/Extensions/Annotations/Popup/PopupComposition.js +81 -0
  83. package/es-modules/Extensions/Annotations/Popup/PopupIndicators.js +609 -0
  84. package/es-modules/Extensions/Annotations/Popup/PopupTabs.js +134 -0
  85. package/es-modules/Extensions/Annotations/Types/BasicAnnotation.js +10 -14
  86. package/es-modules/Extensions/Annotations/Types/CrookedLine.js +11 -19
  87. package/es-modules/Extensions/Annotations/Types/ElliottWave.js +10 -10
  88. package/es-modules/Extensions/Annotations/Types/Fibonacci.js +28 -20
  89. package/es-modules/Extensions/Annotations/Types/FibonacciTimeZones.js +63 -63
  90. package/es-modules/Extensions/Annotations/Types/InfinityLine.js +10 -19
  91. package/es-modules/Extensions/Annotations/Types/Measure.js +255 -249
  92. package/es-modules/Extensions/Annotations/Types/Pitchfork.js +11 -17
  93. package/es-modules/Extensions/Annotations/Types/TimeCycles.js +20 -17
  94. package/es-modules/Extensions/Annotations/Types/Tunnel.js +12 -13
  95. package/es-modules/Extensions/Annotations/Types/VerticalLine.js +11 -15
  96. package/es-modules/Extensions/Boost/Boost.js +320 -15
  97. package/es-modules/Extensions/Boost/BoostChart.js +245 -0
  98. package/es-modules/Extensions/Boost/BoostSeries.js +927 -0
  99. package/es-modules/Extensions/Boost/BoostableMap.js +21 -5
  100. package/es-modules/Extensions/Boost/Boostables.js +13 -2
  101. package/es-modules/Extensions/Boost/NamedColors.js +15 -6
  102. package/es-modules/Extensions/Boost/WGLDrawMode.js +36 -0
  103. package/es-modules/Extensions/Boost/WGLRenderer.js +288 -295
  104. package/es-modules/Extensions/Boost/WGLShader.js +370 -376
  105. package/es-modules/Extensions/Boost/WGLVertexBuffer.js +192 -0
  106. package/es-modules/Extensions/BoostCanvas.js +62 -46
  107. package/es-modules/Extensions/Breadcrumbs.js +4 -0
  108. package/es-modules/Extensions/DataGrouping.js +65 -27
  109. package/es-modules/Extensions/Debugger/Debugger.js +60 -22
  110. package/es-modules/Extensions/DraggablePoints.js +4 -3
  111. package/es-modules/Extensions/Drilldown.js +7 -8
  112. package/es-modules/Extensions/{ExportData.js → ExportData/ExportData.js} +341 -530
  113. package/es-modules/Extensions/ExportData/ExportDataDefaults.js +272 -0
  114. package/es-modules/Extensions/Exporting/Exporting.js +5 -1
  115. package/es-modules/Extensions/Exporting/ExportingDefaults.js +3 -1
  116. package/es-modules/Extensions/{FullScreen.js → Exporting/Fullscreen.js} +72 -27
  117. package/es-modules/Extensions/MarkerClusters.js +2 -0
  118. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +1 -1
  119. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  120. package/es-modules/Extensions/ParallelCoordinates.js +11 -7
  121. package/es-modules/Extensions/ScrollablePlotArea.js +1 -1
  122. package/es-modules/Extensions/SeriesLabel/SeriesLabel.js +2 -2
  123. package/es-modules/Extensions/Sonification/ChartSonify.js +1 -1
  124. package/es-modules/Maps/MapPointer.js +1 -1
  125. package/es-modules/Maps/MapView.js +2 -1
  126. package/es-modules/Series/{Area3DSeries.js → Area3D/Area3DSeries.js} +42 -20
  127. package/es-modules/Series/AreaRange/AreaRangeSeries.js +8 -2
  128. package/es-modules/Series/Bubble/BubbleLegendComposition.js +223 -231
  129. package/es-modules/Series/Bubble/BubbleLegendItem.js +46 -45
  130. package/es-modules/Series/Bubble/BubbleSeries.js +85 -66
  131. package/es-modules/Series/Column/ColumnSeries.js +2 -0
  132. package/es-modules/Series/Column3D/Column3DComposition.js +2 -2
  133. package/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js +1 -1
  134. package/es-modules/Series/Cylinder/CylinderComposition.js +1 -1
  135. package/es-modules/Series/DependencyWheel/DependencyWheelPoint.js +24 -11
  136. package/es-modules/Series/DependencyWheel/DependencyWheelSeries.js +16 -2
  137. package/es-modules/Series/DragNodesComposition.js +166 -0
  138. package/es-modules/Series/Funnel3D/Funnel3DSeries.js +1 -1
  139. package/es-modules/Series/Gantt/GanttSeries.js +1 -1
  140. package/es-modules/Series/GraphLayoutComposition.js +130 -0
  141. package/es-modules/Series/Heatmap/HeatmapSeries.js +5 -1
  142. package/es-modules/Series/Lollipop/LollipopPoint.js +21 -11
  143. package/es-modules/Series/Lollipop/LollipopSeries.js +15 -10
  144. package/es-modules/Series/Map/MapSeries.js +6 -1
  145. package/es-modules/Series/MapBubble/MapBubblePoint.js +15 -17
  146. package/es-modules/Series/MapBubble/MapBubbleSeries.js +19 -19
  147. package/es-modules/Series/Networkgraph/EulerIntegration.js +199 -0
  148. package/es-modules/Series/Networkgraph/NetworkgraphPoint.js +290 -0
  149. package/es-modules/Series/Networkgraph/NetworkgraphSeries.js +401 -0
  150. package/es-modules/Series/Networkgraph/NetworkgraphSeriesDefaults.js +545 -0
  151. package/es-modules/Series/Networkgraph/QuadTree.js +66 -272
  152. package/es-modules/Series/Networkgraph/QuadTreeNode.js +271 -0
  153. package/es-modules/Series/Networkgraph/{Layouts.js → ReingoldFruchtermanLayout.js} +240 -259
  154. package/es-modules/Series/Networkgraph/VerletIntegration.js +193 -0
  155. package/es-modules/Series/Organization/OrganizationSeries.js +9 -1
  156. package/es-modules/Series/PackedBubble/PackedBubbleIntegration.js +81 -0
  157. package/es-modules/Series/PackedBubble/{PackedBubbleComposition.js → PackedBubbleLayout.js} +114 -77
  158. package/es-modules/Series/PackedBubble/PackedBubblePoint.js +2 -2
  159. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +197 -570
  160. package/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js +394 -0
  161. package/es-modules/Series/Pie/PieSeries.js +3 -1
  162. package/es-modules/Series/PolarComposition.js +12 -12
  163. package/es-modules/Series/Sankey/SankeySeries.js +13 -1
  164. package/es-modules/Series/Scatter/ScatterSeries.js +4 -1
  165. package/es-modules/Series/Scatter3D/Scatter3DSeries.js +1 -1
  166. package/es-modules/Series/SeriesOnPointComposition.js +5 -1
  167. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +1 -1
  168. package/es-modules/Series/Sunburst/SunburstPoint.js +5 -6
  169. package/es-modules/Series/Sunburst/SunburstSeries.js +24 -2
  170. package/es-modules/Series/Timeline/TimelineSeries.js +2 -0
  171. package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
  172. package/es-modules/Series/Vector/VectorSeries.js +2 -4
  173. package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -1
  174. package/es-modules/Series/Wordcloud/WordcloudUtils.js +1 -1
  175. package/es-modules/Series/XRange/XRangePoint.js +54 -45
  176. package/es-modules/Series/XRange/XRangeSeries.js +121 -273
  177. package/es-modules/Series/XRange/XRangeSeriesDefaults.js +211 -0
  178. package/es-modules/Stock/Indicators/ABands/ABandsIndicator.js +10 -2
  179. package/es-modules/Stock/Indicators/AD/ADIndicator.js +5 -0
  180. package/es-modules/Stock/Indicators/AO/AOIndicator.js +22 -11
  181. package/es-modules/Stock/Indicators/APO/APOIndicator.js +6 -1
  182. package/es-modules/Stock/Indicators/ATR/ATRIndicator.js +16 -3
  183. package/es-modules/Stock/Indicators/Aroon/AroonIndicator.js +15 -2
  184. package/es-modules/Stock/Indicators/AroonOscillator/AroonOscillatorIndicator.js +6 -2
  185. package/es-modules/Stock/Indicators/BB/BBIndicator.js +5 -1
  186. package/es-modules/Stock/Indicators/CCI/CCIIndicator.js +16 -3
  187. package/es-modules/Stock/Indicators/CMF/CMFIndicator.js +20 -0
  188. package/es-modules/Stock/Indicators/CMO/CMOIndicator.js +15 -1
  189. package/es-modules/Stock/Indicators/Chaikin/ChaikinIndicator.js +7 -2
  190. package/es-modules/Stock/Indicators/DEMA/DEMAIndicator.js +25 -0
  191. package/es-modules/Stock/Indicators/DMI/DMIIndicator.js +5 -0
  192. package/es-modules/Stock/Indicators/DPO/DPOIndicator.js +19 -8
  193. package/es-modules/Stock/Indicators/EMA/EMAIndicator.js +10 -0
  194. package/es-modules/Stock/Indicators/IKH/IKHIndicator.js +34 -15
  195. package/es-modules/Stock/Indicators/KeltnerChannels/KeltnerChannelsIndicator.js +25 -0
  196. package/es-modules/Stock/Indicators/Klinger/KlingerIndicator.js +12 -1
  197. package/es-modules/Stock/Indicators/LinearRegression/{LinearRegression.js → LinearRegressionIndicator.js} +11 -1
  198. package/es-modules/Stock/Indicators/LinearRegressionAngle/{LinearRegressionAngle.js → LinearRegressionAngleIndicator.js} +12 -7
  199. package/es-modules/Stock/Indicators/LinearRegressionIntercept/{LinearRegressionIntercept.js → LinearRegressionInterceptIndicator.js} +11 -1
  200. package/es-modules/Stock/Indicators/LinearRegressionSlopes/{LinearRegressionSlopes.js → LinearRegressionSlopesIndicator.js} +11 -1
  201. package/es-modules/Stock/Indicators/MACD/MACDIndicator.js +21 -10
  202. package/es-modules/Stock/Indicators/MFI/MFIIndicator.js +23 -10
  203. package/es-modules/Stock/Indicators/Momentum/MomentumIndicator.js +30 -2
  204. package/es-modules/Stock/Indicators/NATR/NATRIndicator.js +16 -1
  205. package/es-modules/Stock/Indicators/OBV/OBVIndicator.js +10 -0
  206. package/es-modules/Stock/Indicators/PC/PCIndicator.js +13 -8
  207. package/es-modules/Stock/Indicators/PPO/PPOIndicator.js +14 -4
  208. package/es-modules/Stock/Indicators/PSAR/PSARIndicator.js +16 -3
  209. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsIndicator.js +16 -6
  210. package/es-modules/Stock/Indicators/PivotPoints/PivotPointsPoint.js +16 -12
  211. package/es-modules/Stock/Indicators/PriceEnvelopes/PriceEnvelopesIndicator.js +25 -0
  212. package/es-modules/Stock/Indicators/ROC/ROCIndicator.js +15 -2
  213. package/es-modules/Stock/Indicators/RSI/RSIIndicator.js +20 -2
  214. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +1 -1
  215. package/es-modules/Stock/Indicators/SlowStochastic/SlowStochasticIndicator.js +25 -0
  216. package/es-modules/Stock/Indicators/Stochastic/StochasticIndicator.js +15 -0
  217. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +17 -3
  218. package/es-modules/Stock/Indicators/TRIX/TRIXIndicator.js +25 -0
  219. package/es-modules/Stock/Indicators/TrendLine/TrendLineIndicator.js +14 -4
  220. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +32 -3
  221. package/es-modules/Stock/Indicators/VBP/VBPPoint.js +6 -6
  222. package/es-modules/Stock/Indicators/VWAP/VWAPIndicator.js +11 -1
  223. package/es-modules/Stock/Indicators/WMA/WMAIndicator.js +30 -2
  224. package/es-modules/Stock/Indicators/WilliamsR/WilliamsRIndicator.js +10 -0
  225. package/es-modules/Stock/Indicators/Zigzag/ZigzagIndicator.js +11 -1
  226. package/es-modules/Stock/StockToolbar.js +568 -0
  227. package/es-modules/Stock/StockTools.js +256 -0
  228. package/es-modules/Stock/StockToolsBindings.js +114 -629
  229. package/es-modules/Stock/StockToolsDefaults.js +1190 -0
  230. package/es-modules/Stock/StockToolsGui.js +150 -1771
  231. package/es-modules/Stock/StockToolsUtilities.js +423 -0
  232. package/es-modules/masters/highcharts-3d.src.js +5 -4
  233. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  234. package/es-modules/masters/highcharts-more.src.js +4 -3
  235. package/es-modules/masters/highcharts.src.js +5 -2
  236. package/es-modules/masters/highmaps.src.js +1 -1
  237. package/es-modules/masters/highstock.src.js +1 -1
  238. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  239. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  240. package/es-modules/masters/indicators/ao.src.js +1 -1
  241. package/es-modules/masters/indicators/apo.src.js +1 -1
  242. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  243. package/es-modules/masters/indicators/aroon.src.js +1 -1
  244. package/es-modules/masters/indicators/atr.src.js +1 -1
  245. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  246. package/es-modules/masters/indicators/cci.src.js +1 -1
  247. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  248. package/es-modules/masters/indicators/cmf.src.js +1 -1
  249. package/es-modules/masters/indicators/cmo.src.js +1 -1
  250. package/es-modules/masters/indicators/dema.src.js +1 -1
  251. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  252. package/es-modules/masters/indicators/dmi.src.js +1 -1
  253. package/es-modules/masters/indicators/dpo.src.js +1 -1
  254. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  255. package/es-modules/masters/indicators/indicators-all.src.js +5 -7
  256. package/es-modules/masters/indicators/indicators.src.js +1 -1
  257. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  258. package/es-modules/masters/indicators/klinger.src.js +1 -1
  259. package/es-modules/masters/indicators/macd.src.js +1 -1
  260. package/es-modules/masters/indicators/mfi.src.js +1 -1
  261. package/es-modules/masters/indicators/momentum.src.js +1 -1
  262. package/es-modules/masters/indicators/natr.src.js +1 -1
  263. package/es-modules/masters/indicators/obv.src.js +1 -1
  264. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  265. package/es-modules/masters/indicators/ppo.src.js +1 -1
  266. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  267. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  268. package/es-modules/masters/indicators/psar.src.js +1 -1
  269. package/es-modules/masters/indicators/regressions.src.js +5 -5
  270. package/es-modules/masters/indicators/roc.src.js +1 -1
  271. package/es-modules/masters/indicators/rsi.src.js +1 -1
  272. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  273. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  274. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  275. package/es-modules/masters/indicators/tema.src.js +1 -1
  276. package/es-modules/masters/indicators/trendline.src.js +1 -1
  277. package/es-modules/masters/indicators/trix.src.js +1 -1
  278. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  279. package/es-modules/masters/indicators/vwap.src.js +1 -1
  280. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  281. package/es-modules/masters/indicators/wma.src.js +1 -1
  282. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  283. package/es-modules/masters/modules/accessibility.src.js +1 -1
  284. package/es-modules/masters/modules/annotations-advanced.src.js +6 -4
  285. package/es-modules/masters/modules/annotations.src.js +6 -4
  286. package/es-modules/masters/modules/arc-diagram.src.js +1 -1
  287. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  288. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  289. package/es-modules/masters/modules/boost.src.js +6 -2
  290. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  291. package/es-modules/masters/modules/bullet.src.js +1 -1
  292. package/es-modules/masters/modules/coloraxis.src.js +1 -1
  293. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  294. package/es-modules/masters/modules/cylinder.src.js +1 -1
  295. package/es-modules/masters/modules/data.src.js +1 -1
  296. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  297. package/es-modules/masters/modules/debugger.src.js +5 -3
  298. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  299. package/es-modules/masters/modules/dotplot.src.js +1 -1
  300. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  301. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  302. package/es-modules/masters/modules/drilldown.src.js +1 -1
  303. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  304. package/es-modules/masters/modules/export-data.src.js +5 -2
  305. package/es-modules/masters/modules/exporting.src.js +1 -2
  306. package/es-modules/masters/modules/full-screen.src.js +6 -2
  307. package/es-modules/masters/modules/funnel.src.js +1 -1
  308. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  309. package/es-modules/masters/modules/gantt.src.js +3 -2
  310. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  311. package/es-modules/masters/modules/heatmap.src.js +1 -1
  312. package/es-modules/masters/modules/heikinashi.src.js +1 -1
  313. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  314. package/es-modules/masters/modules/hollowcandlestick.src.js +1 -1
  315. package/es-modules/masters/modules/item-series.src.js +1 -1
  316. package/es-modules/masters/modules/lollipop.src.js +1 -1
  317. package/es-modules/masters/modules/map.src.js +2 -2
  318. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  319. package/es-modules/masters/modules/networkgraph.src.js +5 -2
  320. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  321. package/es-modules/masters/modules/offline-exporting.src.js +1 -1
  322. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  323. package/es-modules/masters/modules/oldie.src.js +1 -1
  324. package/es-modules/masters/modules/organization.src.js +1 -1
  325. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  326. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  327. package/es-modules/masters/modules/pareto.src.js +1 -1
  328. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  329. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  330. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  331. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  332. package/es-modules/masters/modules/sankey.src.js +1 -1
  333. package/es-modules/masters/modules/series-label.src.js +1 -1
  334. package/es-modules/masters/modules/series-on-point.src.js +1 -1
  335. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  336. package/es-modules/masters/modules/sonification.src.js +1 -1
  337. package/es-modules/masters/modules/static-scale.src.js +1 -1
  338. package/es-modules/masters/modules/stock-tools.src.js +10 -3
  339. package/es-modules/masters/modules/stock.src.js +1 -1
  340. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  341. package/es-modules/masters/modules/sunburst.src.js +1 -1
  342. package/es-modules/masters/modules/tilemap.src.js +1 -1
  343. package/es-modules/masters/modules/timeline.src.js +1 -1
  344. package/es-modules/masters/modules/treegrid.src.js +2 -2
  345. package/es-modules/masters/modules/treemap.src.js +1 -1
  346. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  347. package/es-modules/masters/modules/variwide.src.js +1 -1
  348. package/es-modules/masters/modules/vector.src.js +1 -1
  349. package/es-modules/masters/modules/venn.src.js +1 -1
  350. package/es-modules/masters/modules/windbarb.src.js +1 -1
  351. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  352. package/es-modules/masters/modules/xrange.src.js +5 -2
  353. package/es-modules/masters/themes/avocado.src.js +1 -1
  354. package/es-modules/masters/themes/brand-dark.src.js +1 -1
  355. package/es-modules/masters/themes/brand-light.src.js +1 -1
  356. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  357. package/es-modules/masters/themes/dark-green.src.js +1 -1
  358. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  359. package/es-modules/masters/themes/gray.src.js +1 -1
  360. package/es-modules/masters/themes/grid-light.src.js +1 -1
  361. package/es-modules/masters/themes/grid.src.js +1 -1
  362. package/es-modules/masters/themes/high-contrast-dark.src.js +1 -1
  363. package/es-modules/masters/themes/high-contrast-light.src.js +1 -1
  364. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  365. package/es-modules/masters/themes/skies.src.js +1 -1
  366. package/es-modules/masters/themes/sunset.src.js +1 -1
  367. package/highcharts-3d.js +98 -99
  368. package/highcharts-3d.js.map +1 -1
  369. package/highcharts-3d.src.js +232 -211
  370. package/highcharts-gantt.js +808 -809
  371. package/highcharts-gantt.js.map +1 -1
  372. package/highcharts-gantt.src.js +2308 -2136
  373. package/highcharts-more.d.ts +5 -8
  374. package/highcharts-more.js +201 -194
  375. package/highcharts-more.js.map +1 -1
  376. package/highcharts-more.src.d.ts +5 -8
  377. package/highcharts-more.src.js +3671 -3275
  378. package/highcharts.d.ts +1400 -885
  379. package/highcharts.js +593 -595
  380. package/highcharts.js.map +1 -1
  381. package/highcharts.src.d.ts +1400 -885
  382. package/highcharts.src.js +847 -716
  383. package/highmaps.js +762 -763
  384. package/highmaps.js.map +1 -1
  385. package/highmaps.src.js +1288 -1129
  386. package/highstock.js +796 -798
  387. package/highstock.js.map +1 -1
  388. package/highstock.src.js +953 -762
  389. package/indicators/acceleration-bands.js +1 -1
  390. package/indicators/acceleration-bands.js.map +1 -1
  391. package/indicators/acceleration-bands.src.js +11 -3
  392. package/indicators/accumulation-distribution.js +1 -1
  393. package/indicators/accumulation-distribution.js.map +1 -1
  394. package/indicators/accumulation-distribution.src.js +6 -1
  395. package/indicators/ao.js +6 -6
  396. package/indicators/ao.js.map +1 -1
  397. package/indicators/ao.src.js +23 -14
  398. package/indicators/apo.js +1 -1
  399. package/indicators/apo.js.map +1 -1
  400. package/indicators/apo.src.js +6 -1
  401. package/indicators/aroon-oscillator.js +10 -10
  402. package/indicators/aroon-oscillator.js.map +1 -1
  403. package/indicators/aroon-oscillator.src.js +7 -3
  404. package/indicators/aroon.js +1 -1
  405. package/indicators/aroon.js.map +1 -1
  406. package/indicators/aroon.src.js +16 -3
  407. package/indicators/atr.js +1 -1
  408. package/indicators/atr.js.map +1 -1
  409. package/indicators/atr.src.js +17 -4
  410. package/indicators/bollinger-bands.js +1 -1
  411. package/indicators/bollinger-bands.js.map +1 -1
  412. package/indicators/bollinger-bands.src.js +6 -2
  413. package/indicators/cci.js +1 -1
  414. package/indicators/cci.js.map +1 -1
  415. package/indicators/cci.src.js +17 -4
  416. package/indicators/chaikin.js +8 -8
  417. package/indicators/chaikin.js.map +1 -1
  418. package/indicators/chaikin.src.js +13 -5
  419. package/indicators/cmf.js +1 -1
  420. package/indicators/cmf.js.map +1 -1
  421. package/indicators/cmf.src.js +21 -1
  422. package/indicators/cmo.js +1 -1
  423. package/indicators/cmo.js.map +1 -1
  424. package/indicators/cmo.src.js +16 -2
  425. package/indicators/dema.js +1 -1
  426. package/indicators/dema.js.map +1 -1
  427. package/indicators/dema.src.js +26 -1
  428. package/indicators/disparity-index.js +1 -1
  429. package/indicators/disparity-index.src.js +1 -1
  430. package/indicators/dmi.js +1 -1
  431. package/indicators/dmi.js.map +1 -1
  432. package/indicators/dmi.src.js +6 -1
  433. package/indicators/dpo.js +1 -1
  434. package/indicators/dpo.js.map +1 -1
  435. package/indicators/dpo.src.js +20 -9
  436. package/indicators/ichimoku-kinko-hyo.js +1 -1
  437. package/indicators/ichimoku-kinko-hyo.js.map +1 -1
  438. package/indicators/ichimoku-kinko-hyo.src.js +35 -16
  439. package/indicators/indicators-all.js +199 -199
  440. package/indicators/indicators-all.js.map +1 -1
  441. package/indicators/indicators-all.src.js +754 -162
  442. package/indicators/indicators.js +1 -1
  443. package/indicators/indicators.js.map +1 -1
  444. package/indicators/indicators.src.js +12 -2
  445. package/indicators/keltner-channels.js +1 -1
  446. package/indicators/keltner-channels.js.map +1 -1
  447. package/indicators/keltner-channels.src.js +26 -1
  448. package/indicators/klinger.js +12 -12
  449. package/indicators/klinger.js.map +1 -1
  450. package/indicators/klinger.src.js +13 -4
  451. package/indicators/macd.js +1 -1
  452. package/indicators/macd.js.map +1 -1
  453. package/indicators/macd.src.js +22 -13
  454. package/indicators/mfi.js +1 -1
  455. package/indicators/mfi.js.map +1 -1
  456. package/indicators/mfi.src.js +24 -11
  457. package/indicators/momentum.js +1 -1
  458. package/indicators/momentum.js.map +1 -1
  459. package/indicators/momentum.src.js +31 -3
  460. package/indicators/natr.js +1 -1
  461. package/indicators/natr.js.map +1 -1
  462. package/indicators/natr.src.js +17 -3
  463. package/indicators/obv.js +1 -1
  464. package/indicators/obv.js.map +1 -1
  465. package/indicators/obv.src.js +11 -1
  466. package/indicators/pivot-points.js +1 -1
  467. package/indicators/pivot-points.js.map +1 -1
  468. package/indicators/pivot-points.src.js +32 -19
  469. package/indicators/ppo.js +1 -1
  470. package/indicators/ppo.js.map +1 -1
  471. package/indicators/ppo.src.js +15 -5
  472. package/indicators/price-channel.js +1 -1
  473. package/indicators/price-channel.js.map +1 -1
  474. package/indicators/price-channel.src.js +14 -9
  475. package/indicators/price-envelopes.js +1 -1
  476. package/indicators/price-envelopes.js.map +1 -1
  477. package/indicators/price-envelopes.src.js +26 -1
  478. package/indicators/psar.js +1 -1
  479. package/indicators/psar.js.map +1 -1
  480. package/indicators/psar.src.js +17 -4
  481. package/indicators/regressions.js +12 -11
  482. package/indicators/regressions.js.map +1 -1
  483. package/indicators/regressions.src.js +50 -15
  484. package/indicators/roc.js +1 -1
  485. package/indicators/roc.js.map +1 -1
  486. package/indicators/roc.src.js +16 -3
  487. package/indicators/rsi.js +1 -1
  488. package/indicators/rsi.js.map +1 -1
  489. package/indicators/rsi.src.js +21 -3
  490. package/indicators/slow-stochastic.js +1 -1
  491. package/indicators/slow-stochastic.js.map +1 -1
  492. package/indicators/slow-stochastic.src.js +26 -1
  493. package/indicators/stochastic.js +1 -1
  494. package/indicators/stochastic.js.map +1 -1
  495. package/indicators/stochastic.src.js +16 -1
  496. package/indicators/supertrend.js +7 -7
  497. package/indicators/supertrend.js.map +1 -1
  498. package/indicators/supertrend.src.js +18 -6
  499. package/indicators/tema.js +1 -1
  500. package/indicators/tema.src.js +1 -1
  501. package/indicators/trendline.js +1 -1
  502. package/indicators/trendline.js.map +1 -1
  503. package/indicators/trendline.src.js +15 -5
  504. package/indicators/trix.js +1 -1
  505. package/indicators/trix.js.map +1 -1
  506. package/indicators/trix.src.js +26 -1
  507. package/indicators/volume-by-price.js +17 -17
  508. package/indicators/volume-by-price.js.map +1 -1
  509. package/indicators/volume-by-price.src.js +38 -10
  510. package/indicators/vwap.js +1 -1
  511. package/indicators/vwap.js.map +1 -1
  512. package/indicators/vwap.src.js +12 -2
  513. package/indicators/williams-r.js +1 -1
  514. package/indicators/williams-r.js.map +1 -1
  515. package/indicators/williams-r.src.js +11 -1
  516. package/indicators/wma.js +1 -1
  517. package/indicators/wma.js.map +1 -1
  518. package/indicators/wma.src.js +31 -3
  519. package/indicators/zigzag.js +1 -1
  520. package/indicators/zigzag.js.map +1 -1
  521. package/indicators/zigzag.src.js +12 -2
  522. package/modules/accessibility.js +183 -182
  523. package/modules/accessibility.js.map +1 -1
  524. package/modules/accessibility.src.js +559 -554
  525. package/modules/annotations-advanced.d.ts +1 -1
  526. package/modules/annotations-advanced.js +193 -192
  527. package/modules/annotations-advanced.js.map +1 -1
  528. package/modules/annotations-advanced.src.d.ts +1 -1
  529. package/modules/annotations-advanced.src.js +9263 -8654
  530. package/modules/annotations.d.ts +1 -1
  531. package/modules/annotations.js +128 -126
  532. package/modules/annotations.js.map +1 -1
  533. package/modules/annotations.src.d.ts +1 -1
  534. package/modules/annotations.src.js +6699 -6063
  535. package/modules/arc-diagram.js +1 -1
  536. package/modules/arc-diagram.src.js +1 -1
  537. package/modules/arrow-symbols.js +1 -1
  538. package/modules/arrow-symbols.src.js +1 -1
  539. package/modules/boost-canvas.d.ts +19 -0
  540. package/modules/boost-canvas.js +81 -16
  541. package/modules/boost-canvas.js.map +1 -1
  542. package/modules/boost-canvas.src.d.ts +19 -0
  543. package/modules/boost-canvas.src.js +3334 -50
  544. package/modules/boost.d.ts +8 -26
  545. package/modules/boost.js +84 -77
  546. package/modules/boost.js.map +1 -1
  547. package/modules/boost.src.d.ts +8 -26
  548. package/modules/boost.src.js +2423 -1888
  549. package/modules/broken-axis.js +2 -2
  550. package/modules/broken-axis.js.map +1 -1
  551. package/modules/broken-axis.src.js +2 -2
  552. package/modules/bullet.js +1 -1
  553. package/modules/bullet.src.js +1 -1
  554. package/modules/coloraxis.js +1 -1
  555. package/modules/coloraxis.js.map +1 -1
  556. package/modules/coloraxis.src.js +5 -1
  557. package/modules/current-date-indicator.js +1 -1
  558. package/modules/current-date-indicator.src.js +1 -1
  559. package/modules/cylinder.js +9 -9
  560. package/modules/cylinder.js.map +1 -1
  561. package/modules/cylinder.src.js +2 -2
  562. package/modules/data.js +1 -1
  563. package/modules/data.src.js +1 -1
  564. package/modules/datagrouping.d.ts +22 -0
  565. package/modules/datagrouping.js +4 -4
  566. package/modules/datagrouping.js.map +1 -1
  567. package/modules/datagrouping.src.d.ts +22 -0
  568. package/modules/datagrouping.src.js +66 -28
  569. package/modules/debugger.js +6 -5
  570. package/modules/debugger.js.map +1 -1
  571. package/modules/debugger.src.js +81 -40
  572. package/modules/dependency-wheel.js +12 -12
  573. package/modules/dependency-wheel.js.map +1 -1
  574. package/modules/dependency-wheel.src.js +41 -14
  575. package/modules/dotplot.js +1 -1
  576. package/modules/dotplot.src.js +1 -1
  577. package/modules/drag-panes.js +1 -1
  578. package/modules/drag-panes.src.js +1 -1
  579. package/modules/draggable-points.js +5 -5
  580. package/modules/draggable-points.js.map +1 -1
  581. package/modules/draggable-points.src.js +5 -4
  582. package/modules/drilldown.d.ts +0 -10
  583. package/modules/drilldown.js +29 -29
  584. package/modules/drilldown.js.map +1 -1
  585. package/modules/drilldown.src.d.ts +0 -10
  586. package/modules/drilldown.src.js +12 -9
  587. package/modules/dumbbell.js +1 -1
  588. package/modules/dumbbell.src.js +1 -1
  589. package/modules/export-data.js +25 -24
  590. package/modules/export-data.js.map +1 -1
  591. package/modules/export-data.src.js +607 -499
  592. package/modules/exporting.js +38 -38
  593. package/modules/exporting.js.map +1 -1
  594. package/modules/exporting.src.js +559 -507
  595. package/modules/full-screen.js +8 -8
  596. package/modules/full-screen.js.map +1 -1
  597. package/modules/full-screen.src.js +76 -26
  598. package/modules/funnel.js +1 -1
  599. package/modules/funnel.src.js +1 -1
  600. package/modules/funnel3d.js +2 -2
  601. package/modules/funnel3d.js.map +1 -1
  602. package/modules/funnel3d.src.js +2 -2
  603. package/modules/gantt.js +217 -216
  604. package/modules/gantt.js.map +1 -1
  605. package/modules/gantt.src.js +1481 -1440
  606. package/modules/grid-axis.js +1 -1
  607. package/modules/grid-axis.src.js +1 -1
  608. package/modules/heatmap.js +1 -1
  609. package/modules/heatmap.js.map +1 -1
  610. package/modules/heatmap.src.js +10 -2
  611. package/modules/heikinashi.js +1 -1
  612. package/modules/heikinashi.src.js +1 -1
  613. package/modules/histogram-bellcurve.js +1 -1
  614. package/modules/histogram-bellcurve.src.js +1 -1
  615. package/modules/hollowcandlestick.js +1 -1
  616. package/modules/hollowcandlestick.src.js +1 -1
  617. package/modules/item-series.js +1 -1
  618. package/modules/item-series.src.js +1 -1
  619. package/modules/lollipop.js +6 -6
  620. package/modules/lollipop.js.map +1 -1
  621. package/modules/lollipop.src.js +37 -22
  622. package/modules/map.d.ts +3 -3
  623. package/modules/map.js +171 -171
  624. package/modules/map.js.map +1 -1
  625. package/modules/map.src.d.ts +3 -3
  626. package/modules/map.src.js +442 -414
  627. package/modules/marker-clusters.js +1 -1
  628. package/modules/marker-clusters.js.map +1 -1
  629. package/modules/marker-clusters.src.js +3 -1
  630. package/modules/networkgraph.js +55 -50
  631. package/modules/networkgraph.js.map +1 -1
  632. package/modules/networkgraph.src.js +2259 -1938
  633. package/modules/no-data-to-display.js +1 -1
  634. package/modules/no-data-to-display.src.js +1 -1
  635. package/modules/offline-exporting.js +2 -2
  636. package/modules/offline-exporting.src.js +2 -2
  637. package/modules/oldie-polyfills.js +1 -1
  638. package/modules/oldie-polyfills.src.js +1 -1
  639. package/modules/oldie.js +2 -2
  640. package/modules/oldie.src.js +2 -2
  641. package/modules/organization.js +15 -15
  642. package/modules/organization.js.map +1 -1
  643. package/modules/organization.src.js +10 -2
  644. package/modules/overlapping-datalabels.js +1 -1
  645. package/modules/overlapping-datalabels.src.js +1 -1
  646. package/modules/parallel-coordinates.js +11 -11
  647. package/modules/parallel-coordinates.js.map +1 -1
  648. package/modules/parallel-coordinates.src.js +13 -8
  649. package/modules/pareto.js +1 -1
  650. package/modules/pareto.src.js +1 -1
  651. package/modules/pathfinder.js +1 -1
  652. package/modules/pathfinder.src.js +1 -1
  653. package/modules/pattern-fill.js +1 -1
  654. package/modules/pattern-fill.src.js +1 -1
  655. package/modules/price-indicator.js +1 -1
  656. package/modules/price-indicator.src.js +1 -1
  657. package/modules/pyramid3d.js +1 -1
  658. package/modules/pyramid3d.src.js +1 -1
  659. package/modules/sankey.js +1 -1
  660. package/modules/sankey.js.map +1 -1
  661. package/modules/sankey.src.js +14 -2
  662. package/modules/series-label.js +5 -5
  663. package/modules/series-label.js.map +1 -1
  664. package/modules/series-label.src.js +3 -3
  665. package/modules/series-on-point.js +1 -1
  666. package/modules/series-on-point.js.map +1 -1
  667. package/modules/series-on-point.src.js +6 -2
  668. package/modules/solid-gauge.js +1 -1
  669. package/modules/solid-gauge.src.js +2 -2
  670. package/modules/sonification.d.ts +2 -2
  671. package/modules/sonification.js +1 -1
  672. package/modules/sonification.src.d.ts +2 -2
  673. package/modules/sonification.src.js +2 -2
  674. package/modules/static-scale.js +1 -1
  675. package/modules/static-scale.src.js +1 -1
  676. package/modules/stock-tools.d.ts +1 -23
  677. package/modules/stock-tools.js +109 -179
  678. package/modules/stock-tools.js.map +1 -1
  679. package/modules/stock-tools.src.d.ts +1 -23
  680. package/modules/stock-tools.src.js +2605 -6335
  681. package/modules/stock.d.ts +8 -0
  682. package/modules/stock.js +105 -105
  683. package/modules/stock.js.map +1 -1
  684. package/modules/stock.src.d.ts +8 -0
  685. package/modules/stock.src.js +105 -45
  686. package/modules/streamgraph.js +1 -1
  687. package/modules/streamgraph.src.js +1 -1
  688. package/modules/sunburst.js +72 -72
  689. package/modules/sunburst.js.map +1 -1
  690. package/modules/sunburst.src.js +38 -12
  691. package/modules/tilemap.js +1 -1
  692. package/modules/tilemap.src.js +1 -1
  693. package/modules/timeline.js +1 -1
  694. package/modules/timeline.js.map +1 -1
  695. package/modules/timeline.src.js +3 -1
  696. package/modules/treegrid.js +57 -57
  697. package/modules/treegrid.js.map +1 -1
  698. package/modules/treegrid.src.js +1022 -1014
  699. package/modules/treemap.js +1 -1
  700. package/modules/treemap.js.map +1 -1
  701. package/modules/treemap.src.js +8 -4
  702. package/modules/variable-pie.js +1 -1
  703. package/modules/variable-pie.src.js +1 -1
  704. package/modules/variwide.js +1 -1
  705. package/modules/variwide.src.js +1 -1
  706. package/modules/vector.js +2 -2
  707. package/modules/vector.js.map +1 -1
  708. package/modules/vector.src.js +3 -5
  709. package/modules/venn.js +1 -1
  710. package/modules/venn.src.js +5 -5
  711. package/modules/windbarb.js +1 -1
  712. package/modules/windbarb.src.js +1 -1
  713. package/modules/wordcloud.js +1 -1
  714. package/modules/wordcloud.src.js +3 -3
  715. package/modules/xrange.js +17 -17
  716. package/modules/xrange.js.map +1 -1
  717. package/modules/xrange.src.js +411 -397
  718. package/package.json +1 -1
  719. package/themes/avocado.js +1 -1
  720. package/themes/avocado.src.js +1 -1
  721. package/themes/brand-dark.js +1 -1
  722. package/themes/brand-dark.src.js +1 -1
  723. package/themes/brand-light.js +1 -1
  724. package/themes/brand-light.src.js +1 -1
  725. package/themes/dark-blue.js +1 -1
  726. package/themes/dark-blue.src.js +1 -1
  727. package/themes/dark-green.js +1 -1
  728. package/themes/dark-green.src.js +1 -1
  729. package/themes/dark-unica.js +1 -1
  730. package/themes/dark-unica.src.js +1 -1
  731. package/themes/gray.js +1 -1
  732. package/themes/gray.src.js +1 -1
  733. package/themes/grid-light.js +1 -1
  734. package/themes/grid-light.src.js +1 -1
  735. package/themes/grid.js +1 -1
  736. package/themes/grid.src.js +1 -1
  737. package/themes/high-contrast-dark.js +1 -1
  738. package/themes/high-contrast-dark.src.js +1 -1
  739. package/themes/high-contrast-light.js +1 -1
  740. package/themes/high-contrast-light.src.js +1 -1
  741. package/themes/sand-signika.js +1 -1
  742. package/themes/sand-signika.src.js +1 -1
  743. package/themes/skies.js +1 -1
  744. package/themes/skies.src.js +1 -1
  745. package/themes/sunset.js +1 -1
  746. package/themes/sunset.src.js +1 -1
  747. package/es-modules/Core/Axis/StackingAxis.js +0 -215
  748. package/es-modules/Core/Axis/TreeGridAxis.js +0 -720
  749. package/es-modules/Core/Axis/TreeGridTick.js +0 -317
  750. package/es-modules/Extensions/Annotations/AnnotationsDefaults.js +0 -0
  751. package/es-modules/Extensions/Annotations/Mixins/MarkerMixin.js +0 -179
  752. package/es-modules/Extensions/Annotations/Popup.js +0 -1123
  753. package/es-modules/Extensions/Boost/BoostAttach.js +0 -154
  754. package/es-modules/Extensions/Boost/BoostInit.js +0 -324
  755. package/es-modules/Extensions/Boost/BoostOptions.js +0 -245
  756. package/es-modules/Extensions/Boost/BoostOverrides.js +0 -386
  757. package/es-modules/Extensions/Boost/BoostUtils.js +0 -255
  758. package/es-modules/Extensions/Boost/WGLVBuffer.js +0 -153
  759. package/es-modules/Extensions/Stacking.js +0 -517
  760. package/es-modules/Series/Networkgraph/DraggableNodes.js +0 -132
  761. package/es-modules/Series/Networkgraph/Integrations.js +0 -348
  762. package/es-modules/Series/Networkgraph/Networkgraph.js +0 -1180
  763. package/es-modules/Series/XRange/XRangeComposition.js +0 -49
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts Gantt JS v10.2.0 (2022-07-05)
2
+ * @license Highcharts Gantt JS v10.2.1 (2022-08-29)
3
3
  *
4
4
  * Gantt series
5
5
  *
@@ -37,7 +37,225 @@
37
37
  }
38
38
  }
39
39
  }
40
- _registerModule(_modules, 'Series/XRange/XRangePoint.js', [_modules['Core/Series/Point.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (Point, SeriesRegistry, U) {
40
+ _registerModule(_modules, 'Series/XRange/XRangeSeriesDefaults.js', [_modules['Core/Utilities.js']], function (U) {
41
+ /* *
42
+ *
43
+ * X-range series module
44
+ *
45
+ * (c) 2010-2021 Torstein Honsi, Lars A. V. Cabrera
46
+ *
47
+ * License: www.highcharts.com/license
48
+ *
49
+ * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
50
+ *
51
+ * */
52
+ var correctFloat = U.correctFloat,
53
+ isNumber = U.isNumber,
54
+ isObject = U.isObject;
55
+ /* *
56
+ *
57
+ * Constants
58
+ *
59
+ * */
60
+ /**
61
+ * The X-range series displays ranges on the X axis, typically time
62
+ * intervals with a start and end date.
63
+ *
64
+ * @sample {highcharts} highcharts/demo/x-range/
65
+ * X-range
66
+ * @sample {highcharts} highcharts/css/x-range/
67
+ * Styled mode X-range
68
+ * @sample {highcharts} highcharts/chart/inverted-xrange/
69
+ * Inverted X-range
70
+ *
71
+ * @extends plotOptions.column
72
+ * @since 6.0.0
73
+ * @product highcharts highstock gantt
74
+ * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor,
75
+ * edgeWidth, findNearestPointBy, getExtremesFromAll,
76
+ * negativeColor, pointInterval, pointIntervalUnit,
77
+ * pointPlacement, pointRange, pointStart, softThreshold,
78
+ * stacking, threshold, data, dataSorting, boostBlending
79
+ * @requires modules/xrange
80
+ * @optionparent plotOptions.xrange
81
+ */
82
+ var XRangeSeriesDefaults = {
83
+ /**
84
+ * A partial fill for each point,
85
+ typically used to visualize how much
86
+ * of a task is performed. The partial fill object can be set either on
87
+ * series or point level.
88
+ *
89
+ * @sample {highcharts} highcharts/demo/x-range
90
+ * X-range with partial fill
91
+ *
92
+ * @product highcharts highstock gantt
93
+ * @apioption plotOptions.xrange.partialFill
94
+ */
95
+ /**
96
+ * The fill color to be used for partial fills. Defaults to a darker
97
+ * shade of the point color.
98
+ *
99
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
100
+ * @product highcharts highstock gantt
101
+ * @apioption plotOptions.xrange.partialFill.fill
102
+ */
103
+ /**
104
+ * A partial fill for each point,
105
+ typically used to visualize how much
106
+ * of a task is performed. See [completed](series.gantt.data.completed).
107
+ *
108
+ * @sample gantt/demo/progress-indicator
109
+ * Gantt with progress indicator
110
+ *
111
+ * @product gantt
112
+ * @apioption plotOptions.gantt.partialFill
113
+ */
114
+ /**
115
+ * In an X-range series,
116
+ this option makes all points of the same Y-axis
117
+ * category the same color.
118
+ */
119
+ colorByPoint: true,
120
+ dataLabels: {
121
+ formatter: function () {
122
+ var point = this.point,
123
+ amount = point.partialFill;
124
+ if (isObject(amount)) {
125
+ amount = amount.amount;
126
+ }
127
+ if (isNumber(amount) && amount > 0) {
128
+ return correctFloat(amount * 100) + '%';
129
+ }
130
+ },
131
+ inside: true,
132
+ verticalAlign: 'middle'
133
+ },
134
+ tooltip: {
135
+ headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
136
+ pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
137
+ },
138
+ borderRadius: 3,
139
+ pointRange: 0
140
+ };
141
+ /* *
142
+ *
143
+ * Export Default
144
+ *
145
+ * */
146
+ /* *
147
+ *
148
+ * API Options
149
+ *
150
+ * */
151
+ /**
152
+ * An `xrange` series. If the [type](#series.xrange.type) option is not
153
+ * specified, it is inherited from [chart.type](#chart.type).
154
+ *
155
+ * @extends series,plotOptions.xrange
156
+ * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
157
+ * findNearestPointBy, getExtremesFromAll, negativeColor,
158
+ * pointInterval, pointIntervalUnit, pointPlacement, pointRange,
159
+ * pointStart, softThreshold, stacking, threshold, dataSorting,
160
+ * boostBlending
161
+ * @product highcharts highstock gantt
162
+ * @requires modules/xrange
163
+ * @apioption series.xrange
164
+ */
165
+ /**
166
+ * An array of data points for the series. For the `xrange` series type,
167
+ * points can be given in the following ways:
168
+ *
169
+ * 1. An array of objects with named values. The objects are point configuration
170
+ * objects as seen below.
171
+ * ```js
172
+ * data: [{
173
+ * x: Date.UTC(2017, 0, 1),
174
+ * x2: Date.UTC(2017, 0, 3),
175
+ * name: "Test",
176
+ * y: 0,
177
+ * color: "#00FF00"
178
+ * }, {
179
+ * x: Date.UTC(2017, 0, 4),
180
+ * x2: Date.UTC(2017, 0, 5),
181
+ * name: "Deploy",
182
+ * y: 1,
183
+ * color: "#FF0000"
184
+ * }]
185
+ * ```
186
+ *
187
+ * @sample {highcharts} highcharts/series/data-array-of-objects/
188
+ * Config objects
189
+ *
190
+ * @declare Highcharts.XrangePointOptionsObject
191
+ * @type {Array<*>}
192
+ * @extends series.line.data
193
+ * @product highcharts highstock gantt
194
+ * @apioption series.xrange.data
195
+ */
196
+ /**
197
+ * The starting X value of the range point.
198
+ *
199
+ * @sample {highcharts} highcharts/demo/x-range
200
+ * X-range
201
+ *
202
+ * @type {number}
203
+ * @product highcharts highstock gantt
204
+ * @apioption series.xrange.data.x
205
+ */
206
+ /**
207
+ * The ending X value of the range point.
208
+ *
209
+ * @sample {highcharts} highcharts/demo/x-range
210
+ * X-range
211
+ *
212
+ * @type {number}
213
+ * @product highcharts highstock gantt
214
+ * @apioption series.xrange.data.x2
215
+ */
216
+ /**
217
+ * The Y value of the range point.
218
+ *
219
+ * @sample {highcharts} highcharts/demo/x-range
220
+ * X-range
221
+ *
222
+ * @type {number}
223
+ * @product highcharts highstock gantt
224
+ * @apioption series.xrange.data.y
225
+ */
226
+ /**
227
+ * A partial fill for each point, typically used to visualize how much of
228
+ * a task is performed. The partial fill object can be set either on series
229
+ * or point level.
230
+ *
231
+ * @sample {highcharts} highcharts/demo/x-range
232
+ * X-range with partial fill
233
+ *
234
+ * @declare Highcharts.XrangePointPartialFillOptionsObject
235
+ * @product highcharts highstock gantt
236
+ * @apioption series.xrange.data.partialFill
237
+ */
238
+ /**
239
+ * The amount of the X-range point to be filled. Values can be 0-1 and are
240
+ * converted to percentages in the default data label formatter.
241
+ *
242
+ * @type {number}
243
+ * @product highcharts highstock gantt
244
+ * @apioption series.xrange.data.partialFill.amount
245
+ */
246
+ /**
247
+ * The fill color to be used for partial fills. Defaults to a darker shade
248
+ * of the point color.
249
+ *
250
+ * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
251
+ * @product highcharts highstock gantt
252
+ * @apioption series.xrange.data.partialFill.fill
253
+ */
254
+ (''); // adds doclets above to transpiled file
255
+
256
+ return XRangeSeriesDefaults;
257
+ });
258
+ _registerModule(_modules, 'Series/XRange/XRangePoint.js', [_modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js']], function (SeriesRegistry, U) {
41
259
  /* *
42
260
  *
43
261
  * X-range series module
@@ -65,7 +283,8 @@
65
283
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
66
284
  };
67
285
  })();
68
- var ColumnSeries = SeriesRegistry.seriesTypes.column;
286
+ var pointProto = SeriesRegistry.series.prototype.pointClass.prototype,
287
+ ColumnPoint = SeriesRegistry.seriesTypes.column.prototype.pointClass;
69
288
  var extend = U.extend;
70
289
  /* *
71
290
  *
@@ -75,37 +294,36 @@
75
294
  var XRangePoint = /** @class */ (function (_super) {
76
295
  __extends(XRangePoint, _super);
77
296
  function XRangePoint() {
297
+ /* *
298
+ *
299
+ * Static Functions
300
+ *
301
+ * */
78
302
  var _this = _super !== null && _super.apply(this,
79
303
  arguments) || this;
80
304
  /* *
81
305
  *
82
- * Properties
306
+ * Properties
83
307
  *
84
308
  * */
85
309
  _this.options = void 0;
86
310
  _this.series = void 0;
87
311
  return _this;
88
- /* eslint-enable valid-jsdoc */
89
312
  }
90
- /* *
91
- *
92
- * Static properties
93
- *
94
- * */
95
313
  /**
96
314
  * Return color of a point based on its category.
97
315
  *
98
316
  * @private
99
317
  * @function getColorByCategory
100
318
  *
101
- * @param {Object} series
102
- * The series which the point belongs to.
319
+ * @param {object} series
320
+ * The series which the point belongs to.
103
321
  *
104
- * @param {Object} point
105
- * The point to calculate its color for.
322
+ * @param {object} point
323
+ * The point to calculate its color for.
106
324
  *
107
- * @return {Object}
108
- * Returns an object containing the properties color and colorIndex.
325
+ * @return {object}
326
+ * Returns an object containing the properties color and colorIndex.
109
327
  */
110
328
  XRangePoint.getColorByCategory = function (series, point) {
111
329
  var colors = series.options.colors || series.chart.options.colors,
@@ -121,33 +339,17 @@
121
339
  };
122
340
  /* *
123
341
  *
124
- * Functions
342
+ * Functions
125
343
  *
126
344
  * */
127
- /**
128
- * The ending X value of the range point.
129
- * @name Highcharts.Point#x2
130
- * @type {number|undefined}
131
- * @requires modules/xrange
132
- */
133
- /**
134
- * Extend applyOptions so that `colorByPoint` for x-range means that one
135
- * color is applied per Y axis category.
136
- *
137
- * @private
138
- * @function Highcharts.Point#applyOptions
139
- *
140
- * @return {Highcharts.Series}
141
- */
142
- /* eslint-disable valid-jsdoc */
143
345
  /**
144
346
  * @private
145
347
  */
146
348
  XRangePoint.prototype.resolveColor = function () {
147
- var series = this.series,
148
- colorByPoint;
349
+ var series = this.series;
149
350
  if (series.options.colorByPoint && !this.options.color) {
150
- colorByPoint = XRangePoint.getColorByCategory(series, this);
351
+ var colorByPoint = XRangePoint.getColorByCategory(series,
352
+ this);
151
353
  if (!series.chart.styledMode) {
152
354
  this.color = colorByPoint.color;
153
355
  }
@@ -163,10 +365,9 @@
163
365
  * Extend init to have y default to 0.
164
366
  *
165
367
  * @private
166
- * @function Highcharts.Point#init
167
368
  */
168
369
  XRangePoint.prototype.init = function () {
169
- Point.prototype.init.apply(this, arguments);
370
+ pointProto.init.apply(this, arguments);
170
371
  if (!this.y) {
171
372
  this.y = 0;
172
373
  }
@@ -174,35 +375,32 @@
174
375
  };
175
376
  /**
176
377
  * @private
177
- * @function Highcharts.Point#setState
178
378
  */
179
379
  XRangePoint.prototype.setState = function () {
180
- Point.prototype.setState.apply(this, arguments);
380
+ pointProto.setState.apply(this, arguments);
181
381
  this.series.drawPoint(this, this.series.getAnimationVerb());
182
382
  };
183
383
  /**
384
+ * Add x2 and yCategory to the available properties for tooltip formats.
385
+ *
184
386
  * @private
185
- * @function Highcharts.Point#getLabelConfig
186
387
  */
187
- // Add x2 and yCategory to the available properties for tooltip formats
188
388
  XRangePoint.prototype.getLabelConfig = function () {
189
- var point = this,
190
- cfg = Point.prototype.getLabelConfig.call(point),
191
- yCats = point.series.yAxis.categories;
192
- cfg.x2 = point.x2;
193
- cfg.yCategory = point.yCategory = yCats && yCats[point.y];
389
+ var cfg = pointProto.getLabelConfig.call(this),
390
+ yCats = this.series.yAxis.categories;
391
+ cfg.x2 = this.x2;
392
+ cfg.yCategory = this.yCategory = yCats && yCats[this.y];
194
393
  return cfg;
195
394
  };
196
395
  /**
197
396
  * @private
198
- * @function Highcharts.Point#isValid
199
397
  */
200
398
  XRangePoint.prototype.isValid = function () {
201
399
  return typeof this.x === 'number' &&
202
400
  typeof this.x2 === 'number';
203
401
  };
204
402
  return XRangePoint;
205
- }(ColumnSeries.prototype.pointClass));
403
+ }(ColumnPoint));
206
404
  extend(XRangePoint.prototype, {
207
405
  ttBelow: false,
208
406
  tooltipDateKeys: ['x', 'x2']
@@ -212,62 +410,39 @@
212
410
  * Default Export
213
411
  *
214
412
  * */
215
-
216
- return XRangePoint;
217
- });
218
- _registerModule(_modules, 'Series/XRange/XRangeComposition.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Utilities.js']], function (Axis, U) {
219
413
  /* *
220
414
  *
221
- * X-range series module
222
- *
223
- * (c) 2010-2021 Torstein Honsi, Lars A. V. Cabrera
224
- *
225
- * License: www.highcharts.com/license
226
- *
227
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
415
+ * API Declarations
228
416
  *
229
417
  * */
230
- /* *
231
- *
232
- * Imports
233
- *
234
- * */
235
- /* *
418
+ /**
419
+ * The ending X value of the range point.
420
+ * @name Highcharts.Point#x2
421
+ * @type {number|undefined}
422
+ * @requires modules/xrange
423
+ */
424
+ /**
425
+ * Extend applyOptions so that `colorByPoint` for x-range means that one
426
+ * color is applied per Y axis category.
236
427
  *
237
- * Imports
428
+ * @private
429
+ * @function Highcharts.Point#applyOptions
238
430
  *
239
- * */
240
- var addEvent = U.addEvent,
241
- pick = U.pick;
242
- /**
243
- * Max x2 should be considered in xAxis extremes
431
+ * @return {Highcharts.Series}
244
432
  */
245
- addEvent(Axis, 'afterGetSeriesExtremes', function () {
246
- var axis = this, // eslint-disable-line no-invalid-this
247
- axisSeries = axis.series,
248
- dataMax,
249
- modMax;
250
- if (axis.isXAxis) {
251
- dataMax = pick(axis.dataMax, -Number.MAX_VALUE);
252
- axisSeries.forEach(function (series) {
253
- if (series.x2Data) {
254
- series.x2Data
255
- .forEach(function (val) {
256
- if (val > dataMax) {
257
- dataMax = val;
258
- modMax = true;
259
- }
260
- });
261
- }
262
- });
263
- if (modMax) {
264
- axis.dataMax = dataMax;
265
- }
266
- }
267
- });
433
+ /**
434
+ * @interface Highcharts.PointOptionsObject in parts/Point.ts
435
+ */ /**
436
+ * The ending X value of the range point.
437
+ * @name Highcharts.PointOptionsObject#x2
438
+ * @type {number|undefined}
439
+ * @requires modules/xrange
440
+ */
441
+ (''); // keeps doclets above in JS file
268
442
 
443
+ return XRangePoint;
269
444
  });
270
- _registerModule(_modules, 'Series/XRange/XRangeSeries.js', [_modules['Core/Globals.js'], _modules['Core/Color/Color.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/XRange/XRangePoint.js']], function (H, Color, SeriesRegistry, U, XRangePoint) {
445
+ _registerModule(_modules, 'Series/XRange/XRangeSeries.js', [_modules['Core/Globals.js'], _modules['Core/Color/Color.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Utilities.js'], _modules['Series/XRange/XRangeSeriesDefaults.js'], _modules['Series/XRange/XRangePoint.js']], function (H, Color, SeriesRegistry, U, XRangeSeriesDefaults, XRangePoint) {
271
446
  /* *
272
447
  *
273
448
  * X-range series module
@@ -295,12 +470,12 @@
295
470
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
296
471
  };
297
472
  })();
473
+ var noop = H.noop;
298
474
  var color = Color.parse;
299
- var Series = SeriesRegistry.series,
475
+ var seriesProto = SeriesRegistry.series.prototype,
300
476
  ColumnSeries = SeriesRegistry.seriesTypes.column;
301
- var columnProto = ColumnSeries.prototype;
302
- var clamp = U.clamp,
303
- correctFloat = U.correctFloat,
477
+ var addEvent = U.addEvent,
478
+ clamp = U.clamp,
304
479
  defined = U.defined,
305
480
  extend = U.extend,
306
481
  find = U.find,
@@ -309,13 +484,47 @@
309
484
  merge = U.merge,
310
485
  pick = U.pick;
311
486
  /* *
312
- * @interface Highcharts.PointOptionsObject in parts/Point.ts
313
- */ /**
314
- * The ending X value of the range point.
315
- * @name Highcharts.PointOptionsObject#x2
316
- * @type {number|undefined}
317
- * @requires modules/xrange
318
- */
487
+ *
488
+ * Constants
489
+ *
490
+ * */
491
+ var composedClasses = [];
492
+ /* *
493
+ *
494
+ * Functions
495
+ *
496
+ * */
497
+ /**
498
+ * Max x2 should be considered in xAxis extremes
499
+ * @private
500
+ */
501
+ function onAxisAfterGetSeriesExtremes() {
502
+ var dataMax,
503
+ modMax;
504
+ if (this.isXAxis) {
505
+ dataMax = pick(this.dataMax, -Number.MAX_VALUE);
506
+ for (var _i = 0, _a = this.series; _i < _a.length; _i++) {
507
+ var series = _a[_i];
508
+ if (series.x2Data) {
509
+ for (var _b = 0, _c = series.x2Data; _b < _c.length; _b++) {
510
+ var val = _c[_b];
511
+ if (val && val > dataMax) {
512
+ dataMax = val;
513
+ modMax = true;
514
+ }
515
+ }
516
+ }
517
+ }
518
+ if (modMax) {
519
+ this.dataMax = dataMax;
520
+ }
521
+ }
522
+ }
523
+ /* *
524
+ *
525
+ * Class
526
+ *
527
+ * */
319
528
  /**
320
529
  * @private
321
530
  * @class
@@ -326,11 +535,16 @@
326
535
  var XRangeSeries = /** @class */ (function (_super) {
327
536
  __extends(XRangeSeries, _super);
328
537
  function XRangeSeries() {
538
+ /* *
539
+ *
540
+ * Static Properties
541
+ *
542
+ * */
329
543
  var _this = _super !== null && _super.apply(this,
330
544
  arguments) || this;
331
545
  /* *
332
546
  *
333
- * Properties
547
+ * Properties
334
548
  *
335
549
  * */
336
550
  _this.data = void 0;
@@ -352,54 +566,56 @@
352
566
  }
353
567
  /* *
354
568
  *
355
- * Functions
569
+ * Static Functions
570
+ *
571
+ * */
572
+ XRangeSeries.compose = function (AxisClass) {
573
+ if (composedClasses.indexOf(AxisClass) === -1) {
574
+ composedClasses.push(AxisClass);
575
+ addEvent(AxisClass, 'afterGetSeriesExtremes', onAxisAfterGetSeriesExtremes);
576
+ }
577
+ };
578
+ /* *
579
+ *
580
+ * Functions
356
581
  *
357
582
  * */
358
- /* eslint-disable valid-jsdoc */
359
583
  /**
360
584
  * @private
361
- * @function Highcarts.seriesTypes.xrange#init
362
585
  */
363
586
  XRangeSeries.prototype.init = function () {
364
- ColumnSeries.prototype.init.apply(this, arguments);
587
+ _super.prototype.init.apply(this, arguments);
365
588
  this.options.stacking = void 0; // #13161
366
589
  };
367
590
  /**
368
591
  * Borrow the column series metrics, but with swapped axes. This gives
369
592
  * free access to features like groupPadding, grouping, pointWidth etc.
370
- *
371
593
  * @private
372
- * @function Highcharts.Series#getColumnMetrics
373
594
  */
374
595
  XRangeSeries.prototype.getColumnMetrics = function () {
375
- var metrics,
376
- chart = this.chart;
377
- /**
378
- * @private
379
- */
380
- function swapAxes() {
381
- chart.series.forEach(function (s) {
382
- var xAxis = s.xAxis;
383
- s.xAxis = s.yAxis;
384
- s.yAxis = xAxis;
385
- });
386
- }
596
+ var _this = this;
597
+ var swapAxes = function () {
598
+ for (var _i = 0,
599
+ _a = _this.chart.series; _i < _a.length; _i++) {
600
+ var series = _a[_i];
601
+ var xAxis = series.xAxis;
602
+ series.xAxis = series.yAxis;
603
+ series.yAxis = xAxis;
604
+ }
605
+ };
387
606
  swapAxes();
388
- metrics = columnProto.getColumnMetrics.call(this);
607
+ var metrics = _super.prototype.getColumnMetrics.call(this);
389
608
  swapAxes();
390
609
  return metrics;
391
610
  };
392
611
  /**
393
- * Override cropData to show a point where x or x2 is outside visible
394
- * range, but one of them is inside.
395
- *
612
+ * Override cropData to show a point where x or x2 is outside visible range,
613
+ * but one of them is inside.
396
614
  * @private
397
- * @function Highcharts.Series#cropData
398
615
  */
399
616
  XRangeSeries.prototype.cropData = function (xData, yData, min, max) {
400
617
  // Replace xData with x2Data to find the appropriate cropStart
401
- var cropData = Series.prototype.cropData,
402
- crop = cropData.call(this,
618
+ var crop = seriesProto.cropData.call(this,
403
619
  this.x2Data,
404
620
  yData,
405
621
  min,
@@ -413,37 +629,34 @@
413
629
  * options.
414
630
  *
415
631
  * @private
416
- * @function Highcharts.Series#findPointIndex
417
- * @param {Object} options
418
- * The options of the point.
632
+ *
633
+ * @param {Highcharts.XRangePointOptions} options
634
+ * The options of the point.
635
+ *
419
636
  * @return {number|undefined}
420
- * Returns index of a matching point, or undefined if no match is found.
637
+ * Returns index of a matching point, or undefined if no match is
638
+ * found.
421
639
  */
422
640
  XRangeSeries.prototype.findPointIndex = function (options) {
423
641
  var _a = this,
424
- cropped = _a.cropped,
425
642
  cropStart = _a.cropStart,
426
643
  points = _a.points;
427
644
  var id = options.id;
428
645
  var pointIndex;
429
646
  if (id) {
430
647
  var point = find(points,
431
- function (point) {
432
- return point.id === id;
433
- });
648
+ function (point) { return point.id === id; });
434
649
  pointIndex = point ? point.index : void 0;
435
650
  }
436
651
  if (typeof pointIndex === 'undefined') {
437
652
  var point = find(points,
438
- function (point) {
439
- return (point.x === options.x &&
440
- point.x2 === options.x2 &&
441
- !point.touched);
442
- });
653
+ function (point) { return (point.x === options.x &&
654
+ point.x2 === options.x2 &&
655
+ !point.touched); });
443
656
  pointIndex = point ? point.index : void 0;
444
657
  }
445
658
  // Reduce pointIndex if data is cropped
446
- if (cropped &&
659
+ if (this.cropped &&
447
660
  isNumber(pointIndex) &&
448
661
  isNumber(cropStart) &&
449
662
  pointIndex >= cropStart) {
@@ -453,36 +666,31 @@
453
666
  };
454
667
  /**
455
668
  * @private
456
- * @function Highcharts.Series#translatePoint
457
- *
458
- * @param {Highcharts.Point} point
459
669
  */
460
670
  XRangeSeries.prototype.translatePoint = function (point) {
461
- var series = this,
462
- xAxis = series.xAxis,
463
- yAxis = series.yAxis,
464
- metrics = series.columnMetrics,
465
- options = series.options,
671
+ var xAxis = this.xAxis,
672
+ yAxis = this.yAxis,
673
+ metrics = this.columnMetrics,
674
+ options = this.options,
466
675
  minPointLength = options.minPointLength || 0,
467
676
  oldColWidth = (point.shapeArgs && point.shapeArgs.width || 0) / 2,
468
- seriesXOffset = series.pointXOffset = metrics.offset,
469
- plotX = point.plotX,
677
+ seriesXOffset = this.pointXOffset = metrics.offset,
470
678
  posX = pick(point.x2,
471
- point.x + (point.len || 0)),
472
- plotX2 = xAxis.translate(posX, 0, 0, 0, 1),
473
- length = Math.abs(plotX2 - plotX),
474
- widthDifference,
475
- partialFill,
679
+ point.x + (point.len || 0));
680
+ var plotX = point.plotX,
681
+ plotX2 = xAxis.translate(posX, 0, 0, 0, 1);
682
+ var length = Math.abs(plotX2 - plotX),
476
683
  inverted = this.chart.inverted,
477
684
  borderWidth = pick(options.borderWidth, 1),
478
- crisper = borderWidth % 2 / 2,
685
+ crisper = borderWidth % 2 / 2;
686
+ var widthDifference,
687
+ partialFill,
479
688
  yOffset = metrics.offset,
480
689
  pointHeight = Math.round(metrics.width),
481
690
  dlLeft,
482
691
  dlRight,
483
692
  dlWidth,
484
- clipRectWidth,
485
- tooltipYOffset;
693
+ clipRectWidth;
486
694
  if (minPointLength) {
487
695
  widthDifference = minPointLength - length;
488
696
  if (widthDifference < 0) {
@@ -513,7 +721,7 @@
513
721
  y: Math.floor(point.plotY + yOffset) + crisper,
514
722
  width: x2 - x,
515
723
  height: pointHeight,
516
- r: series.options.borderRadius
724
+ r: this.options.borderRadius
517
725
  };
518
726
  point.shapeArgs = shapeArgs;
519
727
  // Move tooltip to default position
@@ -546,8 +754,9 @@
546
754
  var tooltipPos = point.tooltipPos;
547
755
  var xIndex = !inverted ? 0 : 1;
548
756
  var yIndex = !inverted ? 1 : 0;
549
- tooltipYOffset = series.columnMetrics ?
550
- series.columnMetrics.offset : -metrics.width / 2;
757
+ var tooltipYOffset = (this.columnMetrics ?
758
+ this.columnMetrics.offset :
759
+ -metrics.width / 2);
551
760
  // Centering tooltip position (#14147)
552
761
  if (!inverted) {
553
762
  tooltipPos[xIndex] += (xAxis.reversed ? -1 : 0) * shapeArgs.width;
@@ -568,7 +777,7 @@
568
777
  partialFill = 0;
569
778
  }
570
779
  point.partShapeArgs = merge(shapeArgs, {
571
- r: series.options.borderRadius
780
+ r: this.options.borderRadius
572
781
  });
573
782
  clipRectWidth = Math.max(Math.round(length * partialFill + point.plotX -
574
783
  plotX), 0);
@@ -584,13 +793,13 @@
584
793
  };
585
794
  /**
586
795
  * @private
587
- * @function Highcharts.Series#translate
588
796
  */
589
797
  XRangeSeries.prototype.translate = function () {
590
- columnProto.translate.apply(this, arguments);
591
- this.points.forEach(function (point) {
798
+ _super.prototype.translate.apply(this, arguments);
799
+ for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
800
+ var point = _a[_i];
592
801
  this.translatePoint(point);
593
- }, this);
802
+ }
594
803
  };
595
804
  /**
596
805
  * Draws a single point in the series. Needed for partial fill.
@@ -599,7 +808,6 @@
599
808
  * original graphic and an overlay displaying the partial fill.
600
809
  *
601
810
  * @private
602
- * @function Highcharts.Series#drawPoint
603
811
  *
604
812
  * @param {Highcharts.Point} point
605
813
  * An instance of Point in the series.
@@ -608,26 +816,24 @@
608
816
  * 'animate' (animates changes) or 'attr' (sets options)
609
817
  */
610
818
  XRangeSeries.prototype.drawPoint = function (point, verb) {
611
- var series = this,
612
- seriesOpts = series.options,
613
- renderer = series.chart.renderer,
614
- graphic = point.graphic,
819
+ var seriesOpts = this.options,
820
+ renderer = this.chart.renderer,
615
821
  type = point.shapeType,
616
822
  shapeArgs = point.shapeArgs,
617
823
  partShapeArgs = point.partShapeArgs,
618
824
  clipRectArgs = point.clipRectArgs,
619
- pfOptions = point.partialFill,
620
825
  cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
621
826
  pointState = point.state,
622
827
  stateOpts = (seriesOpts.states[pointState || 'normal'] ||
623
828
  {}),
624
829
  pointStateVerb = typeof pointState === 'undefined' ?
625
830
  'attr' : verb,
626
- pointAttr = series.pointAttribs(point,
831
+ pointAttr = this.pointAttribs(point,
627
832
  pointState),
628
- animation = pick(series.chart.options.chart.animation,
629
- stateOpts.animation),
630
- fill;
833
+ animation = pick(this.chart.options.chart.animation,
834
+ stateOpts.animation);
835
+ var graphic = point.graphic,
836
+ pfOptions = point.partialFill;
631
837
  if (!point.isNull && point.visible !== false) {
632
838
  // Original graphic
633
839
  if (graphic) { // update
@@ -636,7 +842,7 @@
636
842
  else {
637
843
  point.graphic = graphic = renderer.g('point')
638
844
  .addClass(point.getClassName())
639
- .add(point.group || series.group);
845
+ .add(point.group || this.group);
640
846
  graphic.rect = renderer[type](merge(shapeArgs))
641
847
  .addClass(point.getClassName())
642
848
  .addClass('highcharts-partfill-original')
@@ -658,7 +864,7 @@
658
864
  }
659
865
  }
660
866
  // Presentational
661
- if (!series.chart.styledMode) {
867
+ if (!this.chart.styledMode) {
662
868
  graphic
663
869
  .rect[verb](pointAttr, animation)
664
870
  .shadow(seriesOpts.shadow, null, cutOff);
@@ -670,10 +876,10 @@
670
876
  if (isObject(seriesOpts.partialFill)) {
671
877
  pfOptions = merge(seriesOpts.partialFill, pfOptions);
672
878
  }
673
- fill = (pfOptions.fill ||
674
- color(pointAttr.fill).brighten(-0.3).get() ||
675
- color(point.color || series.color)
676
- .brighten(-0.3).get());
879
+ var fill = (pfOptions.fill ||
880
+ color(pointAttr.fill).brighten(-0.3).get() ||
881
+ color(point.color || this.color)
882
+ .brighten(-0.3).get());
677
883
  pointAttr.fill = fill;
678
884
  graphic
679
885
  .partRect[pointStateVerb](pointAttr, animation)
@@ -687,22 +893,20 @@
687
893
  };
688
894
  /**
689
895
  * @private
690
- * @function Highcharts.Series#drawPoints
691
896
  */
692
897
  XRangeSeries.prototype.drawPoints = function () {
693
- var series = this,
694
- verb = series.getAnimationVerb();
898
+ var verb = this.getAnimationVerb();
695
899
  // Draw the columns
696
- series.points.forEach(function (point) {
697
- series.drawPoint(point, verb);
698
- });
900
+ for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
901
+ var point = _a[_i];
902
+ this.drawPoint(point, verb);
903
+ }
699
904
  };
700
905
  /**
701
906
  * Returns "animate", or "attr" if the number of points is above the
702
907
  * animation limit.
703
908
  *
704
909
  * @private
705
- * @function Highcharts.Series#getAnimationVerb
706
910
  */
707
911
  XRangeSeries.prototype.getAnimationVerb = function () {
708
912
  return (this.chart.pointCount < (this.options.animationLimit || 250) ?
@@ -711,118 +915,35 @@
711
915
  };
712
916
  /**
713
917
  * @private
714
- * @function Highcharts.XRangeSeries#isPointInside
715
- */
716
- XRangeSeries.prototype.isPointInside = function (point) {
717
- var shapeArgs = point.shapeArgs,
718
- plotX = point.plotX,
719
- plotY = point.plotY;
720
- if (!shapeArgs) {
721
- return _super.prototype.isPointInside.apply(this, arguments);
722
- }
723
- var isInside = typeof plotX !== 'undefined' &&
724
- typeof plotY !== 'undefined' &&
725
- plotY >= 0 &&
726
- plotY <= this.yAxis.len &&
727
- (shapeArgs.x || 0) + (shapeArgs.width || 0) >= 0 &&
728
- plotX <= this.xAxis.len;
729
- return isInside;
730
- };
731
- /* *
732
- *
733
- * Static properties
734
- *
735
- * */
736
- /**
737
- * The X-range series displays ranges on the X axis, typically time
738
- * intervals with a start and end date.
739
- *
740
- * @sample {highcharts} highcharts/demo/x-range/
741
- * X-range
742
- * @sample {highcharts} highcharts/css/x-range/
743
- * Styled mode X-range
744
- * @sample {highcharts} highcharts/chart/inverted-xrange/
745
- * Inverted X-range
746
- *
747
- * @extends plotOptions.column
748
- * @since 6.0.0
749
- * @product highcharts highstock gantt
750
- * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor,
751
- * edgeWidth, findNearestPointBy, getExtremesFromAll,
752
- * negativeColor, pointInterval, pointIntervalUnit,
753
- * pointPlacement, pointRange, pointStart, softThreshold,
754
- * stacking, threshold, data, dataSorting, boostBlending
755
- * @requires modules/xrange
756
- * @optionparent plotOptions.xrange
757
- */
758
- XRangeSeries.defaultOptions = merge(ColumnSeries.defaultOptions, {
759
- /**
760
- * A partial fill for each point, typically used to visualize how much
761
- * of a task is performed. The partial fill object can be set either on
762
- * series or point level.
763
- *
764
- * @sample {highcharts} highcharts/demo/x-range
765
- * X-range with partial fill
766
- *
767
- * @product highcharts highstock gantt
768
- * @apioption plotOptions.xrange.partialFill
769
- */
770
- /**
771
- * The fill color to be used for partial fills. Defaults to a darker
772
- * shade of the point color.
773
- *
774
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
775
- * @product highcharts highstock gantt
776
- * @apioption plotOptions.xrange.partialFill.fill
777
- */
778
- /**
779
- * A partial fill for each point, typically used to visualize how much
780
- * of a task is performed. See [completed](series.gantt.data.completed).
781
- *
782
- * @sample gantt/demo/progress-indicator
783
- * Gantt with progress indicator
784
- *
785
- * @product gantt
786
- * @apioption plotOptions.gantt.partialFill
787
- */
788
- /**
789
- * In an X-range series, this option makes all points of the same Y-axis
790
- * category the same color.
791
- */
792
- colorByPoint: true,
793
- dataLabels: {
794
- formatter: function () {
795
- var point = this.point,
796
- amount = point.partialFill;
797
- if (isObject(amount)) {
798
- amount = amount.amount;
799
- }
800
- if (isNumber(amount) && amount > 0) {
801
- return correctFloat(amount * 100) + '%';
802
- }
803
- },
804
- inside: true,
805
- verticalAlign: 'middle'
806
- },
807
- tooltip: {
808
- headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
809
- pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
810
- },
811
- borderRadius: 3,
812
- pointRange: 0
813
- });
918
+ */
919
+ XRangeSeries.prototype.isPointInside = function (point) {
920
+ var shapeArgs = point.shapeArgs,
921
+ plotX = point.plotX,
922
+ plotY = point.plotY;
923
+ if (!shapeArgs) {
924
+ return _super.prototype.isPointInside.apply(this, arguments);
925
+ }
926
+ var isInside = typeof plotX !== 'undefined' &&
927
+ typeof plotY !== 'undefined' &&
928
+ plotY >= 0 &&
929
+ plotY <= this.yAxis.len &&
930
+ (shapeArgs.x || 0) + (shapeArgs.width || 0) >= 0 &&
931
+ plotX <= this.xAxis.len;
932
+ return isInside;
933
+ };
934
+ XRangeSeries.defaultOptions = merge(ColumnSeries.defaultOptions, XRangeSeriesDefaults);
814
935
  return XRangeSeries;
815
936
  }(ColumnSeries));
816
937
  extend(XRangeSeries.prototype, {
817
- type: 'xrange',
818
- parallelArrays: ['x', 'x2', 'y'],
819
- requireSorting: false,
820
- animate: Series.prototype.animate,
938
+ pointClass: XRangePoint,
821
939
  cropShoulder: 1,
822
940
  getExtremesFromAll: true,
823
- autoIncrement: H.noop,
824
- buildKDTree: H.noop,
825
- pointClass: XRangePoint
941
+ parallelArrays: ['x', 'x2', 'y'],
942
+ requireSorting: false,
943
+ type: 'xrange',
944
+ animate: seriesProto.animate,
945
+ autoIncrement: noop,
946
+ buildKDTree: noop
826
947
  });
827
948
  SeriesRegistry.registerSeriesType('xrange', XRangeSeries);
828
949
  /* *
@@ -830,115 +951,6 @@
830
951
  * Default Export
831
952
  *
832
953
  * */
833
- /* *
834
- *
835
- * API Options
836
- *
837
- * */
838
- /**
839
- * An `xrange` series. If the [type](#series.xrange.type) option is not
840
- * specified, it is inherited from [chart.type](#chart.type).
841
- *
842
- * @extends series,plotOptions.xrange
843
- * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
844
- * findNearestPointBy, getExtremesFromAll, negativeColor,
845
- * pointInterval, pointIntervalUnit, pointPlacement, pointRange,
846
- * pointStart, softThreshold, stacking, threshold, dataSorting,
847
- * boostBlending
848
- * @product highcharts highstock gantt
849
- * @requires modules/xrange
850
- * @apioption series.xrange
851
- */
852
- /**
853
- * An array of data points for the series. For the `xrange` series type,
854
- * points can be given in the following ways:
855
- *
856
- * 1. An array of objects with named values. The objects are point configuration
857
- * objects as seen below.
858
- * ```js
859
- * data: [{
860
- * x: Date.UTC(2017, 0, 1),
861
- * x2: Date.UTC(2017, 0, 3),
862
- * name: "Test",
863
- * y: 0,
864
- * color: "#00FF00"
865
- * }, {
866
- * x: Date.UTC(2017, 0, 4),
867
- * x2: Date.UTC(2017, 0, 5),
868
- * name: "Deploy",
869
- * y: 1,
870
- * color: "#FF0000"
871
- * }]
872
- * ```
873
- *
874
- * @sample {highcharts} highcharts/series/data-array-of-objects/
875
- * Config objects
876
- *
877
- * @declare Highcharts.XrangePointOptionsObject
878
- * @type {Array<*>}
879
- * @extends series.line.data
880
- * @product highcharts highstock gantt
881
- * @apioption series.xrange.data
882
- */
883
- /**
884
- * The starting X value of the range point.
885
- *
886
- * @sample {highcharts} highcharts/demo/x-range
887
- * X-range
888
- *
889
- * @type {number}
890
- * @product highcharts highstock gantt
891
- * @apioption series.xrange.data.x
892
- */
893
- /**
894
- * The ending X value of the range point.
895
- *
896
- * @sample {highcharts} highcharts/demo/x-range
897
- * X-range
898
- *
899
- * @type {number}
900
- * @product highcharts highstock gantt
901
- * @apioption series.xrange.data.x2
902
- */
903
- /**
904
- * The Y value of the range point.
905
- *
906
- * @sample {highcharts} highcharts/demo/x-range
907
- * X-range
908
- *
909
- * @type {number}
910
- * @product highcharts highstock gantt
911
- * @apioption series.xrange.data.y
912
- */
913
- /**
914
- * A partial fill for each point, typically used to visualize how much of
915
- * a task is performed. The partial fill object can be set either on series
916
- * or point level.
917
- *
918
- * @sample {highcharts} highcharts/demo/x-range
919
- * X-range with partial fill
920
- *
921
- * @declare Highcharts.XrangePointPartialFillOptionsObject
922
- * @product highcharts highstock gantt
923
- * @apioption series.xrange.data.partialFill
924
- */
925
- /**
926
- * The amount of the X-range point to be filled. Values can be 0-1 and are
927
- * converted to percentages in the default data label formatter.
928
- *
929
- * @type {number}
930
- * @product highcharts highstock gantt
931
- * @apioption series.xrange.data.partialFill.amount
932
- */
933
- /**
934
- * The fill color to be used for partial fills. Defaults to a darker shade
935
- * of the point color.
936
- *
937
- * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
938
- * @product highcharts highstock gantt
939
- * @apioption series.xrange.data.partialFill.fill
940
- */
941
- ''; // adds doclets above to transpiled file
942
954
 
943
955
  return XRangeSeries;
944
956
  });
@@ -1056,7 +1068,7 @@
1056
1068
 
1057
1069
  return GanttPoint;
1058
1070
  });
1059
- _registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['Extensions/Stacking.js'], _modules['Core/Utilities.js']], function (StackItem, U) {
1071
+ _registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['Core/Axis/Stacking/StackItem.js'], _modules['Core/Utilities.js']], function (StackItem, U) {
1060
1072
  /* *
1061
1073
  *
1062
1074
  * (c) 2009-2021 Torstein Honsi
@@ -2959,7 +2971,7 @@
2959
2971
 
2960
2972
  return Tree;
2961
2973
  });
2962
- _registerModule(_modules, 'Core/Axis/TreeGridTick.js', [_modules['Core/Utilities.js']], function (U) {
2974
+ _registerModule(_modules, 'Core/Axis/TreeGrid/TreeGridTick.js', [_modules['Core/Utilities.js']], function (U) {
2963
2975
  /* *
2964
2976
  *
2965
2977
  * (c) 2016 Highsoft AS
@@ -2975,34 +2987,237 @@
2975
2987
  isNumber = U.isNumber,
2976
2988
  pick = U.pick,
2977
2989
  wrap = U.wrap;
2978
- /* eslint-disable no-invalid-this, valid-jsdoc */
2990
+ /* *
2991
+ *
2992
+ * Constants
2993
+ *
2994
+ * */
2995
+ var composedClasses = [];
2996
+ /* *
2997
+ *
2998
+ * Functions
2999
+ *
3000
+ * */
2979
3001
  /**
2980
3002
  * @private
2981
3003
  */
2982
- var TreeGridTick;
2983
- (function (TreeGridTick) {
2984
- /* *
2985
- *
2986
- * Interfaces
2987
- *
2988
- * */
2989
- /* *
2990
- *
2991
- * Variables
2992
- *
2993
- * */
2994
- var applied = false;
3004
+ function onTickInit() {
3005
+ var tick = this;
3006
+ if (!tick.treeGrid) {
3007
+ tick.treeGrid = new TreeGridTickAdditions(tick);
3008
+ }
3009
+ }
3010
+ /**
3011
+ * @private
3012
+ */
3013
+ function onTickHover(label) {
3014
+ label.addClass('highcharts-treegrid-node-active');
3015
+ if (!label.renderer.styledMode) {
3016
+ label.css({
3017
+ textDecoration: 'underline'
3018
+ });
3019
+ }
3020
+ }
3021
+ /**
3022
+ * @private
3023
+ */
3024
+ function onTickHoverExit(label, options) {
3025
+ var css = isObject(options.style) ? options.style : {};
3026
+ label.removeClass('highcharts-treegrid-node-active');
3027
+ if (!label.renderer.styledMode) {
3028
+ label.css({ textDecoration: css.textDecoration });
3029
+ }
3030
+ }
3031
+ /**
3032
+ * @private
3033
+ */
3034
+ function renderLabelIcon(tick, params) {
3035
+ var treeGrid = tick.treeGrid,
3036
+ isNew = !treeGrid.labelIcon,
3037
+ renderer = params.renderer,
3038
+ labelBox = params.xy,
3039
+ options = params.options,
3040
+ width = options.width || 0,
3041
+ height = options.height || 0,
3042
+ iconCenter = {
3043
+ x: labelBox.x - (width / 2) - (options.padding || 0),
3044
+ y: labelBox.y - (height / 2)
3045
+ },
3046
+ rotation = params.collapsed ? 90 : 180,
3047
+ shouldRender = params.show && isNumber(iconCenter.y);
3048
+ var icon = treeGrid.labelIcon;
3049
+ if (!icon) {
3050
+ treeGrid.labelIcon = icon = renderer
3051
+ .path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))
3052
+ .addClass('highcharts-label-icon')
3053
+ .add(params.group);
3054
+ }
3055
+ // Set the new position, and show or hide
3056
+ icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338
3057
+ // Presentational attributes
3058
+ if (!renderer.styledMode) {
3059
+ icon
3060
+ .attr({
3061
+ cursor: 'pointer',
3062
+ 'fill': pick(params.color, "#666666" /* Palette.neutralColor60 */),
3063
+ 'stroke-width': 1,
3064
+ stroke: options.lineColor,
3065
+ strokeWidth: options.lineWidth || 0
3066
+ });
3067
+ }
3068
+ // Update the icon positions
3069
+ icon[isNew ? 'attr' : 'animate']({
3070
+ translateX: iconCenter.x,
3071
+ translateY: iconCenter.y,
3072
+ rotation: rotation
3073
+ });
3074
+ }
3075
+ /**
3076
+ * @private
3077
+ */
3078
+ function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
3079
+ var tick = this,
3080
+ lbOptions = pick(tick.options && tick.options.labels,
3081
+ labelOptions),
3082
+ pos = tick.pos,
3083
+ axis = tick.axis,
3084
+ options = axis.options,
3085
+ isTreeGrid = options.type === 'treegrid',
3086
+ result = proceed.apply(tick,
3087
+ [x,
3088
+ y,
3089
+ label,
3090
+ horiz,
3091
+ lbOptions,
3092
+ tickmarkOffset,
3093
+ index,
3094
+ step]);
3095
+ var symbolOptions,
3096
+ indentation,
3097
+ mapOfPosToGridNode,
3098
+ node,
3099
+ level;
3100
+ if (isTreeGrid) {
3101
+ symbolOptions = (lbOptions && isObject(lbOptions.symbol, true) ?
3102
+ lbOptions.symbol :
3103
+ {});
3104
+ indentation = (lbOptions && isNumber(lbOptions.indentation) ?
3105
+ lbOptions.indentation :
3106
+ 0);
3107
+ mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
3108
+ node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
3109
+ level = (node && node.depth) || 1;
3110
+ result.x += (
3111
+ // Add space for symbols
3112
+ ((symbolOptions.width || 0) +
3113
+ ((symbolOptions.padding || 0) * 2)) +
3114
+ // Apply indentation
3115
+ ((level - 1) * indentation));
3116
+ }
3117
+ return result;
3118
+ }
3119
+ /**
3120
+ * @private
3121
+ */
3122
+ function wrapRenderLabel(proceed) {
3123
+ var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode, options = axis.options, labelOptions = pick(tick.options && tick.options.labels, options && options.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
3124
+ labelOptions.symbol :
3125
+ {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], level = node && node.depth, isTreeGrid = options.type === 'treegrid', shouldRender = axis.tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', styledMode = axis.chart.styledMode;
3126
+ var collapsed,
3127
+ addClassName,
3128
+ removeClassName;
3129
+ if (isTreeGrid && node) {
3130
+ // Add class name for hierarchical styling.
3131
+ if (label &&
3132
+ label.element) {
3133
+ label.addClass(prefixClassName + 'level-' + level);
3134
+ }
3135
+ }
3136
+ proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
3137
+ if (isTreeGrid &&
3138
+ label &&
3139
+ label.element &&
3140
+ node &&
3141
+ node.descendants &&
3142
+ node.descendants > 0) {
3143
+ collapsed = axis.treeGrid.isCollapsed(node);
3144
+ renderLabelIcon(tick, {
3145
+ color: (!styledMode &&
3146
+ label.styles &&
3147
+ label.styles.color ||
3148
+ ''),
3149
+ collapsed: collapsed,
3150
+ group: label.parentGroup,
3151
+ options: symbolOptions,
3152
+ renderer: label.renderer,
3153
+ show: shouldRender,
3154
+ xy: label.xy
3155
+ });
3156
+ // Add class name for the node.
3157
+ addClassName = prefixClassName +
3158
+ (collapsed ? 'collapsed' : 'expanded');
3159
+ removeClassName = prefixClassName +
3160
+ (collapsed ? 'expanded' : 'collapsed');
3161
+ label
3162
+ .addClass(addClassName)
3163
+ .removeClass(removeClassName);
3164
+ if (!styledMode) {
3165
+ label.css({
3166
+ cursor: 'pointer'
3167
+ });
3168
+ }
3169
+ // Add events to both label text and icon
3170
+ [label, tick.treeGrid.labelIcon].forEach(function (object) {
3171
+ if (object && !object.attachedTreeGridEvents) {
3172
+ // On hover
3173
+ addEvent(object.element, 'mouseover', function () {
3174
+ onTickHover(label);
3175
+ });
3176
+ // On hover out
3177
+ addEvent(object.element, 'mouseout', function () {
3178
+ onTickHoverExit(label, labelOptions);
3179
+ });
3180
+ addEvent(object.element, 'click', function () {
3181
+ tick.treeGrid.toggleCollapse();
3182
+ });
3183
+ object.attachedTreeGridEvents = true;
3184
+ }
3185
+ });
3186
+ }
3187
+ }
3188
+ /* *
3189
+ *
3190
+ * Classes
3191
+ *
3192
+ * */
3193
+ /**
3194
+ * @private
3195
+ * @class
3196
+ */
3197
+ var TreeGridTickAdditions = /** @class */ (function () {
3198
+ /* *
3199
+ *
3200
+ * Constructors
3201
+ *
3202
+ * */
3203
+ /**
3204
+ * @private
3205
+ */
3206
+ function TreeGridTickAdditions(tick) {
3207
+ this.tick = tick;
3208
+ }
2995
3209
  /* *
2996
3210
  *
2997
- * Functions
3211
+ * Static Functions
2998
3212
  *
2999
3213
  * */
3000
3214
  /**
3001
3215
  * @private
3002
3216
  */
3003
- function compose(TickClass) {
3004
- if (!applied) {
3005
- addEvent(TickClass, 'init', onInit);
3217
+ TreeGridTickAdditions.compose = function (TickClass) {
3218
+ if (composedClasses.indexOf(TickClass) === -1) {
3219
+ composedClasses.push(TickClass);
3220
+ addEvent(TickClass, 'init', onTickInit);
3006
3221
  wrap(TickClass.prototype, 'getLabelPosition', wrapGetLabelPosition);
3007
3222
  wrap(TickClass.prototype, 'renderLabel', wrapRenderLabel);
3008
3223
  // backwards compatibility
@@ -3015,313 +3230,106 @@
3015
3230
  TickClass.prototype.toggleCollapse = function (redraw) {
3016
3231
  this.treeGrid.toggleCollapse(redraw);
3017
3232
  };
3018
- applied = true;
3019
- }
3020
- }
3021
- TreeGridTick.compose = compose;
3022
- /**
3023
- * @private
3024
- */
3025
- function onInit() {
3026
- var tick = this;
3027
- if (!tick.treeGrid) {
3028
- tick.treeGrid = new Additions(tick);
3029
- }
3030
- }
3031
- /**
3032
- * @private
3033
- */
3034
- function onTickHover(label) {
3035
- label.addClass('highcharts-treegrid-node-active');
3036
- if (!label.renderer.styledMode) {
3037
- label.css({
3038
- textDecoration: 'underline'
3039
- });
3040
- }
3041
- }
3042
- /**
3043
- * @private
3044
- */
3045
- function onTickHoverExit(label, options) {
3046
- var css = isObject(options.style) ? options.style : {};
3047
- label.removeClass('highcharts-treegrid-node-active');
3048
- if (!label.renderer.styledMode) {
3049
- label.css({ textDecoration: css.textDecoration });
3050
- }
3051
- }
3052
- /**
3053
- * @private
3054
- */
3055
- function renderLabelIcon(tick, params) {
3056
- var treeGrid = tick.treeGrid,
3057
- isNew = !treeGrid.labelIcon,
3058
- renderer = params.renderer,
3059
- labelBox = params.xy,
3060
- options = params.options,
3061
- width = options.width || 0,
3062
- height = options.height || 0,
3063
- iconCenter = {
3064
- x: labelBox.x - (width / 2) - (options.padding || 0),
3065
- y: labelBox.y - (height / 2)
3066
- },
3067
- rotation = params.collapsed ? 90 : 180,
3068
- shouldRender = params.show && isNumber(iconCenter.y);
3069
- var icon = treeGrid.labelIcon;
3070
- if (!icon) {
3071
- treeGrid.labelIcon = icon = renderer
3072
- .path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))
3073
- .addClass('highcharts-label-icon')
3074
- .add(params.group);
3075
- }
3076
- // Set the new position, and show or hide
3077
- icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338
3078
- // Presentational attributes
3079
- if (!renderer.styledMode) {
3080
- icon
3081
- .attr({
3082
- cursor: 'pointer',
3083
- 'fill': pick(params.color, "#666666" /* Palette.neutralColor60 */),
3084
- 'stroke-width': 1,
3085
- stroke: options.lineColor,
3086
- strokeWidth: options.lineWidth || 0
3087
- });
3088
3233
  }
3089
- // Update the icon positions
3090
- icon[isNew ? 'attr' : 'animate']({
3091
- translateX: iconCenter.x,
3092
- translateY: iconCenter.y,
3093
- rotation: rotation
3094
- });
3095
- }
3234
+ };
3235
+ /* *
3236
+ *
3237
+ * Functions
3238
+ *
3239
+ * */
3096
3240
  /**
3241
+ * Collapse the grid cell. Used when axis is of type treegrid.
3242
+ *
3243
+ * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3244
+ *
3097
3245
  * @private
3246
+ * @function Highcharts.Tick#collapse
3247
+ *
3248
+ * @param {boolean} [redraw=true]
3249
+ * Whether to redraw the chart or wait for an explicit call to
3250
+ * {@link Highcharts.Chart#redraw}
3098
3251
  */
3099
- function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
3100
- var tick = this,
3101
- lbOptions = pick(tick.options && tick.options.labels,
3102
- labelOptions),
3103
- pos = tick.pos,
3252
+ TreeGridTickAdditions.prototype.collapse = function (redraw) {
3253
+ var tick = this.tick,
3104
3254
  axis = tick.axis,
3105
- options = axis.options,
3106
- isTreeGrid = options.type === 'treegrid',
3107
- result = proceed.apply(tick,
3108
- [x,
3109
- y,
3110
- label,
3111
- horiz,
3112
- lbOptions,
3113
- tickmarkOffset,
3114
- index,
3115
- step]);
3116
- var symbolOptions,
3117
- indentation,
3118
- mapOfPosToGridNode,
3119
- node,
3120
- level;
3121
- if (isTreeGrid) {
3122
- symbolOptions = (lbOptions && isObject(lbOptions.symbol, true) ?
3123
- lbOptions.symbol :
3124
- {});
3125
- indentation = (lbOptions && isNumber(lbOptions.indentation) ?
3126
- lbOptions.indentation :
3127
- 0);
3128
- mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
3129
- node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
3130
- level = (node && node.depth) || 1;
3131
- result.x += (
3132
- // Add space for symbols
3133
- ((symbolOptions.width || 0) +
3134
- ((symbolOptions.padding || 0) * 2)) +
3135
- // Apply indentation
3136
- ((level - 1) * indentation));
3137
- }
3138
- return result;
3139
- }
3255
+ brokenAxis = axis.brokenAxis;
3256
+ if (brokenAxis &&
3257
+ axis.treeGrid.mapOfPosToGridNode) {
3258
+ var pos = tick.pos,
3259
+ node = axis.treeGrid.mapOfPosToGridNode[pos],
3260
+ breaks = axis.treeGrid.collapse(node);
3261
+ brokenAxis.setBreaks(breaks, pick(redraw, true));
3262
+ }
3263
+ };
3140
3264
  /**
3265
+ * Destroy remaining labelIcon if exist.
3266
+ *
3141
3267
  * @private
3268
+ * @function Highcharts.Tick#destroy
3142
3269
  */
3143
- function wrapRenderLabel(proceed) {
3144
- var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode, options = axis.options, labelOptions = pick(tick.options && tick.options.labels, options && options.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
3145
- labelOptions.symbol :
3146
- {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], level = node && node.depth, isTreeGrid = options.type === 'treegrid', shouldRender = axis.tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', styledMode = axis.chart.styledMode;
3147
- var collapsed,
3148
- addClassName,
3149
- removeClassName;
3150
- if (isTreeGrid && node) {
3151
- // Add class name for hierarchical styling.
3152
- if (label &&
3153
- label.element) {
3154
- label.addClass(prefixClassName + 'level-' + level);
3155
- }
3156
- }
3157
- proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
3158
- if (isTreeGrid &&
3159
- label &&
3160
- label.element &&
3161
- node &&
3162
- node.descendants &&
3163
- node.descendants > 0) {
3164
- collapsed = axis.treeGrid.isCollapsed(node);
3165
- renderLabelIcon(tick, {
3166
- color: (!styledMode &&
3167
- label.styles &&
3168
- label.styles.color ||
3169
- ''),
3170
- collapsed: collapsed,
3171
- group: label.parentGroup,
3172
- options: symbolOptions,
3173
- renderer: label.renderer,
3174
- show: shouldRender,
3175
- xy: label.xy
3176
- });
3177
- // Add class name for the node.
3178
- addClassName = prefixClassName +
3179
- (collapsed ? 'collapsed' : 'expanded');
3180
- removeClassName = prefixClassName +
3181
- (collapsed ? 'expanded' : 'collapsed');
3182
- label
3183
- .addClass(addClassName)
3184
- .removeClass(removeClassName);
3185
- if (!styledMode) {
3186
- label.css({
3187
- cursor: 'pointer'
3188
- });
3189
- }
3190
- // Add events to both label text and icon
3191
- [label, tick.treeGrid.labelIcon].forEach(function (object) {
3192
- if (object && !object.attachedTreeGridEvents) {
3193
- // On hover
3194
- addEvent(object.element, 'mouseover', function () {
3195
- onTickHover(label);
3196
- });
3197
- // On hover out
3198
- addEvent(object.element, 'mouseout', function () {
3199
- onTickHoverExit(label, labelOptions);
3200
- });
3201
- addEvent(object.element, 'click', function () {
3202
- tick.treeGrid.toggleCollapse();
3203
- });
3204
- object.attachedTreeGridEvents = true;
3205
- }
3206
- });
3270
+ TreeGridTickAdditions.prototype.destroy = function () {
3271
+ if (this.labelIcon) {
3272
+ this.labelIcon.destroy();
3207
3273
  }
3208
- }
3209
- /* *
3274
+ };
3275
+ /**
3276
+ * Expand the grid cell. Used when axis is of type treegrid.
3210
3277
  *
3211
- * Classes
3278
+ * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3212
3279
  *
3213
- * */
3280
+ * @private
3281
+ * @function Highcharts.Tick#expand
3282
+ *
3283
+ * @param {boolean} [redraw=true]
3284
+ * Whether to redraw the chart or wait for an explicit call to
3285
+ * {@link Highcharts.Chart#redraw}
3286
+ */
3287
+ TreeGridTickAdditions.prototype.expand = function (redraw) {
3288
+ var tick = this.tick,
3289
+ axis = tick.axis,
3290
+ brokenAxis = axis.brokenAxis;
3291
+ if (brokenAxis &&
3292
+ axis.treeGrid.mapOfPosToGridNode) {
3293
+ var pos = tick.pos,
3294
+ node = axis.treeGrid.mapOfPosToGridNode[pos],
3295
+ breaks = axis.treeGrid.expand(node);
3296
+ brokenAxis.setBreaks(breaks, pick(redraw, true));
3297
+ }
3298
+ };
3214
3299
  /**
3300
+ * Toggle the collapse/expand state of the grid cell. Used when axis is
3301
+ * of type treegrid.
3302
+ *
3303
+ * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3304
+ *
3215
3305
  * @private
3216
- * @class
3306
+ * @function Highcharts.Tick#toggleCollapse
3307
+ *
3308
+ * @param {boolean} [redraw=true]
3309
+ * Whether to redraw the chart or wait for an explicit call to
3310
+ * {@link Highcharts.Chart#redraw}
3217
3311
  */
3218
- var Additions = /** @class */ (function () {
3219
- /* *
3220
- *
3221
- * Constructors
3222
- *
3223
- * */
3224
- /**
3225
- * @private
3226
- */
3227
- function Additions(tick) {
3228
- this.tick = tick;
3312
+ TreeGridTickAdditions.prototype.toggleCollapse = function (redraw) {
3313
+ var tick = this.tick,
3314
+ axis = tick.axis,
3315
+ brokenAxis = axis.brokenAxis;
3316
+ if (brokenAxis &&
3317
+ axis.treeGrid.mapOfPosToGridNode) {
3318
+ var pos = tick.pos,
3319
+ node = axis.treeGrid.mapOfPosToGridNode[pos],
3320
+ breaks = axis.treeGrid.toggleCollapse(node);
3321
+ brokenAxis.setBreaks(breaks, pick(redraw, true));
3229
3322
  }
3230
- /* *
3231
- *
3232
- * Functions
3233
- *
3234
- * */
3235
- /**
3236
- * Collapse the grid cell. Used when axis is of type treegrid.
3237
- *
3238
- * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3239
- *
3240
- * @private
3241
- * @function Highcharts.Tick#collapse
3242
- *
3243
- * @param {boolean} [redraw=true]
3244
- * Whether to redraw the chart or wait for an explicit call to
3245
- * {@link Highcharts.Chart#redraw}
3246
- */
3247
- Additions.prototype.collapse = function (redraw) {
3248
- var tick = this.tick,
3249
- axis = tick.axis,
3250
- brokenAxis = axis.brokenAxis;
3251
- if (brokenAxis &&
3252
- axis.treeGrid.mapOfPosToGridNode) {
3253
- var pos = tick.pos,
3254
- node = axis.treeGrid.mapOfPosToGridNode[pos],
3255
- breaks = axis.treeGrid.collapse(node);
3256
- brokenAxis.setBreaks(breaks, pick(redraw, true));
3257
- }
3258
- };
3259
- /**
3260
- * Destroy remaining labelIcon if exist.
3261
- *
3262
- * @private
3263
- * @function Highcharts.Tick#destroy
3264
- */
3265
- Additions.prototype.destroy = function () {
3266
- if (this.labelIcon) {
3267
- this.labelIcon.destroy();
3268
- }
3269
- };
3270
- /**
3271
- * Expand the grid cell. Used when axis is of type treegrid.
3272
- *
3273
- * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3274
- *
3275
- * @private
3276
- * @function Highcharts.Tick#expand
3277
- *
3278
- * @param {boolean} [redraw=true]
3279
- * Whether to redraw the chart or wait for an explicit call to
3280
- * {@link Highcharts.Chart#redraw}
3281
- */
3282
- Additions.prototype.expand = function (redraw) {
3283
- var tick = this.tick,
3284
- axis = tick.axis,
3285
- brokenAxis = axis.brokenAxis;
3286
- if (brokenAxis &&
3287
- axis.treeGrid.mapOfPosToGridNode) {
3288
- var pos = tick.pos,
3289
- node = axis.treeGrid.mapOfPosToGridNode[pos],
3290
- breaks = axis.treeGrid.expand(node);
3291
- brokenAxis.setBreaks(breaks, pick(redraw, true));
3292
- }
3293
- };
3294
- /**
3295
- * Toggle the collapse/expand state of the grid cell. Used when axis is
3296
- * of type treegrid.
3297
- *
3298
- * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
3299
- *
3300
- * @private
3301
- * @function Highcharts.Tick#toggleCollapse
3302
- *
3303
- * @param {boolean} [redraw=true]
3304
- * Whether to redraw the chart or wait for an explicit call to
3305
- * {@link Highcharts.Chart#redraw}
3306
- */
3307
- Additions.prototype.toggleCollapse = function (redraw) {
3308
- var tick = this.tick,
3309
- axis = tick.axis,
3310
- brokenAxis = axis.brokenAxis;
3311
- if (brokenAxis &&
3312
- axis.treeGrid.mapOfPosToGridNode) {
3313
- var pos = tick.pos,
3314
- node = axis.treeGrid.mapOfPosToGridNode[pos],
3315
- breaks = axis.treeGrid.toggleCollapse(node);
3316
- brokenAxis.setBreaks(breaks, pick(redraw, true));
3317
- }
3318
- };
3319
- return Additions;
3320
- }());
3321
- TreeGridTick.Additions = Additions;
3322
- })(TreeGridTick || (TreeGridTick = {}));
3323
+ };
3324
+ return TreeGridTickAdditions;
3325
+ }());
3326
+ /* *
3327
+ *
3328
+ * Default Export
3329
+ *
3330
+ * */
3323
3331
 
3324
- return TreeGridTick;
3332
+ return TreeGridTickAdditions;
3325
3333
  });
3326
3334
  _registerModule(_modules, 'Series/TreeUtilities.js', [_modules['Core/Color/Color.js'], _modules['Core/Utilities.js']], function (Color, U) {
3327
3335
  /* *
@@ -3553,7 +3561,7 @@
3553
3561
 
3554
3562
  return TreeUtilities;
3555
3563
  });
3556
- _registerModule(_modules, 'Core/Axis/TreeGridAxis.js', [_modules['Core/Axis/BrokenAxis.js'], _modules['Core/Axis/GridAxis.js'], _modules['Gantt/Tree.js'], _modules['Core/Axis/TreeGridTick.js'], _modules['Series/TreeUtilities.js'], _modules['Core/Utilities.js']], function (BrokenAxis, GridAxis, Tree, TreeGridTick, TU, U) {
3564
+ _registerModule(_modules, 'Core/Axis/TreeGrid/TreeGridAxis.js', [_modules['Core/Axis/BrokenAxis.js'], _modules['Core/Axis/GridAxis.js'], _modules['Gantt/Tree.js'], _modules['Core/Axis/TreeGrid/TreeGridTick.js'], _modules['Series/TreeUtilities.js'], _modules['Core/Utilities.js']], function (BrokenAxis, GridAxis, Tree, TreeGridTick, TU, U) {
3557
3565
  /* *
3558
3566
  *
3559
3567
  * (c) 2016 Highsoft AS
@@ -3574,755 +3582,767 @@
3574
3582
  merge = U.merge,
3575
3583
  pick = U.pick,
3576
3584
  wrap = U.wrap;
3585
+ /* *
3586
+ *
3587
+ * Constants
3588
+ *
3589
+ * */
3590
+ var composedClasses = [];
3591
+ /* *
3592
+ *
3593
+ * Variables
3594
+ *
3595
+ * */
3596
+ var TickConstructor;
3597
+ /* *
3598
+ *
3599
+ * Functions
3600
+ *
3601
+ * */
3577
3602
  /**
3578
3603
  * @private
3579
3604
  */
3580
- var TreeGridAxis;
3581
- (function (TreeGridAxis) {
3582
- /* *
3583
- *
3584
- * Declarations
3585
- *
3586
- * */
3587
- /* *
3588
- *
3589
- * Variables
3590
- *
3591
- * */
3592
- var TickConstructor;
3605
+ function getBreakFromNode(node, max) {
3606
+ var to = node.collapseEnd || 0;
3607
+ var from = node.collapseStart || 0;
3608
+ // In broken-axis, the axis.max is minimized until it is not within a
3609
+ // break. Therefore, if break.to is larger than axis.max, the axis.to
3610
+ // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break
3611
+ // larger than axis.max.
3612
+ // TODO consider simplifying broken-axis and this might solve itself
3613
+ if (to >= max) {
3614
+ from -= 0.5;
3615
+ }
3616
+ return {
3617
+ from: from,
3618
+ to: to,
3619
+ showPoints: false
3620
+ };
3621
+ }
3622
+ /**
3623
+ * Creates a tree structure of the data, and the treegrid. Calculates
3624
+ * categories, and y-values of points based on the tree.
3625
+ *
3626
+ * @private
3627
+ * @function getTreeGridFromData
3628
+ *
3629
+ * @param {Array<Highcharts.GanttPointOptions>} data
3630
+ * All the data points to display in the axis.
3631
+ *
3632
+ * @param {boolean} uniqueNames
3633
+ * Whether or not the data node with the same name should share grid cell. If
3634
+ * true they do share cell. False by default.
3635
+ *
3636
+ * @param {number} numberOfSeries
3637
+ *
3638
+ * @return {Object}
3639
+ * Returns an object containing categories, mapOfIdToNode,
3640
+ * mapOfPosToGridNode, and tree.
3641
+ *
3642
+ * @todo There should be only one point per line.
3643
+ * @todo It should be optional to have one category per point, or merge
3644
+ * cells
3645
+ * @todo Add unit-tests.
3646
+ */
3647
+ function getTreeGridFromData(data, uniqueNames, numberOfSeries) {
3648
+ var categories = [],
3649
+ collapsedNodes = [],
3650
+ mapOfIdToNode = {},
3651
+ uniqueNamesEnabled = typeof uniqueNames === 'boolean' ?
3652
+ uniqueNames : false;
3653
+ var mapOfPosToGridNode = {},
3654
+ posIterator = -1;
3655
+ // Build the tree from the series data.
3656
+ var treeParams = {
3657
+ // After the children has been created.
3658
+ after: function (node) {
3659
+ var gridNode = mapOfPosToGridNode[node.pos];
3660
+ var height = 0,
3661
+ descendants = 0;
3662
+ gridNode.children.forEach(function (child) {
3663
+ descendants += (child.descendants || 0) + 1;
3664
+ height = Math.max((child.height || 0) + 1, height);
3665
+ });
3666
+ gridNode.descendants = descendants;
3667
+ gridNode.height = height;
3668
+ if (gridNode.collapsed) {
3669
+ collapsedNodes.push(gridNode);
3670
+ }
3671
+ },
3672
+ // Before the children has been created.
3673
+ before: function (node) {
3674
+ var data = isObject(node.data,
3675
+ true) ?
3676
+ node.data :
3677
+ {},
3678
+ name = isString(data.name) ? data.name : '',
3679
+ parentNode = mapOfIdToNode[node.parent],
3680
+ parentGridNode = (isObject(parentNode,
3681
+ true) ?
3682
+ mapOfPosToGridNode[parentNode.pos] :
3683
+ null),
3684
+ hasSameName = function (x) {
3685
+ return x.name === name;
3686
+ };
3687
+ var gridNode,
3688
+ pos;
3689
+ // If not unique names, look for sibling node with the same name
3690
+ if (uniqueNamesEnabled &&
3691
+ isObject(parentGridNode, true) &&
3692
+ !!(gridNode = find(parentGridNode.children, hasSameName))) {
3693
+ // If there is a gridNode with the same name, reuse position
3694
+ pos = gridNode.pos;
3695
+ // Add data node to list of nodes in the grid node.
3696
+ gridNode.nodes.push(node);
3697
+ }
3698
+ else {
3699
+ // If it is a new grid node, increment position.
3700
+ pos = posIterator++;
3701
+ }
3702
+ // Add new grid node to map.
3703
+ if (!mapOfPosToGridNode[pos]) {
3704
+ mapOfPosToGridNode[pos] = gridNode = {
3705
+ depth: parentGridNode ? parentGridNode.depth + 1 : 0,
3706
+ name: name,
3707
+ id: data.id,
3708
+ nodes: [node],
3709
+ children: [],
3710
+ pos: pos
3711
+ };
3712
+ // If not root, then add name to categories.
3713
+ if (pos !== -1) {
3714
+ categories.push(name);
3715
+ }
3716
+ // Add name to list of children.
3717
+ if (isObject(parentGridNode, true)) {
3718
+ parentGridNode.children.push(gridNode);
3719
+ }
3720
+ }
3721
+ // Add data node to map
3722
+ if (isString(node.id)) {
3723
+ mapOfIdToNode[node.id] = node;
3724
+ }
3725
+ // If one of the points are collapsed, then start the grid node
3726
+ // in collapsed state.
3727
+ if (gridNode &&
3728
+ data.collapsed === true) {
3729
+ gridNode.collapsed = true;
3730
+ }
3731
+ // Assign pos to data node
3732
+ node.pos = pos;
3733
+ }
3734
+ };
3735
+ var updateYValuesAndTickPos = function (map,
3736
+ numberOfSeries) {
3737
+ var setValues = function (gridNode,
3738
+ start,
3739
+ result) {
3740
+ var nodes = gridNode.nodes,
3741
+ padding = 0.5;
3742
+ var end = start + (start === -1 ? 0 : numberOfSeries - 1);
3743
+ var diff = (end - start) / 2,
3744
+ pos = start + diff;
3745
+ nodes.forEach(function (node) {
3746
+ var data = node.data;
3747
+ if (isObject(data, true)) {
3748
+ // Update point
3749
+ data.y = start + (data.seriesIndex || 0);
3750
+ // Remove the property once used
3751
+ delete data.seriesIndex;
3752
+ }
3753
+ node.pos = pos;
3754
+ });
3755
+ result[pos] = gridNode;
3756
+ gridNode.pos = pos;
3757
+ gridNode.tickmarkOffset = diff + padding;
3758
+ gridNode.collapseStart = end + padding;
3759
+ gridNode.children.forEach(function (child) {
3760
+ setValues(child, end + 1, result);
3761
+ end = (child.collapseEnd || 0) - padding;
3762
+ });
3763
+ // Set collapseEnd to the end of the last child node.
3764
+ gridNode.collapseEnd = end + padding;
3765
+ return result;
3766
+ };
3767
+ return setValues(map['-1'], -1, {});
3768
+ };
3769
+ // Create tree from data
3770
+ var tree = Tree.getTree(data,
3771
+ treeParams);
3772
+ // Update y values of data, and set calculate tick positions.
3773
+ mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);
3774
+ // Return the resulting data.
3775
+ return {
3776
+ categories: categories,
3777
+ mapOfIdToNode: mapOfIdToNode,
3778
+ mapOfPosToGridNode: mapOfPosToGridNode,
3779
+ collapsedNodes: collapsedNodes,
3780
+ tree: tree
3781
+ };
3782
+ }
3783
+ /**
3784
+ * Builds the tree of categories and calculates its positions.
3785
+ * @private
3786
+ * @param {Object} e Event object
3787
+ * @param {Object} e.target The chart instance which the event was fired on.
3788
+ * @param {object[]} e.target.axes The axes of the chart.
3789
+ */
3790
+ function onBeforeRender(e) {
3791
+ var chart = e.target,
3792
+ axes = chart.axes;
3793
+ axes.filter(function (axis) {
3794
+ return axis.options.type === 'treegrid';
3795
+ }).forEach(function (axis) {
3796
+ var options = axis.options || {},
3797
+ labelOptions = options.labels,
3798
+ uniqueNames = options.uniqueNames,
3799
+ max = options.max,
3800
+ // Check whether any of series is rendering for the first
3801
+ // time, visibility has changed, or its data is dirty, and
3802
+ // only then update. #10570, #10580. Also check if
3803
+ // mapOfPosToGridNode exists. #10887
3804
+ isDirty = (!axis.treeGrid.mapOfPosToGridNode ||
3805
+ axis.series.some(function (series) {
3806
+ return !series.hasRendered ||
3807
+ series.isDirtyData ||
3808
+ series.isDirty;
3809
+ }));
3810
+ var numberOfSeries = 0,
3811
+ data,
3812
+ treeGrid;
3813
+ if (isDirty) {
3814
+ // Concatenate data from all series assigned to this axis.
3815
+ data = axis.series.reduce(function (arr, s) {
3816
+ if (s.visible) {
3817
+ // Push all data to array
3818
+ (s.options.data || []).forEach(function (data) {
3819
+ // For using keys - rebuild the data structure
3820
+ if (s.options.keys && s.options.keys.length) {
3821
+ data = s.pointClass.prototype
3822
+ .optionsToObject
3823
+ .call({ series: s }, data);
3824
+ s.pointClass.setGanttPointAliases(data);
3825
+ }
3826
+ if (isObject(data, true)) {
3827
+ // Set series index on data. Removed again
3828
+ // after use.
3829
+ data.seriesIndex = (numberOfSeries);
3830
+ arr.push(data);
3831
+ }
3832
+ });
3833
+ // Increment series index
3834
+ if (uniqueNames === true) {
3835
+ numberOfSeries++;
3836
+ }
3837
+ }
3838
+ return arr;
3839
+ }, []);
3840
+ // If max is higher than set data - add a
3841
+ // dummy data to render categories #10779
3842
+ if (max && data.length < max) {
3843
+ for (var i = data.length; i <= max; i++) {
3844
+ data.push({
3845
+ // Use the zero-width character
3846
+ // to avoid conflict with uniqueNames
3847
+ name: i + '\u200B'
3848
+ });
3849
+ }
3850
+ }
3851
+ // setScale is fired after all the series is initialized,
3852
+ // which is an ideal time to update the axis.categories.
3853
+ treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);
3854
+ // Assign values to the axis.
3855
+ axis.categories = treeGrid.categories;
3856
+ axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);
3857
+ axis.hasNames = true;
3858
+ axis.treeGrid.tree = treeGrid.tree;
3859
+ // Update yData now that we have calculated the y values
3860
+ axis.series.forEach(function (series) {
3861
+ var axisData = (series.options.data || []).map(function (d) {
3862
+ if (isArray(d) &&
3863
+ series.options.keys &&
3864
+ series.options.keys.length) {
3865
+ // Get the axisData from the data array used to
3866
+ // build the treeGrid where has been modified
3867
+ data.forEach(function (point) {
3868
+ if (d.indexOf(point.x) >= 0 &&
3869
+ d.indexOf(point.x2) >= 0) {
3870
+ d = point;
3871
+ }
3872
+ });
3873
+ }
3874
+ return isObject(d, true) ? merge(d) : d;
3875
+ });
3876
+ // Avoid destroying points when series is not visible
3877
+ if (series.visible) {
3878
+ series.setData(axisData, false);
3879
+ }
3880
+ });
3881
+ // Calculate the label options for each level in the tree.
3882
+ axis.treeGrid.mapOptionsToLevel =
3883
+ getLevelOptions({
3884
+ defaults: labelOptions,
3885
+ from: 1,
3886
+ levels: labelOptions && labelOptions.levels,
3887
+ to: axis.treeGrid.tree && axis.treeGrid.tree.height
3888
+ });
3889
+ // Setting initial collapsed nodes
3890
+ if (e.type === 'beforeRender') {
3891
+ axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
3892
+ }
3893
+ }
3894
+ });
3895
+ }
3896
+ /**
3897
+ * Generates a tick for initial positioning.
3898
+ *
3899
+ * @private
3900
+ * @function Highcharts.GridAxis#generateTick
3901
+ *
3902
+ * @param {Function} proceed
3903
+ * The original generateTick function.
3904
+ *
3905
+ * @param {number} pos
3906
+ * The tick position in axis values.
3907
+ */
3908
+ function wrapGenerateTick(proceed, pos) {
3909
+ var axis = this,
3910
+ mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},
3911
+ isTreeGrid = axis.options.type === 'treegrid',
3912
+ ticks = axis.ticks;
3913
+ var tick = ticks[pos],
3914
+ levelOptions,
3915
+ options,
3916
+ gridNode;
3917
+ if (isTreeGrid &&
3918
+ axis.treeGrid.mapOfPosToGridNode) {
3919
+ gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
3920
+ levelOptions = mapOptionsToLevel[gridNode.depth];
3921
+ if (levelOptions) {
3922
+ options = {
3923
+ labels: levelOptions
3924
+ };
3925
+ }
3926
+ if (!tick &&
3927
+ TickConstructor) {
3928
+ ticks[pos] = tick =
3929
+ new TickConstructor(axis, pos, void 0, void 0, {
3930
+ category: gridNode.name,
3931
+ tickmarkOffset: gridNode.tickmarkOffset,
3932
+ options: options
3933
+ });
3934
+ }
3935
+ else {
3936
+ // update labels depending on tick interval
3937
+ tick.parameters.category = gridNode.name;
3938
+ tick.options = options;
3939
+ tick.addLabel();
3940
+ }
3941
+ }
3942
+ else {
3943
+ proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
3944
+ }
3945
+ }
3946
+ /**
3947
+ * @private
3948
+ */
3949
+ function wrapInit(proceed, chart, userOptions) {
3950
+ var axis = this,
3951
+ isTreeGrid = userOptions.type === 'treegrid';
3952
+ if (!axis.treeGrid) {
3953
+ axis.treeGrid = new TreeGridAxisAdditions(axis);
3954
+ }
3955
+ // Set default and forced options for TreeGrid
3956
+ if (isTreeGrid) {
3957
+ // Add event for updating the categories of a treegrid.
3958
+ // NOTE Preferably these events should be set on the axis.
3959
+ addEvent(chart, 'beforeRender', onBeforeRender);
3960
+ addEvent(chart, 'beforeRedraw', onBeforeRender);
3961
+ // Add new collapsed nodes on addseries
3962
+ addEvent(chart, 'addSeries', function (e) {
3963
+ if (e.options.data) {
3964
+ var treeGrid = getTreeGridFromData(e.options.data,
3965
+ userOptions.uniqueNames || false, 1);
3966
+ axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);
3967
+ }
3968
+ });
3969
+ // Collapse all nodes in axis.treegrid.collapsednodes
3970
+ // where collapsed equals true.
3971
+ addEvent(axis, 'foundExtremes', function () {
3972
+ if (axis.treeGrid.collapsedNodes) {
3973
+ axis.treeGrid.collapsedNodes.forEach(function (node) {
3974
+ var breaks = axis.treeGrid.collapse(node);
3975
+ if (axis.brokenAxis) {
3976
+ axis.brokenAxis.setBreaks(breaks, false);
3977
+ // remove the node from the axis collapsedNodes
3978
+ if (axis.treeGrid.collapsedNodes) {
3979
+ axis.treeGrid.collapsedNodes = axis.treeGrid
3980
+ .collapsedNodes
3981
+ .filter(function (n) { return ((node.collapseStart !==
3982
+ n.collapseStart) ||
3983
+ node.collapseEnd !== n.collapseEnd); });
3984
+ }
3985
+ }
3986
+ });
3987
+ }
3988
+ });
3989
+ // If staticScale is not defined on the yAxis
3990
+ // and chart height is set, set axis.isDirty
3991
+ // to ensure collapsing works (#12012)
3992
+ addEvent(axis, 'afterBreaks', function () {
3993
+ if (axis.coll === 'yAxis' &&
3994
+ !axis.staticScale &&
3995
+ axis.chart.options.chart.height) {
3996
+ axis.isDirty = true;
3997
+ }
3998
+ });
3999
+ userOptions = merge({
4000
+ // Default options
4001
+ grid: {
4002
+ enabled: true
4003
+ },
4004
+ // TODO: add support for align in treegrid.
4005
+ labels: {
4006
+ align: 'left',
4007
+ /**
4008
+ * Set options on specific levels in a tree grid axis. Takes
4009
+ * precedence over labels options.
4010
+ *
4011
+ * @sample {gantt} gantt/treegrid-axis/labels-levels
4012
+ * Levels on TreeGrid Labels
4013
+ *
4014
+ * @type {Array<*>}
4015
+ * @product gantt
4016
+ * @apioption yAxis.labels.levels
4017
+ *
4018
+ * @private
4019
+ */
4020
+ levels: [{
4021
+ /**
4022
+ * Specify the level which the options within this object
4023
+ * applies to.
4024
+ *
4025
+ * @type {number}
4026
+ * @product gantt
4027
+ * @apioption yAxis.labels.levels.level
4028
+ *
4029
+ * @private
4030
+ */
4031
+ level: void 0
4032
+ }, {
4033
+ level: 1,
4034
+ /**
4035
+ * @type {Highcharts.CSSObject}
4036
+ * @product gantt
4037
+ * @apioption yAxis.labels.levels.style
4038
+ *
4039
+ * @private
4040
+ */
4041
+ style: {
4042
+ /** @ignore-option */
4043
+ fontWeight: 'bold'
4044
+ }
4045
+ }],
4046
+ /**
4047
+ * The symbol for the collapse and expand icon in a
4048
+ * treegrid.
4049
+ *
4050
+ * @product gantt
4051
+ * @optionparent yAxis.labels.symbol
4052
+ *
4053
+ * @private
4054
+ */
4055
+ symbol: {
4056
+ /**
4057
+ * The symbol type. Points to a definition function in
4058
+ * the `Highcharts.Renderer.symbols` collection.
4059
+ *
4060
+ * @type {Highcharts.SymbolKeyValue}
4061
+ *
4062
+ * @private
4063
+ */
4064
+ type: 'triangle',
4065
+ x: -5,
4066
+ y: -5,
4067
+ height: 10,
4068
+ width: 10,
4069
+ padding: 5
4070
+ }
4071
+ },
4072
+ uniqueNames: false
4073
+ }, userOptions, {
4074
+ // Forced options
4075
+ reversed: true,
4076
+ // grid.columns is not supported in treegrid
4077
+ grid: {
4078
+ columns: void 0
4079
+ }
4080
+ });
4081
+ }
4082
+ // Now apply the original function with the original arguments,
4083
+ // which are sliced off this function's arguments
4084
+ proceed.apply(axis, [chart, userOptions]);
4085
+ if (isTreeGrid) {
4086
+ axis.hasNames = true;
4087
+ axis.options.showLastLabel = true;
4088
+ }
4089
+ }
4090
+ /**
4091
+ * Set the tick positions, tickInterval, axis min and max.
4092
+ *
4093
+ * @private
4094
+ * @function Highcharts.GridAxis#setTickInterval
4095
+ *
4096
+ * @param {Function} proceed
4097
+ * The original setTickInterval function.
4098
+ */
4099
+ function wrapSetTickInterval(proceed) {
4100
+ var axis = this,
4101
+ options = axis.options,
4102
+ isTreeGrid = options.type === 'treegrid';
4103
+ if (isTreeGrid) {
4104
+ axis.min = pick(axis.userMin, options.min, axis.dataMin);
4105
+ axis.max = pick(axis.userMax, options.max, axis.dataMax);
4106
+ fireEvent(axis, 'foundExtremes');
4107
+ // setAxisTranslation modifies the min and max according to
4108
+ // axis breaks.
4109
+ axis.setAxisTranslation();
4110
+ axis.tickmarkOffset = 0.5;
4111
+ axis.tickInterval = 1;
4112
+ axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?
4113
+ axis.treeGrid.getTickPositions() :
4114
+ [];
4115
+ }
4116
+ else {
4117
+ proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
4118
+ }
4119
+ }
4120
+ /* *
4121
+ *
4122
+ * Classes
4123
+ *
4124
+ * */
4125
+ /**
4126
+ * @private
4127
+ * @class
4128
+ */
4129
+ var TreeGridAxisAdditions = /** @class */ (function () {
4130
+ /* *
4131
+ *
4132
+ * Constructors
4133
+ *
4134
+ * */
4135
+ /**
4136
+ * @private
4137
+ */
4138
+ function TreeGridAxisAdditions(axis) {
4139
+ this.axis = axis;
4140
+ }
3593
4141
  /* *
3594
4142
  *
3595
- * Functions
4143
+ * Static Functions
3596
4144
  *
3597
4145
  * */
3598
4146
  /**
3599
4147
  * @private
3600
4148
  */
3601
- function compose(AxisClass, ChartClass, SeriesClass, TickClass) {
3602
- if (AxisClass.keepProps.indexOf('treeGrid') === -1) {
3603
- AxisClass.keepProps.push('treeGrid');
3604
- TickConstructor = TickClass;
3605
- wrap(AxisClass.prototype, 'generateTick', wrapGenerateTick);
3606
- wrap(AxisClass.prototype, 'init', wrapInit);
3607
- wrap(AxisClass.prototype, 'setTickInterval', wrapSetTickInterval);
4149
+ TreeGridAxisAdditions.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {
4150
+ if (composedClasses.indexOf(AxisClass) === -1) {
4151
+ composedClasses.push(AxisClass);
4152
+ if (AxisClass.keepProps.indexOf('treeGrid') === -1) {
4153
+ AxisClass.keepProps.push('treeGrid');
4154
+ }
4155
+ var axisProps = AxisClass.prototype;
4156
+ wrap(axisProps, 'generateTick', wrapGenerateTick);
4157
+ wrap(axisProps, 'init', wrapInit);
4158
+ wrap(axisProps, 'setTickInterval', wrapSetTickInterval);
3608
4159
  // Make utility functions available for testing.
3609
- AxisClass.prototype.utils = {
4160
+ axisProps.utils = {
3610
4161
  getNode: Tree.getNode
3611
4162
  };
3612
- GridAxis.compose(AxisClass, ChartClass, TickClass);
3613
- BrokenAxis.compose(AxisClass, SeriesClass);
3614
- TreeGridTick.compose(TickClass);
3615
4163
  }
4164
+ if (composedClasses.indexOf(TickClass) === -1) {
4165
+ composedClasses.push(TickClass);
4166
+ if (!TickConstructor) {
4167
+ TickConstructor = TickClass;
4168
+ }
4169
+ }
4170
+ GridAxis.compose(AxisClass, ChartClass, TickClass);
4171
+ BrokenAxis.compose(AxisClass, SeriesClass);
4172
+ TreeGridTick.compose(TickClass);
3616
4173
  return AxisClass;
3617
- }
3618
- TreeGridAxis.compose = compose;
4174
+ };
4175
+ /* *
4176
+ *
4177
+ * Functions
4178
+ *
4179
+ * */
3619
4180
  /**
4181
+ * Set the collapse status.
4182
+ *
3620
4183
  * @private
4184
+ *
4185
+ * @param {Highcharts.Axis} axis
4186
+ * The axis to check against.
4187
+ *
4188
+ * @param {Highcharts.GridNode} node
4189
+ * The node to collapse.
3621
4190
  */
3622
- function getBreakFromNode(node, max) {
3623
- var to = node.collapseEnd || 0;
3624
- var from = node.collapseStart || 0;
3625
- // In broken-axis, the axis.max is minimized until it is not within a
3626
- // break. Therefore, if break.to is larger than axis.max, the axis.to
3627
- // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break
3628
- // larger than axis.max.
3629
- // TODO consider simplifying broken-axis and this might solve itself
3630
- if (to >= max) {
3631
- from -= 0.5;
3632
- }
3633
- return {
3634
- from: from,
3635
- to: to,
3636
- showPoints: false
3637
- };
3638
- }
4191
+ TreeGridAxisAdditions.prototype.setCollapsedStatus = function (node) {
4192
+ var axis = this.axis,
4193
+ chart = axis.chart;
4194
+ axis.series.forEach(function (series) {
4195
+ var data = series.options.data;
4196
+ if (node.id && data) {
4197
+ var point = chart.get(node.id),
4198
+ dataPoint = data[series.data.indexOf(point)];
4199
+ if (point && dataPoint) {
4200
+ point.collapsed = node.collapsed;
4201
+ dataPoint.collapsed = node.collapsed;
4202
+ }
4203
+ }
4204
+ });
4205
+ };
3639
4206
  /**
3640
- * Creates a tree structure of the data, and the treegrid. Calculates
3641
- * categories, and y-values of points based on the tree.
4207
+ * Calculates the new axis breaks to collapse a node.
3642
4208
  *
3643
4209
  * @private
3644
- * @function getTreeGridFromData
3645
4210
  *
3646
- * @param {Array<Highcharts.GanttPointOptions>} data
3647
- * All the data points to display in the axis.
4211
+ * @param {Highcharts.Axis} axis
4212
+ * The axis to check against.
3648
4213
  *
3649
- * @param {boolean} uniqueNames
3650
- * Wether or not the data node with the same name should share grid cell. If
3651
- * true they do share cell. False by default.
4214
+ * @param {Highcharts.GridNode} node
4215
+ * The node to collapse.
3652
4216
  *
3653
- * @param {number} numberOfSeries
4217
+ * @param {number} pos
4218
+ * The tick position to collapse.
3654
4219
  *
3655
- * @return {Object}
3656
- * Returns an object containing categories, mapOfIdToNode,
3657
- * mapOfPosToGridNode, and tree.
3658
- *
3659
- * @todo There should be only one point per line.
3660
- * @todo It should be optional to have one category per point, or merge
3661
- * cells
3662
- * @todo Add unit-tests.
3663
- */
3664
- function getTreeGridFromData(data, uniqueNames, numberOfSeries) {
3665
- var categories = [],
3666
- collapsedNodes = [],
3667
- mapOfIdToNode = {},
3668
- uniqueNamesEnabled = typeof uniqueNames === 'boolean' ?
3669
- uniqueNames : false;
3670
- var mapOfPosToGridNode = {},
3671
- posIterator = -1;
3672
- // Build the tree from the series data.
3673
- var treeParams = {
3674
- // After the children has been created.
3675
- after: function (node) {
3676
- var gridNode = mapOfPosToGridNode[node.pos];
3677
- var height = 0,
3678
- descendants = 0;
3679
- gridNode.children.forEach(function (child) {
3680
- descendants += (child.descendants || 0) + 1;
3681
- height = Math.max((child.height || 0) + 1, height);
3682
- });
3683
- gridNode.descendants = descendants;
3684
- gridNode.height = height;
3685
- if (gridNode.collapsed) {
3686
- collapsedNodes.push(gridNode);
3687
- }
3688
- },
3689
- // Before the children has been created.
3690
- before: function (node) {
3691
- var data = isObject(node.data,
3692
- true) ?
3693
- node.data :
3694
- {},
3695
- name = isString(data.name) ? data.name : '',
3696
- parentNode = mapOfIdToNode[node.parent],
3697
- parentGridNode = (isObject(parentNode,
3698
- true) ?
3699
- mapOfPosToGridNode[parentNode.pos] :
3700
- null),
3701
- hasSameName = function (x) {
3702
- return x.name === name;
3703
- };
3704
- var gridNode,
3705
- pos;
3706
- // If not unique names, look for sibling node with the same name
3707
- if (uniqueNamesEnabled &&
3708
- isObject(parentGridNode, true) &&
3709
- !!(gridNode = find(parentGridNode.children, hasSameName))) {
3710
- // If there is a gridNode with the same name, reuse position
3711
- pos = gridNode.pos;
3712
- // Add data node to list of nodes in the grid node.
3713
- gridNode.nodes.push(node);
3714
- }
3715
- else {
3716
- // If it is a new grid node, increment position.
3717
- pos = posIterator++;
3718
- }
3719
- // Add new grid node to map.
3720
- if (!mapOfPosToGridNode[pos]) {
3721
- mapOfPosToGridNode[pos] = gridNode = {
3722
- depth: parentGridNode ? parentGridNode.depth + 1 : 0,
3723
- name: name,
3724
- id: data.id,
3725
- nodes: [node],
3726
- children: [],
3727
- pos: pos
3728
- };
3729
- // If not root, then add name to categories.
3730
- if (pos !== -1) {
3731
- categories.push(name);
3732
- }
3733
- // Add name to list of children.
3734
- if (isObject(parentGridNode, true)) {
3735
- parentGridNode.children.push(gridNode);
3736
- }
3737
- }
3738
- // Add data node to map
3739
- if (isString(node.id)) {
3740
- mapOfIdToNode[node.id] = node;
3741
- }
3742
- // If one of the points are collapsed, then start the grid node
3743
- // in collapsed state.
3744
- if (gridNode &&
3745
- data.collapsed === true) {
3746
- gridNode.collapsed = true;
3747
- }
3748
- // Assign pos to data node
3749
- node.pos = pos;
3750
- }
3751
- };
3752
- var updateYValuesAndTickPos = function (map,
3753
- numberOfSeries) {
3754
- var setValues = function (gridNode,
3755
- start,
3756
- result) {
3757
- var nodes = gridNode.nodes,
3758
- padding = 0.5;
3759
- var end = start + (start === -1 ? 0 : numberOfSeries - 1);
3760
- var diff = (end - start) / 2,
3761
- pos = start + diff;
3762
- nodes.forEach(function (node) {
3763
- var data = node.data;
3764
- if (isObject(data, true)) {
3765
- // Update point
3766
- data.y = start + (data.seriesIndex || 0);
3767
- // Remove the property once used
3768
- delete data.seriesIndex;
3769
- }
3770
- node.pos = pos;
3771
- });
3772
- result[pos] = gridNode;
3773
- gridNode.pos = pos;
3774
- gridNode.tickmarkOffset = diff + padding;
3775
- gridNode.collapseStart = end + padding;
3776
- gridNode.children.forEach(function (child) {
3777
- setValues(child, end + 1, result);
3778
- end = (child.collapseEnd || 0) - padding;
3779
- });
3780
- // Set collapseEnd to the end of the last child node.
3781
- gridNode.collapseEnd = end + padding;
3782
- return result;
3783
- };
3784
- return setValues(map['-1'], -1, {});
3785
- };
3786
- // Create tree from data
3787
- var tree = Tree.getTree(data,
3788
- treeParams);
3789
- // Update y values of data, and set calculate tick positions.
3790
- mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);
3791
- // Return the resulting data.
3792
- return {
3793
- categories: categories,
3794
- mapOfIdToNode: mapOfIdToNode,
3795
- mapOfPosToGridNode: mapOfPosToGridNode,
3796
- collapsedNodes: collapsedNodes,
3797
- tree: tree
3798
- };
3799
- }
3800
- /**
3801
- * Builds the tree of categories and calculates its positions.
3802
- * @private
3803
- * @param {Object} e Event object
3804
- * @param {Object} e.target The chart instance which the event was fired on.
3805
- * @param {object[]} e.target.axes The axes of the chart.
3806
- */
3807
- function onBeforeRender(e) {
3808
- var chart = e.target,
3809
- axes = chart.axes;
3810
- axes.filter(function (axis) {
3811
- return axis.options.type === 'treegrid';
3812
- }).forEach(function (axis) {
3813
- var options = axis.options || {},
3814
- labelOptions = options.labels,
3815
- uniqueNames = options.uniqueNames,
3816
- max = options.max,
3817
- // Check whether any of series is rendering for the first
3818
- // time, visibility has changed, or its data is dirty, and
3819
- // only then update. #10570, #10580. Also check if
3820
- // mapOfPosToGridNode exists. #10887
3821
- isDirty = (!axis.treeGrid.mapOfPosToGridNode ||
3822
- axis.series.some(function (series) {
3823
- return !series.hasRendered ||
3824
- series.isDirtyData ||
3825
- series.isDirty;
3826
- }));
3827
- var numberOfSeries = 0,
3828
- data,
3829
- treeGrid;
3830
- if (isDirty) {
3831
- // Concatenate data from all series assigned to this axis.
3832
- data = axis.series.reduce(function (arr, s) {
3833
- if (s.visible) {
3834
- // Push all data to array
3835
- (s.options.data || []).forEach(function (data) {
3836
- // For using keys - rebuild the data structure
3837
- if (s.options.keys && s.options.keys.length) {
3838
- data = s.pointClass.prototype
3839
- .optionsToObject
3840
- .call({ series: s }, data);
3841
- s.pointClass.setGanttPointAliases(data);
3842
- }
3843
- if (isObject(data, true)) {
3844
- // Set series index on data. Removed again
3845
- // after use.
3846
- data.seriesIndex = (numberOfSeries);
3847
- arr.push(data);
3848
- }
3849
- });
3850
- // Increment series index
3851
- if (uniqueNames === true) {
3852
- numberOfSeries++;
3853
- }
3854
- }
3855
- return arr;
3856
- }, []);
3857
- // If max is higher than set data - add a
3858
- // dummy data to render categories #10779
3859
- if (max && data.length < max) {
3860
- for (var i = data.length; i <= max; i++) {
3861
- data.push({
3862
- // Use the zero-width character
3863
- // to avoid conflict with uniqueNames
3864
- name: i + '\u200B'
3865
- });
3866
- }
3867
- }
3868
- // setScale is fired after all the series is initialized,
3869
- // which is an ideal time to update the axis.categories.
3870
- treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);
3871
- // Assign values to the axis.
3872
- axis.categories = treeGrid.categories;
3873
- axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);
3874
- axis.hasNames = true;
3875
- axis.treeGrid.tree = treeGrid.tree;
3876
- // Update yData now that we have calculated the y values
3877
- axis.series.forEach(function (series) {
3878
- var axisData = (series.options.data || []).map(function (d) {
3879
- if (isArray(d) &&
3880
- series.options.keys &&
3881
- series.options.keys.length) {
3882
- // Get the axisData from the data array used to
3883
- // build the treeGrid where has been modified
3884
- data.forEach(function (point) {
3885
- if (d.indexOf(point.x) >= 0 &&
3886
- d.indexOf(point.x2) >= 0) {
3887
- d = point;
3888
- }
3889
- });
3890
- }
3891
- return isObject(d, true) ? merge(d) : d;
3892
- });
3893
- // Avoid destroying points when series is not visible
3894
- if (series.visible) {
3895
- series.setData(axisData, false);
3896
- }
3897
- });
3898
- // Calculate the label options for each level in the tree.
3899
- axis.treeGrid.mapOptionsToLevel =
3900
- getLevelOptions({
3901
- defaults: labelOptions,
3902
- from: 1,
3903
- levels: labelOptions && labelOptions.levels,
3904
- to: axis.treeGrid.tree && axis.treeGrid.tree.height
3905
- });
3906
- // Setting initial collapsed nodes
3907
- if (e.type === 'beforeRender') {
3908
- axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
3909
- }
3910
- }
3911
- });
3912
- }
4220
+ * @return {Array<object>}
4221
+ * Returns an array of the new breaks for the axis.
4222
+ */
4223
+ TreeGridAxisAdditions.prototype.collapse = function (node) {
4224
+ var axis = this.axis,
4225
+ breaks = (axis.options.breaks || []),
4226
+ obj = getBreakFromNode(node,
4227
+ axis.max);
4228
+ breaks.push(obj);
4229
+ // Change the collapsed flag #13838
4230
+ node.collapsed = true;
4231
+ axis.treeGrid.setCollapsedStatus(node);
4232
+ return breaks;
4233
+ };
3913
4234
  /**
3914
- * Generates a tick for initial positioning.
4235
+ * Calculates the new axis breaks to expand a node.
3915
4236
  *
3916
4237
  * @private
3917
- * @function Highcharts.GridAxis#generateTick
3918
4238
  *
3919
- * @param {Function} proceed
3920
- * The original generateTick function.
4239
+ * @param {Highcharts.Axis} axis
4240
+ * The axis to check against.
4241
+ *
4242
+ * @param {Highcharts.GridNode} node
4243
+ * The node to expand.
3921
4244
  *
3922
4245
  * @param {number} pos
3923
- * The tick position in axis values.
4246
+ * The tick position to expand.
4247
+ *
4248
+ * @return {Array<object>}
4249
+ * Returns an array of the new breaks for the axis.
3924
4250
  */
3925
- function wrapGenerateTick(proceed, pos) {
3926
- var axis = this,
3927
- mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},
3928
- isTreeGrid = axis.options.type === 'treegrid',
3929
- ticks = axis.ticks;
3930
- var tick = ticks[pos],
3931
- levelOptions,
3932
- options,
3933
- gridNode;
3934
- if (isTreeGrid &&
3935
- axis.treeGrid.mapOfPosToGridNode) {
3936
- gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
3937
- levelOptions = mapOptionsToLevel[gridNode.depth];
3938
- if (levelOptions) {
3939
- options = {
3940
- labels: levelOptions
3941
- };
3942
- }
3943
- if (!tick &&
3944
- TickConstructor) {
3945
- ticks[pos] = tick =
3946
- new TickConstructor(axis, pos, void 0, void 0, {
3947
- category: gridNode.name,
3948
- tickmarkOffset: gridNode.tickmarkOffset,
3949
- options: options
3950
- });
3951
- }
3952
- else {
3953
- // update labels depending on tick interval
3954
- tick.parameters.category = gridNode.name;
3955
- tick.options = options;
3956
- tick.addLabel();
4251
+ TreeGridAxisAdditions.prototype.expand = function (node) {
4252
+ var axis = this.axis,
4253
+ breaks = (axis.options.breaks || []),
4254
+ obj = getBreakFromNode(node,
4255
+ axis.max);
4256
+ // Change the collapsed flag #13838
4257
+ node.collapsed = false;
4258
+ axis.treeGrid.setCollapsedStatus(node);
4259
+ // Remove the break from the axis breaks array.
4260
+ return breaks.reduce(function (arr, b) {
4261
+ if (b.to !== obj.to || b.from !== obj.from) {
4262
+ arr.push(b);
3957
4263
  }
3958
- }
3959
- else {
3960
- proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
3961
- }
3962
- }
4264
+ return arr;
4265
+ }, []);
4266
+ };
3963
4267
  /**
4268
+ * Creates a list of positions for the ticks on the axis. Filters out
4269
+ * positions that are outside min and max, or is inside an axis break.
4270
+ *
3964
4271
  * @private
4272
+ *
4273
+ * @return {Array<number>}
4274
+ * List of positions.
3965
4275
  */
3966
- function wrapInit(proceed, chart, userOptions) {
3967
- var axis = this,
3968
- isTreeGrid = userOptions.type === 'treegrid';
3969
- if (!axis.treeGrid) {
3970
- axis.treeGrid = new Additions(axis);
3971
- }
3972
- // Set default and forced options for TreeGrid
3973
- if (isTreeGrid) {
3974
- // Add event for updating the categories of a treegrid.
3975
- // NOTE Preferably these events should be set on the axis.
3976
- addEvent(chart, 'beforeRender', onBeforeRender);
3977
- addEvent(chart, 'beforeRedraw', onBeforeRender);
3978
- // Add new collapsed nodes on addseries
3979
- addEvent(chart, 'addSeries', function (e) {
3980
- if (e.options.data) {
3981
- var treeGrid = getTreeGridFromData(e.options.data,
3982
- userOptions.uniqueNames || false, 1);
3983
- axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);
3984
- }
3985
- });
3986
- // Collapse all nodes in axis.treegrid.collapsednodes
3987
- // where collapsed equals true.
3988
- addEvent(axis, 'foundExtremes', function () {
3989
- if (axis.treeGrid.collapsedNodes) {
3990
- axis.treeGrid.collapsedNodes.forEach(function (node) {
3991
- var breaks = axis.treeGrid.collapse(node);
3992
- if (axis.brokenAxis) {
3993
- axis.brokenAxis.setBreaks(breaks, false);
3994
- // remove the node from the axis collapsedNodes
3995
- if (axis.treeGrid.collapsedNodes) {
3996
- axis.treeGrid.collapsedNodes = axis.treeGrid
3997
- .collapsedNodes
3998
- .filter(function (n) { return ((node.collapseStart !==
3999
- n.collapseStart) ||
4000
- node.collapseEnd !== n.collapseEnd); });
4001
- }
4002
- }
4003
- });
4004
- }
4005
- });
4006
- // If staticScale is not defined on the yAxis
4007
- // and chart height is set, set axis.isDirty
4008
- // to ensure collapsing works (#12012)
4009
- addEvent(axis, 'afterBreaks', function () {
4010
- if (axis.coll === 'yAxis' &&
4011
- !axis.staticScale &&
4012
- axis.chart.options.chart.height) {
4013
- axis.isDirty = true;
4014
- }
4015
- });
4016
- userOptions = merge({
4017
- // Default options
4018
- grid: {
4019
- enabled: true
4020
- },
4021
- // TODO: add support for align in treegrid.
4022
- labels: {
4023
- align: 'left',
4024
- /**
4025
- * Set options on specific levels in a tree grid axis. Takes
4026
- * precedence over labels options.
4027
- *
4028
- * @sample {gantt} gantt/treegrid-axis/labels-levels
4029
- * Levels on TreeGrid Labels
4030
- *
4031
- * @type {Array<*>}
4032
- * @product gantt
4033
- * @apioption yAxis.labels.levels
4034
- *
4035
- * @private
4036
- */
4037
- levels: [{
4038
- /**
4039
- * Specify the level which the options within this object
4040
- * applies to.
4041
- *
4042
- * @type {number}
4043
- * @product gantt
4044
- * @apioption yAxis.labels.levels.level
4045
- *
4046
- * @private
4047
- */
4048
- level: void 0
4049
- }, {
4050
- level: 1,
4051
- /**
4052
- * @type {Highcharts.CSSObject}
4053
- * @product gantt
4054
- * @apioption yAxis.labels.levels.style
4055
- *
4056
- * @private
4057
- */
4058
- style: {
4059
- /** @ignore-option */
4060
- fontWeight: 'bold'
4061
- }
4062
- }],
4063
- /**
4064
- * The symbol for the collapse and expand icon in a
4065
- * treegrid.
4066
- *
4067
- * @product gantt
4068
- * @optionparent yAxis.labels.symbol
4069
- *
4070
- * @private
4071
- */
4072
- symbol: {
4073
- /**
4074
- * The symbol type. Points to a definition function in
4075
- * the `Highcharts.Renderer.symbols` collection.
4076
- *
4077
- * @type {Highcharts.SymbolKeyValue}
4078
- *
4079
- * @private
4080
- */
4081
- type: 'triangle',
4082
- x: -5,
4083
- y: -5,
4084
- height: 10,
4085
- width: 10,
4086
- padding: 5
4087
- }
4088
- },
4089
- uniqueNames: false
4090
- }, userOptions, {
4091
- // Forced options
4092
- reversed: true,
4093
- // grid.columns is not supported in treegrid
4094
- grid: {
4095
- columns: void 0
4096
- }
4097
- });
4098
- }
4099
- // Now apply the original function with the original arguments,
4100
- // which are sliced off this function's arguments
4101
- proceed.apply(axis, [chart, userOptions]);
4102
- if (isTreeGrid) {
4103
- axis.hasNames = true;
4104
- axis.options.showLastLabel = true;
4105
- }
4106
- }
4276
+ TreeGridAxisAdditions.prototype.getTickPositions = function () {
4277
+ var axis = this.axis,
4278
+ roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
4279
+ roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
4280
+ return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {
4281
+ var pos = +key;
4282
+ if (pos >= roundedMin &&
4283
+ pos <= roundedMax &&
4284
+ !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {
4285
+ arr.push(pos);
4286
+ }
4287
+ return arr;
4288
+ }, []);
4289
+ };
4107
4290
  /**
4108
- * Set the tick positions, tickInterval, axis min and max.
4291
+ * Check if a node is collapsed.
4109
4292
  *
4110
4293
  * @private
4111
- * @function Highcharts.GridAxis#setTickInterval
4112
4294
  *
4113
- * @param {Function} proceed
4114
- * The original setTickInterval function.
4115
- */
4116
- function wrapSetTickInterval(proceed) {
4117
- var axis = this,
4118
- options = axis.options,
4119
- isTreeGrid = options.type === 'treegrid';
4120
- if (isTreeGrid) {
4121
- axis.min = pick(axis.userMin, options.min, axis.dataMin);
4122
- axis.max = pick(axis.userMax, options.max, axis.dataMax);
4123
- fireEvent(axis, 'foundExtremes');
4124
- // setAxisTranslation modifies the min and max according to
4125
- // axis breaks.
4126
- axis.setAxisTranslation();
4127
- axis.tickmarkOffset = 0.5;
4128
- axis.tickInterval = 1;
4129
- axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?
4130
- axis.treeGrid.getTickPositions() :
4131
- [];
4132
- }
4133
- else {
4134
- proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
4135
- }
4136
- }
4137
- /* *
4295
+ * @param {Highcharts.Axis} axis
4296
+ * The axis to check against.
4138
4297
  *
4139
- * Classes
4298
+ * @param {Object} node
4299
+ * The node to check if is collapsed.
4140
4300
  *
4141
- * */
4301
+ * @param {number} pos
4302
+ * The tick position to collapse.
4303
+ *
4304
+ * @return {boolean}
4305
+ * Returns true if collapsed, false if expanded.
4306
+ */
4307
+ TreeGridAxisAdditions.prototype.isCollapsed = function (node) {
4308
+ var axis = this.axis,
4309
+ breaks = (axis.options.breaks || []),
4310
+ obj = getBreakFromNode(node,
4311
+ axis.max);
4312
+ return breaks.some(function (b) {
4313
+ return b.from === obj.from && b.to === obj.to;
4314
+ });
4315
+ };
4142
4316
  /**
4317
+ * Calculates the new axis breaks after toggling the collapse/expand
4318
+ * state of a node. If it is collapsed it will be expanded, and if it is
4319
+ * exapended it will be collapsed.
4320
+ *
4143
4321
  * @private
4144
- * @class
4322
+ *
4323
+ * @param {Highcharts.Axis} axis
4324
+ * The axis to check against.
4325
+ *
4326
+ * @param {Highcharts.GridNode} node
4327
+ * The node to toggle.
4328
+ *
4329
+ * @return {Array<object>}
4330
+ * Returns an array of the new breaks for the axis.
4145
4331
  */
4146
- var Additions = /** @class */ (function () {
4147
- /* *
4148
- *
4149
- * Constructors
4150
- *
4151
- * */
4152
- /**
4153
- * @private
4154
- */
4155
- function Additions(axis) {
4156
- this.axis = axis;
4157
- }
4158
- /* *
4159
- *
4160
- * Functions
4161
- *
4162
- * */
4163
- /**
4164
- * Set the collapse status.
4165
- *
4166
- * @private
4167
- *
4168
- * @param {Highcharts.Axis} axis
4169
- * The axis to check against.
4170
- *
4171
- * @param {Highcharts.GridNode} node
4172
- * The node to collapse.
4173
- */
4174
- Additions.prototype.setCollapsedStatus = function (node) {
4175
- var axis = this.axis,
4176
- chart = axis.chart;
4177
- axis.series.forEach(function (series) {
4178
- var data = series.options.data;
4179
- if (node.id && data) {
4180
- var point = chart.get(node.id),
4181
- dataPoint = data[series.data.indexOf(point)];
4182
- if (point && dataPoint) {
4183
- point.collapsed = node.collapsed;
4184
- dataPoint.collapsed = node.collapsed;
4185
- }
4186
- }
4187
- });
4188
- };
4189
- /**
4190
- * Calculates the new axis breaks to collapse a node.
4191
- *
4192
- * @private
4193
- *
4194
- * @param {Highcharts.Axis} axis
4195
- * The axis to check against.
4196
- *
4197
- * @param {Highcharts.GridNode} node
4198
- * The node to collapse.
4199
- *
4200
- * @param {number} pos
4201
- * The tick position to collapse.
4202
- *
4203
- * @return {Array<object>}
4204
- * Returns an array of the new breaks for the axis.
4205
- */
4206
- Additions.prototype.collapse = function (node) {
4207
- var axis = this.axis,
4208
- breaks = (axis.options.breaks || []),
4209
- obj = getBreakFromNode(node,
4210
- axis.max);
4211
- breaks.push(obj);
4212
- // Change the collapsed flag #13838
4213
- node.collapsed = true;
4214
- axis.treeGrid.setCollapsedStatus(node);
4215
- return breaks;
4216
- };
4217
- /**
4218
- * Calculates the new axis breaks to expand a node.
4219
- *
4220
- * @private
4221
- *
4222
- * @param {Highcharts.Axis} axis
4223
- * The axis to check against.
4224
- *
4225
- * @param {Highcharts.GridNode} node
4226
- * The node to expand.
4227
- *
4228
- * @param {number} pos
4229
- * The tick position to expand.
4230
- *
4231
- * @return {Array<object>}
4232
- * Returns an array of the new breaks for the axis.
4233
- */
4234
- Additions.prototype.expand = function (node) {
4235
- var axis = this.axis,
4236
- breaks = (axis.options.breaks || []),
4237
- obj = getBreakFromNode(node,
4238
- axis.max);
4239
- // Change the collapsed flag #13838
4240
- node.collapsed = false;
4241
- axis.treeGrid.setCollapsedStatus(node);
4242
- // Remove the break from the axis breaks array.
4243
- return breaks.reduce(function (arr, b) {
4244
- if (b.to !== obj.to || b.from !== obj.from) {
4245
- arr.push(b);
4246
- }
4247
- return arr;
4248
- }, []);
4249
- };
4250
- /**
4251
- * Creates a list of positions for the ticks on the axis. Filters out
4252
- * positions that are outside min and max, or is inside an axis break.
4253
- *
4254
- * @private
4255
- *
4256
- * @return {Array<number>}
4257
- * List of positions.
4258
- */
4259
- Additions.prototype.getTickPositions = function () {
4260
- var axis = this.axis,
4261
- roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
4262
- roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
4263
- return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {
4264
- var pos = +key;
4265
- if (pos >= roundedMin &&
4266
- pos <= roundedMax &&
4267
- !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {
4268
- arr.push(pos);
4269
- }
4270
- return arr;
4271
- }, []);
4272
- };
4273
- /**
4274
- * Check if a node is collapsed.
4275
- *
4276
- * @private
4277
- *
4278
- * @param {Highcharts.Axis} axis
4279
- * The axis to check against.
4280
- *
4281
- * @param {Object} node
4282
- * The node to check if is collapsed.
4283
- *
4284
- * @param {number} pos
4285
- * The tick position to collapse.
4286
- *
4287
- * @return {boolean}
4288
- * Returns true if collapsed, false if expanded.
4289
- */
4290
- Additions.prototype.isCollapsed = function (node) {
4291
- var axis = this.axis,
4292
- breaks = (axis.options.breaks || []),
4293
- obj = getBreakFromNode(node,
4294
- axis.max);
4295
- return breaks.some(function (b) {
4296
- return b.from === obj.from && b.to === obj.to;
4297
- });
4298
- };
4299
- /**
4300
- * Calculates the new axis breaks after toggling the collapse/expand
4301
- * state of a node. If it is collapsed it will be expanded, and if it is
4302
- * exapended it will be collapsed.
4303
- *
4304
- * @private
4305
- *
4306
- * @param {Highcharts.Axis} axis
4307
- * The axis to check against.
4308
- *
4309
- * @param {Highcharts.GridNode} node
4310
- * The node to toggle.
4311
- *
4312
- * @return {Array<object>}
4313
- * Returns an array of the new breaks for the axis.
4314
- */
4315
- Additions.prototype.toggleCollapse = function (node) {
4316
- return (this.isCollapsed(node) ?
4317
- this.expand(node) :
4318
- this.collapse(node));
4319
- };
4320
- return Additions;
4321
- }());
4322
- TreeGridAxis.Additions = Additions;
4323
- })(TreeGridAxis || (TreeGridAxis = {}));
4332
+ TreeGridAxisAdditions.prototype.toggleCollapse = function (node) {
4333
+ return (this.isCollapsed(node) ?
4334
+ this.expand(node) :
4335
+ this.collapse(node));
4336
+ };
4337
+ return TreeGridAxisAdditions;
4338
+ }());
4339
+ /* *
4340
+ *
4341
+ * Default Export
4342
+ *
4343
+ * */
4324
4344
 
4325
- return TreeGridAxis;
4345
+ return TreeGridAxisAdditions;
4326
4346
  });
4327
4347
  _registerModule(_modules, 'Extensions/CurrentDateIndication.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Axis/PlotLineOrBand/PlotLineOrBand.js'], _modules['Core/Utilities.js']], function (Axis, PlotLineOrBand, U) {
4328
4348
  /* *
@@ -7167,7 +7187,7 @@
7167
7187
 
7168
7188
  return Pathfinder;
7169
7189
  });
7170
- _registerModule(_modules, 'Series/Gantt/GanttSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Series/Gantt/GanttPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/TreeGridAxis.js']], function (Axis, Chart, GanttPoint, SeriesRegistry, Tick, U, TreeGridAxis) {
7190
+ _registerModule(_modules, 'Series/Gantt/GanttSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Series/Gantt/GanttPoint.js'], _modules['Core/Series/SeriesRegistry.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/TreeGrid/TreeGridAxis.js']], function (Axis, Chart, GanttPoint, SeriesRegistry, Tick, U, TreeGridAxis) {
7171
7191
  /* *
7172
7192
  *
7173
7193
  * (c) 2016-2021 Highsoft AS
@@ -8777,7 +8797,9 @@
8777
8797
  * @function Highcharts.Scrollbar#shouldUpdateExtremes
8778
8798
  */
8779
8799
  Scrollbar.prototype.shouldUpdateExtremes = function (eventType) {
8780
- return (pick(this.options.liveRedraw, H.svg && !H.isTouchDevice && !this.chart.isBoosting) ||
8800
+ return (pick(this.options.liveRedraw, H.svg &&
8801
+ !H.isTouchDevice &&
8802
+ !this.chart.boosted) ||
8781
8803
  // Mouseup always should change extremes
8782
8804
  eventType === 'mouseup' ||
8783
8805
  eventType === 'touchend' ||
@@ -11350,9 +11372,9 @@
11350
11372
  var chartOptions = chart.options;
11351
11373
  var navigator = chartOptions.navigator;
11352
11374
  var navigatorAxis = axis.navigatorAxis;
11353
- var pinchType = chartOptions.chart.pinchType;
11375
+ var pinchType = chartOptions.chart.zooming.pinchType;
11354
11376
  var rangeSelector = chartOptions.rangeSelector;
11355
- var zoomType = chartOptions.chart.zoomType;
11377
+ var zoomType = chartOptions.chart.zooming.type;
11356
11378
  var previousZoom;
11357
11379
  if (axis.isXAxis && ((navigator && navigator.enabled) ||
11358
11380
  (rangeSelector && rangeSelector.enabled))) {
@@ -11796,6 +11818,18 @@
11796
11818
  */
11797
11819
  threshold: null
11798
11820
  },
11821
+ /**
11822
+ * Enable or disable navigator sticking to right, while adding new
11823
+ * points. If `undefined`, the navigator sticks to the axis maximum only
11824
+ * if it was already at the maximum prior to adding points.
11825
+ *
11826
+ * @type {boolean}
11827
+ * @default undefined
11828
+ * @since 10.2.1
11829
+ * @sample {highstock} stock/navigator/sticktomax-false/
11830
+ * stickToMax set to false
11831
+ * @apioption navigator.stickToMax
11832
+ */
11799
11833
  /**
11800
11834
  * Options for the navigator X axis. Default series options for the
11801
11835
  * navigator xAxis are:
@@ -12620,7 +12654,9 @@
12620
12654
  pick(navigator.scrollbar.options.liveRedraw,
12621
12655
  // By default, don't run live redraw on VML, on touch
12622
12656
  // devices or if the chart is in boost.
12623
- H.svg && !isTouchDevice && !this.chart.isBoosting)) {
12657
+ H.svg &&
12658
+ !isTouchDevice &&
12659
+ !this.chart.boosted)) {
12624
12660
  e.DOMType = e.type; // DOMType is for IE8
12625
12661
  setTimeout(function () {
12626
12662
  navigator.onMouseUp(e);
@@ -13255,12 +13291,14 @@
13255
13291
  Navigator.prototype.updatedDataHandler = function () {
13256
13292
  var navigator = this.chart.navigator,
13257
13293
  baseSeries = this,
13258
- navigatorSeries = this.navigatorSeries;
13294
+ navigatorSeries = this.navigatorSeries,
13295
+ shouldStickToMax = navigator.reversedExtremes ?
13296
+ Math.round(navigator.zoomedMin) === 0 :
13297
+ Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
13259
13298
  // If the scrollbar is scrolled all the way to the right, keep right as
13260
- // new data comes in.
13261
- navigator.stickToMax = navigator.reversedExtremes ?
13262
- Math.round(navigator.zoomedMin) === 0 :
13263
- Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
13299
+ // new data comes in, unless user set navigator.stickToMax to false.
13300
+ navigator.stickToMax = pick(this.chart.options.navigator &&
13301
+ this.chart.options.navigator.stickToMax, shouldStickToMax);
13264
13302
  navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);
13265
13303
  // Set the navigator series data to the new data of the base series
13266
13304
  if (navigatorSeries && !navigator.hasNavigatorData) {
@@ -13392,8 +13430,10 @@
13392
13430
  rangeSelector = chartOptions.rangeSelector;
13393
13431
  if (((navigator && navigator.enabled) ||
13394
13432
  (rangeSelector && rangeSelector.enabled)) &&
13395
- ((!isTouchDevice && chartOptions.chart.zoomType === 'x') ||
13396
- (isTouchDevice && chartOptions.chart.pinchType === 'x'))) {
13433
+ ((!isTouchDevice &&
13434
+ chartOptions.chart.zooming.type === 'x') ||
13435
+ (isTouchDevice &&
13436
+ chartOptions.chart.zooming.pinchType === 'x'))) {
13397
13437
  return false;
13398
13438
  }
13399
13439
  });
@@ -13511,7 +13551,7 @@
13511
13551
 
13512
13552
  return H.Navigator;
13513
13553
  });
13514
- _registerModule(_modules, 'masters/modules/gantt.src.js', [_modules['Core/Globals.js'], _modules['Core/Chart/GanttChart.js'], _modules['Core/Scrollbar.js']], function (Highcharts, GanttChart, Scrollbar) {
13554
+ _registerModule(_modules, 'masters/modules/gantt.src.js', [_modules['Core/Globals.js'], _modules['Series/XRange/XRangeSeries.js'], _modules['Core/Chart/GanttChart.js'], _modules['Core/Scrollbar.js']], function (Highcharts, XRangeSeries, GanttChart, Scrollbar) {
13515
13555
 
13516
13556
  var G = Highcharts;
13517
13557
  // Classes
@@ -13520,6 +13560,7 @@
13520
13560
  G.ganttChart = GanttChart.ganttChart;
13521
13561
  // Compositions
13522
13562
  Scrollbar.compose(G.Axis);
13563
+ XRangeSeries.compose(G.Axis);
13523
13564
 
13524
13565
  });
13525
13566
  }));