highcharts 6.1.4 → 6.2.0

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 (695) hide show
  1. package/bower.json +1 -1
  2. package/css/highcharts.css +17 -0
  3. package/css/highcharts.scss +14 -0
  4. package/css/themes/dark-unica.css +17 -0
  5. package/css/themes/grid-light.css +17 -0
  6. package/css/themes/sand-signika.css +17 -0
  7. package/es-modules/indicators/momentum.src.js +1 -1
  8. package/es-modules/indicators/pivot-points.src.js +6 -1
  9. package/es-modules/masters/highcharts-gantt.src.js +11 -0
  10. package/es-modules/masters/modules/annotations.src.js +1 -1
  11. package/es-modules/masters/modules/arrow-symbols.src.js +12 -0
  12. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  13. package/es-modules/masters/modules/current-date-indicator.src.js +12 -0
  14. package/es-modules/masters/modules/data.src.js +1 -1
  15. package/es-modules/masters/modules/draggable-points.src.js +9 -0
  16. package/es-modules/masters/modules/export-data.src.js +1 -1
  17. package/es-modules/masters/modules/exporting.src.js +1 -1
  18. package/es-modules/masters/modules/funnel.src.js +1 -1
  19. package/es-modules/masters/modules/gantt.src.js +2 -1
  20. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  21. package/es-modules/masters/modules/heatmap.src.js +1 -1
  22. package/es-modules/masters/modules/item-series.src.js +1 -1
  23. package/es-modules/masters/modules/map.src.js +1 -1
  24. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  25. package/es-modules/masters/modules/pathfinder.src.js +12 -0
  26. package/es-modules/masters/modules/sankey.src.js +1 -1
  27. package/es-modules/masters/modules/series-label.src.js +1 -1
  28. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  29. package/es-modules/masters/modules/stock.src.js +1 -1
  30. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  31. package/es-modules/masters/modules/treegrid.src.js +12 -0
  32. package/es-modules/masters/modules/variwide.src.js +1 -1
  33. package/es-modules/masters/modules/vector.src.js +1 -1
  34. package/es-modules/masters/modules/windbarb.src.js +1 -1
  35. package/es-modules/masters/modules/xrange.src.js +1 -1
  36. package/es-modules/masters/themes/dark-blue.src.js +1 -1
  37. package/es-modules/masters/themes/dark-green.src.js +1 -1
  38. package/es-modules/masters/themes/dark-unica.src.js +1 -1
  39. package/es-modules/masters/themes/gray.src.js +1 -1
  40. package/es-modules/masters/themes/grid-light.src.js +1 -1
  41. package/es-modules/masters/themes/grid.src.js +1 -1
  42. package/es-modules/masters/themes/sand-signika.src.js +1 -1
  43. package/es-modules/masters/themes/skies.src.js +1 -1
  44. package/es-modules/mixins/centered-series.js +1 -1
  45. package/es-modules/mixins/on-series.js +1 -1
  46. package/es-modules/modules/boost.src.js +22 -14
  47. package/es-modules/modules/broken-axis.src.js +169 -134
  48. package/es-modules/modules/data.src.js +2 -2
  49. package/es-modules/modules/draggable-points.src.js +2257 -0
  50. package/es-modules/modules/drilldown.src.js +1 -0
  51. package/es-modules/modules/export-data.src.js +1 -1
  52. package/es-modules/modules/exporting.src.js +1 -1
  53. package/es-modules/modules/funnel.src.js +1 -1
  54. package/es-modules/modules/item-series.src.js +1 -1
  55. package/es-modules/modules/no-data-to-display.src.js +5 -5
  56. package/es-modules/modules/oldie.src.js +1 -1
  57. package/es-modules/modules/overlapping-datalabels.src.js +38 -22
  58. package/es-modules/modules/parallel-coordinates.src.js +3 -2
  59. package/es-modules/modules/sankey.src.js +1 -1
  60. package/es-modules/modules/series-label.src.js +2 -2
  61. package/es-modules/modules/solid-gauge.src.js +1 -1
  62. package/es-modules/modules/static-scale.src.js +67 -28
  63. package/es-modules/modules/streamgraph.src.js +1 -1
  64. package/es-modules/modules/tilemap.src.js +231 -134
  65. package/es-modules/modules/variwide.src.js +1 -1
  66. package/es-modules/modules/vector.src.js +92 -22
  67. package/es-modules/modules/windbarb.src.js +1 -1
  68. package/es-modules/modules/xrange.src.js +257 -77
  69. package/es-modules/parts/AreaSeries.js +77 -77
  70. package/es-modules/parts/AreaSplineSeries.js +64 -27
  71. package/es-modules/parts/Axis.js +160 -67
  72. package/es-modules/parts/BarSeries.js +68 -51
  73. package/es-modules/parts/CandlestickSeries.js +1 -1
  74. package/es-modules/parts/Chart.js +31 -55
  75. package/es-modules/parts/Color.js +29 -18
  76. package/es-modules/parts/ColumnSeries.js +264 -142
  77. package/es-modules/parts/DataGrouping.js +9 -6
  78. package/es-modules/parts/DataLabels.js +261 -210
  79. package/es-modules/parts/DateTimeAxis.js +26 -7
  80. package/es-modules/parts/Dynamics.js +5 -2
  81. package/es-modules/parts/FlagsSeries.js +1 -1
  82. package/es-modules/parts/Globals.js +1 -1
  83. package/es-modules/parts/Html.js +64 -12
  84. package/es-modules/parts/Interaction.js +187 -63
  85. package/es-modules/parts/Legend.js +7 -3
  86. package/es-modules/parts/LogarithmicAxis.js +35 -4
  87. package/es-modules/parts/MSPointer.js +1 -1
  88. package/es-modules/parts/Navigator.js +27 -5
  89. package/es-modules/parts/OHLCSeries.js +1 -1
  90. package/es-modules/parts/Options.js +15 -13
  91. package/es-modules/parts/OrdinalAxis.js +1 -1
  92. package/es-modules/parts/PieSeries.js +256 -140
  93. package/es-modules/parts/PlotBandSeries.experimental.js +1 -1
  94. package/es-modules/parts/PlotLineOrBand.js +7 -40
  95. package/es-modules/parts/Point.js +28 -4
  96. package/es-modules/parts/Pointer.js +8 -6
  97. package/es-modules/parts/RangeSelector.js +1 -1
  98. package/es-modules/parts/Responsive.js +82 -36
  99. package/es-modules/parts/ScatterSeries.js +57 -25
  100. package/es-modules/parts/ScrollablePlotArea.js +17 -7
  101. package/es-modules/parts/Scrollbar.js +9 -2
  102. package/es-modules/parts/Series.js +22 -9
  103. package/es-modules/parts/SplineSeries.js +51 -29
  104. package/es-modules/parts/Stacking.js +100 -6
  105. package/es-modules/parts/StockChart.js +9 -3
  106. package/es-modules/parts/SvgRenderer.js +15 -10
  107. package/es-modules/parts/Tick.js +150 -30
  108. package/es-modules/parts/Time.js +23 -5
  109. package/es-modules/parts/Tooltip.js +2 -2
  110. package/es-modules/parts/TouchPointer.js +1 -1
  111. package/es-modules/parts/Utilities.js +16 -1
  112. package/es-modules/parts-3d/Axis.js +1 -1
  113. package/es-modules/parts-3d/Chart.js +1 -1
  114. package/es-modules/parts-3d/Column.js +1 -1
  115. package/es-modules/parts-3d/Math.js +1 -1
  116. package/es-modules/parts-3d/Pie.js +1 -1
  117. package/es-modules/parts-3d/SVGRenderer.js +1 -1
  118. package/es-modules/parts-3d/Scatter.js +1 -1
  119. package/es-modules/parts-3d/Series.js +1 -1
  120. package/es-modules/parts-3d/VMLRenderer.js +1 -1
  121. package/es-modules/parts-gantt/ArrowSymbols.js +110 -0
  122. package/es-modules/parts-gantt/CurrentDateIndicator.js +92 -0
  123. package/es-modules/parts-gantt/GanttChart.js +111 -0
  124. package/es-modules/parts-gantt/GanttSeries.js +376 -0
  125. package/es-modules/parts-gantt/GridAxis.js +965 -0
  126. package/es-modules/parts-gantt/Pathfinder.js +1247 -0
  127. package/es-modules/parts-gantt/PathfinderAlgorithms.js +746 -0
  128. package/es-modules/parts-gantt/Tree.js +146 -0
  129. package/es-modules/parts-gantt/TreeGrid.js +917 -0
  130. package/es-modules/parts-map/ColorAxis.js +1 -1
  131. package/es-modules/parts-map/ColorSeriesMixin.js +1 -1
  132. package/es-modules/parts-map/GeoJSON.js +1 -1
  133. package/es-modules/parts-map/HeatmapSeries.js +124 -53
  134. package/es-modules/parts-map/Map.js +1 -1
  135. package/es-modules/parts-map/MapAxis.js +1 -1
  136. package/es-modules/parts-map/MapBubbleSeries.js +1 -1
  137. package/es-modules/parts-map/MapLineSeries.js +1 -1
  138. package/es-modules/parts-map/MapNavigation.js +1 -1
  139. package/es-modules/parts-map/MapPointSeries.js +1 -1
  140. package/es-modules/parts-map/MapPointer.js +1 -1
  141. package/es-modules/parts-map/MapSeries.js +2 -2
  142. package/es-modules/parts-more/AreaRangeSeries.js +80 -38
  143. package/es-modules/parts-more/AreaSplineRangeSeries.js +1 -1
  144. package/es-modules/parts-more/BoxPlotSeries.js +1 -1
  145. package/es-modules/parts-more/BubbleSeries.js +1 -1
  146. package/es-modules/parts-more/ColumnRangeSeries.js +1 -1
  147. package/es-modules/parts-more/ErrorBarSeries.js +1 -1
  148. package/es-modules/parts-more/GaugeSeries.js +1 -1
  149. package/es-modules/parts-more/Pane.js +2 -1
  150. package/es-modules/parts-more/Polar.js +1 -1
  151. package/es-modules/parts-more/PolygonSeries.js +1 -1
  152. package/es-modules/parts-more/RadialAxis.js +5 -4
  153. package/es-modules/parts-more/WaterfallSeries.js +1 -1
  154. package/es-modules/supplemental.docs.js +0 -1955
  155. package/es-modules/themes/dark-blue.js +1 -1
  156. package/es-modules/themes/dark-green.js +1 -1
  157. package/es-modules/themes/dark-unica.js +1 -1
  158. package/es-modules/themes/gray.js +1 -1
  159. package/es-modules/themes/grid-light.js +1 -1
  160. package/es-modules/themes/grid.js +1 -1
  161. package/es-modules/themes/sand-signika.js +1 -1
  162. package/es-modules/themes/skies.js +1 -1
  163. package/highcharts-3d.js +1 -1
  164. package/highcharts-3d.src.js +10 -10
  165. package/highcharts-gantt.js +503 -0
  166. package/highcharts-gantt.js.map +1 -0
  167. package/highcharts-gantt.src.js +49289 -0
  168. package/highcharts-more.js +65 -64
  169. package/highcharts-more.js.map +1 -1
  170. package/highcharts-more.src.js +97 -53
  171. package/highcharts.js +415 -410
  172. package/highcharts.js.map +1 -1
  173. package/highcharts.src.js +2170 -1128
  174. package/highmaps.js +443 -438
  175. package/highmaps.js.map +1 -1
  176. package/highmaps.src.js +1647 -849
  177. package/highstock.js +553 -548
  178. package/highstock.js.map +1 -1
  179. package/highstock.src.js +2398 -1283
  180. package/indicators/accumulation-distribution.js +1 -1
  181. package/indicators/accumulation-distribution.src.js +1 -1
  182. package/indicators/atr.js +1 -1
  183. package/indicators/atr.src.js +1 -1
  184. package/indicators/bollinger-bands.js +1 -1
  185. package/indicators/bollinger-bands.src.js +1 -1
  186. package/indicators/cci.js +1 -1
  187. package/indicators/cci.src.js +1 -1
  188. package/indicators/cmf.js +1 -1
  189. package/indicators/cmf.src.js +1 -1
  190. package/indicators/ema.js +1 -1
  191. package/indicators/ema.src.js +1 -1
  192. package/indicators/ichimoku-kinko-hyo.js +1 -1
  193. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  194. package/indicators/indicators.js +1 -1
  195. package/indicators/indicators.src.js +1 -1
  196. package/indicators/macd.js +1 -1
  197. package/indicators/macd.src.js +1 -1
  198. package/indicators/mfi.js +1 -1
  199. package/indicators/mfi.src.js +1 -1
  200. package/indicators/momentum.js +1 -1
  201. package/indicators/momentum.src.js +2 -2
  202. package/indicators/pivot-points.js +4 -4
  203. package/indicators/pivot-points.js.map +1 -1
  204. package/indicators/pivot-points.src.js +7 -2
  205. package/indicators/price-envelopes.js +1 -1
  206. package/indicators/price-envelopes.src.js +1 -1
  207. package/indicators/psar.js +1 -1
  208. package/indicators/psar.src.js +1 -1
  209. package/indicators/roc.js +1 -1
  210. package/indicators/roc.src.js +1 -1
  211. package/indicators/rsi.js +1 -1
  212. package/indicators/rsi.src.js +1 -1
  213. package/indicators/stochastic.js +1 -1
  214. package/indicators/stochastic.src.js +1 -1
  215. package/indicators/volume-by-price.js +1 -1
  216. package/indicators/volume-by-price.src.js +1 -1
  217. package/indicators/vwap.js +1 -1
  218. package/indicators/vwap.src.js +1 -1
  219. package/indicators/wma.js +1 -1
  220. package/indicators/wma.src.js +1 -1
  221. package/indicators/zigzag.js +1 -1
  222. package/indicators/zigzag.src.js +1 -1
  223. package/js/es-modules/indicators/momentum.src.js +1 -1
  224. package/js/es-modules/indicators/pivot-points.src.js +6 -1
  225. package/js/es-modules/masters/highcharts-gantt.src.js +11 -0
  226. package/js/es-modules/masters/modules/annotations.src.js +1 -1
  227. package/js/es-modules/masters/modules/arrow-symbols.src.js +12 -0
  228. package/js/es-modules/masters/modules/broken-axis.src.js +1 -1
  229. package/js/es-modules/masters/modules/current-date-indicator.src.js +12 -0
  230. package/js/es-modules/masters/modules/data.src.js +1 -1
  231. package/js/es-modules/masters/modules/draggable-points.src.js +9 -0
  232. package/js/es-modules/masters/modules/export-data.src.js +1 -1
  233. package/js/es-modules/masters/modules/exporting.src.js +1 -1
  234. package/js/es-modules/masters/modules/funnel.src.js +1 -1
  235. package/js/es-modules/masters/modules/gantt.src.js +2 -1
  236. package/js/es-modules/masters/modules/grid-axis.src.js +1 -1
  237. package/js/es-modules/masters/modules/heatmap.src.js +1 -1
  238. package/js/es-modules/masters/modules/item-series.src.js +1 -1
  239. package/js/es-modules/masters/modules/map.src.js +1 -1
  240. package/js/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  241. package/js/es-modules/masters/modules/pathfinder.src.js +12 -0
  242. package/js/es-modules/masters/modules/sankey.src.js +1 -1
  243. package/js/es-modules/masters/modules/series-label.src.js +1 -1
  244. package/js/es-modules/masters/modules/solid-gauge.src.js +1 -1
  245. package/js/es-modules/masters/modules/stock.src.js +1 -1
  246. package/js/es-modules/masters/modules/streamgraph.src.js +1 -1
  247. package/js/es-modules/masters/modules/treegrid.src.js +12 -0
  248. package/js/es-modules/masters/modules/variwide.src.js +1 -1
  249. package/js/es-modules/masters/modules/vector.src.js +1 -1
  250. package/js/es-modules/masters/modules/windbarb.src.js +1 -1
  251. package/js/es-modules/masters/modules/xrange.src.js +1 -1
  252. package/js/es-modules/masters/themes/dark-blue.src.js +1 -1
  253. package/js/es-modules/masters/themes/dark-green.src.js +1 -1
  254. package/js/es-modules/masters/themes/dark-unica.src.js +1 -1
  255. package/js/es-modules/masters/themes/gray.src.js +1 -1
  256. package/js/es-modules/masters/themes/grid-light.src.js +1 -1
  257. package/js/es-modules/masters/themes/grid.src.js +1 -1
  258. package/js/es-modules/masters/themes/sand-signika.src.js +1 -1
  259. package/js/es-modules/masters/themes/skies.src.js +1 -1
  260. package/js/es-modules/mixins/centered-series.js +1 -1
  261. package/js/es-modules/mixins/on-series.js +1 -1
  262. package/js/es-modules/modules/boost.src.js +22 -14
  263. package/js/es-modules/modules/broken-axis.src.js +169 -134
  264. package/js/es-modules/modules/data.src.js +2 -2
  265. package/js/es-modules/modules/draggable-points.src.js +2257 -0
  266. package/js/es-modules/modules/drilldown.src.js +1 -0
  267. package/js/es-modules/modules/export-data.src.js +1 -1
  268. package/js/es-modules/modules/exporting.src.js +1 -1
  269. package/js/es-modules/modules/funnel.src.js +1 -1
  270. package/js/es-modules/modules/item-series.src.js +1 -1
  271. package/js/es-modules/modules/no-data-to-display.src.js +5 -5
  272. package/js/es-modules/modules/oldie.src.js +1 -1
  273. package/js/es-modules/modules/overlapping-datalabels.src.js +38 -22
  274. package/js/es-modules/modules/parallel-coordinates.src.js +3 -2
  275. package/js/es-modules/modules/sankey.src.js +1 -1
  276. package/js/es-modules/modules/series-label.src.js +2 -2
  277. package/js/es-modules/modules/solid-gauge.src.js +1 -1
  278. package/js/es-modules/modules/static-scale.src.js +67 -28
  279. package/js/es-modules/modules/streamgraph.src.js +1 -1
  280. package/js/es-modules/modules/tilemap.src.js +231 -134
  281. package/js/es-modules/modules/variwide.src.js +1 -1
  282. package/js/es-modules/modules/vector.src.js +92 -22
  283. package/js/es-modules/modules/windbarb.src.js +1 -1
  284. package/js/es-modules/modules/xrange.src.js +255 -68
  285. package/js/es-modules/parts/AreaSeries.js +77 -77
  286. package/js/es-modules/parts/AreaSplineSeries.js +64 -27
  287. package/js/es-modules/parts/Axis.js +160 -67
  288. package/js/es-modules/parts/BarSeries.js +68 -51
  289. package/js/es-modules/parts/CandlestickSeries.js +1 -1
  290. package/js/es-modules/parts/Chart.js +31 -55
  291. package/js/es-modules/parts/Color.js +29 -18
  292. package/js/es-modules/parts/ColumnSeries.js +231 -123
  293. package/js/es-modules/parts/DataGrouping.js +9 -6
  294. package/js/es-modules/parts/DataLabels.js +230 -182
  295. package/js/es-modules/parts/DateTimeAxis.js +26 -7
  296. package/js/es-modules/parts/Dynamics.js +5 -2
  297. package/js/es-modules/parts/FlagsSeries.js +1 -1
  298. package/js/es-modules/parts/Globals.js +1 -1
  299. package/js/es-modules/parts/Html.js +64 -12
  300. package/js/es-modules/parts/Interaction.js +178 -61
  301. package/js/es-modules/parts/Legend.js +7 -3
  302. package/js/es-modules/parts/LogarithmicAxis.js +35 -4
  303. package/js/es-modules/parts/MSPointer.js +1 -1
  304. package/js/es-modules/parts/Navigator.js +27 -5
  305. package/js/es-modules/parts/OHLCSeries.js +1 -1
  306. package/js/es-modules/parts/Options.js +13 -12
  307. package/js/es-modules/parts/OrdinalAxis.js +1 -1
  308. package/js/es-modules/parts/PieSeries.js +245 -132
  309. package/js/es-modules/parts/PlotBandSeries.experimental.js +1 -1
  310. package/js/es-modules/parts/PlotLineOrBand.js +7 -40
  311. package/js/es-modules/parts/Point.js +28 -4
  312. package/js/es-modules/parts/Pointer.js +8 -6
  313. package/js/es-modules/parts/RangeSelector.js +1 -1
  314. package/js/es-modules/parts/Responsive.js +82 -36
  315. package/js/es-modules/parts/ScatterSeries.js +56 -25
  316. package/js/es-modules/parts/ScrollablePlotArea.js +17 -7
  317. package/js/es-modules/parts/Scrollbar.js +9 -2
  318. package/js/es-modules/parts/Series.js +22 -9
  319. package/js/es-modules/parts/SplineSeries.js +51 -29
  320. package/js/es-modules/parts/Stacking.js +100 -6
  321. package/js/es-modules/parts/StockChart.js +9 -3
  322. package/js/es-modules/parts/SvgRenderer.js +15 -10
  323. package/js/es-modules/parts/Tick.js +150 -30
  324. package/js/es-modules/parts/Time.js +23 -5
  325. package/js/es-modules/parts/Tooltip.js +2 -2
  326. package/js/es-modules/parts/TouchPointer.js +1 -1
  327. package/js/es-modules/parts/Utilities.js +16 -1
  328. package/js/es-modules/parts-3d/Axis.js +1 -1
  329. package/js/es-modules/parts-3d/Chart.js +1 -1
  330. package/js/es-modules/parts-3d/Column.js +1 -1
  331. package/js/es-modules/parts-3d/Math.js +1 -1
  332. package/js/es-modules/parts-3d/Pie.js +1 -1
  333. package/js/es-modules/parts-3d/SVGRenderer.js +1 -1
  334. package/js/es-modules/parts-3d/Scatter.js +1 -1
  335. package/js/es-modules/parts-3d/Series.js +1 -1
  336. package/js/es-modules/parts-3d/VMLRenderer.js +1 -1
  337. package/js/es-modules/parts-gantt/ArrowSymbols.js +110 -0
  338. package/js/es-modules/parts-gantt/CurrentDateIndicator.js +92 -0
  339. package/js/es-modules/parts-gantt/GanttChart.js +111 -0
  340. package/js/es-modules/parts-gantt/GanttSeries.js +371 -0
  341. package/js/es-modules/parts-gantt/GridAxis.js +962 -0
  342. package/js/es-modules/parts-gantt/Pathfinder.js +1225 -0
  343. package/js/es-modules/parts-gantt/PathfinderAlgorithms.js +746 -0
  344. package/js/es-modules/parts-gantt/Tree.js +146 -0
  345. package/js/es-modules/parts-gantt/TreeGrid.js +891 -0
  346. package/js/es-modules/parts-map/ColorAxis.js +1 -1
  347. package/js/es-modules/parts-map/ColorSeriesMixin.js +1 -1
  348. package/js/es-modules/parts-map/GeoJSON.js +1 -1
  349. package/js/es-modules/parts-map/HeatmapSeries.js +122 -52
  350. package/js/es-modules/parts-map/Map.js +1 -1
  351. package/js/es-modules/parts-map/MapAxis.js +1 -1
  352. package/js/es-modules/parts-map/MapBubbleSeries.js +1 -1
  353. package/js/es-modules/parts-map/MapLineSeries.js +1 -1
  354. package/js/es-modules/parts-map/MapNavigation.js +1 -1
  355. package/js/es-modules/parts-map/MapPointSeries.js +1 -1
  356. package/js/es-modules/parts-map/MapPointer.js +1 -1
  357. package/js/es-modules/parts-map/MapSeries.js +2 -2
  358. package/js/es-modules/parts-more/AreaRangeSeries.js +80 -38
  359. package/js/es-modules/parts-more/AreaSplineRangeSeries.js +1 -1
  360. package/js/es-modules/parts-more/BoxPlotSeries.js +1 -1
  361. package/js/es-modules/parts-more/BubbleSeries.js +1 -1
  362. package/js/es-modules/parts-more/ColumnRangeSeries.js +1 -1
  363. package/js/es-modules/parts-more/ErrorBarSeries.js +1 -1
  364. package/js/es-modules/parts-more/GaugeSeries.js +1 -1
  365. package/js/es-modules/parts-more/Pane.js +2 -1
  366. package/js/es-modules/parts-more/Polar.js +1 -1
  367. package/js/es-modules/parts-more/PolygonSeries.js +1 -1
  368. package/js/es-modules/parts-more/RadialAxis.js +5 -4
  369. package/js/es-modules/parts-more/WaterfallSeries.js +1 -1
  370. package/js/es-modules/supplemental.docs.js +0 -1955
  371. package/js/es-modules/themes/dark-blue.js +1 -1
  372. package/js/es-modules/themes/dark-green.js +1 -1
  373. package/js/es-modules/themes/dark-unica.js +1 -1
  374. package/js/es-modules/themes/gray.js +1 -1
  375. package/js/es-modules/themes/grid-light.js +1 -1
  376. package/js/es-modules/themes/grid.js +1 -1
  377. package/js/es-modules/themes/sand-signika.js +1 -1
  378. package/js/es-modules/themes/skies.js +1 -1
  379. package/js/highcharts-3d.js +1 -1
  380. package/js/highcharts-3d.src.js +10 -10
  381. package/js/highcharts-gantt.js +480 -0
  382. package/js/highcharts-gantt.js.map +1 -0
  383. package/js/highcharts-gantt.src.js +47011 -0
  384. package/js/highcharts-more.js +62 -61
  385. package/js/highcharts-more.js.map +1 -1
  386. package/js/highcharts-more.src.js +97 -53
  387. package/js/highcharts.js +394 -390
  388. package/js/highcharts.js.map +1 -1
  389. package/js/highcharts.src.js +2083 -1070
  390. package/js/highmaps.js +420 -416
  391. package/js/highmaps.js.map +1 -1
  392. package/js/highmaps.src.js +1569 -798
  393. package/js/highstock.js +526 -520
  394. package/js/highstock.js.map +1 -1
  395. package/js/highstock.src.js +2311 -1225
  396. package/js/indicators/accumulation-distribution.js +1 -1
  397. package/js/indicators/accumulation-distribution.src.js +1 -1
  398. package/js/indicators/atr.js +1 -1
  399. package/js/indicators/atr.src.js +1 -1
  400. package/js/indicators/bollinger-bands.js +1 -1
  401. package/js/indicators/bollinger-bands.src.js +1 -1
  402. package/js/indicators/cci.js +1 -1
  403. package/js/indicators/cci.src.js +1 -1
  404. package/js/indicators/cmf.js +1 -1
  405. package/js/indicators/cmf.src.js +1 -1
  406. package/js/indicators/ema.js +1 -1
  407. package/js/indicators/ema.src.js +1 -1
  408. package/js/indicators/ichimoku-kinko-hyo.js +1 -1
  409. package/js/indicators/ichimoku-kinko-hyo.src.js +1 -1
  410. package/js/indicators/indicators.js +1 -1
  411. package/js/indicators/indicators.src.js +1 -1
  412. package/js/indicators/macd.js +1 -1
  413. package/js/indicators/macd.src.js +1 -1
  414. package/js/indicators/mfi.js +1 -1
  415. package/js/indicators/mfi.src.js +1 -1
  416. package/js/indicators/momentum.js +1 -1
  417. package/js/indicators/momentum.src.js +2 -2
  418. package/js/indicators/pivot-points.js +4 -4
  419. package/js/indicators/pivot-points.js.map +1 -1
  420. package/js/indicators/pivot-points.src.js +7 -2
  421. package/js/indicators/price-envelopes.js +1 -1
  422. package/js/indicators/price-envelopes.src.js +1 -1
  423. package/js/indicators/psar.js +1 -1
  424. package/js/indicators/psar.src.js +1 -1
  425. package/js/indicators/roc.js +1 -1
  426. package/js/indicators/roc.src.js +1 -1
  427. package/js/indicators/rsi.js +1 -1
  428. package/js/indicators/rsi.src.js +1 -1
  429. package/js/indicators/stochastic.js +1 -1
  430. package/js/indicators/stochastic.src.js +1 -1
  431. package/js/indicators/volume-by-price.js +1 -1
  432. package/js/indicators/volume-by-price.src.js +1 -1
  433. package/js/indicators/vwap.js +1 -1
  434. package/js/indicators/vwap.src.js +1 -1
  435. package/js/indicators/wma.js +1 -1
  436. package/js/indicators/wma.src.js +1 -1
  437. package/js/indicators/zigzag.js +1 -1
  438. package/js/indicators/zigzag.src.js +1 -1
  439. package/js/modules/accessibility.js +1 -1
  440. package/js/modules/accessibility.src.js +1 -1
  441. package/js/modules/annotations.js +2 -2
  442. package/js/modules/annotations.src.js +2 -2
  443. package/js/modules/arrow-symbols.js +13 -0
  444. package/js/modules/arrow-symbols.js.map +1 -0
  445. package/js/modules/arrow-symbols.src.js +138 -0
  446. package/js/modules/boost-canvas.js +1 -1
  447. package/js/modules/boost-canvas.src.js +1 -1
  448. package/js/modules/boost.js +43 -43
  449. package/js/modules/boost.js.map +1 -1
  450. package/js/modules/boost.src.js +23 -15
  451. package/js/modules/broken-axis.js +11 -10
  452. package/js/modules/broken-axis.js.map +1 -1
  453. package/js/modules/broken-axis.src.js +171 -136
  454. package/js/modules/bullet.js +1 -1
  455. package/js/modules/bullet.src.js +1 -1
  456. package/js/modules/current-date-indicator.js +13 -0
  457. package/js/modules/current-date-indicator.js.map +1 -0
  458. package/js/modules/current-date-indicator.src.js +120 -0
  459. package/js/modules/data.js +2 -2
  460. package/js/modules/data.src.js +4 -4
  461. package/js/modules/drag-panes.js +1 -1
  462. package/js/modules/drag-panes.src.js +1 -1
  463. package/js/modules/draggable-points.js +38 -0
  464. package/js/modules/draggable-points.js.map +1 -0
  465. package/js/modules/draggable-points.src.js +2281 -0
  466. package/js/modules/drilldown.js +1 -1
  467. package/js/modules/drilldown.js.map +1 -1
  468. package/js/modules/drilldown.src.js +2 -1
  469. package/js/modules/export-data.js +2 -2
  470. package/js/modules/export-data.src.js +3 -3
  471. package/js/modules/exporting.js +2 -2
  472. package/js/modules/exporting.src.js +3 -3
  473. package/js/modules/funnel.js +2 -2
  474. package/js/modules/funnel.src.js +3 -3
  475. package/js/modules/gantt.js +80 -18
  476. package/js/modules/gantt.js.map +1 -1
  477. package/js/modules/gantt.src.js +5490 -372
  478. package/js/modules/grid-axis.js +15 -11
  479. package/js/modules/grid-axis.js.map +1 -1
  480. package/js/modules/grid-axis.src.js +731 -293
  481. package/js/modules/heatmap.js +2 -2
  482. package/js/modules/heatmap.js.map +1 -1
  483. package/js/modules/heatmap.src.js +126 -56
  484. package/js/modules/histogram-bellcurve.js +1 -1
  485. package/js/modules/histogram-bellcurve.src.js +1 -1
  486. package/js/modules/item-series.js +2 -2
  487. package/js/modules/item-series.src.js +3 -3
  488. package/js/modules/map.js +2 -2
  489. package/js/modules/map.js.map +1 -1
  490. package/js/modules/map.src.js +137 -67
  491. package/js/modules/no-data-to-display.js +1 -1
  492. package/js/modules/no-data-to-display.src.js +6 -6
  493. package/js/modules/offline-exporting.js +2 -2
  494. package/js/modules/offline-exporting.src.js +2 -2
  495. package/js/modules/oldie.js +2 -2
  496. package/js/modules/oldie.src.js +3 -3
  497. package/js/modules/overlapping-datalabels.js +2 -2
  498. package/js/modules/overlapping-datalabels.src.js +2 -2
  499. package/js/modules/parallel-coordinates.js +9 -9
  500. package/js/modules/parallel-coordinates.js.map +1 -1
  501. package/js/modules/parallel-coordinates.src.js +4 -3
  502. package/js/modules/pareto.js +1 -1
  503. package/js/modules/pareto.src.js +1 -1
  504. package/js/modules/pathfinder.js +34 -0
  505. package/js/modules/pathfinder.js.map +1 -0
  506. package/js/modules/pathfinder.src.js +2106 -0
  507. package/js/modules/pattern-fill.js +1 -1
  508. package/js/modules/pattern-fill.src.js +1 -1
  509. package/js/modules/sankey.js +2 -2
  510. package/js/modules/sankey.src.js +3 -3
  511. package/js/modules/series-label.js +2 -2
  512. package/js/modules/series-label.src.js +4 -4
  513. package/js/modules/solid-gauge.js +2 -2
  514. package/js/modules/solid-gauge.src.js +3 -3
  515. package/js/modules/static-scale.js +3 -3
  516. package/js/modules/static-scale.js.map +1 -1
  517. package/js/modules/static-scale.src.js +65 -26
  518. package/js/modules/stock.js +135 -134
  519. package/js/modules/stock.js.map +1 -1
  520. package/js/modules/stock.src.js +230 -157
  521. package/js/modules/streamgraph.js +2 -2
  522. package/js/modules/streamgraph.src.js +3 -3
  523. package/js/modules/sunburst.js +1 -1
  524. package/js/modules/sunburst.src.js +1 -1
  525. package/js/modules/tilemap.js +1 -1
  526. package/js/modules/tilemap.js.map +1 -1
  527. package/js/modules/tilemap.src.js +355 -188
  528. package/js/modules/treegrid.js +51 -0
  529. package/js/modules/treegrid.js.map +1 -0
  530. package/js/modules/treegrid.src.js +2759 -0
  531. package/js/modules/treemap.js +1 -1
  532. package/js/modules/treemap.src.js +1 -1
  533. package/js/modules/variable-pie.js +1 -1
  534. package/js/modules/variable-pie.src.js +1 -1
  535. package/js/modules/variwide.js +2 -2
  536. package/js/modules/variwide.src.js +3 -3
  537. package/js/modules/vector.js +2 -2
  538. package/js/modules/vector.js.map +1 -1
  539. package/js/modules/vector.src.js +94 -24
  540. package/js/modules/windbarb.js +2 -2
  541. package/js/modules/windbarb.src.js +4 -4
  542. package/js/modules/wordcloud.js +1 -1
  543. package/js/modules/wordcloud.src.js +1 -1
  544. package/js/modules/xrange.js +11 -10
  545. package/js/modules/xrange.js.map +1 -1
  546. package/js/modules/xrange.src.js +257 -70
  547. package/js/themes/avocado.js +1 -1
  548. package/js/themes/avocado.src.js +1 -1
  549. package/js/themes/dark-blue.js +2 -2
  550. package/js/themes/dark-blue.src.js +3 -3
  551. package/js/themes/dark-green.js +2 -2
  552. package/js/themes/dark-green.src.js +3 -3
  553. package/js/themes/dark-unica.js +2 -2
  554. package/js/themes/dark-unica.src.js +3 -3
  555. package/js/themes/gray.js +2 -2
  556. package/js/themes/gray.src.js +3 -3
  557. package/js/themes/grid-light.js +2 -2
  558. package/js/themes/grid-light.src.js +3 -3
  559. package/js/themes/grid.js +2 -2
  560. package/js/themes/grid.src.js +3 -3
  561. package/js/themes/sand-signika.js +2 -2
  562. package/js/themes/sand-signika.src.js +3 -3
  563. package/js/themes/skies.js +2 -2
  564. package/js/themes/skies.src.js +3 -3
  565. package/js/themes/sunset.js +1 -1
  566. package/js/themes/sunset.src.js +1 -1
  567. package/modules/accessibility.js +1 -1
  568. package/modules/accessibility.src.js +1 -1
  569. package/modules/annotations.js +2 -2
  570. package/modules/annotations.src.js +2 -2
  571. package/modules/arrow-symbols.js +13 -0
  572. package/modules/arrow-symbols.js.map +1 -0
  573. package/modules/arrow-symbols.src.js +138 -0
  574. package/modules/boost-canvas.js +1 -1
  575. package/modules/boost-canvas.src.js +1 -1
  576. package/modules/boost.js +36 -36
  577. package/modules/boost.js.map +1 -1
  578. package/modules/boost.src.js +23 -15
  579. package/modules/broken-axis.js +11 -10
  580. package/modules/broken-axis.js.map +1 -1
  581. package/modules/broken-axis.src.js +171 -136
  582. package/modules/bullet.js +1 -1
  583. package/modules/bullet.src.js +1 -1
  584. package/modules/current-date-indicator.js +13 -0
  585. package/modules/current-date-indicator.js.map +1 -0
  586. package/modules/current-date-indicator.src.js +120 -0
  587. package/modules/data.js +2 -2
  588. package/modules/data.src.js +4 -4
  589. package/modules/drag-panes.js +1 -1
  590. package/modules/drag-panes.src.js +1 -1
  591. package/modules/draggable-points.js +38 -0
  592. package/modules/draggable-points.js.map +1 -0
  593. package/modules/draggable-points.src.js +2281 -0
  594. package/modules/drilldown.js +1 -1
  595. package/modules/drilldown.js.map +1 -1
  596. package/modules/drilldown.src.js +2 -1
  597. package/modules/export-data.js +2 -2
  598. package/modules/export-data.src.js +3 -3
  599. package/modules/exporting.js +2 -2
  600. package/modules/exporting.src.js +3 -3
  601. package/modules/funnel.js +2 -2
  602. package/modules/funnel.src.js +3 -3
  603. package/modules/gantt.js +83 -19
  604. package/modules/gantt.js.map +1 -1
  605. package/modules/gantt.src.js +5553 -379
  606. package/modules/grid-axis.js +16 -11
  607. package/modules/grid-axis.js.map +1 -1
  608. package/modules/grid-axis.src.js +732 -293
  609. package/modules/heatmap.js +2 -2
  610. package/modules/heatmap.js.map +1 -1
  611. package/modules/heatmap.src.js +128 -57
  612. package/modules/histogram-bellcurve.js +1 -1
  613. package/modules/histogram-bellcurve.src.js +1 -1
  614. package/modules/item-series.js +2 -2
  615. package/modules/item-series.src.js +3 -3
  616. package/modules/map.js +2 -2
  617. package/modules/map.js.map +1 -1
  618. package/modules/map.src.js +139 -68
  619. package/modules/no-data-to-display.js +1 -1
  620. package/modules/no-data-to-display.src.js +6 -6
  621. package/modules/offline-exporting.js +2 -2
  622. package/modules/offline-exporting.src.js +2 -2
  623. package/modules/oldie.js +2 -2
  624. package/modules/oldie.src.js +3 -3
  625. package/modules/overlapping-datalabels.js +2 -2
  626. package/modules/overlapping-datalabels.src.js +2 -2
  627. package/modules/parallel-coordinates.js +8 -8
  628. package/modules/parallel-coordinates.js.map +1 -1
  629. package/modules/parallel-coordinates.src.js +4 -3
  630. package/modules/pareto.js +1 -1
  631. package/modules/pareto.src.js +1 -1
  632. package/modules/pathfinder.js +35 -0
  633. package/modules/pathfinder.js.map +1 -0
  634. package/modules/pathfinder.src.js +2128 -0
  635. package/modules/pattern-fill.js +1 -1
  636. package/modules/pattern-fill.src.js +1 -1
  637. package/modules/sankey.js +2 -2
  638. package/modules/sankey.src.js +3 -3
  639. package/modules/series-label.js +2 -2
  640. package/modules/series-label.src.js +4 -4
  641. package/modules/solid-gauge.js +2 -2
  642. package/modules/solid-gauge.src.js +3 -3
  643. package/modules/static-scale.js +3 -3
  644. package/modules/static-scale.js.map +1 -1
  645. package/modules/static-scale.src.js +65 -26
  646. package/modules/stock.js +142 -142
  647. package/modules/stock.js.map +1 -1
  648. package/modules/stock.src.js +230 -157
  649. package/modules/streamgraph.js +2 -2
  650. package/modules/streamgraph.src.js +3 -3
  651. package/modules/sunburst.js +1 -1
  652. package/modules/sunburst.src.js +1 -1
  653. package/modules/tilemap.js +1 -1
  654. package/modules/tilemap.js.map +1 -1
  655. package/modules/tilemap.src.js +357 -189
  656. package/modules/treegrid.js +52 -0
  657. package/modules/treegrid.js.map +1 -0
  658. package/modules/treegrid.src.js +2797 -0
  659. package/modules/treemap.js +1 -1
  660. package/modules/treemap.src.js +1 -1
  661. package/modules/variable-pie.js +1 -1
  662. package/modules/variable-pie.src.js +1 -1
  663. package/modules/variwide.js +2 -2
  664. package/modules/variwide.src.js +3 -3
  665. package/modules/vector.js +2 -2
  666. package/modules/vector.js.map +1 -1
  667. package/modules/vector.src.js +94 -24
  668. package/modules/windbarb.js +2 -2
  669. package/modules/windbarb.src.js +4 -4
  670. package/modules/wordcloud.js +1 -1
  671. package/modules/wordcloud.src.js +1 -1
  672. package/modules/xrange.js +12 -11
  673. package/modules/xrange.js.map +1 -1
  674. package/modules/xrange.src.js +259 -79
  675. package/package.json +1 -1
  676. package/themes/avocado.js +1 -1
  677. package/themes/avocado.src.js +1 -1
  678. package/themes/dark-blue.js +2 -2
  679. package/themes/dark-blue.src.js +3 -3
  680. package/themes/dark-green.js +2 -2
  681. package/themes/dark-green.src.js +3 -3
  682. package/themes/dark-unica.js +2 -2
  683. package/themes/dark-unica.src.js +3 -3
  684. package/themes/gray.js +2 -2
  685. package/themes/gray.src.js +3 -3
  686. package/themes/grid-light.js +2 -2
  687. package/themes/grid-light.src.js +3 -3
  688. package/themes/grid.js +2 -2
  689. package/themes/grid.src.js +3 -3
  690. package/themes/sand-signika.js +2 -2
  691. package/themes/sand-signika.src.js +3 -3
  692. package/themes/skies.js +2 -2
  693. package/themes/skies.src.js +3 -3
  694. package/themes/sunset.js +1 -1
  695. package/themes/sunset.src.js +1 -1
