highcharts 9.1.1 → 9.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/bower.json +1 -1
  2. package/css/annotations/popup.css +29 -28
  3. package/css/annotations/popup.scss +29 -27
  4. package/css/highcharts.css +15 -0
  5. package/css/highcharts.scss +12 -0
  6. package/css/stocktools/gui.css +1 -0
  7. package/css/stocktools/gui.scss +1 -0
  8. package/css/themes/dark-unica.css +15 -0
  9. package/css/themes/grid-light.css +15 -0
  10. package/css/themes/sand-signika.css +15 -0
  11. package/es-modules/Accessibility/Components/InfoRegionsComponent.js +8 -2
  12. package/es-modules/Accessibility/Components/LegendComponent.js +19 -8
  13. package/es-modules/Accessibility/Components/MenuComponent.js +19 -13
  14. package/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js +4 -8
  15. package/es-modules/Accessibility/FocusBorder.js +1 -3
  16. package/es-modules/Accessibility/Options/LangOptions.js +3 -3
  17. package/es-modules/Accessibility/Utils/Announcer.js +22 -5
  18. package/es-modules/Accessibility/Utils/ChartUtilities.js +6 -1
  19. package/es-modules/Core/Animation/AnimationUtilities.js +12 -4
  20. package/es-modules/Core/Animation/Fx.js +15 -12
  21. package/es-modules/Core/Axis/Axis.js +25 -13
  22. package/es-modules/Core/Axis/AxisDefaults.js +0 -1
  23. package/es-modules/Core/Axis/BrokenAxis.js +32 -15
  24. package/es-modules/Core/Axis/Color/ColorAxis.js +665 -0
  25. package/es-modules/Core/Axis/Color/ColorAxisComposition.js +237 -0
  26. package/es-modules/Core/Axis/Color/ColorAxisDefaults.js +434 -0
  27. package/es-modules/Core/Axis/DateTimeAxis.js +163 -133
  28. package/es-modules/Core/Axis/GridAxis.js +8 -3
  29. package/es-modules/Core/Axis/LogarithmicAxis.js +159 -117
  30. package/es-modules/Core/Axis/OrdinalAxis.js +666 -460
  31. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js +874 -0
  32. package/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js +292 -0
  33. package/es-modules/Core/Axis/RadialAxis.js +858 -745
  34. package/es-modules/Core/Axis/ScrollbarAxis.js +7 -0
  35. package/es-modules/Core/Axis/StackingAxis.js +159 -140
  36. package/es-modules/Core/Axis/Tick.js +17 -27
  37. package/es-modules/Core/Chart/Chart.js +24 -38
  38. package/es-modules/Core/Chart/ChartDefaults.js +1 -1
  39. package/es-modules/Core/Chart/StockChart.js +12 -0
  40. package/es-modules/Core/Color/Color.js +96 -104
  41. package/es-modules/Core/DefaultOptions.js +269 -248
  42. package/es-modules/Core/Foundation.js +9 -8
  43. package/es-modules/Core/Geometry/CircleUtilities.js +385 -0
  44. package/es-modules/Core/Geometry/GeometryUtilities.js +83 -0
  45. package/es-modules/Core/Globals.js +23 -1
  46. package/es-modules/{Extensions/Ajax.js → Core/HttpUtilities.js} +86 -42
  47. package/es-modules/Core/{Legend.js → Legend/Legend.js} +142 -116
  48. package/es-modules/{Mixins → Core/Legend}/LegendSymbol.js +54 -38
  49. package/es-modules/Core/Navigator.js +3 -0
  50. package/es-modules/Core/Pointer.js +9 -0
  51. package/es-modules/Core/Renderer/HTML/AST.js +100 -82
  52. package/es-modules/Core/Renderer/HTML/HTMLElement.js +17 -7
  53. package/es-modules/Core/Renderer/HTML/HTMLRenderer.js +26 -9
  54. package/es-modules/Core/Renderer/RendererRegistry.js +9 -4
  55. package/es-modules/Core/Renderer/RendererUtilities.js +159 -0
  56. package/es-modules/Core/Renderer/SVG/SVGElement.js +13 -7
  57. package/es-modules/Core/Renderer/SVG/SVGLabel.js +9 -29
  58. package/es-modules/Core/Renderer/SVG/SVGRenderer.js +2 -2
  59. package/es-modules/Core/Renderer/SVG/TextBuilder.js +18 -16
  60. package/es-modules/Core/Responsive.js +166 -148
  61. package/es-modules/Core/Series/DataLabel.js +564 -0
  62. package/es-modules/Core/Series/Point.js +233 -209
  63. package/es-modules/Core/Series/Series.js +174 -2339
  64. package/es-modules/Core/Series/SeriesDefaults.js +2293 -0
  65. package/es-modules/Core/Series/SeriesRegistry.js +3 -9
  66. package/es-modules/Core/Time.js +78 -2
  67. package/es-modules/Core/Tooltip.js +178 -236
  68. package/es-modules/Core/Utilities.js +409 -394
  69. package/es-modules/Extensions/Annotations/Annotations.js +102 -49
  70. package/es-modules/Extensions/Annotations/Mixins/EventEmitterMixin.js +9 -1
  71. package/es-modules/Extensions/Annotations/NavigationBindings.js +30 -25
  72. package/es-modules/Extensions/Annotations/Popup.js +16 -7
  73. package/es-modules/Extensions/Boost/BoostOverrides.js +5 -1
  74. package/es-modules/Extensions/Boost/WGLRenderer.js +5 -4
  75. package/es-modules/Extensions/Boost/WGLVBuffer.js +3 -0
  76. package/es-modules/Extensions/BoostCanvas.js +1 -1
  77. package/es-modules/Extensions/CurrentDateIndication.js +1 -1
  78. package/es-modules/Extensions/Data.js +82 -76
  79. package/es-modules/Extensions/DataGrouping.js +225 -184
  80. package/es-modules/Extensions/Debugger/ErrorMessages.js +2 -2
  81. package/es-modules/Extensions/DraggablePoints.js +13 -5
  82. package/es-modules/Extensions/Drilldown.js +41 -14
  83. package/es-modules/Extensions/ExportData.js +7 -4
  84. package/es-modules/Extensions/Exporting/Exporting.js +1273 -0
  85. package/es-modules/Extensions/Exporting/ExportingDefaults.js +803 -0
  86. package/es-modules/Extensions/Exporting/ExportingSymbols.js +73 -0
  87. package/es-modules/Extensions/FullScreen.js +7 -5
  88. package/es-modules/Extensions/NoDataToDisplay.js +1 -1
  89. package/es-modules/Extensions/OfflineExporting/OfflineExporting.js +617 -0
  90. package/es-modules/Extensions/OfflineExporting/OfflineExportingDefaults.js +58 -0
  91. package/es-modules/Extensions/Oldie/Oldie.js +1 -1
  92. package/es-modules/Extensions/Pane.js +0 -1
  93. package/es-modules/Extensions/PatternFill.js +23 -10
  94. package/es-modules/Extensions/Polar.js +2 -1
  95. package/es-modules/Extensions/RangeSelector.js +1 -1
  96. package/es-modules/Extensions/Themes/Avocado.js +49 -20
  97. package/es-modules/Extensions/Themes/DarkBlue.js +226 -203
  98. package/es-modules/Extensions/Themes/DarkGreen.js +231 -203
  99. package/es-modules/Extensions/Themes/DarkUnica.js +201 -172
  100. package/es-modules/Extensions/Themes/Gray.js +228 -205
  101. package/es-modules/Extensions/Themes/Grid.js +109 -81
  102. package/es-modules/Extensions/Themes/GridLight.js +83 -55
  103. package/es-modules/Extensions/Themes/HighContrastDark.js +192 -164
  104. package/es-modules/Extensions/Themes/HighContrastLight.js +49 -21
  105. package/es-modules/Extensions/Themes/SandSignika.js +115 -86
  106. package/es-modules/Extensions/Themes/Skies.js +102 -74
  107. package/es-modules/Extensions/Themes/Sunset.js +47 -19
  108. package/es-modules/Mixins/ColorSeries.js +0 -1
  109. package/es-modules/Mixins/MultipleLines.js +6 -0
  110. package/es-modules/Mixins/TreeSeries.js +1 -1
  111. package/es-modules/Series/Area/AreaSeries.js +2 -2
  112. package/es-modules/Series/AreaSpline/AreaSplineSeries.js +2 -2
  113. package/es-modules/Series/Bubble/BubbleLegendComposition.js +279 -0
  114. package/es-modules/Series/Bubble/BubbleLegendDefaults.js +267 -0
  115. package/es-modules/Series/Bubble/BubbleLegendItem.js +472 -0
  116. package/es-modules/Series/Bubble/BubbleSeries.js +6 -2
  117. package/es-modules/Series/Column/ColumnDataLabel.js +109 -0
  118. package/es-modules/Series/Column/ColumnSeries.js +39 -26
  119. package/es-modules/Series/Column3D/Column3DComposition.js +5 -2
  120. package/es-modules/Series/Flags/FlagsSeries.js +8 -1
  121. package/es-modules/Series/Gantt/GanttSeries.js +3 -3
  122. package/es-modules/Series/Heatmap/HeatmapSeries.js +9 -5
  123. package/es-modules/Series/HeikinAshi/HeikinAshiPoint.js +60 -0
  124. package/es-modules/Series/HeikinAshi/HeikinAshiSeries.js +277 -0
  125. package/es-modules/Series/HollowCandlestick/HollowCandlestickPoint.js +83 -0
  126. package/es-modules/Series/HollowCandlestick/HollowCandlestickSeries.js +370 -0
  127. package/es-modules/Series/Line/LineSeries.js +12 -8
  128. package/es-modules/Series/Map/MapSeries.js +5 -3
  129. package/es-modules/Series/MapBubble/MapBubbleSeries.js +6 -5
  130. package/es-modules/Series/OHLC/OHLCPoint.js +11 -0
  131. package/es-modules/Series/PackedBubble/PackedBubbleSeries.js +3 -1
  132. package/es-modules/Series/Pie/PieDataLabel.js +448 -0
  133. package/es-modules/Series/Pie/PiePoint.js +35 -34
  134. package/es-modules/Series/Pie/PieSeries.js +19 -16
  135. package/es-modules/Series/Polygon/PolygonSeries.js +3 -3
  136. package/es-modules/Series/Sankey/SankeySeries.js +9 -7
  137. package/es-modules/Series/SolidGauge/SolidGaugeSeries.js +2 -2
  138. package/es-modules/Series/Sunburst/SunburstSeries.js +1 -14
  139. package/es-modules/Series/Timeline/TimelinePoint.js +6 -0
  140. package/es-modules/Series/Timeline/TimelineSeries.js +14 -17
  141. package/es-modules/Series/Treemap/TreemapSeries.js +3 -3
  142. package/es-modules/Series/Venn/VennSeries.js +4 -4
  143. package/es-modules/Series/Venn/VennUtils.js +10 -16
  144. package/es-modules/Series/Waterfall/WaterfallSeries.js +40 -35
  145. package/es-modules/Series/Wordcloud/WordcloudSeries.js +1 -0
  146. package/es-modules/Series/XRange/XRangeSeries.js +4 -2
  147. package/es-modules/Stock/Indicators/SMA/SMAIndicator.js +92 -75
  148. package/es-modules/Stock/Indicators/Supertrend/SupertrendIndicator.js +20 -8
  149. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +17 -4
  150. package/es-modules/Stock/StockToolsBindings.js +77 -38
  151. package/es-modules/Stock/StockToolsGui.js +28 -3
  152. package/es-modules/masters/highcharts-3d.src.js +1 -1
  153. package/es-modules/masters/highcharts-gantt.src.js +1 -1
  154. package/es-modules/masters/highcharts-more.src.js +11 -7
  155. package/es-modules/masters/highcharts.src.js +25 -9
  156. package/es-modules/masters/highmaps.src.js +1 -1
  157. package/es-modules/masters/highstock.src.js +1 -1
  158. package/es-modules/masters/indicators/acceleration-bands.src.js +1 -1
  159. package/es-modules/masters/indicators/accumulation-distribution.src.js +1 -1
  160. package/es-modules/masters/indicators/ao.src.js +1 -1
  161. package/es-modules/masters/indicators/apo.src.js +1 -1
  162. package/es-modules/masters/indicators/aroon-oscillator.src.js +1 -1
  163. package/es-modules/masters/indicators/aroon.src.js +1 -1
  164. package/es-modules/masters/indicators/atr.src.js +1 -1
  165. package/es-modules/masters/indicators/bollinger-bands.src.js +1 -1
  166. package/es-modules/masters/indicators/cci.src.js +1 -1
  167. package/es-modules/masters/indicators/chaikin.src.js +1 -1
  168. package/es-modules/masters/indicators/cmf.src.js +1 -1
  169. package/es-modules/masters/indicators/cmo.src.js +1 -1
  170. package/es-modules/masters/indicators/dema.src.js +1 -1
  171. package/es-modules/masters/indicators/disparity-index.src.js +1 -1
  172. package/es-modules/masters/indicators/dmi.src.js +1 -1
  173. package/es-modules/masters/indicators/dpo.src.js +1 -1
  174. package/es-modules/masters/indicators/ema.src.js +1 -1
  175. package/es-modules/masters/indicators/ichimoku-kinko-hyo.src.js +1 -1
  176. package/es-modules/masters/indicators/indicators-all.src.js +1 -1
  177. package/es-modules/masters/indicators/indicators.src.js +1 -1
  178. package/es-modules/masters/indicators/keltner-channels.src.js +1 -1
  179. package/es-modules/masters/indicators/klinger.src.js +1 -1
  180. package/es-modules/masters/indicators/macd.src.js +1 -1
  181. package/es-modules/masters/indicators/mfi.src.js +1 -1
  182. package/es-modules/masters/indicators/momentum.src.js +1 -1
  183. package/es-modules/masters/indicators/natr.src.js +1 -1
  184. package/es-modules/masters/indicators/obv.src.js +1 -1
  185. package/es-modules/masters/indicators/pivot-points.src.js +1 -1
  186. package/es-modules/masters/indicators/ppo.src.js +1 -1
  187. package/es-modules/masters/indicators/price-channel.src.js +1 -1
  188. package/es-modules/masters/indicators/price-envelopes.src.js +1 -1
  189. package/es-modules/masters/indicators/psar.src.js +1 -1
  190. package/es-modules/masters/indicators/regressions.src.js +1 -1
  191. package/es-modules/masters/indicators/roc.src.js +1 -1
  192. package/es-modules/masters/indicators/rsi.src.js +1 -1
  193. package/es-modules/masters/indicators/slow-stochastic.src.js +1 -1
  194. package/es-modules/masters/indicators/stochastic.src.js +1 -1
  195. package/es-modules/masters/indicators/supertrend.src.js +1 -1
  196. package/es-modules/masters/indicators/tema.src.js +1 -1
  197. package/es-modules/masters/indicators/trendline.src.js +1 -1
  198. package/es-modules/masters/indicators/trix.src.js +1 -1
  199. package/es-modules/masters/indicators/volume-by-price.src.js +1 -1
  200. package/es-modules/masters/indicators/vwap.src.js +1 -1
  201. package/es-modules/masters/indicators/williams-r.src.js +1 -1
  202. package/es-modules/masters/indicators/wma.src.js +1 -1
  203. package/es-modules/masters/indicators/zigzag.src.js +1 -1
  204. package/es-modules/masters/modules/accessibility.src.js +1 -1
  205. package/es-modules/masters/modules/annotations-advanced.src.js +1 -1
  206. package/es-modules/masters/modules/annotations.src.js +1 -1
  207. package/es-modules/masters/modules/arrow-symbols.src.js +1 -1
  208. package/es-modules/masters/modules/boost-canvas.src.js +1 -1
  209. package/es-modules/masters/modules/boost.src.js +1 -1
  210. package/es-modules/masters/modules/broken-axis.src.js +1 -1
  211. package/es-modules/masters/modules/bullet.src.js +1 -1
  212. package/es-modules/masters/modules/coloraxis.src.js +6 -2
  213. package/es-modules/masters/modules/current-date-indicator.src.js +1 -1
  214. package/es-modules/masters/modules/cylinder.src.js +1 -1
  215. package/es-modules/masters/modules/data.src.js +8 -1
  216. package/es-modules/masters/modules/datagrouping.src.js +1 -1
  217. package/es-modules/masters/modules/debugger.src.js +1 -1
  218. package/es-modules/masters/modules/dependency-wheel.src.js +1 -1
  219. package/es-modules/masters/modules/dotplot.src.js +1 -1
  220. package/es-modules/masters/modules/drag-panes.src.js +1 -1
  221. package/es-modules/masters/modules/draggable-points.src.js +1 -1
  222. package/es-modules/masters/modules/drilldown.src.js +1 -1
  223. package/es-modules/masters/modules/dumbbell.src.js +1 -1
  224. package/es-modules/masters/modules/export-data.src.js +1 -1
  225. package/es-modules/masters/modules/exporting.src.js +10 -2
  226. package/es-modules/masters/modules/full-screen.src.js +1 -1
  227. package/es-modules/masters/modules/funnel.src.js +1 -1
  228. package/es-modules/masters/modules/funnel3d.src.js +1 -1
  229. package/es-modules/masters/modules/gantt.src.js +9 -4
  230. package/es-modules/masters/modules/grid-axis.src.js +1 -1
  231. package/es-modules/masters/modules/heatmap.src.js +6 -2
  232. package/es-modules/masters/modules/heikinashi.src.js +14 -0
  233. package/es-modules/masters/modules/histogram-bellcurve.src.js +1 -1
  234. package/es-modules/masters/modules/hollowcandlestick.src.js +14 -0
  235. package/es-modules/masters/modules/item-series.src.js +1 -1
  236. package/es-modules/masters/modules/lollipop.src.js +1 -1
  237. package/es-modules/masters/modules/map.src.js +10 -6
  238. package/es-modules/masters/modules/marker-clusters.src.js +1 -1
  239. package/es-modules/masters/modules/networkgraph.src.js +1 -1
  240. package/es-modules/masters/modules/no-data-to-display.src.js +1 -1
  241. package/es-modules/masters/modules/offline-exporting.src.js +8 -2
  242. package/es-modules/masters/modules/oldie-polyfills.src.js +1 -1
  243. package/es-modules/masters/modules/oldie.src.js +1 -1
  244. package/es-modules/masters/modules/organization.src.js +1 -1
  245. package/es-modules/masters/modules/overlapping-datalabels.src.js +1 -1
  246. package/es-modules/masters/modules/parallel-coordinates.src.js +1 -1
  247. package/es-modules/masters/modules/pareto.src.js +1 -1
  248. package/es-modules/masters/modules/pathfinder.src.js +1 -1
  249. package/es-modules/masters/modules/pattern-fill.src.js +1 -1
  250. package/es-modules/masters/modules/price-indicator.src.js +1 -1
  251. package/es-modules/masters/modules/pyramid3d.src.js +1 -1
  252. package/es-modules/masters/modules/sankey.src.js +1 -1
  253. package/es-modules/masters/modules/series-label.src.js +1 -1
  254. package/es-modules/masters/modules/solid-gauge.src.js +1 -1
  255. package/es-modules/masters/modules/sonification.src.js +1 -1
  256. package/es-modules/masters/modules/static-scale.src.js +1 -1
  257. package/es-modules/masters/modules/stock-tools.src.js +1 -1
  258. package/es-modules/masters/modules/stock.src.js +3 -2
  259. package/es-modules/masters/modules/streamgraph.src.js +1 -1
  260. package/es-modules/masters/modules/sunburst.src.js +1 -1
  261. package/es-modules/masters/modules/tilemap.src.js +1 -1
  262. package/es-modules/masters/modules/timeline.src.js +1 -1
  263. package/es-modules/masters/modules/treegrid.src.js +1 -1
  264. package/es-modules/masters/modules/treemap.src.js +1 -1
  265. package/es-modules/masters/modules/variable-pie.src.js +1 -1
  266. package/es-modules/masters/modules/variwide.src.js +1 -1
  267. package/es-modules/masters/modules/vector.src.js +1 -1
  268. package/es-modules/masters/modules/venn.src.js +1 -1
  269. package/es-modules/masters/modules/windbarb.src.js +1 -1
  270. package/es-modules/masters/modules/wordcloud.src.js +1 -1
  271. package/es-modules/masters/modules/xrange.src.js +1 -1
  272. package/es-modules/masters/themes/avocado.src.js +5 -2
  273. package/es-modules/masters/themes/dark-blue.src.js +5 -2
  274. package/es-modules/masters/themes/dark-green.src.js +5 -2
  275. package/es-modules/masters/themes/dark-unica.src.js +5 -2
  276. package/es-modules/masters/themes/gray.src.js +5 -2
  277. package/es-modules/masters/themes/grid-light.src.js +5 -2
  278. package/es-modules/masters/themes/grid.src.js +5 -2
  279. package/es-modules/masters/themes/high-contrast-dark.src.js +5 -2
  280. package/es-modules/masters/themes/high-contrast-light.src.js +5 -2
  281. package/es-modules/masters/themes/sand-signika.src.js +5 -2
  282. package/es-modules/masters/themes/skies.src.js +5 -2
  283. package/es-modules/masters/themes/sunset.src.js +5 -2
  284. package/gfx/stock-icons/annotations-hidden.svg +1 -1
  285. package/gfx/stock-icons/annotations-visible.svg +2 -2
  286. package/gfx/stock-icons/arrow-bottom.svg +1 -1
  287. package/gfx/stock-icons/arrow-left.svg +1 -1
  288. package/gfx/stock-icons/arrow-line.svg +1 -1
  289. package/gfx/stock-icons/arrow-ray.svg +1 -1
  290. package/gfx/stock-icons/arrow-right.svg +1 -1
  291. package/gfx/stock-icons/arrow-segment.svg +1 -2
  292. package/gfx/stock-icons/circle.svg +1 -1
  293. package/gfx/stock-icons/close.svg +2 -2
  294. package/gfx/stock-icons/crooked-3.svg +1 -1
  295. package/gfx/stock-icons/crooked-5.svg +1 -1
  296. package/gfx/stock-icons/current-price-hide.svg +3 -3
  297. package/gfx/stock-icons/current-price-show.svg +2 -2
  298. package/gfx/stock-icons/destroy.svg +1 -1
  299. package/gfx/stock-icons/drawing.svg +18 -0
  300. package/gfx/stock-icons/edit.svg +1 -1
  301. package/gfx/stock-icons/elliott-3.svg +1 -1
  302. package/gfx/stock-icons/elliott-5.svg +1 -1
  303. package/gfx/stock-icons/ellipse.svg +11 -0
  304. package/gfx/stock-icons/fibonacci-timezone.svg +16 -0
  305. package/gfx/stock-icons/fibonacci.svg +1 -1
  306. package/gfx/stock-icons/flag-basic.svg +1 -1
  307. package/gfx/stock-icons/flag-diamond.svg +2 -2
  308. package/gfx/stock-icons/flag-elipse.svg +1 -1
  309. package/gfx/stock-icons/flag-trapeze.svg +2 -2
  310. package/gfx/stock-icons/fullscreen.svg +4 -4
  311. package/gfx/stock-icons/horizontal-line.svg +1 -1
  312. package/gfx/stock-icons/indicators.svg +3 -3
  313. package/gfx/stock-icons/label.svg +4 -4
  314. package/gfx/stock-icons/line.svg +1 -1
  315. package/gfx/stock-icons/linear.svg +11 -0
  316. package/gfx/stock-icons/logarithmic.svg +1 -0
  317. package/gfx/stock-icons/measure-x.svg +2 -2
  318. package/gfx/stock-icons/measure-xy.svg +1 -1
  319. package/gfx/stock-icons/measure-y.svg +1 -1
  320. package/gfx/stock-icons/panning.svg +17 -0
  321. package/gfx/stock-icons/parallel-channel.svg +1 -1
  322. package/gfx/stock-icons/pitchfork.svg +1 -1
  323. package/gfx/stock-icons/ray.svg +1 -1
  324. package/gfx/stock-icons/rectangle.svg +1 -1
  325. package/gfx/stock-icons/remove-annotations.svg +2 -2
  326. package/gfx/stock-icons/save-chart.svg +3 -3
  327. package/gfx/stock-icons/segment.svg +1 -1
  328. package/gfx/stock-icons/separator.svg +1 -1
  329. package/gfx/stock-icons/series-candlestick.svg +1 -1
  330. package/gfx/stock-icons/series-heikin-ashi.svg +1 -0
  331. package/gfx/stock-icons/series-hlc.svg +1 -0
  332. package/gfx/stock-icons/series-hollow-candlestick.svg +1 -0
  333. package/gfx/stock-icons/series-line.svg +1 -1
  334. package/gfx/stock-icons/series-ohlc.svg +4 -4
  335. package/gfx/stock-icons/time-cycles.svg +35 -0
  336. package/gfx/stock-icons/vertical-arrow.svg +1 -1
  337. package/gfx/stock-icons/vertical-counter.svg +1 -1
  338. package/gfx/stock-icons/vertical-double-arrow.svg +1 -1
  339. package/gfx/stock-icons/vertical-label.svg +3 -3
  340. package/gfx/stock-icons/vertical-line.svg +1 -1
  341. package/gfx/stock-icons/zoom-x.svg +2 -2
  342. package/gfx/stock-icons/zoom-xy.svg +2 -2
  343. package/gfx/stock-icons/zoom-y.svg +2 -2
  344. package/highcharts-3d.js +24 -24
  345. package/highcharts-3d.js.map +1 -1
  346. package/highcharts-3d.src.js +6 -3
  347. package/highcharts-gantt.js +800 -792
  348. package/highcharts-gantt.js.map +1 -1
  349. package/highcharts-gantt.src.js +16535 -15918
  350. package/highcharts-more.d.ts +73 -1
  351. package/highcharts-more.js +193 -192
  352. package/highcharts-more.js.map +1 -1
  353. package/highcharts-more.src.d.ts +73 -1
  354. package/highcharts-more.src.js +8044 -7839
  355. package/highcharts.d.ts +3850 -177
  356. package/highcharts.js +589 -581
  357. package/highcharts.js.map +1 -1
  358. package/highcharts.src.d.ts +3850 -177
  359. package/highcharts.src.js +16635 -16060
  360. package/highmaps.js +708 -698
  361. package/highmaps.js.map +1 -1
  362. package/highmaps.src.js +17419 -16521
  363. package/highstock.js +782 -769
  364. package/highstock.js.map +1 -1
  365. package/highstock.src.js +28867 -27975
  366. package/indicators/acceleration-bands.js +9 -9
  367. package/indicators/acceleration-bands.js.map +1 -1
  368. package/indicators/acceleration-bands.src.js +7 -1
  369. package/indicators/accumulation-distribution.js +1 -1
  370. package/indicators/accumulation-distribution.src.js +1 -1
  371. package/indicators/ao.js +1 -1
  372. package/indicators/ao.src.js +1 -1
  373. package/indicators/apo.js +1 -1
  374. package/indicators/apo.src.js +1 -1
  375. package/indicators/aroon-oscillator.js +9 -9
  376. package/indicators/aroon-oscillator.js.map +1 -1
  377. package/indicators/aroon-oscillator.src.js +7 -1
  378. package/indicators/aroon.js +9 -9
  379. package/indicators/aroon.js.map +1 -1
  380. package/indicators/aroon.src.js +7 -1
  381. package/indicators/atr.js +1 -1
  382. package/indicators/atr.src.js +1 -1
  383. package/indicators/bollinger-bands.js +9 -9
  384. package/indicators/bollinger-bands.js.map +1 -1
  385. package/indicators/bollinger-bands.src.js +7 -1
  386. package/indicators/cci.js +1 -1
  387. package/indicators/cci.src.js +1 -1
  388. package/indicators/chaikin.js +1 -1
  389. package/indicators/chaikin.src.js +1 -1
  390. package/indicators/cmf.js +1 -1
  391. package/indicators/cmf.src.js +1 -1
  392. package/indicators/cmo.js +1 -1
  393. package/indicators/cmo.src.js +1 -1
  394. package/indicators/dema.js +1 -1
  395. package/indicators/dema.src.js +1 -1
  396. package/indicators/disparity-index.js +1 -1
  397. package/indicators/disparity-index.src.js +1 -1
  398. package/indicators/dmi.js +11 -11
  399. package/indicators/dmi.js.map +1 -1
  400. package/indicators/dmi.src.js +7 -1
  401. package/indicators/dpo.js +1 -1
  402. package/indicators/dpo.src.js +1 -1
  403. package/indicators/ema.js +1 -1
  404. package/indicators/ema.src.js +1 -1
  405. package/indicators/ichimoku-kinko-hyo.js +1 -1
  406. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  407. package/indicators/indicators-all.js +203 -200
  408. package/indicators/indicators-all.js.map +1 -1
  409. package/indicators/indicators-all.src.js +206 -104
  410. package/indicators/indicators.js +12 -11
  411. package/indicators/indicators.js.map +1 -1
  412. package/indicators/indicators.src.js +108 -90
  413. package/indicators/keltner-channels.js +9 -9
  414. package/indicators/keltner-channels.js.map +1 -1
  415. package/indicators/keltner-channels.src.js +7 -1
  416. package/indicators/klinger.js +13 -13
  417. package/indicators/klinger.js.map +1 -1
  418. package/indicators/klinger.src.js +7 -1
  419. package/indicators/macd.js +1 -1
  420. package/indicators/macd.src.js +1 -1
  421. package/indicators/mfi.js +1 -1
  422. package/indicators/mfi.src.js +1 -1
  423. package/indicators/momentum.js +1 -1
  424. package/indicators/momentum.src.js +1 -1
  425. package/indicators/natr.js +1 -1
  426. package/indicators/natr.src.js +1 -1
  427. package/indicators/obv.js +1 -1
  428. package/indicators/obv.src.js +1 -1
  429. package/indicators/pivot-points.js +1 -1
  430. package/indicators/pivot-points.src.js +1 -1
  431. package/indicators/ppo.js +1 -1
  432. package/indicators/ppo.src.js +1 -1
  433. package/indicators/price-channel.js +9 -9
  434. package/indicators/price-channel.js.map +1 -1
  435. package/indicators/price-channel.src.js +7 -1
  436. package/indicators/price-envelopes.js +1 -1
  437. package/indicators/price-envelopes.src.js +1 -1
  438. package/indicators/psar.js +1 -1
  439. package/indicators/psar.src.js +1 -1
  440. package/indicators/regressions.js +1 -1
  441. package/indicators/regressions.src.js +1 -1
  442. package/indicators/roc.js +1 -1
  443. package/indicators/roc.src.js +1 -1
  444. package/indicators/rsi.js +1 -1
  445. package/indicators/rsi.src.js +1 -1
  446. package/indicators/slow-stochastic.js +1 -1
  447. package/indicators/slow-stochastic.src.js +1 -1
  448. package/indicators/stochastic.js +10 -10
  449. package/indicators/stochastic.js.map +1 -1
  450. package/indicators/stochastic.src.js +7 -1
  451. package/indicators/supertrend.js +10 -10
  452. package/indicators/supertrend.js.map +1 -1
  453. package/indicators/supertrend.src.js +23 -10
  454. package/indicators/tema.js +1 -1
  455. package/indicators/tema.src.js +1 -1
  456. package/indicators/trendline.js +1 -1
  457. package/indicators/trendline.src.js +1 -1
  458. package/indicators/trix.js +1 -1
  459. package/indicators/trix.src.js +1 -1
  460. package/indicators/volume-by-price.js +17 -15
  461. package/indicators/volume-by-price.js.map +1 -1
  462. package/indicators/volume-by-price.src.js +71 -6
  463. package/indicators/vwap.js +1 -1
  464. package/indicators/vwap.src.js +1 -1
  465. package/indicators/williams-r.js +1 -1
  466. package/indicators/williams-r.src.js +1 -1
  467. package/indicators/wma.js +1 -1
  468. package/indicators/wma.src.js +1 -1
  469. package/indicators/zigzag.js +1 -1
  470. package/indicators/zigzag.src.js +1 -1
  471. package/modules/accessibility.js +203 -202
  472. package/modules/accessibility.js.map +1 -1
  473. package/modules/accessibility.src.js +89 -49
  474. package/modules/annotations-advanced.js +164 -163
  475. package/modules/annotations-advanced.js.map +1 -1
  476. package/modules/annotations-advanced.src.js +162 -87
  477. package/modules/annotations.js +111 -111
  478. package/modules/annotations.js.map +1 -1
  479. package/modules/annotations.src.js +162 -87
  480. package/modules/arrow-symbols.js +1 -1
  481. package/modules/arrow-symbols.src.js +1 -1
  482. package/modules/boost-canvas.js +2 -2
  483. package/modules/boost-canvas.js.map +1 -1
  484. package/modules/boost-canvas.src.js +2 -2
  485. package/modules/boost.js +52 -52
  486. package/modules/boost.js.map +1 -1
  487. package/modules/boost.src.js +15 -7
  488. package/modules/broken-axis.js +13 -13
  489. package/modules/broken-axis.js.map +1 -1
  490. package/modules/broken-axis.src.js +34 -15
  491. package/modules/bullet.js +1 -1
  492. package/modules/bullet.src.js +1 -1
  493. package/modules/coloraxis.js +24 -22
  494. package/modules/coloraxis.js.map +1 -1
  495. package/modules/coloraxis.src.js +954 -774
  496. package/modules/current-date-indicator.js +2 -2
  497. package/modules/current-date-indicator.js.map +1 -1
  498. package/modules/current-date-indicator.src.js +2 -2
  499. package/modules/cylinder.js +1 -1
  500. package/modules/cylinder.src.js +1 -1
  501. package/modules/data.js +33 -32
  502. package/modules/data.js.map +1 -1
  503. package/modules/data.src.js +182 -134
  504. package/modules/datagrouping.d.ts +5 -0
  505. package/modules/datagrouping.js +20 -20
  506. package/modules/datagrouping.js.map +1 -1
  507. package/modules/datagrouping.src.d.ts +5 -0
  508. package/modules/datagrouping.src.js +270 -228
  509. package/modules/debugger.js +3 -3
  510. package/modules/debugger.js.map +1 -1
  511. package/modules/debugger.src.js +3 -3
  512. package/modules/dependency-wheel.js +1 -1
  513. package/modules/dependency-wheel.src.js +1 -1
  514. package/modules/dotplot.js +1 -1
  515. package/modules/dotplot.src.js +1 -1
  516. package/modules/drag-panes.js +1 -1
  517. package/modules/drag-panes.src.js +1 -1
  518. package/modules/draggable-points.js +34 -34
  519. package/modules/draggable-points.js.map +1 -1
  520. package/modules/draggable-points.src.js +14 -5
  521. package/modules/drilldown.d.ts +27 -0
  522. package/modules/drilldown.js +18 -18
  523. package/modules/drilldown.js.map +1 -1
  524. package/modules/drilldown.src.d.ts +27 -0
  525. package/modules/drilldown.src.js +42 -16
  526. package/modules/dumbbell.js +1 -1
  527. package/modules/dumbbell.src.js +1 -1
  528. package/modules/export-data.js +20 -20
  529. package/modules/export-data.js.map +1 -1
  530. package/modules/export-data.src.js +8 -5
  531. package/modules/exporting.d.ts +29 -0
  532. package/modules/exporting.js +38 -35
  533. package/modules/exporting.js.map +1 -1
  534. package/modules/exporting.src.d.ts +29 -0
  535. package/modules/exporting.src.js +1937 -1614
  536. package/modules/full-screen.js +2 -2
  537. package/modules/full-screen.js.map +1 -1
  538. package/modules/full-screen.src.js +8 -6
  539. package/modules/funnel.js +1 -1
  540. package/modules/funnel.src.js +1 -1
  541. package/modules/funnel3d.js +1 -1
  542. package/modules/funnel3d.src.js +1 -1
  543. package/modules/gantt.js +218 -217
  544. package/modules/gantt.js.map +1 -1
  545. package/modules/gantt.src.js +74 -32
  546. package/modules/grid-axis.js +23 -22
  547. package/modules/grid-axis.js.map +1 -1
  548. package/modules/grid-axis.src.js +9 -4
  549. package/modules/heatmap.js +39 -37
  550. package/modules/heatmap.js.map +1 -1
  551. package/modules/heatmap.src.js +963 -779
  552. package/modules/heikinashi.js +17 -0
  553. package/modules/heikinashi.js.map +1 -0
  554. package/modules/heikinashi.src.js +394 -0
  555. package/modules/histogram-bellcurve.js +1 -1
  556. package/modules/histogram-bellcurve.src.js +1 -1
  557. package/modules/hollowcandlestick.js +18 -0
  558. package/modules/hollowcandlestick.js.map +1 -0
  559. package/modules/hollowcandlestick.src.js +504 -0
  560. package/modules/item-series.js +1 -1
  561. package/modules/item-series.src.js +1 -1
  562. package/modules/lollipop.js +1 -1
  563. package/modules/lollipop.src.js +1 -1
  564. package/modules/map.d.ts +9 -0
  565. package/modules/map.js +122 -119
  566. package/modules/map.js.map +1 -1
  567. package/modules/map.src.d.ts +9 -0
  568. package/modules/map.src.js +1655 -1332
  569. package/modules/marker-clusters.js +1 -1
  570. package/modules/marker-clusters.src.js +1 -1
  571. package/modules/networkgraph.js +1 -1
  572. package/modules/networkgraph.src.js +1 -1
  573. package/modules/no-data-to-display.js +3 -3
  574. package/modules/no-data-to-display.js.map +1 -1
  575. package/modules/no-data-to-display.src.js +2 -2
  576. package/modules/offline-exporting.js +18 -16
  577. package/modules/offline-exporting.js.map +1 -1
  578. package/modules/offline-exporting.src.js +623 -562
  579. package/modules/oldie-polyfills.js +1 -1
  580. package/modules/oldie-polyfills.src.js +1 -1
  581. package/modules/oldie.js +2 -2
  582. package/modules/oldie.src.js +2 -2
  583. package/modules/organization.js +1 -1
  584. package/modules/organization.src.js +1 -1
  585. package/modules/overlapping-datalabels.js +1 -1
  586. package/modules/overlapping-datalabels.src.js +1 -1
  587. package/modules/parallel-coordinates.js +1 -1
  588. package/modules/parallel-coordinates.src.js +1 -1
  589. package/modules/pareto.js +1 -1
  590. package/modules/pareto.src.js +1 -1
  591. package/modules/pathfinder.js +1 -1
  592. package/modules/pathfinder.src.js +1 -1
  593. package/modules/pattern-fill.js +14 -14
  594. package/modules/pattern-fill.js.map +1 -1
  595. package/modules/pattern-fill.src.js +24 -12
  596. package/modules/price-indicator.js +1 -1
  597. package/modules/price-indicator.src.js +1 -1
  598. package/modules/pyramid3d.js +1 -1
  599. package/modules/pyramid3d.src.js +1 -1
  600. package/modules/sankey.js +28 -28
  601. package/modules/sankey.js.map +1 -1
  602. package/modules/sankey.src.js +11 -11
  603. package/modules/series-label.js +1 -1
  604. package/modules/series-label.src.js +1 -1
  605. package/modules/solid-gauge.js +2 -2
  606. package/modules/solid-gauge.js.map +1 -1
  607. package/modules/solid-gauge.src.js +3 -3
  608. package/modules/sonification.js +1 -1
  609. package/modules/sonification.src.js +1 -1
  610. package/modules/static-scale.js +1 -1
  611. package/modules/static-scale.src.js +1 -1
  612. package/modules/stock-tools.js +159 -157
  613. package/modules/stock-tools.js.map +1 -1
  614. package/modules/stock-tools.src.js +253 -123
  615. package/modules/stock.d.ts +5 -0
  616. package/modules/stock.js +196 -191
  617. package/modules/stock.js.map +1 -1
  618. package/modules/stock.src.d.ts +5 -0
  619. package/modules/stock.src.js +7749 -7432
  620. package/modules/streamgraph.js +1 -1
  621. package/modules/streamgraph.src.js +1 -1
  622. package/modules/sunburst.js +5 -5
  623. package/modules/sunburst.js.map +1 -1
  624. package/modules/sunburst.src.js +6 -19
  625. package/modules/tilemap.js +1 -1
  626. package/modules/tilemap.src.js +1 -1
  627. package/modules/timeline.js +18 -17
  628. package/modules/timeline.js.map +1 -1
  629. package/modules/timeline.src.js +21 -24
  630. package/modules/treegrid.js +57 -57
  631. package/modules/treegrid.js.map +1 -1
  632. package/modules/treegrid.src.js +43 -19
  633. package/modules/treemap.js +5 -5
  634. package/modules/treemap.js.map +1 -1
  635. package/modules/treemap.src.js +5 -5
  636. package/modules/variable-pie.js +1 -1
  637. package/modules/variable-pie.src.js +1 -1
  638. package/modules/variwide.js +1 -1
  639. package/modules/variwide.src.js +1 -1
  640. package/modules/vector.js +1 -1
  641. package/modules/vector.src.js +1 -1
  642. package/modules/venn.js +31 -30
  643. package/modules/venn.js.map +1 -1
  644. package/modules/venn.src.js +508 -424
  645. package/modules/windbarb.js +1 -1
  646. package/modules/windbarb.src.js +1 -1
  647. package/modules/wordcloud.js +4 -4
  648. package/modules/wordcloud.js.map +1 -1
  649. package/modules/wordcloud.src.js +2 -1
  650. package/modules/xrange.js +17 -17
  651. package/modules/xrange.js.map +1 -1
  652. package/modules/xrange.src.js +7 -4
  653. package/package.json +1 -1
  654. package/themes/avocado.d.ts +6 -1
  655. package/themes/avocado.js +3 -3
  656. package/themes/avocado.js.map +1 -1
  657. package/themes/avocado.src.d.ts +6 -1
  658. package/themes/avocado.src.js +53 -22
  659. package/themes/dark-blue.d.ts +6 -1
  660. package/themes/dark-blue.js +3 -3
  661. package/themes/dark-blue.js.map +1 -1
  662. package/themes/dark-blue.src.d.ts +6 -1
  663. package/themes/dark-blue.src.js +231 -205
  664. package/themes/dark-green.d.ts +6 -1
  665. package/themes/dark-green.js +4 -4
  666. package/themes/dark-green.js.map +1 -1
  667. package/themes/dark-green.src.d.ts +6 -1
  668. package/themes/dark-green.src.js +236 -205
  669. package/themes/dark-unica.d.ts +6 -1
  670. package/themes/dark-unica.js +7 -7
  671. package/themes/dark-unica.js.map +1 -1
  672. package/themes/dark-unica.src.d.ts +6 -1
  673. package/themes/dark-unica.src.js +206 -174
  674. package/themes/gray.d.ts +6 -1
  675. package/themes/gray.js +3 -3
  676. package/themes/gray.js.map +1 -1
  677. package/themes/gray.src.d.ts +6 -1
  678. package/themes/gray.src.js +233 -207
  679. package/themes/grid-light.d.ts +6 -1
  680. package/themes/grid-light.js +4 -4
  681. package/themes/grid-light.js.map +1 -1
  682. package/themes/grid-light.src.d.ts +6 -1
  683. package/themes/grid-light.src.js +88 -57
  684. package/themes/grid.d.ts +6 -1
  685. package/themes/grid.js +3 -3
  686. package/themes/grid.js.map +1 -1
  687. package/themes/grid.src.d.ts +6 -1
  688. package/themes/grid.src.js +114 -83
  689. package/themes/high-contrast-dark.js +5 -4
  690. package/themes/high-contrast-dark.js.map +1 -1
  691. package/themes/high-contrast-dark.src.js +197 -166
  692. package/themes/high-contrast-light.js +3 -3
  693. package/themes/high-contrast-light.js.map +1 -1
  694. package/themes/high-contrast-light.src.js +54 -23
  695. package/themes/sand-signika.d.ts +6 -1
  696. package/themes/sand-signika.js +5 -5
  697. package/themes/sand-signika.js.map +1 -1
  698. package/themes/sand-signika.src.d.ts +6 -1
  699. package/themes/sand-signika.src.js +119 -88
  700. package/themes/skies.d.ts +6 -1
  701. package/themes/skies.js +5 -5
  702. package/themes/skies.js.map +1 -1
  703. package/themes/skies.src.d.ts +6 -1
  704. package/themes/skies.src.js +107 -76
  705. package/themes/sunset.d.ts +6 -1
  706. package/themes/sunset.js +3 -3
  707. package/themes/sunset.js.map +1 -1
  708. package/themes/sunset.src.d.ts +6 -1
  709. package/themes/sunset.src.js +52 -21
  710. package/es-modules/Core/Axis/ColorAxis.js +0 -1164
  711. package/es-modules/Core/Axis/HiddenAxis.js +0 -46
  712. package/es-modules/Core/Axis/PlotLineOrBand.js +0 -1051
  713. package/es-modules/Core/Series/DataLabels.js +0 -1173
  714. package/es-modules/Extensions/Exporting.js +0 -2024
  715. package/es-modules/Extensions/OfflineExporting.js +0 -621
  716. package/es-modules/Mixins/Geometry.js +0 -56
  717. package/es-modules/Mixins/GeometryCircles.js +0 -320
  718. package/es-modules/Series/Bubble/BubbleLegend.js +0 -893
