highcharts 12.0.2 → 12.1.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 (331) hide show
  1. package/bower.json +1 -1
  2. package/es-modules/Accessibility/Options/A11yDefaults.js +2 -0
  3. package/es-modules/Core/Color/Color.js +5 -12
  4. package/es-modules/Core/Renderer/HTML/HTMLElement.js +1 -3
  5. package/es-modules/Core/Renderer/SVG/SVGElement.js +3 -1
  6. package/es-modules/Core/Renderer/SVG/SVGLabel.js +8 -11
  7. package/es-modules/Core/Series/DataLabel.js +3 -1
  8. package/es-modules/Core/Series/Series.js +13 -15
  9. package/es-modules/Core/Templating.js +14 -10
  10. package/es-modules/Core/Time.js +6 -3
  11. package/es-modules/Core/Utilities.js +1 -1
  12. package/es-modules/Data/Converters/CSVConverter.js +1 -0
  13. package/es-modules/Data/Converters/DataConverter.js +31 -0
  14. package/es-modules/Data/Converters/GoogleSheetsConverter.js +1 -0
  15. package/es-modules/Data/Converters/HTMLTableConverter.js +1 -0
  16. package/es-modules/Data/Converters/JSONConverter.js +1 -0
  17. package/es-modules/Extensions/Boost/BoostSeries.js +13 -7
  18. package/es-modules/Extensions/DragPanes/AxisResizer.js +1 -1
  19. package/es-modules/Extensions/SeriesLabel/SeriesLabelDefaults.js +7 -2
  20. package/es-modules/Series/Bubble/BubbleSeries.js +24 -0
  21. package/es-modules/Series/Organization/OrganizationSeriesDefaults.js +3 -1
  22. package/es-modules/Series/Timeline/TimelineSeriesDefaults.js +3 -1
  23. package/es-modules/Series/Treegraph/TreegraphSeriesDefaults.js +3 -1
  24. package/es-modules/Series/Treemap/TreemapPoint.js +7 -2
  25. package/es-modules/Series/Treemap/TreemapSeries.js +154 -53
  26. package/es-modules/Series/Treemap/TreemapSeriesDefaults.js +126 -4
  27. package/es-modules/Stock/Indicators/VBP/VBPIndicator.js +1 -0
  28. package/es-modules/Stock/RangeSelector/RangeSelector.js +68 -72
  29. package/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js +10 -4
  30. package/es-modules/masters/indicators/indicators-all.src.js +4 -0
  31. package/es-modules/tsconfig.tsbuildinfo +1 -1
  32. package/highcharts-3d.js +2 -2
  33. package/highcharts-3d.src.js +1 -1
  34. package/highcharts-gantt.js +5 -5
  35. package/highcharts-gantt.src.js +140 -141
  36. package/highcharts-more.js +2 -2
  37. package/highcharts-more.src.js +25 -1
  38. package/highcharts.d.ts +281 -762
  39. package/highcharts.js +3 -3
  40. package/highcharts.src.d.ts +281 -762
  41. package/highcharts.src.js +57 -60
  42. package/highmaps.js +5 -5
  43. package/highmaps.src.js +84 -63
  44. package/highstock.js +5 -5
  45. package/highstock.src.js +140 -141
  46. package/indicators/acceleration-bands.js +2 -2
  47. package/indicators/acceleration-bands.src.js +1 -1
  48. package/indicators/accumulation-distribution.js +2 -2
  49. package/indicators/accumulation-distribution.src.js +1 -1
  50. package/indicators/ao.js +2 -2
  51. package/indicators/ao.src.js +1 -1
  52. package/indicators/apo.js +2 -2
  53. package/indicators/apo.src.js +1 -1
  54. package/indicators/aroon-oscillator.js +2 -2
  55. package/indicators/aroon-oscillator.src.js +1 -1
  56. package/indicators/aroon.js +2 -2
  57. package/indicators/aroon.src.js +1 -1
  58. package/indicators/atr.js +2 -2
  59. package/indicators/atr.src.js +1 -1
  60. package/indicators/bollinger-bands.js +2 -2
  61. package/indicators/bollinger-bands.src.js +1 -1
  62. package/indicators/cci.js +2 -2
  63. package/indicators/cci.src.js +1 -1
  64. package/indicators/chaikin.js +2 -2
  65. package/indicators/chaikin.src.js +1 -1
  66. package/indicators/cmf.js +2 -2
  67. package/indicators/cmf.src.js +1 -1
  68. package/indicators/cmo.js +2 -2
  69. package/indicators/cmo.src.js +1 -1
  70. package/indicators/dema.js +2 -2
  71. package/indicators/dema.src.js +1 -1
  72. package/indicators/disparity-index.js +2 -2
  73. package/indicators/disparity-index.src.js +1 -1
  74. package/indicators/dmi.js +2 -2
  75. package/indicators/dmi.src.js +1 -1
  76. package/indicators/dpo.js +2 -2
  77. package/indicators/dpo.src.js +1 -1
  78. package/indicators/ema.js +1 -1
  79. package/indicators/ichimoku-kinko-hyo.js +2 -2
  80. package/indicators/ichimoku-kinko-hyo.src.js +1 -1
  81. package/indicators/indicators-all.js +2 -2
  82. package/indicators/indicators-all.src.js +6 -1
  83. package/indicators/indicators.js +2 -2
  84. package/indicators/indicators.src.js +1 -1
  85. package/indicators/keltner-channels.js +2 -2
  86. package/indicators/keltner-channels.src.js +1 -1
  87. package/indicators/klinger.js +2 -2
  88. package/indicators/klinger.src.js +1 -1
  89. package/indicators/macd.js +2 -2
  90. package/indicators/macd.src.js +1 -1
  91. package/indicators/mfi.js +2 -2
  92. package/indicators/mfi.src.js +1 -1
  93. package/indicators/momentum.js +2 -2
  94. package/indicators/momentum.src.js +1 -1
  95. package/indicators/natr.js +2 -2
  96. package/indicators/natr.src.js +1 -1
  97. package/indicators/obv.js +2 -2
  98. package/indicators/obv.src.js +1 -1
  99. package/indicators/pivot-points.js +2 -2
  100. package/indicators/pivot-points.src.js +1 -1
  101. package/indicators/ppo.js +2 -2
  102. package/indicators/ppo.src.js +1 -1
  103. package/indicators/price-channel.js +2 -2
  104. package/indicators/price-channel.src.js +1 -1
  105. package/indicators/price-envelopes.js +2 -2
  106. package/indicators/price-envelopes.src.js +1 -1
  107. package/indicators/psar.js +2 -2
  108. package/indicators/psar.src.js +1 -1
  109. package/indicators/regressions.js +2 -2
  110. package/indicators/regressions.src.js +1 -1
  111. package/indicators/roc.js +2 -2
  112. package/indicators/roc.src.js +1 -1
  113. package/indicators/rsi.js +2 -2
  114. package/indicators/rsi.src.js +1 -1
  115. package/indicators/slow-stochastic.js +2 -2
  116. package/indicators/slow-stochastic.src.js +1 -1
  117. package/indicators/stochastic.js +2 -2
  118. package/indicators/stochastic.src.js +1 -1
  119. package/indicators/supertrend.js +2 -2
  120. package/indicators/supertrend.src.js +1 -1
  121. package/indicators/tema.js +2 -2
  122. package/indicators/tema.src.js +1 -1
  123. package/indicators/trendline.js +2 -2
  124. package/indicators/trendline.src.js +1 -1
  125. package/indicators/trix.js +2 -2
  126. package/indicators/trix.src.js +1 -1
  127. package/indicators/volume-by-price.js +2 -2
  128. package/indicators/volume-by-price.src.js +2 -1
  129. package/indicators/vwap.js +2 -2
  130. package/indicators/vwap.src.js +1 -1
  131. package/indicators/williams-r.js +2 -2
  132. package/indicators/williams-r.src.js +1 -1
  133. package/indicators/wma.js +2 -2
  134. package/indicators/wma.src.js +1 -1
  135. package/indicators/zigzag.js +2 -2
  136. package/indicators/zigzag.src.js +1 -1
  137. package/modules/accessibility.js +2 -2
  138. package/modules/accessibility.src.js +3 -1
  139. package/modules/annotations-advanced.js +3 -3
  140. package/modules/annotations-advanced.src.js +4 -4
  141. package/modules/annotations.js +2 -2
  142. package/modules/annotations.src.js +3 -3
  143. package/modules/arc-diagram.js +2 -2
  144. package/modules/arc-diagram.src.js +1 -1
  145. package/modules/arrow-symbols.js +2 -2
  146. package/modules/arrow-symbols.src.js +1 -1
  147. package/modules/boost-canvas.js +2 -2
  148. package/modules/boost-canvas.src.js +14 -11
  149. package/modules/boost.js +2 -2
  150. package/modules/boost.src.js +14 -11
  151. package/modules/broken-axis.js +2 -2
  152. package/modules/broken-axis.src.js +1 -1
  153. package/modules/bullet.js +2 -2
  154. package/modules/bullet.src.js +1 -1
  155. package/modules/coloraxis.js +2 -2
  156. package/modules/coloraxis.src.js +1 -1
  157. package/modules/current-date-indicator.js +2 -2
  158. package/modules/current-date-indicator.src.js +1 -1
  159. package/modules/cylinder.js +2 -2
  160. package/modules/cylinder.src.js +1 -1
  161. package/modules/data-tools.js +2 -2
  162. package/modules/data-tools.src.js +36 -1
  163. package/modules/data.js +2 -2
  164. package/modules/data.src.js +1 -1
  165. package/modules/datagrouping.js +2 -2
  166. package/modules/datagrouping.src.js +1 -1
  167. package/modules/debugger.js +2 -2
  168. package/modules/debugger.src.js +1 -1
  169. package/modules/dependency-wheel.js +2 -2
  170. package/modules/dependency-wheel.src.js +1 -1
  171. package/modules/dotplot.js +2 -2
  172. package/modules/dotplot.src.js +1 -1
  173. package/modules/drag-panes.js +2 -2
  174. package/modules/drag-panes.src.js +2 -2
  175. package/modules/draggable-points.js +2 -2
  176. package/modules/draggable-points.src.js +1 -1
  177. package/modules/drilldown.js +2 -2
  178. package/modules/drilldown.src.js +1 -1
  179. package/modules/dumbbell.js +2 -2
  180. package/modules/dumbbell.src.js +1 -1
  181. package/modules/export-data.js +2 -2
  182. package/modules/export-data.src.js +1 -1
  183. package/modules/exporting.js +2 -2
  184. package/modules/exporting.src.js +1 -1
  185. package/modules/flowmap.js +2 -2
  186. package/modules/flowmap.src.js +1 -1
  187. package/modules/full-screen.js +2 -2
  188. package/modules/full-screen.src.js +1 -1
  189. package/modules/funnel.js +2 -2
  190. package/modules/funnel.src.js +1 -1
  191. package/modules/funnel3d.js +2 -2
  192. package/modules/funnel3d.src.js +1 -1
  193. package/modules/gantt.js +6 -6
  194. package/modules/gantt.src.js +82 -80
  195. package/modules/geoheatmap.js +2 -2
  196. package/modules/geoheatmap.src.js +1 -1
  197. package/modules/grid-axis.js +2 -2
  198. package/modules/grid-axis.src.js +1 -1
  199. package/modules/heatmap.js +3 -3
  200. package/modules/heatmap.src.js +2 -2
  201. package/modules/heikinashi.js +2 -2
  202. package/modules/heikinashi.src.js +1 -1
  203. package/modules/histogram-bellcurve.js +2 -2
  204. package/modules/histogram-bellcurve.src.js +1 -1
  205. package/modules/hollowcandlestick.js +2 -2
  206. package/modules/hollowcandlestick.src.js +1 -1
  207. package/modules/item-series.js +2 -2
  208. package/modules/item-series.src.js +1 -1
  209. package/modules/lollipop.js +2 -2
  210. package/modules/lollipop.src.js +1 -1
  211. package/modules/map.js +4 -4
  212. package/modules/map.src.js +26 -2
  213. package/modules/marker-clusters.js +2 -2
  214. package/modules/marker-clusters.src.js +1 -1
  215. package/modules/mouse-wheel-zoom.js +2 -2
  216. package/modules/mouse-wheel-zoom.src.js +1 -1
  217. package/modules/navigator.js +2 -2
  218. package/modules/navigator.src.js +1 -1
  219. package/modules/networkgraph.js +2 -2
  220. package/modules/networkgraph.src.js +1 -1
  221. package/modules/no-data-to-display.js +2 -2
  222. package/modules/no-data-to-display.src.js +1 -1
  223. package/modules/offline-exporting.js +2 -2
  224. package/modules/offline-exporting.src.js +2 -2
  225. package/modules/organization.js +2 -2
  226. package/modules/organization.src.js +4 -2
  227. package/modules/overlapping-datalabels.js +2 -2
  228. package/modules/overlapping-datalabels.src.js +1 -1
  229. package/modules/parallel-coordinates.js +2 -2
  230. package/modules/parallel-coordinates.src.js +1 -1
  231. package/modules/pareto.js +2 -2
  232. package/modules/pareto.src.js +1 -1
  233. package/modules/pathfinder.js +2 -2
  234. package/modules/pathfinder.src.js +1 -1
  235. package/modules/pattern-fill.js +2 -2
  236. package/modules/pattern-fill.src.js +1 -1
  237. package/modules/pictorial.js +2 -2
  238. package/modules/pictorial.src.js +1 -1
  239. package/modules/pointandfigure.js +2 -2
  240. package/modules/pointandfigure.src.js +1 -1
  241. package/modules/price-indicator.js +2 -2
  242. package/modules/price-indicator.src.js +1 -1
  243. package/modules/pyramid3d.js +2 -2
  244. package/modules/pyramid3d.src.js +1 -1
  245. package/modules/renko.js +2 -2
  246. package/modules/renko.src.js +1 -1
  247. package/modules/sankey.js +2 -2
  248. package/modules/sankey.src.js +1 -1
  249. package/modules/series-label.js +2 -2
  250. package/modules/series-label.src.js +8 -3
  251. package/modules/series-on-point.js +2 -2
  252. package/modules/series-on-point.src.js +1 -1
  253. package/modules/solid-gauge.js +2 -2
  254. package/modules/solid-gauge.src.js +1 -1
  255. package/modules/sonification.js +2 -2
  256. package/modules/sonification.src.js +1 -1
  257. package/modules/static-scale.js +2 -2
  258. package/modules/static-scale.src.js +1 -1
  259. package/modules/stock-tools.js +2 -2
  260. package/modules/stock-tools.src.js +3 -3
  261. package/modules/stock.js +6 -6
  262. package/modules/stock.src.js +82 -80
  263. package/modules/streamgraph.js +2 -2
  264. package/modules/streamgraph.src.js +1 -1
  265. package/modules/sunburst.js +2 -2
  266. package/modules/sunburst.src.js +290 -62
  267. package/modules/textpath.js +2 -2
  268. package/modules/textpath.src.js +1 -1
  269. package/modules/tiledwebmap.js +3 -3
  270. package/modules/tiledwebmap.src.js +1 -1
  271. package/modules/tilemap.js +2 -2
  272. package/modules/tilemap.src.js +1 -1
  273. package/modules/timeline.js +2 -2
  274. package/modules/timeline.src.js +4 -2
  275. package/modules/treegraph.js +2 -2
  276. package/modules/treegraph.src.js +4 -2
  277. package/modules/treegrid.js +2 -2
  278. package/modules/treegrid.src.js +1 -1
  279. package/modules/treemap.js +2 -2
  280. package/modules/treemap.src.js +288 -60
  281. package/modules/variable-pie.js +2 -2
  282. package/modules/variable-pie.src.js +1 -1
  283. package/modules/variwide.js +2 -2
  284. package/modules/variwide.src.js +1 -1
  285. package/modules/vector.js +2 -2
  286. package/modules/vector.src.js +1 -1
  287. package/modules/venn.js +2 -2
  288. package/modules/venn.src.js +1 -1
  289. package/modules/windbarb.js +2 -2
  290. package/modules/windbarb.src.js +1 -1
  291. package/modules/wordcloud.js +2 -2
  292. package/modules/wordcloud.src.js +1 -1
  293. package/modules/xrange.js +2 -2
  294. package/modules/xrange.src.js +1 -1
  295. package/options/treegraph.d.ts +559 -70
  296. package/options/treegraph.src.d.ts +559 -70
  297. package/options/treemap.d.ts +314 -160
  298. package/options/treemap.src.d.ts +314 -160
  299. package/options/vbp.d.ts +1 -1
  300. package/options/vbp.src.d.ts +1 -1
  301. package/package.json +1 -1
  302. package/standalone-navigator.js +3 -3
  303. package/standalone-navigator.src.js +58 -61
  304. package/themes/avocado.js +2 -2
  305. package/themes/avocado.src.js +1 -1
  306. package/themes/brand-dark.js +2 -2
  307. package/themes/brand-dark.src.js +1 -1
  308. package/themes/brand-light.js +2 -2
  309. package/themes/brand-light.src.js +1 -1
  310. package/themes/dark-blue.js +2 -2
  311. package/themes/dark-blue.src.js +1 -1
  312. package/themes/dark-green.js +2 -2
  313. package/themes/dark-green.src.js +1 -1
  314. package/themes/dark-unica.js +2 -2
  315. package/themes/dark-unica.src.js +1 -1
  316. package/themes/gray.js +2 -2
  317. package/themes/gray.src.js +1 -1
  318. package/themes/grid-light.js +2 -2
  319. package/themes/grid-light.src.js +1 -1
  320. package/themes/grid.js +2 -2
  321. package/themes/grid.src.js +1 -1
  322. package/themes/high-contrast-dark.js +2 -2
  323. package/themes/high-contrast-dark.src.js +1 -1
  324. package/themes/high-contrast-light.js +2 -2
  325. package/themes/high-contrast-light.src.js +1 -1
  326. package/themes/sand-signika.js +2 -2
  327. package/themes/sand-signika.src.js +1 -1
  328. package/themes/skies.js +2 -2
  329. package/themes/skies.src.js +1 -1
  330. package/themes/sunset.js +2 -2
  331. package/themes/sunset.src.js +1 -1