@@ -0,0 +1,917 @@
1
+ /**
2
+ * (c) 2016 Highsoft AS
3
+ * Authors: Jon Arild Nygard
4
+ *
5
+ * License: www.highcharts.com/license
6
+ */
7
+ /* eslint no-console: 0 */
8
+ 'use strict';
9
+ import H from '../parts/Globals.js';
10
+ import '../parts/Utilities.js';
11
+ import './GridAxis.js';
12
+ import Tree from './Tree.js';
13
+ import mixinTreeSeries from '../mixins/tree-series.js';
14
+ import '../modules/broken-axis.src.js';
15
+ var argsToArray = function (args) {
16
+ return Array.prototype.slice.call(args, 1);
17
+ },
18
+ defined = H.defined,
19
+ each = H.each,
20
+ extend = H.extend,
21
+ find = H.find,
22
+ fireEvent = H.fireEvent,
23
+ getLevelOptions = mixinTreeSeries.getLevelOptions,
24
+ map = H.map,
25
+ merge = H.merge,
26
+ inArray = H.inArray,
27
+ isBoolean = function (x) {
28
+ return typeof x === 'boolean';
29
+ },
30
+ isNumber = H.isNumber,
31
+ isObject = function (x) {
32
+ // Always use strict mode.
33
+ return H.isObject(x, true);
34
+ },
35
+ isString = H.isString,
36
+ keys = H.keys,
37
+ pick = H.pick,
38
+ reduce = H.reduce,
39
+ wrap = H.wrap,
40
+ GridAxis = H.Axis,
41
+ GridAxisTick = H.Tick;
42
+
43
+ /**
44
+ * some - Equivalent of Array.prototype.some
45
+ *
46
+ * @param {Array} arr Array to look for matching elements in.
47
+ * @param {function} condition The condition to check against.
48
+ * @return {boolean} Whether some elements pass the condition.
49
+ */
50
+ var some = function (arr, condition) {
51
+ var result = false;
52
+ each(arr, function (element, index, array) {
53
+ if (!result) {
54
+ result = condition(element, index, array);
55
+ }
56
+ });
57
+ return result;
58
+ };
59
+
60
+ var override = function (obj, methods) {
61
+ var method,
62
+ func;
63
+ for (method in methods) {
64
+ if (methods.hasOwnProperty(method)) {
65
+ func = methods[method];
66
+ wrap(obj, method, func);
67
+ }
68
+ }
69
+ };
70
+
71
+ /**
72
+ * getCategoriesFromTree - getCategories based on a tree
73
+ *
74
+ * @param {object} tree Root of tree to collect categories from
75
+ * @return {Array} Array of categories
76
+ */
77
+ var getCategoriesFromTree = function (tree) {
78
+ var categories = [];
79
+ if (tree.data) {
80
+ categories.push(tree.data.name);
81
+ }
82
+ each(tree.children, function (child) {
83
+ categories = categories.concat(getCategoriesFromTree(child));
84
+ });
85
+ return categories;
86
+ };
87
+
88
+ var mapTickPosToNode = function (node, categories) {
89
+ var map = {},
90
+ name = node.data && node.data.name,
91
+ pos = inArray(name, categories);
92
+ map[pos] = node;
93
+ each(node.children, function (child) {
94
+ extend(map, mapTickPosToNode(child, categories));
95
+ });
96
+ return map;
97
+ };
98
+
99
+ var getBreakFromNode = function (node, max) {
100
+ var from = node.collapseStart,
101
+ to = node.collapseEnd;
102
+
103
+ // In broken-axis, the axis.max is minimized until it is not within a break.
104
+ // Therefore, if break.to is larger than axis.max, the axis.to should not
105
+ // add the 0.5 axis.tickMarkOffset, to avoid adding a break larger than
106
+ // axis.max
107
+ // TODO consider simplifying broken-axis and this might solve itself
108
+ if (to >= max) {
109
+ from -= 0.5;
110
+ }
111
+
112
+ return {
113
+ from: from,
114
+ to: to,
115
+ showPoints: false
116
+ };
117
+ };
118
+
119
+ /**
120
+ * Creates a list of positions for the ticks on the axis. Filters out positions
121
+ * that are outside min and max, or is inside an axis break.
122
+ *
123
+ * @param {Object} axis The Axis to get the tick positions from.
124
+ * @param {number} axis.min The minimum value of the axis.
125
+ * @param {number} axis.max The maximum value of the axis.
126
+ * @param {function} axis.isInAnyBreak Function to determine if a position is
127
+ * inside any breaks on the axis.
128
+ * @returns {number[]} List of positions.
129
+ */
130
+ var getTickPositions = function (axis) {
131
+ return reduce(
132
+ keys(axis.mapOfPosToGridNode),
133
+ function (arr, key) {
134
+ var pos = +key;
135
+ if (
136
+ axis.min <= pos &&
137
+ axis.max >= pos &&
138
+ !axis.isInAnyBreak(pos)
139
+ ) {
140
+ arr.push(pos);
141
+ }
142
+ return arr;
143
+ },
144
+ []
145
+ );
146
+ };
147
+ /**
148
+ * Check if a node is collapsed.
149
+ * @param {object} axis The axis to check against.
150
+ * @param {object} node The node to check if is collapsed.
151
+ * @param {number} pos The tick position to collapse.
152
+ * @returns {boolean} Returns true if collapsed, false if expanded.
153
+ */
154
+ var isCollapsed = function (axis, node) {
155
+ var breaks = (axis.options.breaks || []),
156
+ obj = getBreakFromNode(node, axis.max);
157
+ return some(breaks, function (b) {
158
+ return b.from === obj.from && b.to === obj.to;
159
+ });
160
+ };
161
+
162
+ /**
163
+ * Calculates the new axis breaks to collapse a node.
164
+ * @param {object} axis The axis to check against.
165
+ * @param {object} node The node to collapse.
166
+ * @param {number} pos The tick position to collapse.
167
+ * @returns {array} Returns an array of the new breaks for the axis.
168
+ */
169
+ var collapse = function (axis, node) {
170
+ var breaks = (axis.options.breaks || []),
171
+ obj = getBreakFromNode(node, axis.max);
172
+ breaks.push(obj);
173
+ return breaks;
174
+ };
175
+
176
+ /**
177
+ * Calculates the new axis breaks to expand a node.
178
+ * @param {object} axis The axis to check against.
179
+ * @param {object} node The node to expand.
180
+ * @param {number} pos The tick position to expand.
181
+ * @returns {array} Returns an array of the new breaks for the axis.
182
+ */
183
+ var expand = function (axis, node) {
184
+ var breaks = (axis.options.breaks || []),
185
+ obj = getBreakFromNode(node, axis.max);
186
+ // Remove the break from the axis breaks array.
187
+ return reduce(breaks, function (arr, b) {
188
+ if (b.to !== obj.to || b.from !== obj.from) {
189
+ arr.push(b);
190
+ }
191
+ return arr;
192
+ }, []);
193
+ };
194
+
195
+ /**
196
+ * Calculates the new axis breaks after toggling the collapse/expand state of a
197
+ * node. If it is collapsed it will be expanded, and if it is exapended it will
198
+ * be collapsed.
199
+ * @param {object} axis The axis to check against.
200
+ * @param {object} node The node to toggle.
201
+ * @param {number} pos The tick position to toggle.
202
+ * @returns {array} Returns an array of the new breaks for the axis.
203
+ */
204
+ var toggleCollapse = function (axis, node) {
205
+ return (
206
+ isCollapsed(axis, node) ?
207
+ expand(axis, node) :
208
+ collapse(axis, node)
209
+ );
210
+ };
211
+ var renderLabelIcon = function (tick, params) {
212
+ var icon = tick.labelIcon,
213
+ isNew = !icon,
214
+ renderer = params.renderer,
215
+ labelBox = params.xy,
216
+ options = params.options,
217
+ width = options.width,
218
+ height = options.height,
219
+ iconCenter = {
220
+ x: labelBox.x - (width / 2) - options.padding,
221
+ y: labelBox.y - (height / 2)
222
+ },
223
+ rotation = params.collapsed ? 90 : 180,
224
+ shouldRender = params.show && H.isNumber(iconCenter.y);
225
+
226
+ if (isNew) {
227
+ tick.labelIcon = icon = renderer.path(renderer.symbols[options.type](
228
+ options.x,
229
+ options.y,
230
+ width,
231
+ height
232
+ ))
233
+ .addClass('highcharts-label-icon')
234
+ .add(params.group);
235
+ }
236
+
237
+ // Set the new position, and show or hide
238
+ if (!shouldRender) {
239
+ icon.attr({ y: -9999 }); // #1338
240
+ }
241
+
242
+
243
+ // Presentational attributes
244
+ icon
245
+ .attr({
246
+ 'stroke-width': 1,
247
+ 'fill': pick(params.color, '#666666')
248
+ })
249
+ .css({
250
+ cursor: 'pointer',
251
+ stroke: options.lineColor,
252
+ strokeWidth: options.lineWidth
253
+ });
254
+
255
+
256
+ // Update the icon positions
257
+ icon[isNew ? 'attr' : 'animate']({
258
+ translateX: iconCenter.x,
259
+ translateY: iconCenter.y,
260
+ rotation: rotation
261
+ });
262
+
263
+ };
264
+ var onTickHover = function (label) {
265
+ label.addClass('highcharts-treegrid-node-active');
266
+
267
+ label.css({
268
+ textDecoration: 'underline'
269
+ });
270
+
271
+ };
272
+ var onTickHoverExit = function (label, options) {
273
+ var css = defined(options.style) ? options.style : {};
274
+ label.removeClass('highcharts-treegrid-node-active');
275
+
276
+ label.css({
277
+ textDecoration: css.textDecoration
278
+ });
279
+
280
+ };
281
+
282
+ /**
283
+ * Creates a tree structure of the data, and the treegrid. Calculates
284
+ * categories, and y-values of points based on the tree.
285
+ * @param {Array} data All the data points to display in the axis.
286
+ * @param {boolean} uniqueNames Wether or not the data node with the same name
287
+ * should share grid cell. If true they do share cell. False by default.
288
+ * @returns {object} Returns an object containing categories, mapOfIdToNode,
289
+ * mapOfPosToGridNode, and tree.
290
+ * @todo There should be only one point per line.
291
+ * @todo It should be optional to have one category per point, or merge cells
292
+ * @todo Add unit-tests.
293
+ */
294
+ var getTreeGridFromData = function (data, uniqueNames, numberOfSeries) {
295
+ var categories = [],
296
+ collapsedNodes = [],
297
+ mapOfIdToNode = {},
298
+ mapOfPosToGridNode = {},
299
+ posIterator = -1,
300
+ uniqueNamesEnabled = isBoolean(uniqueNames) ? uniqueNames : false,
301
+ tree,
302
+ treeParams,
303
+ updateYValuesAndTickPos;
304
+
305
+ // Build the tree from the series data.
306
+ treeParams = {
307
+ // After the children has been created.
308
+ after: function (node) {
309
+ var gridNode = mapOfPosToGridNode[node.pos],
310
+ height = 0,
311
+ descendants = 0;
312
+ each(gridNode.children, function (child) {
313
+ descendants += child.descendants + 1;
314
+ height = Math.max(child.height + 1, height);
315
+ });
316
+ gridNode.descendants = descendants;
317
+ gridNode.height = height;
318
+ if (gridNode.collapsed) {
319
+ collapsedNodes.push(gridNode);
320
+ }
321
+ },
322
+ // Before the children has been created.
323
+ before: function (node) {
324
+ var data = isObject(node.data) ? node.data : {},
325
+ name = isString(data.name) ? data.name : '',
326
+ parentNode = mapOfIdToNode[node.parent],
327
+ parentGridNode = (
328
+ isObject(parentNode) ?
329
+ mapOfPosToGridNode[parentNode.pos] :
330
+ null
331
+ ),
332
+ hasSameName = function (x) {
333
+ return x.name === name;
334
+ },
335
+ gridNode,
336
+ pos;
337
+
338
+ // If not unique names, look for a sibling node with the same name.
339
+ if (
340
+ uniqueNamesEnabled &&
341
+ isObject(parentGridNode) &&
342
+ !!(gridNode = find(parentGridNode.children, hasSameName))
343
+ ) {
344
+ // If if there is a gridNode with the same name, reuse position.
345
+ pos = gridNode.pos;
346
+ // Add data node to list of nodes in the grid node.
347
+ gridNode.nodes.push(node);
348
+ } else {
349
+ // If it is a new grid node, increment position.
350
+ pos = posIterator++;
351
+ }
352
+
353
+ // Add new grid node to map.
354
+ if (!mapOfPosToGridNode[pos]) {
355
+ mapOfPosToGridNode[pos] = gridNode = {
356
+ depth: parentGridNode ? parentGridNode.depth + 1 : 0,
357
+ name: name,
358
+ nodes: [node],
359
+ children: [],
360
+ pos: pos
361
+ };
362
+
363
+ // If not root, then add name to categories.
364
+ if (pos !== -1) {
365
+ categories.push(name);
366
+ }
367
+
368
+ // Add name to list of children.
369
+ if (isObject(parentGridNode)) {
370
+ parentGridNode.children.push(gridNode);
371
+ }
372
+ }
373
+
374
+ // Add data node to map
375
+ if (isString(node.id)) {
376
+ mapOfIdToNode[node.id] = node;
377
+ }
378
+
379
+ // If one of the points are collapsed, then start the grid node in
380
+ // collapsed state.
381
+ if (data.collapsed === true) {
382
+ gridNode.collapsed = true;
383
+ }
384
+
385
+ // Assign pos to data node
386
+ node.pos = pos;
387
+ }
388
+ };
389
+
390
+ updateYValuesAndTickPos = function (map, numberOfSeries) {
391
+ var setValues = function (gridNode, start, result) {
392
+ var nodes = gridNode.nodes,
393
+ end = start + (start === -1 ? 0 : numberOfSeries - 1),
394
+ diff = (end - start) / 2,
395
+ padding = 0.5,
396
+ pos = start + diff;
397
+
398
+ each(nodes, function (node) {
399
+ var data = node.data;
400
+ if (isObject(data)) {
401
+ // Update point
402
+ data.y = start + data.seriesIndex;
403
+ // Remove the property once used
404
+ delete data.seriesIndex;
405
+ }
406
+ node.pos = pos;
407
+ });
408
+
409
+ result[pos] = gridNode;
410
+
411
+ gridNode.pos = pos;
412
+ gridNode.tickmarkOffset = diff + padding;
413
+ gridNode.collapseStart = end + padding;
414
+
415
+
416
+ each(gridNode.children, function (child) {
417
+ setValues(child, end + 1, result);
418
+ end = child.collapseEnd - padding;
419
+ });
420
+ // Set collapseEnd to the end of the last child node.
421
+ gridNode.collapseEnd = end + padding;
422
+
423
+ return result;
424
+ };
425
+
426
+ return setValues(map['-1'], -1, {});
427
+ };
428
+
429
+ // Create tree from data
430
+ tree = Tree.getTree(data, treeParams);
431
+
432
+ // Update y values of data, and set calculate tick positions.
433
+ mapOfPosToGridNode = updateYValuesAndTickPos(
434
+ mapOfPosToGridNode,
435
+ numberOfSeries
436
+ );
437
+
438
+ // Return the resulting data.
439
+ return {
440
+ categories: categories,
441
+ mapOfIdToNode: mapOfIdToNode,
442
+ mapOfPosToGridNode: mapOfPosToGridNode,
443
+ collapsedNodes: collapsedNodes,
444
+ tree: tree
445
+ };
446
+ };
447
+
448
+ override(GridAxis.prototype, {
449
+ init: function (proceed, chart, userOptions) {
450
+ var axis = this,
451
+ removeFoundExtremesEvent,
452
+ isTreeGrid = userOptions.type === 'treegrid';
453
+ // Set default and forced options for TreeGrid
454
+ if (isTreeGrid) {
455
+ userOptions = merge({
456
+ // Default options
457
+ grid: {
458
+ enabled: true
459
+ },
460
+ // TODO: add support for align in treegrid.
461
+ labels: {
462
+ align: 'left',
463
+
464
+ /**
465
+ * Set options on specific levels in a tree grid axis. Takes
466
+ * precedence over labels options.
467
+ *
468
+ * @product gantt
469
+ * @sample {gantt} gantt/treegrid-axis/labels-levels
470
+ * Levels on TreeGrid Labels
471
+ * @type {Array<Object>}
472
+ * @apioption yAxis.labels.levels
473
+ */
474
+ levels: [{
475
+ /**
476
+ * Specify the level which the options within this object
477
+ * applies to.
478
+ *
479
+ * @sample {gantt} gantt/treegrid-axis/labels-levels
480
+ */
481
+ level: undefined
482
+ }, {
483
+ level: 1,
484
+ style: {
485
+ fontWeight: 'bold'
486
+ }
487
+ }],
488
+
489
+ /**
490
+ * The symbol for the collapse and expand icon in a
491
+ * treegrid.
492
+ *
493
+ * @product gantt
494
+ * @optionparent yAxis.labels.symbol
495
+ */
496
+ symbol: {
497
+ /**
498
+ * The symbol type. Points to a definition function in
499
+ * the `Highcharts.Renderer.symbols` collection.
500
+ *
501
+ * @validvalue ['arc', 'circle', 'diamond', 'square', 'triangle', 'triangle-down']
502
+ */
503
+ type: 'triangle',
504
+ x: -5,
505
+ y: -5,
506
+ height: 10,
507
+ width: 10,
508
+ padding: 5
509
+ }
510
+ },
511
+ uniqueNames: false
512
+
513
+ }, userOptions, { // User options
514
+ // Forced options
515
+ reversed: true,
516
+ // grid.columns is not supported in treegrid
517
+ grid: {
518
+ columns: undefined
519
+ }
520
+ });
521
+ }
522
+
523
+ // Now apply the original function with the original arguments,
524
+ // which are sliced off this function's arguments
525
+ proceed.apply(axis, [chart, userOptions]);
526
+ if (isTreeGrid) {
527
+ H.addEvent(axis.chart, 'beforeRender', function () {
528
+ var labelOptions = axis.options && axis.options.labels;
529
+
530
+ // beforeRender is fired after all the series is initialized,
531
+ // which is an ideal time to update the axis.categories.
532
+ axis.updateYNames();
533
+
534
+ // Update yData now that we have calculated the y values
535
+ // TODO: it would be better to be able to calculate y values
536
+ // before Series.setData
537
+ each(axis.series, function (series) {
538
+ series.yData = map(series.options.data, function (data) {
539
+ return data.y;
540
+ });
541
+ });
542
+
543
+ // Calculate the label options for each level in the tree.
544
+ axis.mapOptionsToLevel = getLevelOptions({
545
+ defaults: labelOptions,
546
+ from: 1,
547
+ levels: labelOptions.levels,
548
+ to: axis.tree.height
549
+ });
550
+
551
+ // Collapse all the nodes belonging to a point where collapsed
552
+ // equals true.
553
+ // Can be called from beforeRender, if getBreakFromNode removes
554
+ // its dependency on axis.max.
555
+ removeFoundExtremesEvent =
556
+ H.addEvent(axis, 'foundExtremes', function () {
557
+ each(axis.collapsedNodes, function (node) {
558
+ var breaks = collapse(axis, node);
559
+ axis.setBreaks(breaks, false);
560
+ });
561
+ removeFoundExtremesEvent();
562
+ });
563
+ });
564
+ axis.hasNames = true;
565
+ axis.options.showLastLabel = true;
566
+ }
567
+ },
568
+ /**
569
+ * Override to add indentation to axis.maxLabelDimensions.
570
+ * @param {Function} proceed the original function
571
+ * @returns {undefined}
572
+ */
573
+ getMaxLabelDimensions: function (proceed) {
574
+ var axis = this,
575
+ options = axis.options,
576
+ labelOptions = options && options.labels,
577
+ indentation = (
578
+ labelOptions && isNumber(labelOptions.indentation) ?
579
+ options.labels.indentation :
580
+ 0
581
+ ),
582
+ retVal = proceed.apply(axis, argsToArray(arguments)),
583
+ isTreeGrid = axis.options.type === 'treegrid',
584
+ treeDepth;
585
+
586
+ if (isTreeGrid) {
587
+ treeDepth = axis.mapOfPosToGridNode[-1].height;
588
+ retVal.width += indentation * (treeDepth - 1);
589
+ }
590
+
591
+ return retVal;
592
+ },
593
+ /**
594
+ * Generates a tick for initial positioning.
595
+ *
596
+ * @private
597
+ * @param {function} proceed The original generateTick function.
598
+ * @param {number} pos The tick position in axis values.
599
+ */
600
+ generateTick: function (proceed, pos) {
601
+ var axis = this,
602
+ mapOptionsToLevel = (
603
+ isObject(axis.mapOptionsToLevel) ? axis.mapOptionsToLevel : {}
604
+ ),
605
+ isTreeGrid = axis.options.type === 'treegrid',
606
+ ticks = axis.ticks,
607
+ tick = ticks[pos],
608
+ levelOptions,
609
+ options,
610
+ gridNode;
611
+
612
+ if (isTreeGrid) {
613
+ gridNode = axis.mapOfPosToGridNode[pos];
614
+ levelOptions = mapOptionsToLevel[gridNode.depth];
615
+
616
+ if (levelOptions) {
617
+ options = {
618
+ labels: levelOptions
619
+ };
620
+ }
621
+
622
+ if (!tick) {
623
+ ticks[pos] = tick =
624
+ new GridAxisTick(axis, pos, null, undefined, {
625
+ category: gridNode.name,
626
+ tickmarkOffset: gridNode.tickmarkOffset,
627
+ options: options
628
+ });
629
+ } else {
630
+ // update labels depending on tick interval
631
+ tick.parameters.category = gridNode.name;
632
+ tick.options = options;
633
+ tick.addLabel();
634
+ }
635
+ } else {
636
+ proceed.apply(axis, argsToArray(arguments));
637
+ }
638
+ },
639
+ /**
640
+ * Set the tick positions, tickInterval, axis min and max.
641
+ *
642
+ * @private
643
+ */
644
+ setTickInterval: function (proceed) {
645
+ var axis = this,
646
+ options = axis.options,
647
+ isTreeGrid = options.type === 'treegrid';
648
+
649
+ if (isTreeGrid) {
650
+ axis.min = pick(axis.userMin, options.min, axis.dataMin);
651
+ axis.max = pick(axis.userMax, options.max, axis.dataMax);
652
+
653
+ fireEvent(axis, 'foundExtremes');
654
+
655
+ // setAxisTranslation modifies the min and max according to
656
+ // axis breaks.
657
+ axis.setAxisTranslation(true);
658
+
659
+ axis.tickmarkOffset = 0.5;
660
+ axis.tickInterval = 1;
661
+ axis.tickPositions = getTickPositions(axis);
662
+ } else {
663
+ proceed.apply(axis, argsToArray(arguments));
664
+ }
665
+ }
666
+ });
667
+ override(GridAxisTick.prototype, {
668
+ getLabelPosition: function (
669
+ proceed,
670
+ x,
671
+ y,
672
+ label,
673
+ horiz,
674
+ labelOptions,
675
+ tickmarkOffset,
676
+ index,
677
+ step
678
+ ) {
679
+ var tick = this,
680
+ lbOptions = pick(
681
+ tick.options && tick.options.labels,
682
+ labelOptions
683
+ ),
684
+ pos = tick.pos,
685
+ axis = tick.axis,
686
+ options = axis.options,
687
+ isTreeGrid = options.type === 'treegrid',
688
+ result = proceed.apply(
689
+ tick,
690
+ [x, y, label, horiz, lbOptions, tickmarkOffset, index, step]
691
+ ),
692
+ symbolOptions,
693
+ indentation,
694
+ mapOfPosToGridNode,
695
+ node,
696
+ level;
697
+
698
+ if (isTreeGrid) {
699
+ symbolOptions = (
700
+ lbOptions && isObject(lbOptions.symbol) ?
701
+ lbOptions.symbol :
702
+ {}
703
+ );
704
+ indentation = (
705
+ lbOptions && isNumber(lbOptions.indentation) ?
706
+ lbOptions.indentation :
707
+ 0
708
+ );
709
+ mapOfPosToGridNode = axis.mapOfPosToGridNode;
710
+ node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
711
+ level = (node && node.depth) || 1;
712
+ result.x += (
713
+ // Add space for symbols
714
+ ((symbolOptions.width) + (symbolOptions.padding * 2)) +
715
+ // Apply indentation
716
+ ((level - 1) * indentation)
717
+ );
718
+ }
719
+
720
+ return result;
721
+ },
722
+ renderLabel: function (proceed) {
723
+ var tick = this,
724
+ pos = tick.pos,
725
+ axis = tick.axis,
726
+ label = tick.label,
727
+ mapOfPosToGridNode = axis.mapOfPosToGridNode,
728
+ options = axis.options,
729
+ labelOptions = pick(
730
+ tick.options && tick.options.labels,
731
+ options && options.labels
732
+ ),
733
+ symbolOptions = (
734
+ labelOptions && isObject(labelOptions.symbol) ?
735
+ labelOptions.symbol :
736
+ {}
737
+ ),
738
+ node = mapOfPosToGridNode && mapOfPosToGridNode[pos],
739
+ level = node && node.depth,
740
+ isTreeGrid = options.type === 'treegrid',
741
+ hasLabel = !!(label && label.element),
742
+ shouldRender = inArray(pos, axis.tickPositions) > -1,
743
+ prefixClassName = 'highcharts-treegrid-node-',
744
+ collapsed,
745
+ addClassName,
746
+ removeClassName;
747
+
748
+ if (isTreeGrid && node) {
749
+ // Add class name for hierarchical styling.
750
+ if (hasLabel) {
751
+ label.addClass(prefixClassName + 'level-' + level);
752
+ }
753
+ }
754
+
755
+ proceed.apply(tick, argsToArray(arguments));
756
+
757
+ if (isTreeGrid && node && hasLabel && node.descendants > 0) {
758
+ collapsed = isCollapsed(axis, node);
759
+
760
+ renderLabelIcon(
761
+ tick,
762
+ {
763
+
764
+ color: label.styles.color,
765
+
766
+ collapsed: collapsed,
767
+ group: label.parentGroup,
768
+ options: symbolOptions,
769
+ renderer: label.renderer,
770
+ show: shouldRender,
771
+ xy: label.xy
772
+ }
773
+ );
774
+
775
+ // Add class name for the node.
776
+ addClassName = prefixClassName +
777
+ (collapsed ? 'collapsed' : 'expanded');
778
+ removeClassName = prefixClassName +
779
+ (collapsed ? 'expanded' : 'collapsed');
780
+
781
+ label
782
+ .addClass(addClassName)
783
+ .removeClass(removeClassName);
784
+
785
+
786
+ label.css({
787
+ cursor: 'pointer'
788
+ });
789
+
790
+
791
+ // Add events to both label text and icon
792
+ each([label, tick.labelIcon], function (object) {
793
+ if (!object.attachedTreeGridEvents) {
794
+ // On hover
795
+ H.addEvent(object.element, 'mouseover', function () {
796
+ onTickHover(label);
797
+ });
798
+
799
+ // On hover out
800
+ H.addEvent(object.element, 'mouseout', function () {
801
+ onTickHoverExit(label, labelOptions);
802
+ });
803
+
804
+ H.addEvent(object.element, 'click', function () {
805
+ tick.toggleCollapse();
806
+ });
807
+ object.attachedTreeGridEvents = true;
808
+ }
809
+ });
810
+ }
811
+ }
812
+ });
813
+
814
+ extend(GridAxisTick.prototype, /** @lends Highcharts.Tick.prototype */{
815
+ /**
816
+ * Collapse the grid cell. Used when axis is of type treegrid.
817
+ * @param {boolean} [redraw=true] Whether to redraw the chart or wait for
818
+ * an explicit call to {@link Highcharts.Chart#redraw}
819
+ * @sample {gantt} gantt/treegrid-axis/collapsed-dynamically/demo.js
820
+ * Dynamically collapse
821
+ */
822
+ collapse: function (redraw) {
823
+ var tick = this,
824
+ axis = tick.axis,
825
+ pos = tick.pos,
826
+ node = axis.mapOfPosToGridNode[pos],
827
+ breaks = collapse(axis, node);
828
+ axis.setBreaks(breaks, pick(redraw, true));
829
+ },
830
+ /**
831
+ * Expand the grid cell. Used when axis is of type treegrid.
832
+ *
833
+ * @param {boolean} [redraw=true] Whether to redraw the chart or wait for
834
+ * an explicit call to {@link Highcharts.Chart#redraw}
835
+ * @sample {gantt} gantt/treegrid-axis/collapsed-dynamically/demo.js
836
+ * Dynamically collapse
837
+ */
838
+ expand: function (redraw) {
839
+ var tick = this,
840
+ axis = tick.axis,
841
+ pos = tick.pos,
842
+ node = axis.mapOfPosToGridNode[pos],
843
+ breaks = expand(axis, node);
844
+ axis.setBreaks(breaks, pick(redraw, true));
845
+ },
846
+ /**
847
+ * Toggle the collapse/expand state of the grid cell. Used when axis is of
848
+ * type treegrid.
849
+ *
850
+ * @param {boolean} [redraw=true] Whether to redraw the chart or wait for
851
+ * an explicit call to {@link Highcharts.Chart#redraw}
852
+ * @sample {gantt} gantt/treegrid-axis/collapsed-dynamically/demo.js
853
+ * Dynamically collapse
854
+ */
855
+ toggleCollapse: function (redraw) {
856
+ var tick = this,
857
+ axis = tick.axis,
858
+ pos = tick.pos,
859
+ node = axis.mapOfPosToGridNode[pos],
860
+ breaks = toggleCollapse(axis, node);
861
+ axis.setBreaks(breaks, pick(redraw, true));
862
+ }
863
+ });
864
+
865
+ GridAxis.prototype.updateYNames = function () {
866
+ var axis = this,
867
+ options = axis.options,
868
+ isTreeGrid = options.type === 'treegrid',
869
+ uniqueNames = options.uniqueNames,
870
+ isYAxis = !axis.isXAxis,
871
+ series = axis.series,
872
+ numberOfSeries = 0,
873
+ treeGrid,
874
+ data;
875
+
876
+ if (isTreeGrid && isYAxis) {
877
+ // Concatenate data from all series assigned to this axis.
878
+ data = reduce(series, function (arr, s) {
879
+ if (s.visible) {
880
+ // Push all data to array
881
+ each(s.options.data, function (data) {
882
+ if (isObject(data)) {
883
+ // Set series index on data. Removed again after use.
884
+ data.seriesIndex = numberOfSeries;
885
+ arr.push(data);
886
+ }
887
+ });
888
+
889
+ // Increment series index
890
+ if (uniqueNames === true) {
891
+ numberOfSeries++;
892
+ }
893
+ }
894
+ return arr;
895
+ }, []);
896
+
897
+ // Calculate categories and the hierarchy for the grid.
898
+ treeGrid = getTreeGridFromData(
899
+ data,
900
+ uniqueNames,
901
+ (uniqueNames === true) ? numberOfSeries : 1
902
+ );
903
+
904
+ // Assign values to the axis.
905
+ axis.categories = treeGrid.categories;
906
+ axis.mapOfPosToGridNode = treeGrid.mapOfPosToGridNode;
907
+ // Used on init to start a node as collapsed
908
+ axis.collapsedNodes = treeGrid.collapsedNodes;
909
+ axis.hasNames = true;
910
+ axis.tree = treeGrid.tree;
911
+ }
912
+ };
913
+
914
+ // Make utility functions available for testing.
915
+ GridAxis.prototype.utils = {
916
+ getNode: Tree.getNode
917
+ };