@@ -9,19 +9,572 @@
9
9
  * */
10
10
  'use strict';
11
11
  import Axis from './Axis.js';
12
- import Chart from '../Chart/Chart.js';
13
12
  import H from '../Globals.js';
14
13
  import Series from '../Series/Series.js';
15
14
  import U from '../Utilities.js';
16
- var addEvent = U.addEvent, css = U.css, defined = U.defined, error = U.error, pick = U.pick, timeUnits = U.timeUnits;
17
- // Has a dependency on Navigator due to the use of Axis.toFixedRange
18
- import '../Navigator.js';
15
+ var addEvent = U.addEvent, correctFloat = U.correctFloat, css = U.css, defined = U.defined, error = U.error, pick = U.pick, timeUnits = U.timeUnits;
16
+ /* *
17
+ *
18
+ * Constants
19
+ *
20
+ * */
21
+ var composedClasses = [];
22
+ /* eslint-disable valid-jsdoc */
23
+ /* *
24
+ *
25
+ * Composition
26
+ *
27
+ * */
19
28
  /**
20
29
  * Extends the axis with ordinal support.
21
30
  * @private
22
31
  */
23
32
  var OrdinalAxis;
24
33
  (function (OrdinalAxis) {
34
+ /* *
35
+ *
36
+ * Declarations
37
+ *
38
+ * */
39
+ /* *
40
+ *
41
+ * Functions
42
+ *
43
+ * */
44
+ /**
45
+ * Extends the axis with ordinal support.
46
+ *
47
+ * @private
48
+ *
49
+ * @param AxisClass
50
+ * Axis class to extend.
51
+ *
52
+ * @param ChartClass
53
+ * Chart class to use.
54
+ *
55
+ * @param SeriesClass
56
+ * Series class to use.
57
+ */
58
+ function compose(AxisClass, SeriesClass, ChartClass) {
59
+ if (composedClasses.indexOf(AxisClass) === -1) {
60
+ composedClasses.push(AxisClass);
61
+ var axisProto = AxisClass.prototype;
62
+ axisProto.getTimeTicks = getTimeTicks;
63
+ axisProto.index2val = index2val;
64
+ axisProto.lin2val = lin2val;
65
+ axisProto.val2lin = val2lin;
66
+ // Record this to prevent overwriting by broken-axis module (#5979)
67
+ axisProto.ordinal2lin = axisProto.val2lin;
68
+ addEvent(AxisClass, 'afterInit', onAxisAfterInit);
69
+ addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);
70
+ addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);
71
+ addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);
72
+ }
73
+ if (composedClasses.indexOf(ChartClass) === -1) {
74
+ composedClasses.push(ChartClass);
75
+ addEvent(ChartClass, 'pan', onChartPan);
76
+ }
77
+ if (composedClasses.indexOf(SeriesClass) === -1) {
78
+ composedClasses.push(SeriesClass);
79
+ addEvent(SeriesClass, 'updatedData', onSeriesUpdatedData);
80
+ }
81
+ /* eslint-enable no-invalid-this */
82
+ return AxisClass;
83
+ }
84
+ OrdinalAxis.compose = compose;
85
+ /**
86
+ * In an ordinal axis, there might be areas with dense consentrations of
87
+ * points, then large gaps between some. Creating equally distributed
88
+ * ticks over this entire range may lead to a huge number of ticks that
89
+ * will later be removed. So instead, break the positions up in
90
+ * segments, find the tick positions for each segment then concatenize
91
+ * them. This method is used from both data grouping logic and X axis
92
+ * tick position logic.
93
+ * @private
94
+ */
95
+ function getTimeTicks(normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) {
96
+ if (positions === void 0) { positions = []; }
97
+ if (closestDistance === void 0) { closestDistance = 0; }
98
+ var higherRanks = {}, tickPixelIntervalOption = this.options.tickPixelInterval, time = this.chart.time,
99
+ // Record all the start positions of a segment, to use when
100
+ // deciding what's a gap in the data.
101
+ segmentStarts = [];
102
+ var end, segmentPositions, hasCrossedHigherRank, info, outsideMax, start = 0, groupPositions = [], lastGroupPosition = -Number.MAX_VALUE;
103
+ // The positions are not always defined, for example for ordinal
104
+ // positions when data has regular interval (#1557, #2090)
105
+ if ((!this.options.ordinal && !this.options.breaks) ||
106
+ !positions ||
107
+ positions.length < 3 ||
108
+ typeof min === 'undefined') {
109
+ return time.getTimeTicks.apply(time, arguments);
110
+ }
111
+ // Analyze the positions array to split it into segments on gaps
112
+ // larger than 5 times the closest distance. The closest distance is
113
+ // already found at this point, so we reuse that instead of
114
+ // computing it again.
115
+ var posLength = positions.length;
116
+ for (end = 0; end < posLength; end++) {
117
+ outsideMax = end && positions[end - 1] > max;
118
+ if (positions[end] < min) { // Set the last position before min
119
+ start = end;
120
+ }
121
+ if (end === posLength - 1 ||
122
+ positions[end + 1] - positions[end] > closestDistance * 5 ||
123
+ outsideMax) {
124
+ // For each segment, calculate the tick positions from the
125
+ // getTimeTicks utility function. The interval will be the
126
+ // same regardless of how long the segment is.
127
+ if (positions[end] > lastGroupPosition) { // #1475
128
+ segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);
129
+ // Prevent duplicate groups, for example for multiple
130
+ // segments within one larger time frame (#1475)
131
+ while (segmentPositions.length &&
132
+ segmentPositions[0] <= lastGroupPosition) {
133
+ segmentPositions.shift();
134
+ }
135
+ if (segmentPositions.length) {
136
+ lastGroupPosition =
137
+ segmentPositions[segmentPositions.length - 1];
138
+ }
139
+ segmentStarts.push(groupPositions.length);
140
+ groupPositions = groupPositions.concat(segmentPositions);
141
+ }
142
+ // Set start of next segment
143
+ start = end + 1;
144
+ }
145
+ if (outsideMax) {
146
+ break;
147
+ }
148
+ }
149
+ // Get the grouping info from the last of the segments. The info is
150
+ // the same for all segments.
151
+ if (segmentPositions) {
152
+ info = segmentPositions.info;
153
+ // Optionally identify ticks with higher rank, for example
154
+ // when the ticks have crossed midnight.
155
+ if (findHigherRanks && info.unitRange <= timeUnits.hour) {
156
+ end = groupPositions.length - 1;
157
+ // Compare points two by two
158
+ for (start = 1; start < end; start++) {
159
+ if (time.dateFormat('%d', groupPositions[start]) !==
160
+ time.dateFormat('%d', groupPositions[start - 1])) {
161
+ higherRanks[groupPositions[start]] = 'day';
162
+ hasCrossedHigherRank = true;
163
+ }
164
+ }
165
+ // If the complete array has crossed midnight, we want
166
+ // to mark the first positions also as higher rank
167
+ if (hasCrossedHigherRank) {
168
+ higherRanks[groupPositions[0]] = 'day';
169
+ }
170
+ info.higherRanks = higherRanks;
171
+ }
172
+ // Save the info
173
+ info.segmentStarts = segmentStarts;
174
+ groupPositions.info = info;
175
+ }
176
+ else {
177
+ error(12, false, this.chart);
178
+ }
179
+ // Don't show ticks within a gap in the ordinal axis, where the
180
+ // space between two points is greater than a portion of the tick
181
+ // pixel interval
182
+ if (findHigherRanks && defined(tickPixelIntervalOption)) {
183
+ var length_1 = groupPositions.length, translatedArr = [], distances = [];
184
+ var itemToRemove = void 0, translated = void 0, lastTranslated = void 0, medianDistance = void 0, distance = void 0, i = length_1;
185
+ // Find median pixel distance in order to keep a reasonably even
186
+ // distance between ticks (#748)
187
+ while (i--) {
188
+ translated = this.translate(groupPositions[i]);
189
+ if (lastTranslated) {
190
+ distances[i] = lastTranslated - translated;
191
+ }
192
+ translatedArr[i] = lastTranslated = translated;
193
+ }
194
+ distances.sort();
195
+ medianDistance = distances[Math.floor(distances.length / 2)];
196
+ if (medianDistance < tickPixelIntervalOption * 0.6) {
197
+ medianDistance = null;
198
+ }
199
+ // Now loop over again and remove ticks where needed
200
+ i = groupPositions[length_1 - 1] > max ? length_1 - 1 : length_1; // #817
201
+ lastTranslated = void 0;
202
+ while (i--) {
203
+ translated = translatedArr[i];
204
+ distance = Math.abs(lastTranslated - translated);
205
+ // #4175 - when axis is reversed, the distance, is negative
206
+ // but tickPixelIntervalOption positive, so we need to
207
+ // compare the same values
208
+ // Remove ticks that are closer than 0.6 times the pixel
209
+ // interval from the one to the right, but not if it is
210
+ // close to the median distance (#748).
211
+ if (lastTranslated &&
212
+ distance < tickPixelIntervalOption * 0.8 &&
213
+ (medianDistance === null || distance < medianDistance * 0.8)) {
214
+ // Is this a higher ranked position with a normal
215
+ // position to the right?
216
+ if (higherRanks[groupPositions[i]] &&
217
+ !higherRanks[groupPositions[i + 1]]) {
218
+ // Yes: remove the lower ranked neighbour to the
219
+ // right
220
+ itemToRemove = i + 1;
221
+ lastTranslated = translated; // #709
222
+ }
223
+ else {
224
+ // No: remove this one
225
+ itemToRemove = i;
226
+ }
227
+ groupPositions.splice(itemToRemove, 1);
228
+ }
229
+ else {
230
+ lastTranslated = translated;
231
+ }
232
+ }
233
+ }
234
+ return groupPositions;
235
+ }
236
+ /**
237
+ * Get axis position of given index of the extended ordinal positions.
238
+ * Used only when panning an ordinal axis.
239
+ *
240
+ * @private
241
+ * @function Highcharts.Axis#index2val
242
+ *
243
+ * @param {number} index
244
+ * The index value of searched point
245
+ *
246
+ * @return {number}
247
+ */
248
+ function index2val(index) {
249
+ var axis = this, ordinal = axis.ordinal,
250
+ // Context could be changed to extendedOrdinalPositions.
251
+ ordinalPositions = ordinal.positions;
252
+ // The visible range contains only equally spaced values.
253
+ if (!ordinalPositions) {
254
+ return index;
255
+ }
256
+ var i = ordinalPositions.length - 1, distance;
257
+ if (index < 0) { // out of range, in effect panning to the left
258
+ index = ordinalPositions[0];
259
+ }
260
+ else if (index > i) { // out of range, panning to the right
261
+ index = ordinalPositions[i];
262
+ }
263
+ else { // split it up
264
+ i = Math.floor(index);
265
+ distance = index - i; // the decimal
266
+ }
267
+ if (typeof distance !== 'undefined' &&
268
+ typeof ordinalPositions[i] !== 'undefined') {
269
+ return ordinalPositions[i] + (distance ?
270
+ distance *
271
+ (ordinalPositions[i + 1] - ordinalPositions[i]) :
272
+ 0);
273
+ }
274
+ return index;
275
+ }
276
+ /**
277
+ * Translate from linear (internal) to axis value.
278
+ *
279
+ * @private
280
+ * @function Highcharts.Axis#lin2val
281
+ *
282
+ * @param {number} val
283
+ * The linear abstracted value.
284
+ *
285
+ * @return {number}
286
+ */
287
+ function lin2val(val) {
288
+ var axis = this, ordinal = axis.ordinal, localMin = axis.old ? axis.old.min : axis.min, localA = axis.old ? axis.old.transA : axis.transA;
289
+ var positions = ordinal.positions; // for the current visible range
290
+ // The visible range contains only equally spaced values.
291
+ if (!positions) {
292
+ return val;
293
+ }
294
+ // Convert back from modivied value to pixels. // #15970
295
+ var pixelVal = (val - localMin) * localA + axis.minPixelPadding, isInside = pixelVal > 0 && pixelVal < axis.left + axis.len;
296
+ // If the value is not inside the plot area,
297
+ // use the extended positions.
298
+ // (array contains also points that are outside of the plotArea).
299
+ if (!isInside) {
300
+ // When iterating for the first time,
301
+ // get the extended ordinal positional and assign them.
302
+ if (!ordinal.extendedOrdinalPositions) {
303
+ ordinal.extendedOrdinalPositions = ordinal.getExtendedPositions();
304
+ }
305
+ positions = ordinal.extendedOrdinalPositions;
306
+ }
307
+ // In some cases (especially in early stages of the chart creation)
308
+ // the getExtendedPositions might return undefined.
309
+ if (positions && positions.length) {
310
+ var index = ordinal.getIndexOfPoint(pixelVal, positions), mantissa = correctFloat(index % 1);
311
+ // Check if the index is inside position array.
312
+ // If true, read/approximate value for that exact index.
313
+ if (index >= 0 && index < positions.length) {
314
+ var leftNeighbour = positions[Math.floor(index)], rightNeighbour = positions[Math.ceil(index)], distance = rightNeighbour - leftNeighbour;
315
+ return positions[Math.floor(index)] + mantissa * distance;
316
+ }
317
+ // For cases when the index is not in the extended ordinal
318
+ // position array, like when the value we are looking
319
+ // for exceed the available data,
320
+ // approximate that value based on the calculated slope.
321
+ var positionsLength = positions.length, firstPositionsValue = positions[0], lastPositionsValue = positions[positionsLength - 1], slope = (lastPositionsValue - firstPositionsValue) / (positionsLength - 1);
322
+ if (index < 0) {
323
+ return firstPositionsValue + slope * index;
324
+ }
325
+ return lastPositionsValue + slope * (index - positionsLength);
326
+ }
327
+ return val;
328
+ }
329
+ /**
330
+ * Internal function to calculate the precise index
331
+ * in ordinalPositions array.
332
+ * @private
333
+ */
334
+ function getIndexInArray(ordinalPositions, val) {
335
+ var index = OrdinalAxis.Additions.findIndexOf(ordinalPositions, val, true);
336
+ if (ordinalPositions[index] === val) {
337
+ return index;
338
+ }
339
+ var percent = (val - ordinalPositions[index]) /
340
+ (ordinalPositions[index + 1] - ordinalPositions[index]);
341
+ return index + percent;
342
+ }
343
+ /**
344
+ * @private
345
+ */
346
+ function onAxisAfterInit() {
347
+ var axis = this;
348
+ if (!axis.ordinal) {
349
+ axis.ordinal = new OrdinalAxis.Additions(axis);
350
+ }
351
+ }
352
+ /**
353
+ * @private
354
+ */
355
+ function onAxisFoundExtremes() {
356
+ var axis = this;
357
+ if (axis.isXAxis &&
358
+ defined(axis.options.overscroll) &&
359
+ axis.max === axis.dataMax &&
360
+ (
361
+ // Panning is an execption. We don't want to apply
362
+ // overscroll when panning over the dataMax
363
+ !axis.chart.mouseIsDown ||
364
+ axis.isInternal) && (
365
+ // Scrollbar buttons are the other execption:
366
+ !axis.eventArgs ||
367
+ axis.eventArgs && axis.eventArgs.trigger !== 'navigator')) {
368
+ axis.max += axis.options.overscroll;
369
+ // Live data and buttons require translation for the min:
370
+ if (!axis.isInternal && defined(axis.userMin)) {
371
+ axis.min += axis.options.overscroll;
372
+ }
373
+ }
374
+ }
375
+ /**
376
+ * For ordinal axis, that loads data async, redraw axis after data is
377
+ * loaded. If we don't do that, axis will have the same extremes as
378
+ * previously, but ordinal positions won't be calculated. See #10290
379
+ * @private
380
+ */
381
+ function onAxisAfterSetScale() {
382
+ var axis = this;
383
+ if (axis.horiz && !axis.isDirty) {
384
+ axis.isDirty = axis.isOrdinal &&
385
+ axis.chart.navigator &&
386
+ !axis.chart.navigator.adaptToUpdatedData;
387
+ }
388
+ }
389
+ /**
390
+ * @private
391
+ */
392
+ function onAxisInitialAxisTranslation() {
393
+ var axis = this;
394
+ if (axis.ordinal) {
395
+ axis.ordinal.beforeSetTickPositions();
396
+ axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);
397
+ }
398
+ }
399
+ /**
400
+ * @private
401
+ *
402
+ * Extending the Chart.pan method for ordinal axes
403
+ */
404
+ function onChartPan(e) {
405
+ var chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.options.overscroll, chartX = e.originalEvent.chartX, panning = chart.options.chart.panning;
406
+ var runBase = false;
407
+ if (panning &&
408
+ panning.type !== 'y' &&
409
+ xAxis.options.ordinal &&
410
+ xAxis.series.length) {
411
+ var mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||
412
+ (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), pointPixelWidth = (xAxis.translationSlope *
413
+ (xAxis.ordinal.slope || closestPointRange)),
414
+ // how many ordinal units did we move?
415
+ movedUnits = (mouseDownX - chartX) / pointPixelWidth,
416
+ // get index of all the chart's points
417
+ extendedAxis = { ordinal: { positions: xAxis.ordinal.getExtendedPositions() } }, index2val_1 = xAxis.index2val, val2lin_1 = xAxis.val2lin;
418
+ var trimmedRange = void 0, ordinalPositions = void 0, searchAxisLeft = void 0, searchAxisRight = void 0;
419
+ // we have an ordinal axis, but the data is equally spaced
420
+ if (!extendedAxis.ordinal.positions) {
421
+ runBase = true;
422
+ }
423
+ else if (Math.abs(movedUnits) > 1) {
424
+ // Remove active points for shared tooltip
425
+ if (hoverPoints) {
426
+ hoverPoints.forEach(function (point) {
427
+ point.setState();
428
+ });
429
+ }
430
+ if (movedUnits < 0) {
431
+ searchAxisLeft = extendedAxis;
432
+ searchAxisRight = xAxis.ordinal.positions ? xAxis : extendedAxis;
433
+ }
434
+ else {
435
+ searchAxisLeft = xAxis.ordinal.positions ? xAxis : extendedAxis;
436
+ searchAxisRight = extendedAxis;
437
+ }
438
+ // In grouped data series, the last ordinal position
439
+ // represents the grouped data, which is to the left of the
440
+ // real data max. If we don't compensate for this, we will
441
+ // be allowed to pan grouped data series passed the right of
442
+ // the plot area.
443
+ ordinalPositions = searchAxisRight.ordinal.positions;
444
+ if (dataMax >
445
+ ordinalPositions[ordinalPositions.length - 1]) {
446
+ ordinalPositions.push(dataMax);
447
+ }
448
+ // Get the new min and max values by getting the ordinal
449
+ // index for the current extreme, then add the moved units
450
+ // and translate back to values. This happens on the
451
+ // extended ordinal positions if the new position is out of
452
+ // range, else it happens on the current x axis which is
453
+ // smaller and faster.
454
+ chart.fixedRange = max - min;
455
+ trimmedRange = xAxis.navigatorAxis.toFixedRange(null, null, index2val_1.apply(searchAxisLeft, [
456
+ val2lin_1.apply(searchAxisLeft, [min, true]) + movedUnits
457
+ ]), index2val_1.apply(searchAxisRight, [
458
+ val2lin_1.apply(searchAxisRight, [max, true]) + movedUnits
459
+ ]));
460
+ // Apply it if it is within the available data range
461
+ if (trimmedRange.min >= Math.min(extremes.dataMin, min) &&
462
+ trimmedRange.max <= Math.max(dataMax, max) + overscroll) {
463
+ xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });
464
+ }
465
+ chart.mouseDownX = chartX; // set new reference for next run
466
+ css(chart.container, { cursor: 'move' });
467
+ }
468
+ }
469
+ else {
470
+ runBase = true;
471
+ }
472
+ // revert to the linear chart.pan version
473
+ if (runBase || (panning && /y/.test(panning.type))) {
474
+ if (overscroll) {
475
+ xAxis.max = xAxis.dataMax + overscroll;
476
+ }
477
+ }
478
+ else {
479
+ e.preventDefault();
480
+ }
481
+ }
482
+ /**
483
+ * @private
484
+ */
485
+ function onSeriesUpdatedData() {
486
+ var xAxis = this.xAxis;
487
+ // Destroy the extended ordinal index on updated data
488
+ // and destroy extendedOrdinalPositions, #16055.
489
+ if (xAxis && xAxis.options.ordinal) {
490
+ delete xAxis.ordinal.index;
491
+ delete xAxis.ordinal.extendedOrdinalPositions;
492
+ }
493
+ }
494
+ /**
495
+ * Translate from a linear axis value to the corresponding ordinal axis
496
+ * position. If there are no gaps in the ordinal axis this will be the
497
+ * same. The translated value is the value that the point would have if
498
+ * the axis was linear, using the same min and max.
499
+ *
500
+ * @private
501
+ * @function Highcharts.Axis#val2lin
502
+ *
503
+ * @param {number} val
504
+ * The axis value.
505
+ *
506
+ * @param {boolean} [toIndex]
507
+ * Whether to return the index in the ordinalPositions or the new value.
508
+ *
509
+ * @return {number}
510
+ */
511
+ function val2lin(val, toIndex) {
512
+ var axis = this, ordinal = axis.ordinal, ordinalPositions = ordinal.positions;
513
+ var slope = ordinal.slope, extendedOrdinalPositions = ordinal.extendedOrdinalPositions;
514
+ if (!ordinalPositions) {
515
+ return val;
516
+ }
517
+ var ordinalLength = ordinalPositions.length;
518
+ var ordinalIndex;
519
+ // If the searched value is inside visible plotArea, ivastigate the
520
+ // value basing on ordinalPositions.
521
+ if (ordinalPositions[0] <= val &&
522
+ ordinalPositions[ordinalLength - 1] >= val) {
523
+ ordinalIndex = getIndexInArray(ordinalPositions, val);
524
+ // final return value is based on ordinalIndex
525
+ }
526
+ else {
527
+ if (!extendedOrdinalPositions) {
528
+ extendedOrdinalPositions =
529
+ ordinal.getExtendedPositions &&
530
+ ordinal.getExtendedPositions();
531
+ ordinal.extendedOrdinalPositions = extendedOrdinalPositions;
532
+ }
533
+ if (!(extendedOrdinalPositions && extendedOrdinalPositions.length)) {
534
+ return val;
535
+ }
536
+ var length_2 = extendedOrdinalPositions.length;
537
+ if (!slope) {
538
+ slope =
539
+ (extendedOrdinalPositions[length_2 - 1] -
540
+ extendedOrdinalPositions[0]) /
541
+ length_2;
542
+ }
543
+ // OriginalPointReference is equal to the index of
544
+ // first point of ordinalPositions in extendedOrdinalPositions.
545
+ var originalPositionsReference = getIndexInArray(extendedOrdinalPositions, ordinalPositions[0]);
546
+ // If the searched value is outside the visiblePlotArea,
547
+ // check if it is inside extendedOrdinalPositions.
548
+ if (val >= extendedOrdinalPositions[0] &&
549
+ val <=
550
+ extendedOrdinalPositions[length_2 - 1]) {
551
+ // Return Value
552
+ ordinalIndex = getIndexInArray(extendedOrdinalPositions, val) - originalPositionsReference;
553
+ }
554
+ else {
555
+ // Since ordinal.slope is the average distance between 2
556
+ // points on visible plotArea, this can be used to calculete
557
+ // the approximate position of the point, which is outside
558
+ // the extededOrdinalPositions.
559
+ if (val < extendedOrdinalPositions[0]) {
560
+ var diff = extendedOrdinalPositions[0] - val, approximateIndexOffset = diff / slope;
561
+ ordinalIndex =
562
+ -originalPositionsReference -
563
+ approximateIndexOffset;
564
+ }
565
+ else {
566
+ var diff = val -
567
+ extendedOrdinalPositions[length_2 - 1], approximateIndexOffset = diff / slope;
568
+ ordinalIndex =
569
+ approximateIndexOffset +
570
+ length_2 -
571
+ originalPositionsReference;
572
+ }
573
+ }
574
+ }
575
+ return toIndex ? ordinalIndex : slope * (ordinalIndex || 0) +
576
+ ordinal.offset;
577
+ }
25
578
  /* *
26
579
  *
27
580
  * Classes
@@ -30,7 +583,7 @@ var OrdinalAxis;
30
583
  /**
31
584
  * @private
32
585
  */