package/highstock.src.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highcharts JS v12.0.2 (2024-12-04)
2
+ * @license Highcharts JS v12.1.0 (2024-12-17)
3
3
  * @module highcharts/highcharts
4
4
  *
5
5
  * (c) 2009-2024 Torstein Honsi
@@ -74,7 +74,7 @@ var Globals;
74
74
  * Constants
75
75
  *
76
76
  * */
77
- Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '12.0.2', Globals.win = (typeof window !== 'undefined' ?
77
+ Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '12.1.0', Globals.win = (typeof window !== 'undefined' ?
78
78
  window :
79
79
  {}), // eslint-disable-line node/no-unsupported-features/es-builtins
80
80
  Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&
@@ -1275,7 +1275,7 @@ function getNestedProperty(path, parent) {
1275
1275
  }
1276
1276
  return thisProp ?? parent;
1277
1277
  }
1278
- const child = parent[pathElement];
1278
+ const child = parent[pathElement.replace(/[\\'"]/g, '')];
1279
1279
  // Filter on the child
1280
1280
  if (!defined(child) ||
1281
1281
  typeof child === 'function' ||
@@ -3582,7 +3582,9 @@ class Time {
3582
3582
  * Properties
3583
3583
  *
3584
3584
  * */
3585
- this.options = {};
3585
+ this.options = {
3586
+ timezone: 'UTC'
3587
+ };
3586
3588
  this.variableTimezone = false;
3587
3589
  this.Date = Time_win.Date;
3588
3590
  this.update(options);
@@ -3604,12 +3606,13 @@ class Time {
3604
3606
  *
3605
3607
  */
3606
3608
  update(options = {}) {
3607
- let timezone = options.timezone ?? 'UTC';
3608
3609
  this.dTLCache = {};
3609
3610
  this.options = options = Time_merge(true, this.options, options);
3610
3611
  const { timezoneOffset, useUTC } = options;
3611
3612
  // Allow using a different Date class
3612
3613
  this.Date = options.Date || Time_win.Date || Date;
3614
+ // Assign the time zone. Handle the legacy, deprecated `useUTC` option.
3615
+ let timezone = options.timezone;
3613
3616
  if (Time_defined(useUTC)) {
3614
3617
  timezone = useUTC ? 'UTC' : void 0;
3615
3618
  }
@@ -4052,7 +4055,7 @@ class Time {
4052
4055
  }
4053
4056
  else if (Time_isObject(format)) {
4054
4057
  const tzHours = (this.getTimezoneOffset(timestamp) || 0) /
4055
- (60000 * 60), timeZone = this.options.timezone || ('Etc/GMT' + (tzHours >= 0 ? '+' : '') + tzHours), { prefix = '', suffix = '' } = format;
4058
+ (60000 * 60), timeZone = this.timezone || ('Etc/GMT' + (tzHours >= 0 ? '+' : '') + tzHours), { prefix = '', suffix = '' } = format;
4056
4059
  format = prefix + this.dateTimeFormat(Time_extend({ timeZone }, format), timestamp) + suffix;
4057
4060
  }
4058
4061
  // Optionally sentence-case the string and return
@@ -7460,18 +7463,11 @@ class Color {
7460
7463
  }
7461
7464
  // Check for has alpha, because rgba colors perform worse due to
7462
7465
  // lack of support in WebKit.
7463
- const hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1);
7464
- return (hasAlpha ? 'rgba(' : 'rgb(') +
7465
- Math.round(toRgba[0] + (fromRgba[0] - toRgba[0]) * (1 - pos)) +
7466
- ',' +
7467
- Math.round(toRgba[1] + (fromRgba[1] - toRgba[1]) * (1 - pos)) +
7468
- ',' +
7469
- Math.round(toRgba[2] + (fromRgba[2] - toRgba[2]) * (1 - pos)) +
7470
- (hasAlpha ?
7471
- (',' +
7472
- (toRgba[3] + (fromRgba[3] - toRgba[3]) * (1 - pos))) :
7473
- '') +
7474
- ')';
7466
+ const hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1), channel = (to, i) => to + (fromRgba[i] - to) * (1 - pos), rgba = toRgba.slice(0, 3).map(channel).map(Math.round);
7467
+ if (hasAlpha) {
7468
+ rgba.push(channel(toRgba[3], 3));
7469
+ }
7470
+ return (hasAlpha ? 'rgba(' : 'rgb(') + rgba.join(',') + ')';
7475
7471
  }
7476
7472
  }
7477
7473
  /* *
@@ -8840,7 +8836,7 @@ const { defaultOptions: Templating_defaultOptions, defaultTime: Templating_defau
8840
8836
 
8841
8837
  const { doc: Templating_doc } = Core_Globals;
8842
8838
 
8843
- const { extend: Templating_extend, getNestedProperty: Templating_getNestedProperty, isArray: Templating_isArray, isNumber: Templating_isNumber, isObject: Templating_isObject, pick: Templating_pick, ucfirst: Templating_ucfirst } = Core_Utilities;
8839
+ const { extend: Templating_extend, getNestedProperty: Templating_getNestedProperty, isArray: Templating_isArray, isNumber: Templating_isNumber, isObject: Templating_isObject, isString: Templating_isString, pick: Templating_pick, ucfirst: Templating_ucfirst } = Core_Utilities;
8844
8840
  const helpers = {
8845
8841
  // Built-in helpers
8846
8842
  add: (a, b) => a + b,
@@ -8875,6 +8871,8 @@ const numberFormatCache = {};
8875
8871
  * Functions
8876
8872
  *
8877
8873
  * */
8874
+ // Internal convenience function
8875
+ const isQuotedString = (str) => /^["'].+["']$/.test(str);
8878
8876
  /**
8879
8877
  * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a
8880
8878
  * human readable date string. The format is a subset of the formats for PHP's
@@ -8952,11 +8950,11 @@ function dateFormat(format, timestamp, upperCaseFirst) {
8952
8950
  * The formatted string.
8953
8951
  */
8954
8952
  function format(str = '', ctx, chart) {
8955
- const regex = /\{([\p{L}\d:\.,;\-\/<>\[\]%_@"'’= #\(\)]+)\}/gu,
8953
+ const regex = /\{([\p{L}\d:\.,;\-\/<>\[\]%_@+"'’= #\(\)]+)\}/gu,
8956
8954
  // The sub expression regex is the same as the top expression regex,
8957
8955
  // but except parens and block helpers (#), and surrounded by parens
8958
8956
  // instead of curly brackets.
8959
- subRegex = /\(([\p{L}\d:\.,;\-\/<>\[\]%_@"'= ]+)\)/gu, matches = [], floatRegex = /f$/, decRegex = /\.(\d)/, lang = chart?.options.lang || Templating_defaultOptions.lang, time = chart && chart.time || Templating_defaultTime, numberFormatter = chart && chart.numberFormatter || numberFormat;
8957
+ subRegex = /\(([\p{L}\d:\.,;\-\/<>\[\]%_@+"'= ]+)\)/gu, matches = [], floatRegex = /f$/, decRegex = /\.(\d)/, lang = chart?.options.lang || Templating_defaultOptions.lang, time = chart && chart.time || Templating_defaultTime, numberFormatter = chart && chart.numberFormatter || numberFormat;
8960
8958
  /*
8961
8959
  * Get a literal or variable value inside a template expression. May be
8962
8960
  * extended with other types like string or null if needed, but keep it
@@ -8974,7 +8972,7 @@ function format(str = '', ctx, chart) {
8974
8972
  if ((n = Number(key)).toString() === key) {
8975
8973
  return n;
8976
8974
  }
8977
- if (/^["'].+["']$/.test(key)) {
8975
+ if (isQuotedString(key)) {
8978
8976
  return key.slice(1, -1);
8979
8977
  }
8980
8978
  // Variables and constants
@@ -9087,7 +9085,8 @@ function format(str = '', ctx, chart) {
9087
9085
  // Simple variable replacement
9088
9086
  }
9089
9087
  else {
9090
- const valueAndFormat = expression.split(':');
9088
+ const valueAndFormat = isQuotedString(expression) ?
9089
+ [expression] : expression.split(':');
9091
9090
  replacement = resolveProperty(valueAndFormat.shift() || '');
9092
9091
  // Format the replacement
9093
9092
  if (valueAndFormat.length && typeof replacement === 'number') {
@@ -9100,13 +9099,14 @@ function format(str = '', ctx, chart) {
9100
9099
  }
9101
9100
  else {
9102
9101
  replacement = time.dateFormat(segment, replacement);
9103
- // Use string literal in order to be preserved in the outer
9104
- // expression
9105
- if (hasSub) {
9106
- replacement = `"${replacement}"`;
9107
- }
9108
9102
  }
9109
9103
  }
9104
+ // Use string literal in order to be preserved in the outer
9105
+ // expression
9106
+ subRegex.lastIndex = 0;
9107
+ if (subRegex.test(match.find) && Templating_isString(replacement)) {
9108
+ replacement = `"${replacement}"`;
9109
+ }
9110
9110
  }
9111
9111
  str = str.replace(match.find, Templating_pick(replacement, ''));
9112
9112
  });
@@ -9691,7 +9691,9 @@ class SVGElement {
9691
9691
  * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.
9692
9692
  */
9693
9693
  align(alignOptions, alignByTranslate, alignTo, redraw = true) {
9694
- const attribs = {}, renderer = this.renderer, alignedObjects = renderer.alignedObjects, initialAlignment = Boolean(alignOptions);
9694
+ const attribs = {
9695
+ 'text-align': alignOptions?.align
9696
+ }, renderer = this.renderer, alignedObjects = renderer.alignedObjects, initialAlignment = Boolean(alignOptions);
9695
9697
  // First call on instanciate
9696
9698
  if (alignOptions) {
9697
9699
  this.alignOptions = alignOptions;
@@ -11431,6 +11433,7 @@ class SVGLabel extends SVG_SVGElement {
11431
11433
  * */
11432
11434
  alignSetter(value) {
11433
11435
  const alignFactor = SVGLabel_getAlignFactor(value);
11436
+ this.textAlign = value;
11434
11437
  if (alignFactor !== this.alignFactor) {
11435
11438
  this.alignFactor = alignFactor;
11436
11439
  // Bounding box exists, means we're dynamically changing
@@ -11606,6 +11609,7 @@ class SVGLabel extends SVG_SVGElement {
11606
11609
  }
11607
11610
  'text-alignSetter'(value) {
11608
11611
  this.textAlign = value;
11612
+ this.updateTextPadding();
11609
11613
  }
11610
11614
  textSetter(text) {
11611
11615
  if (typeof text !== 'undefined') {
@@ -11675,24 +11679,19 @@ class SVGLabel extends SVG_SVGElement {
11675
11679
  * is changed.
11676
11680
  */
11677
11681
  updateTextPadding() {
11678
- const text = this.text;
11682
+ const text = this.text, textAlign = text.styles.textAlign || this.textAlign;
11679
11683
  if (!text.textPath) {
11680
11684
  this.updateBoxSize();
11681
11685
  // Determine y based on the baseline
11682
11686
  const textY = this.baseline ? 0 : this.baselineOffset, textX = (this.paddingLeft ?? this.padding) +
11683
11687
  // Compensate for alignment
11684
- ((SVGLabel_defined(this.widthSetting) && this.bBox) ?
11685
- SVGLabel_getAlignFactor(this.textAlign) *
11686
- (this.widthSetting - this.bBox.width) :
11687
- 0);
11688
+ SVGLabel_getAlignFactor(textAlign) * (this.widthSetting ?? this.bBox.width);
11688
11689
  // Update if anything changed
11689
11690
  if (textX !== text.x || textY !== text.y) {
11690
- text.attr('x', textX);
11691
- // #8159 - prevent misplaced data labels in treemap
11692
- // (useHTML: true)
11693
- if (text.hasBoxWidthChanged) {
11694
- this.bBox = text.getBBox(true);
11695
- }
11691
+ text.attr({
11692
+ align: textAlign,
11693
+ x: textX
11694
+ });
11696
11695
  if (typeof textY !== 'undefined') {
11697
11696
  text.attr('y', textY);
11698
11697
  }
@@ -12637,7 +12636,7 @@ class SVGRenderer {
12637
12636
  this.url = this.getReferenceURL();
12638
12637
  // Add description
12639
12638
  const desc = this.createElement('desc').add();
12640
- desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 12.0.2'));
12639
+ desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 12.1.0'));
12641
12640
  this.defs = this.createElement('defs').add();
12642
12641
  this.allowHTML = allowHTML;
12643
12642
  this.forExport = forExport;
@@ -14604,7 +14603,7 @@ class HTMLElement extends SVG_SVGElement {
14604
14603
  textWidth,
14605
14604
  this.textAlign
14606
14605
  ].join(','), parentPadding = (this.parentGroup?.padding * -1) || 0;
14607
- let baseline, hasBoxWidthChanged = false;
14606
+ let baseline;
14608
14607
  // Update textWidth. Use the memoized textPxLength if possible, to
14609
14608
  // avoid the getTextPxLength function using elem.offsetWidth.
14610
14609
  // Calling offsetWidth affects rendering time as it forces layout
@@ -14627,10 +14626,8 @@ class HTMLElement extends SVG_SVGElement {
14627
14626
  whiteSpace: whiteSpace || 'normal' // #3331
14628
14627
  });
14629
14628
  this.oldTextWidth = textWidth;
14630
- hasBoxWidthChanged = true; // #8159
14631
14629
  }
14632
14630
  }
14633
- this.hasBoxWidthChanged = hasBoxWidthChanged; // #8159
14634
14631
  // Do the calculations and DOM access only if properties changed
14635
14632
  if (currentTextTransform !== this.cTT) {
14636
14633
  baseline = renderer.fontMetrics(element).b;
@@ -33086,9 +33083,14 @@ class Series {
33086
33083
  * @private
33087
33084
  * @function Highcharts.Series#searchKDTree
33088
33085
  */
33089
- searchKDTree(point, compareX, e) {
33086
+ searchKDTree(point, compareX, e, suppliedPointEvaluator, suppliedBSideCheckEvaluator) {
33090
33087
  const series = this, [kdX, kdY] = this.kdAxisArray, kdComparer = compareX ? 'distX' : 'dist', kdDimensions = (series.options.findNearestPointBy || '')
33091
- .indexOf('y') > -1 ? 2 : 1, useRadius = !!series.isBubble;
33088
+ .indexOf('y') > -1 ? 2 : 1, useRadius = !!series.isBubble, pointEvaluator = suppliedPointEvaluator || ((p1, p2, comparisonProp) => [
33089
+ (p1[comparisonProp] || 0) < (p2[comparisonProp] || 0) ?
33090
+ p1 :
33091
+ p2,
33092
+ false
33093
+ ]), bSideCheckEvaluator = suppliedBSideCheckEvaluator || ((a, b) => a < b);
33092
33094
  /**
33093
33095
  * Set the one and two dimensional distance on the point object.
33094
33096
  * @private
@@ -33103,28 +33105,21 @@ class Series {
33103
33105
  */
33104
33106
  function doSearch(search, tree, depth, dimensions) {
33105
33107
  const point = tree.point, axis = series.kdAxisArray[depth % dimensions];
33106
- let nPoint1, nPoint2, ret = point;
33108
+ let ret = point, flip = false;
33107
33109
  setDistance(search, point);
33108
33110
  // Pick side based on distance to splitting point
33109
33111
  const tdist = (search[axis] || 0) - (point[axis] || 0) +
33110
33112
  (useRadius ? (point.marker?.radius || 0) : 0), sideA = tdist < 0 ? 'left' : 'right', sideB = tdist < 0 ? 'right' : 'left';
33111
33113
  // End of tree
33112
33114
  if (tree[sideA]) {
33113
- nPoint1 = doSearch(search, tree[sideA], depth + 1, dimensions);
33114
- ret = (nPoint1[kdComparer] <
33115
- ret[kdComparer] ?
33116
- nPoint1 :
33117
- point);
33115
+ [ret, flip] = pointEvaluator(point, doSearch(search, tree[sideA], depth + 1, dimensions), kdComparer);
33118
33116
  }
33119
33117
  if (tree[sideB]) {
33118
+ const sqrtTDist = Math.sqrt(tdist * tdist), retDist = ret[kdComparer];
33120
33119
  // Compare distance to current best to splitting point to decide
33121
- // whether to check side B or not
33122
- if (Math.sqrt(tdist * tdist) < ret[kdComparer]) {
33123
- nPoint2 = doSearch(search, tree[sideB], depth + 1, dimensions);
33124
- ret = (nPoint2[kdComparer] <
33125
- ret[kdComparer] ?
33126
- nPoint2 :
33127
- ret);
33120
+ // whether to check side B or no
33121
+ if (bSideCheckEvaluator(sqrtTDist, retDist, flip)) {
33122
+ ret = pointEvaluator(ret, doSearch(search, tree[sideB], depth + 1, dimensions), kdComparer)[0];
33128
33123
  }
33129
33124
  }
33130
33125
  return ret;
@@ -42632,7 +42627,9 @@ var DataLabel;
42632
42627
  (unrotatedbBox.width - bBox.width);
42633
42628
  dataLabel.alignAttr.y += DataLabel_getAlignFactor(options.verticalAlign) *
42634
42629
  (unrotatedbBox.height - bBox.height);
42635
- dataLabel[dataLabel.placed ? 'animate' : 'attr']({
42630
+ dataLabel.attr({
42631
+ 'text-align': dataLabel.alignAttr['text-align'] || 'center'
42632
+ })[dataLabel.placed ? 'animate' : 'attr']({
42636
42633
  x: dataLabel.alignAttr.x +
42637
42634
  (bBox.width - unrotatedbBox.width) / 2,
42638
42635
  y: dataLabel.alignAttr.y +
@@ -52335,8 +52332,11 @@ const rangeSelector = {
52335
52332
  * The alignment of the input box. Allowed properties are `left`,
52336
52333
  * `center`, `right`.
52337
52334
  *
52338
- * @sample {highstock} stock/rangeselector/input-button-position/
52339
- * Alignment
52335
+ * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/
52336
+ * Opposite alignment
52337
+ *
52338
+ * @sample {highstock} stock/rangeselector/input-button-same-alignment/
52339
+ * Same alignment for buttons and input
52340
52340
  *
52341
52341
  * @type {Highcharts.AlignValue}
52342
52342
  * @since 6.0.0
@@ -52376,8 +52376,11 @@ const rangeSelector = {
52376
52376
  * The alignment of the input box. Allowed properties are `left`,
52377
52377
  * `center`, `right`.
52378
52378
  *
52379
- * @sample {highstock} stock/rangeselector/input-button-position/
52380
- * Alignment
52379
+ * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/
52380
+ * Opposite alignment
52381
+ *
52382
+ * @sample {highstock} stock/rangeselector/input-button-same-alignment/
52383
+ * Same alignment for buttons and input
52381
52384
  *
52382
52385
  * @type {Highcharts.AlignValue}
52383
52386
  * @since 6.0.0
@@ -52741,6 +52744,7 @@ const { addEvent: RangeSelector_addEvent, createElement: RangeSelector_createEle
52741
52744
  * @function preferredInputType
52742
52745
  */
52743
52746
  function preferredInputType(format) {
52747
+ const hasTimeKey = (char) => new RegExp(`%[[a-zA-Z]*${char}`).test(format);
52744
52748
  const ms = RangeSelector_isString(format) ?
52745
52749
  format.indexOf('%L') !== -1 :
52746
52750
  // Implemented but not typed as of 2024
@@ -52750,11 +52754,10 @@ function preferredInputType(format) {
52750
52754
  }
52751
52755
  const date = RangeSelector_isString(format) ?
52752
52756
  ['a', 'A', 'd', 'e', 'w', 'b', 'B', 'm', 'o', 'y', 'Y']
52753
- .some((char) => format.indexOf('%' + char) !== -1) :
52757
+ .some(hasTimeKey) :
52754
52758
  format.dateStyle || format.day || format.month || format.year;
52755
52759
  const time = RangeSelector_isString(format) ?
52756
- ['H', 'k', 'I', 'l', 'M', 'S']
52757
- .some((char) => format.indexOf('%' + char) !== -1) :
52760
+ ['H', 'k', 'I', 'l', 'M', 'S'].some(hasTimeKey) :
52758
52761
  format.timeStyle || format.hour || format.minute || format.second;
52759
52762
  if (date && time) {
52760
52763
  return 'datetime-local';
@@ -52801,6 +52804,16 @@ class RangeSelector {
52801
52804
  this.isDirty = false;
52802
52805
  this.buttonOptions = RangeSelector.prototype.defaultButtons;
52803
52806
  this.initialButtonGroupWidth = 0;
52807
+ this.maxButtonWidth = () => {
52808
+ let buttonWidth = 0;
52809
+ this.buttons.forEach((button) => {
52810
+ const bBox = button.getBBox();
52811
+ if (bBox.width > buttonWidth) {
52812
+ buttonWidth = bBox.width;
52813
+ }
52814
+ });
52815
+ return buttonWidth;
52816
+ };
52804
52817
  this.init(chart);
52805
52818
  }
52806
52819
  /* *
@@ -53094,9 +53107,15 @@ class RangeSelector {
53094
53107
  if (selectedIndex !== null) {
53095
53108
  buttonStates[selectedIndex] = 2;
53096
53109
  rangeSelector.setSelected(selectedIndex);
53110
+ if (this.dropdown) {
53111
+ this.dropdown.selectedIndex = selectedIndex + 1;
53112
+ }
53097
53113
  }
53098
53114
  else {
53099
53115
  rangeSelector.setSelected();
53116
+ if (this.dropdown) {
53117
+ this.dropdown.selectedIndex = -1;
53118
+ }
53100
53119
  if (dropdownLabel) {
53101
53120
  dropdownLabel.setState(0);
53102
53121
  dropdownLabel.attr({
@@ -53715,11 +53734,11 @@ class RangeSelector {
53715
53734
  const { buttonPosition, inputPosition, verticalAlign } = options;
53716
53735
  // Get the X offset required to avoid overlapping with the exporting
53717
53736
  // button. This is used both by the buttonGroup and the inputGroup.
53718
- const getXOffsetForExportButton = (group, position) => {
53737
+ const getXOffsetForExportButton = (group, position, rightAligned) => {
53719
53738
  if (navButtonOptions &&
53720
53739
  this.titleCollision(chart) &&
53721
53740
  verticalAlign === 'top' &&
53722
- position.align === 'right' && ((position.y -
53741
+ rightAligned && ((position.y -
53723
53742
  group.getBBox().height - 12) <
53724
53743
  ((navButtonOptions.y || 0) +
53725
53744
  (navButtonOptions.height || 0) +
@@ -53748,7 +53767,8 @@ class RangeSelector {
53748
53767
  }
53749
53768
  plotLeft -= chart.spacing[3];
53750
53769
  // Detect collision between button group and exporting
53751
- const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition);
53770
+ const xOffsetForExportButton = getXOffsetForExportButton(buttonGroup, buttonPosition, buttonPosition.align === 'right' ||
53771
+ inputPosition.align === 'right');
53752
53772
  this.alignButtonGroup(xOffsetForExportButton);
53753
53773
  if (this.buttonGroup?.translateY) {
53754
53774
  this.dropdownLabel
@@ -53760,7 +53780,8 @@ class RangeSelector {
53760
53780
  let xOffsetForExportButton = 0;
53761
53781
  if (options.inputEnabled && inputGroup) {
53762
53782
  // Detect collision between the input group and exporting button
53763
- xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition);
53783
+ xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition, buttonPosition.align === 'right' ||
53784
+ inputPosition.align === 'right');
53764
53785
  if (inputPosition.align === 'left') {
53765
53786
  translateX = plotLeft;
53766
53787
  }
@@ -53913,16 +53934,35 @@ class RangeSelector {
53913
53934
  * @param {number} [width]
53914
53935
  */
53915
53936
  alignButtonGroup(xOffsetForExportButton, width) {
53916
- const { chart, options, buttonGroup } = this;
53937
+ const { chart, options, buttonGroup, dropdown, dropdownLabel } = this;
53917
53938
  const { buttonPosition } = options;
53918
53939
  const plotLeft = chart.plotLeft - chart.spacing[3];
53919
53940
  let translateX = buttonPosition.x - chart.spacing[3];
53941
+ let dropdownTranslateX = chart.plotLeft;
53920
53942
  if (buttonPosition.align === 'right') {
53921
53943
  translateX += xOffsetForExportButton - plotLeft; // #13014
53944
+ if (this.hasVisibleDropdown) {
53945
+ dropdownTranslateX = chart.chartWidth +
53946
+ xOffsetForExportButton -
53947
+ this.maxButtonWidth() - 20;
53948
+ }
53922
53949
  }
53923
53950
  else if (buttonPosition.align === 'center') {
53924
53951
  translateX -= plotLeft / 2;
53952
+ if (this.hasVisibleDropdown) {
53953
+ dropdownTranslateX = chart.chartWidth / 2 -
53954
+ this.maxButtonWidth();
53955
+ }
53925
53956
  }
53957
+ if (dropdown) {
53958
+ RangeSelector_css(dropdown, {
53959
+ left: dropdownTranslateX + 'px',
53960
+ top: buttonGroup?.translateY + 'px'
53961
+ });
53962
+ }
53963
+ dropdownLabel?.attr({
53964
+ x: dropdownTranslateX
53965
+ });
53926
53966
  if (buttonGroup) {
53927
53967
  // Align button group
53928
53968
  buttonGroup.align({
@@ -53976,36 +54016,6 @@ class RangeSelector {
53976
54016
  handleCollision(xOffsetForExportButton) {
53977
54017
  const { chart, buttonGroup, inputGroup } = this;
53978
54018
  const { buttonPosition, dropdown, inputPosition } = this.options;
53979
- const maxButtonWidth = () => {
53980
- let buttonWidth = 0;
53981
- this.buttons.forEach((button) => {
53982
- const bBox = button.getBBox();
53983
- if (bBox.width > buttonWidth) {
53984
- buttonWidth = bBox.width;
53985
- }
53986
- });
53987
- return buttonWidth;
53988
- };
53989
- const groupsOverlap = (buttonGroupWidth) => {
53990
- if (inputGroup?.alignOptions && buttonGroup) {
53991
- const inputGroupX = (inputGroup.alignAttr.translateX +
53992
- inputGroup.alignOptions.x -
53993
- xOffsetForExportButton +
53994
- // `getBBox` for detecing left margin
53995
- inputGroup.getBBox().x +
53996
- // 2px padding to not overlap input and label
53997
- 2);
53998
- const inputGroupWidth = inputGroup.alignOptions.width || 0;
53999
- const buttonGroupX = buttonGroup.alignAttr.translateX +
54000
- buttonGroup.getBBox().x;
54001
- return (buttonGroupX + buttonGroupWidth > inputGroupX) &&
54002
- (inputGroupX + inputGroupWidth > buttonGroupX) &&
54003
- (buttonPosition.y <
54004
- (inputPosition.y +
54005
- inputGroup.getBBox().height));
54006
- }
54007
- return false;
54008
- };
54009
54019
  const moveInputsDown = () => {
54010
54020
  if (inputGroup && buttonGroup) {
54011
54021
  inputGroup.attr({
@@ -54017,47 +54027,43 @@ class RangeSelector {
54017
54027
  });
54018
54028
  }
54019
54029
  };
54020
- if (buttonGroup) {
54021
- if (dropdown === 'always') {
54022
- this.collapseButtons();
54023
- if (groupsOverlap(maxButtonWidth())) {
54024
- // Move the inputs down if there is still a collision
54025
- // after collapsing the buttons
54026
- moveInputsDown();
54027
- }
54028
- return;
54029
- }
54030
- if (dropdown === 'never') {
54031
- this.expandButtons();
54032
- }
54033
- }
54034
54030
  // Detect collision
54035
54031
  if (inputGroup && buttonGroup) {
54036
- if ((inputPosition.align === buttonPosition.align) ||
54037
- // 20 is minimal spacing between elements
54038
- groupsOverlap(this.initialButtonGroupWidth + 20)) {
54032
+ if (inputPosition.align === buttonPosition.align) {
54033
+ moveInputsDown();
54034
+ if (this.initialButtonGroupWidth >
54035
+ chart.plotWidth + xOffsetForExportButton - 20) {
54036
+ this.collapseButtons();
54037
+ }
54038
+ else {
54039
+ this.expandButtons();
54040
+ }
54041
+ }
54042
+ else if (this.initialButtonGroupWidth -
54043
+ xOffsetForExportButton +
54044
+ inputGroup.getBBox().width >
54045
+ chart.plotWidth) {
54039
54046
  if (dropdown === 'responsive') {
54040
54047
  this.collapseButtons();
54041
- if (groupsOverlap(maxButtonWidth())) {
54042
- moveInputsDown();
54043
- }
54044
54048
  }
54045
54049
  else {
54046
54050
  moveInputsDown();
54047
54051
  }
54048
54052
  }
54049
- else if (dropdown === 'responsive') {
54053
+ else {
54050
54054
  this.expandButtons();
54051
54055
  }
54052
54056
  }
54053
- else if (buttonGroup && dropdown === 'responsive') {
54054
- if (this.initialButtonGroupWidth > chart.plotWidth) {
54057
+ // Forced states
54058
+ if (buttonGroup) {
54059
+ if (dropdown === 'always') {
54055
54060
  this.collapseButtons();
54056
54061
  }
54057
- else {
54062
+ if (dropdown === 'never') {
54058
54063
  this.expandButtons();
54059
54064
  }
54060
54065
  }
54066
+ this.alignButtonGroup(xOffsetForExportButton);
54061
54067
  }
54062
54068
  /**
54063
54069
  * Collapse the buttons and show the select element.
@@ -54100,17 +54106,10 @@ class RangeSelector {
54100
54106
  * @function Highcharts.RangeSelector#showDropdown
54101
54107
  */
54102
54108
  showDropdown() {
54103
- const { buttonGroup, chart, dropdownLabel, dropdown } = this;
54109
+ const { buttonGroup, dropdownLabel, dropdown } = this;
54104
54110
  if (buttonGroup && dropdown) {
54105
- const { translateX = 0, translateY = 0 } = buttonGroup, left = chart.plotLeft + translateX, top = translateY;
54106
- dropdownLabel
54107
- .attr({ x: left, y: top })
54108
- .show();
54109
- RangeSelector_css(dropdown, {
54110
- left: left + 'px',
54111
- top: top + 'px',
54112
- visibility: 'inherit'
54113
- });
54111
+ dropdownLabel.show();
54112
+ RangeSelector_css(dropdown, { visibility: 'inherit' });
54114
54113
  this.hasVisibleDropdown = true;
54115
54114
  }
54116
54115
  }
@@ -57645,7 +57644,7 @@ var BrokenAxis;
57645
57644
 
57646
57645
  ;// ./code/es-modules/masters/modules/broken-axis.src.js
57647
57646
  /**
57648
- * @license Highcharts JS v12.0.2 (2024-12-04)
57647
+ * @license Highcharts JS v12.1.0 (2024-12-17)
57649
57648
  * @module highcharts/modules/broken-axis
57650
57649
  * @requires highcharts
57651
57650
  *
@@ -59137,7 +59136,7 @@ const DataGroupingComposition = {
59137
59136
 
59138
59137
  ;// ./code/es-modules/masters/modules/datagrouping.src.js
59139
59138
  /**
59140
- * @license Highstock JS v12.0.2 (2024-12-04)
59139
+ * @license Highstock JS v12.1.0 (2024-12-17)
59141
59140
  * @module highcharts/modules/datagrouping
59142
59141
  * @requires highcharts
59143
59142
  *
@@ -59459,7 +59458,7 @@ const MouseWheelZoomComposition = {
59459
59458
 
59460
59459
  ;// ./code/es-modules/masters/modules/mouse-wheel-zoom.src.js
59461
59460
  /**
59462
- * @license Highcharts JS v12.0.2 (2024-12-04)
59461
+ * @license Highcharts JS v12.1.0 (2024-12-17)
59463
59462
  * @module highcharts/modules/mouse-wheel-zoom
59464
59463
  * @requires highcharts
59465
59464
  *
@@ -59479,7 +59478,7 @@ mouse_wheel_zoom_src_G.MouseWheelZoom.compose(mouse_wheel_zoom_src_G.Chart);
59479
59478
 
59480
59479
  ;// ./code/es-modules/masters/modules/stock.src.js
59481
59480
  /**
59482
- * @license Highstock JS v12.0.2 (2024-12-04)
59481
+ * @license Highstock JS v12.1.0 (2024-12-17)
59483
59482
  * @module highcharts/modules/stock
59484
59483
  * @requires highcharts
59485
59484
  *
@@ -59527,7 +59526,7 @@ stock_src_G.StockChart.compose(stock_src_G.Chart, stock_src_G.Axis, stock_src_G.
59527
59526
 
59528
59527
  ;// ./code/es-modules/masters/highstock.src.js
59529
59528
  /**
59530
- * @license Highstock JS v12.0.2 (2024-12-04)
59529
+ * @license Highstock JS v12.1.0 (2024-12-17)
59531
59530
  * @module highcharts/highstock
59532
59531
  *
59533
59532
  * (c) 2009-2024 Torstein Honsi
@@ -1,5 +1,5 @@
1
1
  !/**
2
- * Highstock JS v12.0.2 (2024-12-04)
2
+ * Highstock JS v12.1.0 (2024-12-17)
3
3
  * @module highcharts/indicators/acceleration-bands
4
4
  * @requires highcharts
5
5
  * @requires highcharts/modules/stock
@@ -9,4 +9,4 @@
9
9
  * (c) 2010-2024 Daniel Studencki
10
10
  *
11
11
  * License: www.highcharts.com/license
12
- */function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(e._Highcharts,e._Highcharts.SeriesRegistry):"function"==typeof define&&define.amd?define("highcharts/indicators/acceleration-bands",["highcharts/highcharts"],function(e){return t(e,e.SeriesRegistry)}):"object"==typeof exports?exports["highcharts/indicators/acceleration-bands"]=t(e._Highcharts,e._Highcharts.SeriesRegistry):e.Highcharts=t(e.Highcharts,e.Highcharts.SeriesRegistry)}("undefined"==typeof window?this:window,(e,t)=>(()=>{"use strict";var a,i={512:e=>{e.exports=t},944:t=>{t.exports=e}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return i[e](a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var a in t)o.o(t,a)&&!o.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var s={};o.d(s,{default:()=>b});var n=o(944),p=/*#__PURE__*/o.n(n),l=o(512),h=/*#__PURE__*/o.n(l);let{sma:{prototype:c}}=h().seriesTypes,{defined:d,error:u,merge:f}=p();!function(e){let t=["bottomLine"],a=["top","bottom"],i=["top"];function r(e){return"plot"+e.charAt(0).toUpperCase()+e.slice(1)}function o(e,t){let a=[];return(e.pointArrayMap||[]).forEach(e=>{e!==t&&a.push(r(e))}),a}function s(){let e=this,t=e.pointValKey,a=e.linesApiNames,i=e.areaLinesNames,s=e.points,n=e.options,p=e.graph,l={options:{gapSize:n.gapSize}},h=[],y=o(e,t),g=s.length,m;if(y.forEach((e,t)=>{for(h[t]=[];g--;)m=s[g],h[t].push({x:m.x,plotX:m.plotX,plotY:m[e],isNull:!d(m[e])});g=s.length}),e.userOptions.fillColor&&i.length){let t=h[y.indexOf(r(i[0]))],a=1===i.length?s:h[y.indexOf(r(i[1]))],o=e.color;e.points=a,e.nextPoints=t,e.color=e.userOptions.fillColor,e.options=f(s,l),e.graph=e.area,e.fillGraph=!0,c.drawGraph.call(e),e.area=e.graph,delete e.nextPoints,delete e.fillGraph,e.color=o}a.forEach((t,a)=>{h[a]?(e.points=h[a],n[t]?e.options=f(n[t].styles,l):u('Error: "There is no '+t+' in DOCS options declared. Check if linesApiNames are consistent with your DOCS line names."'),e.graph=e["graph"+t],c.drawGraph.call(e),e["graph"+t]=e.graph):u('Error: "'+t+" doesn't have equivalent in pointArrayMap. To many elements in linesApiNames relative to pointArrayMap.\"")}),e.points=s,e.options=n,e.graph=p,c.drawGraph.call(e)}function n(e){let t,a=[],i=[];if(e=e||this.points,this.fillGraph&&this.nextPoints){if((t=c.getGraphPath.call(this,this.nextPoints))&&t.length){t[0][0]="L",a=c.getGraphPath.call(this,e),i=t.slice(0,a.length);for(let e=i.length-1;e>=0;e--)a.push(i[e])}}else a=c.getGraphPath.apply(this,arguments);return a}function p(e){let t=[];return(this.pointArrayMap||[]).forEach(a=>{t.push(e[a])}),t}function l(){let e=this.pointArrayMap,t=[],a;t=o(this),c.translate.apply(this,arguments),this.points.forEach(i=>{e.forEach((e,r)=>{a=i[e],this.dataModify&&(a=this.dataModify.modifyValue(a)),null!==a&&(i[t[r]]=this.yAxis.toPixels(a,!0))})})}e.compose=function(e){let r=e.prototype;return r.linesApiNames=r.linesApiNames||t.slice(),r.pointArrayMap=r.pointArrayMap||a.slice(),r.pointValKey=r.pointValKey||"top",r.areaLinesNames=r.areaLinesNames||i.slice(),r.drawGraph=s,r.getGraphPath=n,r.toYData=p,r.translate=l,e}}(a||(a={}));let y=a,{sma:g}=h().seriesTypes,{correctFloat:m,extend:x,merge:A}=p();class D extends g{getValues(e,t){let a,i,r,o,s,n,p,l,h,c,d;let u=t.period,f=t.factor,y=t.index,g=e.xData,x=e.yData,A=x?x.length:0,D=[],b=[],v=[],G=[],M=[];if(!(A<u)){for(d=0;d<=A;d++){if(d<A){var N,O;N=x[d][2],s=m((O=x[d][1])-N)/(m(O+N)/2)*1e3*f,D.push(x[d][1]*m(1+2*s)),b.push(x[d][2]*m(1-2*s))}d>=u&&(h=g.slice(d-u,d),c=x.slice(d-u,d),p=super.getValues.call(this,{xData:h,yData:D.slice(d-u,d)},{period:u}),l=super.getValues.call(this,{xData:h,yData:b.slice(d-u,d)},{period:u}),o=(n=super.getValues.call(this,{xData:h,yData:c},{period:u,index:y})).xData[0],i=p.yData[0],r=l.yData[0],a=n.yData[0],v.push([o,i,a,r]),G.push(o),M.push([i,a,r]))}return{values:v,xData:G,yData:M}}}}D.defaultOptions=A(g.defaultOptions,{params:{period:20,factor:.001,index:3},lineWidth:1,topLine:{styles:{lineWidth:1}},bottomLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}}),x(D.prototype,{areaLinesNames:["top","bottom"],linesApiNames:["topLine","bottomLine"],nameBase:"Acceleration Bands",nameComponents:["period","factor"],pointArrayMap:["top","middle","bottom"],pointValKey:"middle"}),y.compose(D),h().registerSeriesType("abands",D);let b=p();return s.default})());
12
+ */function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(e._Highcharts,e._Highcharts.SeriesRegistry):"function"==typeof define&&define.amd?define("highcharts/indicators/acceleration-bands",["highcharts/highcharts"],function(e){return t(e,e.SeriesRegistry)}):"object"==typeof exports?exports["highcharts/indicators/acceleration-bands"]=t(e._Highcharts,e._Highcharts.SeriesRegistry):e.Highcharts=t(e.Highcharts,e.Highcharts.SeriesRegistry)}("undefined"==typeof window?this:window,(e,t)=>(()=>{"use strict";var a,i={512:e=>{e.exports=t},944:t=>{t.exports=e}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return i[e](a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var a in t)o.o(t,a)&&!o.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var s={};o.d(s,{default:()=>b});var n=o(944),p=o.n(n),l=o(512),h=o.n(l);let{sma:{prototype:c}}=h().seriesTypes,{defined:d,error:u,merge:f}=p();!function(e){let t=["bottomLine"],a=["top","bottom"],i=["top"];function r(e){return"plot"+e.charAt(0).toUpperCase()+e.slice(1)}function o(e,t){let a=[];return(e.pointArrayMap||[]).forEach(e=>{e!==t&&a.push(r(e))}),a}function s(){let e=this,t=e.pointValKey,a=e.linesApiNames,i=e.areaLinesNames,s=e.points,n=e.options,p=e.graph,l={options:{gapSize:n.gapSize}},h=[],y=o(e,t),g=s.length,m;if(y.forEach((e,t)=>{for(h[t]=[];g--;)m=s[g],h[t].push({x:m.x,plotX:m.plotX,plotY:m[e],isNull:!d(m[e])});g=s.length}),e.userOptions.fillColor&&i.length){let t=h[y.indexOf(r(i[0]))],a=1===i.length?s:h[y.indexOf(r(i[1]))],o=e.color;e.points=a,e.nextPoints=t,e.color=e.userOptions.fillColor,e.options=f(s,l),e.graph=e.area,e.fillGraph=!0,c.drawGraph.call(e),e.area=e.graph,delete e.nextPoints,delete e.fillGraph,e.color=o}a.forEach((t,a)=>{h[a]?(e.points=h[a],n[t]?e.options=f(n[t].styles,l):u('Error: "There is no '+t+' in DOCS options declared. Check if linesApiNames are consistent with your DOCS line names."'),e.graph=e["graph"+t],c.drawGraph.call(e),e["graph"+t]=e.graph):u('Error: "'+t+" doesn't have equivalent in pointArrayMap. To many elements in linesApiNames relative to pointArrayMap.\"")}),e.points=s,e.options=n,e.graph=p,c.drawGraph.call(e)}function n(e){let t,a=[],i=[];if(e=e||this.points,this.fillGraph&&this.nextPoints){if((t=c.getGraphPath.call(this,this.nextPoints))&&t.length){t[0][0]="L",a=c.getGraphPath.call(this,e),i=t.slice(0,a.length);for(let e=i.length-1;e>=0;e--)a.push(i[e])}}else a=c.getGraphPath.apply(this,arguments);return a}function p(e){let t=[];return(this.pointArrayMap||[]).forEach(a=>{t.push(e[a])}),t}function l(){let e=this.pointArrayMap,t=[],a;t=o(this),c.translate.apply(this,arguments),this.points.forEach(i=>{e.forEach((e,r)=>{a=i[e],this.dataModify&&(a=this.dataModify.modifyValue(a)),null!==a&&(i[t[r]]=this.yAxis.toPixels(a,!0))})})}e.compose=function(e){let r=e.prototype;return r.linesApiNames=r.linesApiNames||t.slice(),r.pointArrayMap=r.pointArrayMap||a.slice(),r.pointValKey=r.pointValKey||"top",r.areaLinesNames=r.areaLinesNames||i.slice(),r.drawGraph=s,r.getGraphPath=n,r.toYData=p,r.translate=l,e}}(a||(a={}));let y=a,{sma:g}=h().seriesTypes,{correctFloat:m,extend:x,merge:A}=p();class D extends g{getValues(e,t){let a,i,r,o,s,n,p,l,h,c,d;let u=t.period,f=t.factor,y=t.index,g=e.xData,x=e.yData,A=x?x.length:0,D=[],b=[],v=[],G=[],M=[];if(!(A<u)){for(d=0;d<=A;d++){if(d<A){var N,O;N=x[d][2],s=m((O=x[d][1])-N)/(m(O+N)/2)*1e3*f,D.push(x[d][1]*m(1+2*s)),b.push(x[d][2]*m(1-2*s))}d>=u&&(h=g.slice(d-u,d),c=x.slice(d-u,d),p=super.getValues.call(this,{xData:h,yData:D.slice(d-u,d)},{period:u}),l=super.getValues.call(this,{xData:h,yData:b.slice(d-u,d)},{period:u}),o=(n=super.getValues.call(this,{xData:h,yData:c},{period:u,index:y})).xData[0],i=p.yData[0],r=l.yData[0],a=n.yData[0],v.push([o,i,a,r]),G.push(o),M.push([i,a,r]))}return{values:v,xData:G,yData:M}}}}D.defaultOptions=A(g.defaultOptions,{params:{period:20,factor:.001,index:3},lineWidth:1,topLine:{styles:{lineWidth:1}},bottomLine:{styles:{lineWidth:1}},dataGrouping:{approximation:"averages"}}),x(D.prototype,{areaLinesNames:["top","bottom"],linesApiNames:["topLine","bottomLine"],nameBase:"Acceleration Bands",nameComponents:["period","factor"],pointArrayMap:["top","middle","bottom"],pointValKey:"middle"}),y.compose(D),h().registerSeriesType("abands",D);let b=p();return s.default})());
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Highstock JS v12.0.2 (2024-12-04)
2
+ * @license Highstock JS v12.1.0 (2024-12-17)
3
3
  * @module highcharts/indicators/acceleration-bands
4
4
  * @requires highcharts
5
5
  * @requires highcharts/modules/stock