33
- var Composition = /** @class */ (function () {
586
+ var Additions = /** @class */ (function () {
34
587
  /* *
35
588
  *
36
589
  * Constructors
@@ -39,7 +592,7 @@ var OrdinalAxis;
39
592
  /**
40
593
  * @private
41
594
  */
42
- function Composition(axis) {
595
+ function Additions(axis) {
43
596
  this.index = {};
44
597
  this.axis = axis;
45
598
  }
@@ -50,11 +603,11 @@ var OrdinalAxis;
50
603
  * */
51
604
  /**
52
605
  * Calculate the ordinal positions before tick positions are calculated.
53
- *
54
606
  * @private
55
607
  */
56
- Composition.prototype.beforeSetTickPositions = function () {
57
- var axis = this.axis, ordinal = axis.ordinal, len, ordinalPositions = [], uniqueOrdinalPositions, useOrdinal = false, dist, extremes = axis.getExtremes(), min = extremes.min, max = extremes.max, minIndex, maxIndex, slope, hasBreaks = axis.isXAxis && !!axis.options.breaks, isOrdinal = axis.options.ordinal, overscrollPointsRange = Number.MAX_VALUE, ignoreHiddenSeries = axis.chart.options.chart.ignoreHiddenSeries, i, hasBoostedSeries;
608
+ Additions.prototype.beforeSetTickPositions = function () {
609
+ var axis = this.axis, ordinal = axis.ordinal, extremes = axis.getExtremes(), min = extremes.min, max = extremes.max, hasBreaks = axis.isXAxis && !!axis.options.breaks, isOrdinal = axis.options.ordinal, ignoreHiddenSeries = axis.chart.options.chart.ignoreHiddenSeries;
610
+ var len, uniqueOrdinalPositions, dist, minIndex, maxIndex, slope, i, hasBoostedSeries, ordinalPositions = [], overscrollPointsRange = Number.MAX_VALUE, useOrdinal = false;
58
611
  // Apply the ordinal logic
59
612
  if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?
60
613
  axis.series.forEach(function (series, i) {
@@ -170,6 +723,39 @@ var OrdinalAxis;
170
723
  axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926
171
724
  ordinal.groupIntervalFactor = null; // reset for next run
172
725
  };
726
+ /**
727
+ * Faster way of using the Array.indexOf method.
728
+ * Works for sorted arrays only with unique values.
729
+ *
730
+ * @param {Array} sortedArray
731
+ * The sorted array inside which we are looking for.
732
+ * @param {number} key
733
+ * The key to being found.
734
+ * @param {boolean} indirectSearch
735
+ * In case of lack of the point in the array, should return
736
+ * value be equal to -1 or the closest smaller index.
737
+ * @private
738
+ */
739
+ Additions.findIndexOf = function (sortedArray, key, indirectSearch) {
740
+ var start = 0, end = sortedArray.length - 1, middle;
741
+ while (start < end) {
742
+ middle = Math.ceil((start + end) / 2);
743
+ // Key found as the middle element.
744
+ if (sortedArray[middle] <= key) {
745
+ // Continue searching to the right.
746
+ start = middle;
747
+ }
748
+ else {
749
+ // Continue searching to the left.
750
+ end = middle - 1;
751
+ }
752
+ }
753
+ if (sortedArray[start] === key) {
754
+ return start;
755
+ }
756
+ // Key could not be found.
757
+ return !indirectSearch ? -1 : start;
758
+ };
173
759
  /**
174
760
  * Get the ordinal positions for the entire data set. This is necessary
175
761
  * in chart panning because we need to find out what points or data
@@ -177,13 +763,13 @@ var OrdinalAxis;
177
763
  * operation starts, if an index for the given grouping does not exists,
178
764
  * it is created and cached. This index is deleted on updated data, so
179
765
  * it will be regenerated the next time a panning operation starts.
180
- *
181
766
  * @private
182
767
  */
183
- Composition.prototype.getExtendedPositions = function () {
184
- var ordinal = this, axis = ordinal.axis, axisProto = axis.constructor.prototype, chart = axis.chart, grouping = axis.series[0].currentDataGrouping, ordinalIndex = ordinal.index, key = grouping ?
768
+ Additions.prototype.getExtendedPositions = function () {
769
+ var ordinal = this, axis = ordinal.axis, axisProto = axis.constructor.prototype, chart = axis.chart, grouping = axis.series[0].currentDataGrouping, key = grouping ?
185
770
  grouping.count + grouping.unitName :
186
- 'raw', overscroll = axis.options.overscroll, extremes = axis.getExtremes(), fakeAxis, fakeSeries;
771
+ 'raw', overscroll = axis.options.overscroll, extremes = axis.getExtremes();
772
+ var fakeAxis, fakeSeries = void 0, ordinalIndex = ordinal.index;
187
773
  // If this is the first time, or the ordinal index is deleted by
188
774
  // updatedData,
189
775
  // create it.
@@ -212,6 +798,7 @@ var OrdinalAxis;
212
798
  getGroupIntervalFactor: this.getGroupIntervalFactor
213
799
  },
214
800
  ordinal2lin: axisProto.ordinal2lin,
801
+ getIndexOfPoint: axisProto.getIndexOfPoint,
215
802
  val2lin: axisProto.val2lin // #2590
216
803
  };
217
804
  fakeAxis.ordinal.axis = fakeAxis;
@@ -223,11 +810,15 @@ var OrdinalAxis;
223
810
  xData: series.xData.slice(),
224
811
  chart: chart,
225
812
  destroyGroupedData: H.noop,
226
- getProcessedData: Series.prototype.getProcessedData
813
+ getProcessedData: Series.prototype.getProcessedData,
814
+ applyGrouping: Series.prototype.applyGrouping
227
815
  };
228
816
  fakeSeries.xData = fakeSeries.xData.concat(ordinal.getOverscrollPositions());
229
817
  fakeSeries.options = {
230
818
  dataGrouping: grouping ? {
819
+ firstAnchor: 'firstPoint',
820
+ anchor: 'middle',
821
+ lastAnchor: 'lastPoint',
231
822
  enabled: true,
232
823
  forced: true,
233
824
  // doesn't matter which, use the fastest
@@ -242,12 +833,15 @@ var OrdinalAxis;
242
833
  };
243
834
  fakeAxis.series.push(fakeSeries);
244
835
  series.processData.apply(fakeSeries);
245
- // Force to use the ordinal when points are evenly spaced
246
- // (e.g. weeks), #3825.
247
- if (fakeSeries.closestPointRange !== fakeSeries.basePointRange && fakeSeries.currentDataGrouping) {
248
- fakeAxis.forceOrdinal = true;
249
- }
250
836
  });
837
+ // Apply grouping if needed.
838
+ axis.applyGrouping.call(fakeAxis);
839
+ // Force to use the ordinal when points are evenly spaced
840
+ // (e.g. weeks), #3825.
841
+ if (fakeSeries.closestPointRange !== fakeSeries.basePointRange &&
842
+ fakeSeries.currentDataGrouping) {
843
+ fakeAxis.forceOrdinal = true;
844
+ }
251
845
  // Run beforeSetTickPositions to compute the ordinalPositions
252
846
  axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });
253
847
  // Cache it
@@ -276,11 +870,11 @@ var OrdinalAxis;
276
870
  * logic, where we do another run with a greater interval if the number
277
871
  * of data groups is more than a certain fraction of the desired group
278
872
  * count.
279
- *
280
873
  * @private
281
874
  */
282
- Composition.prototype.getGroupIntervalFactor = function (xMin, xMax, series) {
283
- var ordinal = this, axis = ordinal.axis, i, processedXData = series.processedXData, len = processedXData.length, distances = [], median, groupIntervalFactor = ordinal.groupIntervalFactor;
875
+ Additions.prototype.getGroupIntervalFactor = function (xMin, xMax, series) {
876
+ var ordinal = this, axis = ordinal.axis, processedXData = series.processedXData, len = processedXData.length, distances = [];
877
+ var median, i, groupIntervalFactor = ordinal.groupIntervalFactor;
284
878
  // Only do this computation for the first series, let the other
285
879
  // inherit it (#2416)
286
880
  if (!groupIntervalFactor) {
@@ -304,6 +898,45 @@ var OrdinalAxis;
304
898
  // Return the factor needed for data grouping
305
899
  return groupIntervalFactor;
306
900
  };
901
+ /**
902
+ * Get index of point inside the ordinal positions array.
903
+ *
904
+ * @private
905
+ * @param {number} val
906
+ * The pixel value of a point.
907
+ *
908
+ * @param {Array<number>} [ordinallArray]
909
+ * An array of all points available on the axis
910
+ * for the given data set.
911
+ * Either ordinalPositions if the value is inside the plotArea
912
+ * or extendedOrdinalPositions if not.
913
+ *
914
+ * @return {number}
915
+ */
916
+ Additions.prototype.getIndexOfPoint = function (val, ordinalArray) {
917
+ var ordinal = this, axis = ordinal.axis, firstPointVal = ordinal.positions ? ordinal.positions[0] : 0;
918
+ var firstPointX = axis.series[0].points &&
919
+ axis.series[0].points[0] &&
920
+ axis.series[0].points[0].plotX ||
921
+ axis.minPixelPadding; // #15987
922
+ // When more series assign to axis, find the smallest one, #15987.
923
+ if (axis.series.length > 1) {
924
+ axis.series.forEach(function (series) {
925
+ if (defined(series.points[0]) &&
926
+ defined(series.points[0].plotX) &&
927
+ series.points[0].plotX < firstPointX) {
928
+ firstPointX = series.points[0].plotX;
929
+ }
930
+ });
931
+ }
932
+ // Distance in pixels between two points
933
+ // on the ordinal axis in the current zoom.
934
+ var ordinalPointPixelInterval = axis.translationSlope *
935
+ (ordinal.slope || axis.closestPointRange || ordinal.overscrollPointsRange),
936
+ // toValue for the first point.
937
+ shiftIndex = (val - firstPointX) / ordinalPointPixelInterval;
938
+ return Additions.findIndexOf(ordinalArray, firstPointVal) + shiftIndex;
939
+ };
307
940
  /**
308
941
  * Get ticks for an ordinal axis within a range where points don't
309
942
  * exist. It is required when overscroll is enabled. We can't base on
@@ -311,14 +944,12 @@ var OrdinalAxis;
311
944
  * pointRange and generate these ticks between Axis.dataMax,
312
945
  * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and
313
946
  * navigator scrolling.
314
- *
315
947
  * @private
316
948
  */
317
- Composition.prototype.getOverscrollPositions = function () {
949
+ Additions.prototype.getOverscrollPositions = function () {
318
950
  var ordinal = this, axis = ordinal.axis, extraRange = axis.options.overscroll, distance = ordinal.overscrollPointsRange, positions = [], max = axis.dataMax;
319
951
  if (defined(distance)) {
320
952
  // Max + pointRange because we need to scroll to the last
321
- positions.push(max);
322
953
  while (max <= axis.dataMax + extraRange) {
323
954
  max += distance;
324
955
  positions.push(max);
@@ -329,17 +960,17 @@ var OrdinalAxis;
329
960
  /**
330
961
  * Make the tick intervals closer because the ordinal gaps make the
331
962
  * ticks spread out or cluster.
332
- *
333
963
  * @private
334
964
  */
335
- Composition.prototype.postProcessTickInterval = function (tickInterval) {
965
+ Additions.prototype.postProcessTickInterval = function (tickInterval) {
336
966
  // Problem: https://jsfiddle.net/highcharts/FQm4E/1/
337
967
  // This is a case where this algorithm doesn't work optimally. In
338
968
  // this case, the tick labels are spread out per week, but all the
339
969
  // gaps reside within weeks. So we have a situation where the labels
340
970
  // are courser than the ordinal gaps, and thus the tick interval
341
971
  // should not be altered.
342
- var ordinal = this, axis = ordinal.axis, ordinalSlope = ordinal.slope, ret;
972
+ var ordinal = this, axis = ordinal.axis, ordinalSlope = ordinal.slope;
973
+ var ret;
343
974
  if (ordinalSlope) {
344
975
  if (!axis.options.breaks) {
345
976
  ret = tickInterval / (ordinalSlope / axis.closestPointRange);
@@ -353,438 +984,13 @@ var OrdinalAxis;
353
984
  }
354
985
  return ret;
355
986
  };
356
- return Composition;
987
+ return Additions;
357
988
  }());
358
- OrdinalAxis.Composition = Composition;
359
- /* *
360
- *
361
- * Functions
362
- *
363
- * */
364
- /**
365
- * Extends the axis with ordinal support.
366
- *
367
- * @private
368
- *
369
- * @param AxisClass
370
- * Axis class to extend.
371
- *
372
- * @param ChartClass
373
- * Chart class to use.
374
- *
375
- * @param SeriesClass
376
- * Series class to use.
377
- */
378
- function compose(AxisClass, ChartClass, SeriesClass) {
379
- AxisClass.keepProps.push('ordinal');
380
- var axisProto = AxisClass.prototype;
381
- /**
382
- * In an ordinal axis, there might be areas with dense consentrations of
383
- * points, then large gaps between some. Creating equally distributed
384
- * ticks over this entire range may lead to a huge number of ticks that
385
- * will later be removed. So instead, break the positions up in
386
- * segments, find the tick positions for each segment then concatenize
387
- * them. This method is used from both data grouping logic and X axis
388
- * tick position logic.
389
- *
390
- * @private
391
- */
392
- AxisClass.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) {
393
- if (positions === void 0) { positions = []; }
394
- if (closestDistance === void 0) { closestDistance = 0; }
395
- var start = 0, end, segmentPositions, higherRanks = {}, hasCrossedHigherRank, info, posLength, outsideMax, groupPositions = [], lastGroupPosition = -Number.MAX_VALUE, tickPixelIntervalOption = this.options.tickPixelInterval, time = this.chart.time,
396
- // Record all the start positions of a segment, to use when
397
- // deciding what's a gap in the data.
398
- segmentStarts = [];
399
- // The positions are not always defined, for example for ordinal
400
- // positions when data has regular interval (#1557, #2090)
401
- if ((!this.options.ordinal && !this.options.breaks) ||
402
- !positions ||
403
- positions.length < 3 ||
404
- typeof min === 'undefined') {
405
- return time.getTimeTicks.apply(time, arguments);
406
- }
407
- // Analyze the positions array to split it into segments on gaps
408
- // larger than 5 times the closest distance. The closest distance is
409
- // already found at this point, so we reuse that instead of
410
- // computing it again.
411
- posLength = positions.length;
412
- for (end = 0; end < posLength; end++) {
413
- outsideMax = end && positions[end - 1] > max;
414
- if (positions[end] < min) { // Set the last position before min
415
- start = end;
416
- }
417
- if (end === posLength - 1 ||
418
- positions[end + 1] - positions[end] > closestDistance * 5 ||
419
- outsideMax) {
420
- // For each segment, calculate the tick positions from the
421
- // getTimeTicks utility function. The interval will be the
422
- // same regardless of how long the segment is.
423
- if (positions[end] > lastGroupPosition) { // #1475
424
- segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);
425
- // Prevent duplicate groups, for example for multiple
426
- // segments within one larger time frame (#1475)
427
- while (segmentPositions.length &&
428
- segmentPositions[0] <= lastGroupPosition) {
429
- segmentPositions.shift();
430
- }
431
- if (segmentPositions.length) {
432
- lastGroupPosition =
433
- segmentPositions[segmentPositions.length - 1];
434
- }
435
- segmentStarts.push(groupPositions.length);
436
- groupPositions = groupPositions.concat(segmentPositions);
437
- }
438
- // Set start of next segment
439
- start = end + 1;
440
- }
441
- if (outsideMax) {
442
- break;
443
- }
444
- }
445
- // Get the grouping info from the last of the segments. The info is
446
- // the same for all segments.
447
- if (segmentPositions) {
448
- info = segmentPositions.info;
449
- // Optionally identify ticks with higher rank, for example
450
- // when the ticks have crossed midnight.
451
- if (findHigherRanks && info.unitRange <= timeUnits.hour) {
452
- end = groupPositions.length - 1;
453
- // Compare points two by two
454
- for (start = 1; start < end; start++) {
455
- if (time.dateFormat('%d', groupPositions[start]) !==
456
- time.dateFormat('%d', groupPositions[start - 1])) {
457
- higherRanks[groupPositions[start]] = 'day';
458
- hasCrossedHigherRank = true;
459
- }
460
- }
461
- // If the complete array has crossed midnight, we want
462
- // to mark the first positions also as higher rank
463
- if (hasCrossedHigherRank) {
464
- higherRanks[groupPositions[0]] = 'day';
465
- }
466
- info.higherRanks = higherRanks;
467
- }
468
- // Save the info
469
- info.segmentStarts = segmentStarts;
470
- groupPositions.info = info;
471
- }
472
- else {
473
- error(12, false, this.chart);
474
- }
475
- // Don't show ticks within a gap in the ordinal axis, where the
476
- // space between two points is greater than a portion of the tick
477
- // pixel interval
478
- if (findHigherRanks && defined(tickPixelIntervalOption)) {
479
- var length_1 = groupPositions.length, i = length_1, itemToRemove = void 0, translated = void 0, translatedArr = [], lastTranslated = void 0, medianDistance = void 0, distance = void 0, distances = [];
480
- // Find median pixel distance in order to keep a reasonably even
481
- // distance between ticks (#748)
482
- while (i--) {
483
- translated = this.translate(groupPositions[i]);
484
- if (lastTranslated) {
485
- distances[i] = lastTranslated - translated;
486
- }
487
- translatedArr[i] = lastTranslated = translated;
488
- }
489
- distances.sort();
490
- medianDistance = distances[Math.floor(distances.length / 2)];
491
- if (medianDistance < tickPixelIntervalOption * 0.6) {
492
- medianDistance = null;
493
- }
494
- // Now loop over again and remove ticks where needed
495
- i = groupPositions[length_1 - 1] > max ? length_1 - 1 : length_1; // #817
496
- lastTranslated = void 0;
497
- while (i--) {
498
- translated = translatedArr[i];
499
- distance = Math.abs(lastTranslated - translated);
500
- // #4175 - when axis is reversed, the distance, is negative
501
- // but tickPixelIntervalOption positive, so we need to
502
- // compare the same values
503
- // Remove ticks that are closer than 0.6 times the pixel
504
- // interval from the one to the right, but not if it is
505
- // close to the median distance (#748).
506
- if (lastTranslated &&
507
- distance < tickPixelIntervalOption * 0.8 &&
508
- (medianDistance === null || distance < medianDistance * 0.8)) {
509
- // Is this a higher ranked position with a normal
510
- // position to the right?
511
- if (higherRanks[groupPositions[i]] &&
512
- !higherRanks[groupPositions[i + 1]]) {
513
- // Yes: remove the lower ranked neighbour to the
514
- // right
515
- itemToRemove = i + 1;
516
- lastTranslated = translated; // #709
517
- }
518
- else {
519
- // No: remove this one
520
- itemToRemove = i;
521
- }
522
- groupPositions.splice(itemToRemove, 1);
523
- }
524
- else {
525
- lastTranslated = translated;
526
- }
527
- }
528
- }
529
- return groupPositions;
530
- };
531
- /**
532
- * Translate from linear (internal) to axis value.
533
- *
534
- * @private
535
- * @function Highcharts.Axis#lin2val
536
- *
537
- * @param {number} val
538
- * The linear abstracted value.
539
- *
540
- * @param {boolean} [fromIndex]
541
- * Translate from an index in the ordinal positions rather than a
542
- * value.
543
- *
544
- * @return {number}
545
- */
546
- axisProto.lin2val = function (val, fromIndex) {
547
- var axis = this, ordinal = axis.ordinal, ordinalPositions = ordinal.positions, ret;
548
- // the visible range contains only equally spaced values
549
- if (!ordinalPositions) {
550
- ret = val;
551
- }
552
- else {
553
- var ordinalSlope = ordinal.slope, ordinalOffset = ordinal.offset, i = ordinalPositions.length - 1, linearEquivalentLeft = void 0, linearEquivalentRight = void 0, distance = void 0;
554
- // Handle the case where we translate from the index directly,
555
- // used only when panning an ordinal axis
556
- if (fromIndex) {
557
- if (val < 0) { // out of range, in effect panning to the left
558
- val = ordinalPositions[0];
559
- }
560
- else if (val > i) { // out of range, panning to the right
561
- val = ordinalPositions[i];
562
- }
563
- else { // split it up
564
- i = Math.floor(val);
565
- distance = val - i; // the decimal
566
- }
567
- // Loop down along the ordinal positions. When the linear
568
- // equivalent of i matches an ordinal position, interpolate
569
- // between the left and right values.
570
- }
571
- else {
572
- while (i--) {
573
- linearEquivalentLeft =
574
- (ordinalSlope * i) + ordinalOffset;
575
- if (val >= linearEquivalentLeft) {
576
- linearEquivalentRight =
577
- (ordinalSlope *
578
- (i + 1)) +
579
- ordinalOffset;
580
- // something between 0 and 1
581
- distance = (val - linearEquivalentLeft) /
582
- (linearEquivalentRight - linearEquivalentLeft);
583
- break;
584
- }
585
- }
586
- }
587
- // If the index is within the range of the ordinal positions,
588
- // return the associated or interpolated value. If not, just
589
- // return the value.
590
- return (typeof distance !== 'undefined' &&
591
- typeof ordinalPositions[i] !== 'undefined' ?
592
- ordinalPositions[i] + (distance ?
593
- distance *
594
- (ordinalPositions[i + 1] - ordinalPositions[i]) :
595
- 0) :
596
- val);
597
- }
598
- return ret;
599
- };
600
- /**
601
- * Translate from a linear axis value to the corresponding ordinal axis
602
- * position. If there are no gaps in the ordinal axis this will be the
603
- * same. The translated value is the value that the point would have if
604
- * the axis were linear, using the same min and max.
605
- *
606
- * @private
607
- * @function Highcharts.Axis#val2lin
608
- *
609
- * @param {number} val
610
- * The axis value.
611
- *
612
- * @param {boolean} [toIndex]
613
- * Whether to return the index in the ordinalPositions or the new value.
614
- *
615
- * @return {number}
616
- */
617
- axisProto.val2lin = function (val, toIndex) {
618
- var axis = this, ordinal = axis.ordinal, ordinalPositions = ordinal.positions, ret;
619
- if (!ordinalPositions) {
620
- ret = val;
621
- }
622
- else {
623
- var ordinalLength = ordinalPositions.length, i = void 0, distance = void 0, ordinalIndex = void 0;
624
- // first look for an exact match in the ordinalpositions array
625
- i = ordinalLength;
626
- while (i--) {
627
- if (ordinalPositions[i] === val) {
628
- ordinalIndex = i;
629
- break;
630
- }
631
- }
632
- // if that failed, find the intermediate position between the
633
- // two nearest values
634
- i = ordinalLength - 1;
635
- while (i--) {
636
- if (val > ordinalPositions[i] || i === 0) { // interpolate
637
- // something between 0 and 1
638
- distance = (val - ordinalPositions[i]) /
639
- (ordinalPositions[i + 1] - ordinalPositions[i]);
640
- ordinalIndex = i + distance;
641
- break;
642
- }
643
- }
644
- ret = toIndex ?
645
- ordinalIndex :
646
- ordinal.slope *
647
- (ordinalIndex || 0) +
648
- ordinal.offset;
649
- }
650
- return ret;
651
- };
652
- // Record this to prevent overwriting by broken-axis module (#5979)
653
- axisProto.ordinal2lin = axisProto.val2lin;
654
- /* eslint-disable no-invalid-this */
655
- addEvent(AxisClass, 'afterInit', function () {
656
- var axis = this;
657
- if (!axis.ordinal) {
658
- axis.ordinal = new OrdinalAxis.Composition(axis);
659
- }
660
- });
661
- addEvent(AxisClass, 'foundExtremes', function () {
662
- var axis = this;
663
- if (axis.isXAxis &&
664
- defined(axis.options.overscroll) &&
665
- axis.max === axis.dataMax &&
666
- (
667
- // Panning is an execption. We don't want to apply
668
- // overscroll when panning over the dataMax
669
- !axis.chart.mouseIsDown ||
670
- axis.isInternal) && (
671
- // Scrollbar buttons are the other execption:
672
- !axis.eventArgs ||
673
- axis.eventArgs && axis.eventArgs.trigger !== 'navigator')) {
674
- axis.max += axis.options.overscroll;
675
- // Live data and buttons require translation for the min:
676
- if (!axis.isInternal && defined(axis.userMin)) {
677
- axis.min += axis.options.overscroll;
678
- }
679
- }
680
- });
681
- // For ordinal axis, that loads data async, redraw axis after data is
682
- // loaded. If we don't do that, axis will have the same extremes as
683
- // previously, but ordinal positions won't be calculated. See #10290
684
- addEvent(AxisClass, 'afterSetScale', function () {
685
- var axis = this;
686
- if (axis.horiz && !axis.isDirty) {
687
- axis.isDirty = axis.isOrdinal &&
688
- axis.chart.navigator &&
689
- !axis.chart.navigator.adaptToUpdatedData;
690
- }
691
- });
692
- addEvent(AxisClass, 'initialAxisTranslation', function () {
693
- var axis = this;
694
- if (axis.ordinal) {
695
- axis.ordinal.beforeSetTickPositions();
696
- axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);
697
- }
698
- });
699
- // Extending the Chart.pan method for ordinal axes
700
- addEvent(ChartClass, 'pan', function (e) {
701
- var chart = this, xAxis = chart.xAxis[0], overscroll = xAxis.options.overscroll, chartX = e.originalEvent.chartX, panning = chart.options.chart.panning, runBase = false;
702
- if (panning &&
703
- panning.type !== 'y' &&
704
- xAxis.options.ordinal &&
705
- xAxis.series.length) {
706
- var mouseDownX = chart.mouseDownX, extremes = xAxis.getExtremes(), dataMax = extremes.dataMax, min = extremes.min, max = extremes.max, trimmedRange = void 0, hoverPoints = chart.hoverPoints, closestPointRange = (xAxis.closestPointRange ||
707
- (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)), pointPixelWidth = (xAxis.translationSlope *
708
- (xAxis.ordinal.slope || closestPointRange)),
709
- // how many ordinal units did we move?
710
- movedUnits = (mouseDownX - chartX) / pointPixelWidth,
711
- // get index of all the chart's points
712
- extendedAxis = { ordinal: { positions: xAxis.ordinal.getExtendedPositions() } }, ordinalPositions = void 0, searchAxisLeft = void 0, lin2val = xAxis.lin2val, val2lin = xAxis.val2lin, searchAxisRight = void 0;
713
- // we have an ordinal axis, but the data is equally spaced
714
- if (!extendedAxis.ordinal.positions) {
715
- runBase = true;
716
- }
717
- else if (Math.abs(movedUnits) > 1) {
718
- // Remove active points for shared tooltip
719
- if (hoverPoints) {
720
- hoverPoints.forEach(function (point) {
721
- point.setState();
722
- });
723
- }
724
- if (movedUnits < 0) {
725
- searchAxisLeft = extendedAxis;
726
- searchAxisRight = xAxis.ordinal.positions ? xAxis : extendedAxis;
727
- }
728
- else {
729
- searchAxisLeft = xAxis.ordinal.positions ? xAxis : extendedAxis;
730
- searchAxisRight = extendedAxis;
731
- }
732
- // In grouped data series, the last ordinal position
733
- // represents the grouped data, which is to the left of the
734
- // real data max. If we don't compensate for this, we will
735
- // be allowed to pan grouped data series passed the right of
736
- // the plot area.
737
- ordinalPositions = searchAxisRight.ordinal.positions;
738
- if (dataMax >
739
- ordinalPositions[ordinalPositions.length - 1]) {
740
- ordinalPositions.push(dataMax);
741
- }
742
- // Get the new min and max values by getting the ordinal
743
- // index for the current extreme, then add the moved units
744
- // and translate back to values. This happens on the
745
- // extended ordinal positions if the new position is out of
746
- // range, else it happens on the current x axis which is
747
- // smaller and faster.
748
- chart.fixedRange = max - min;
749
- trimmedRange = xAxis.navigatorAxis.toFixedRange(null, null, lin2val.apply(searchAxisLeft, [
750
- val2lin.apply(searchAxisLeft, [min, true]) + movedUnits,
751
- true // translate from index
752
- ]), lin2val.apply(searchAxisRight, [
753
- val2lin.apply(searchAxisRight, [max, true]) + movedUnits,
754
- true // translate from index
755
- ]));
756
- // Apply it if it is within the available data range
757
- if (trimmedRange.min >= Math.min(extremes.dataMin, min) &&
758
- trimmedRange.max <= Math.max(dataMax, max) + overscroll) {
759
- xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });
760
- }
761
- chart.mouseDownX = chartX; // set new reference for next run
762
- css(chart.container, { cursor: 'move' });
763
- }
764
- }
765
- else {
766
- runBase = true;
767
- }
768
- // revert to the linear chart.pan version
769
- if (runBase || (panning && /y/.test(panning.type))) {
770
- if (overscroll) {
771
- xAxis.max = xAxis.dataMax + overscroll;
772
- }
773
- }
774
- else {
775
- e.preventDefault();
776
- }
777
- });
778
- addEvent(SeriesClass, 'updatedData', function () {
779
- var xAxis = this.xAxis;
780
- // Destroy the extended ordinal index on updated data
781
- if (xAxis && xAxis.options.ordinal) {
782
- delete xAxis.ordinal.index;
783
- }
784
- });
785
- /* eslint-enable no-invalid-this */
786
- }
787
- OrdinalAxis.compose = compose;
989
+ OrdinalAxis.Additions = Additions;
788
990
  })(OrdinalAxis || (OrdinalAxis = {}));
789
- OrdinalAxis.compose(Axis, Chart, Series); // @todo move to StockChart, remove from master
991
+ /* *
992
+ *
993
+ * Default Export
994
+ *
995
+ * */
790
996
  export default OrdinalAxis;